|
#1
| ||||
| ||||
| [轉貼] 第八章 Modules And Kernel 一. Modules: 1. 前言:當我們在電腦上新增硬體時,必須要有此硬體的driver(驅動程式),才能讓此硬體於系統上正常運作。而在linux以前較不普及時,硬體廠商所提供的drivers for linux比起drivers for windows真是少得可憐,但隨著linux的漸受重視,這些硬體廠商現大都會附上drivers for linux。 一般較為普及的硬體週邊裝置,OS本身已包含了這些drivers。 2. linux系統內的週邊裝置,於 /dev下都有其代表裝置的檔案,例如: 軟碟機(Floppy Disk)→ /dev/fd0 /dev/fd1 IDE硬碟與CD-ROM→ /dev/hda ~ /dev/hdd <note>若fstab內為 /dev/cdrom,mount時不能mount /dev/hdx,除非 # mount -t iso9660 /dev/hdd munt/cdrom才OK。 序列埠 (serial),如Modem→ /dev/ttyS0 (com1) /dev/ttyS1(com2) 平行埠 (parallel)如printer→ /dev/lp0 (LPT1) /dev/lp1 (LPT2) SCSI HD→sda . sdb.…。 SCSI CD-ROM→scd0 . scd1。 3. linux的核心是以modules的方式來載入drivers及支援其它功能,其最大好處是當未使用到該功能時,核心不會主動載入,需要時才將其載入,如此可節省許多系統資源。 4. 模組設定檔: /etc/modules.conf 或 /etc/conf.modules ,視版本而定。 若有新的驅動程式想於開機時被核心載入,就可設定在這裡。 例:alias eth0 8139too=>alias告訴系統eth0 須8139too模組。此檔案內還可包括dma、ioport、IRQ訊息(options)。 5. /lib/modules/2.4.18-3 / 這個目錄下需留意的是kernel目錄及modules.dep檔案: (1)kernel:此目錄下所列者為核心可使用的模組,其下目錄有drivers、fs、net等,請自行參考。 <note>模組檔案是以 ”.o” 結尾,而在modules.conf內的modules不須要 ”.o”,也就是寫模組名稱 (modules-name) 即可。 另外2.4.18-3 可用`uname –r`代替。 (2)modules.dep:顯示模組相依性的訊息。 6.模組相關指令 (1)lsmod:顯示核心目前有載入的模組,此指令與 /proc/modules的內容相同。 (2)insmod:載入模組,但不會載入相依模組。 -p僅測試模組能否載入,而不會真正載入。 例: # insmod –p fat # insmod vfat 會顯示錯誤訊息,因模組有相依性的關係,此時應先載入 fat,然後vfat才能被成功載入。最後用lsmod作確定動作。 (3)rmmod:移除模組。# rmmod modules–name (4)modprobe:載入模組及其相依模組,載入流程是先載入modules.dep內與此模組相依的模組後,再載入主要模組。 -l 列出系統可使用的模組,即列出位於 /lib/modules/2.4.18-3/kernel下的子目錄。 -c 列出系統有載入的模組,較lsmod詳細。 -r 移除多模組。 例:# modprobe vfat # modprobe -l;modprobe -c # modprobe -r fat msdos (5)modinfo:顯示模組訊息。 例:# modinfo 81390too 顯示模組的作者、用途描述、路徑…。 # modinfo –d 8139too 只顯示用途的描述。 模組訊息中,有一行敘述為: license GPL GPL 為General Public License (通用公共許可)的簡寫, 它是一種軟體的版權模式,像linux就是以GPL版權模式 對外發行的,也就是說任何人都可從網路上下載原始碼回 來作修改,但修改完後,有義務將修改結果放置網路上讓 人使用,這就是GPL的自由精神。 軟體雖經你修改,但版權並不屬於你的,而是要遵循原作 者GPL的版權模式繼續沿用下去。 (6)depmod -a:當有改變模組相依性時,就要執行一次,以更新modules.dep。系統預設在開機時會自動執行。 補充:新增硬體時,若此硬體driver已編入核心或模組(外掛模組),則開機時,kudzu此硬體偵測程式會偵測到,並將此硬體modules自動載入(一般情況下)。 二. Kernel: 1. 核心是Linux作業系統的靈魂所在,其最主要工作為控制週邊硬體設備,如cpu、記憶體、硬碟、網路卡、音效卡…、還有像行程的管理、網路功 能的支援等等,進而使這些硬體設備及相關服務能發揮其功能。 我們現在一般所謂的Linux distribution,即是在核心以外,另外包含了套件的整合、套件管理工具等,如此便成了Linux的Distribution。較著名的Linux Distribution如RedHat、Debian、SuSE、OpenLinux、Mandrake等等,但無論是哪種Distribution(套裝版本)皆使用相同的Linux核心。 2. 編譯核心的理由: (1)當您使用的週邊裝置或須要的功能(如NTFS),預設的核心既沒將其編入核心,亦沒編成modules,此時便須重新編譯核心。 (2)若硬體設備只有新核心才支援時,便要下載新版的核心,進行升級編譯的動作。 (3)對於預設核心編譯太多用不到的功能,欲將此多餘功能取消時,就可重編核心,不過不建議如此作,因其對整體效能並無多大助益。 (4)特殊環境須求,例如一些商業套裝軟體系統。 3. 在未編譯核心前,可先了解一下預設核心的編譯狀況,若當初在安裝OS時,採全選安裝或手動安裝有勾選發展工具選項時,以redhat來說,在 /usr/src/linux.2.4.18-3/configs目錄下便有預設核心的概況,但若未勾選發展工具,也可在 /boot/config-2.4.18-3找到預設值,不過在 /usr/src下便找不到linux的字眼,此時可採光碟安裝(第二片),套件名稱為kernel-source。 以Openlinux來說,預設核心的編譯狀況是在 : /usr/src/linux/arch/i386/defconfig 4. # uname -r =>2.4.18-3 2→ 主版本 4→次版本 18→修訂版本 3→附版本 這裡只須留意第二個數字 (次版本),如其為奇數(如2.3、2.5)表為測試階段的版本,若為偶數,表經多次測試OK的穩定版本(如2.2、2.4)。 <note>在核心升級過程,切勿從2.2升級至2.4,因兩版本間已有所差異,函式庫亦有所不同,但若同為次版本升級則是可行,例如2.4.18升級至2.4.19。 5.最新核心訊息網站: http://www.kernel.org/pub/linux/kernel/ http://ftp.nsysu.edu.tw/Linux/Kernel/linux/kernel/ 中山大學 http://ftp.kernel.org/pub/linux/kernel/ 6.編譯核心: 假設系統原來核心版本為2.4.18-3,打算升級至2.4.19時 (1) root # wget http://www.kernel.org/pub/linux/kern...-2.4.19.tar.gz Enter後便可於root目錄下找到此核心的tarball。 (2) root # cd /usr/src 切換目錄至src下。 (3) src # tar zxvf /root/linux-2.4.19.tar.gz →將tarball解開到src下,此時可發現有兩目錄,一為linux-2.4.18-3 (此即為當初安裝OS時,採全選安裝或手動安裝有勾選發展工具選項時,才有此目錄存在),一為linux.2.4.19。 (4) src # ln -s linux-2.4.19 linux →建立連結,因編譯過程在linux目錄下編譯較不會有問題。 <note>若原先已有linux目錄存在,須用mv將其改名。 (5) src # cd linux =>切換至linux目錄下,準備進行編譯步驟。 (6) linux # make menuconfig =>進入編輯畫面(主選單)。 ˙畫面底部有Select、Exit、Help三按鈕,可用tab鍵移動。 Select+Enter→進入子選單。 Exit+Enter→退至上一層。 Help+Enter→該選項的說明。 <note>在主選單(Main Menu)畫面時,選Exit+Enter後,系統會問您是否保存以上設定,選擇yes,則會於 /usr/src/linux下,產生一隱藏檔.config。 ˙選項右邊有向右箭頭,表示其下尚有子選單。 ˙選項右邊無箭頭時,左邊應有〔〕或<>,此時可搭配space或M.N.Y使用,以便將此項目括弧內設定成 ”*”(編入核心)、M(編成外掛模組)或空白 (既不編入核心也不編成外掛模組)。 〔〕→其內不是空白就是*。 <>→其內可*、M、空白。 主選單的最下面有兩個選項: (1) Load an Alternate Configuration File: 輸入替代檔名稱,例如可將別人編好的已解壓的核心檔案,download回來後附上檔名,並於此輸入。 (2) Save Configuration to an Alternate File: 您可在任何時候選此項 (預防不小心未存檔就退出),不過一般都在編譯完成才將以上設定保存在指定檔案(如 /tmp/barry),將來要是重新安裝OS時(設 /tmp/barry有備份起來),或設定核心選項後未保存就退出時,都可用(1)的Load選項,來套用當初的設定值。 ˙編譯核心選項時,能編模組就編模組,以防編入核心項目太多,而使的將來無法製作開機片。除非是特殊效能,如網路功能等,或須此項目但無M可選時,才編成*。 ˙編譯完成後,記得保存退出=>產生 /usr/src/linux-2.4.19/.config 設定核心選項時,須了解自己的硬體設備及所須功能譯,否則在reboot後會有錯誤訊息產生。 (7) linux # make dep →建立相依關係。在編譯核心前需先建立起待會編譯核心時所需用到 的相依函式庫。 (8) linux # make clean →去除舊有資料設定。 (9) linux # make bzImage →編譯 ( 建立 ) 核心,完成後可於 /usr/src/linux/arch/i386/boot下產生bzImage 檔案,這個檔案就是我們剛建立起來的新核心。 (10)linux # make modules →編譯模組,如drivers、net、fs、kernel…。至於編譯時間端賴剛剛 在設定核心時選擇模組數量多寡來決定。 (11)linux # make modules_install →將編好模組安裝在 /lib/modules/2.4.19目錄下。 (7)~(11)完成後,可進行測試: linux # make bzdisk →將編好的核心放磁片內進行測試,完成後reboot,從軟碟開機,若一切正常,再進行以下步驟。 (12)linux # make install →將核心放硬碟 /boot內。此步驟等於以下組合: cp /usr/src/linux/arch/i386/boot/ bzImage /boot/vmlinuz-2.4.19 ln -s /boot/vmlinuz-2.4.19 /boot/vmlinuz cp /usr/src/linux/System.map /boot/System.map-2.4.19 ln -s /boot/System.map-2.4.19 /boot/System.map 最後再修改 /etc/lilo.conf或 /boot/grub/menu.lst,底下分別說明: ˙# vi /etc/lilo.conf prompt timeout=50 default=redhat boot= /dev/hda map= /boot/map install= /boot/boot.b message= /boot/message lba32 image= /boot/vmlinuz-2.4.18-3 label=redhat initrd= /boot/initrd-2.4.18-3.img read-only root= /dev/hda3 image= /boot/vmlinuz-2.4.19 label=redhat.new initrd=/boot/initrd-2.4.19.img read-only root= /dev/hda3 other= /dev/hda1 lable=windows 2000 修改完存檔離開後,記得執行 # lilo -v –v ˙# vi /boot/grub/menu.lst default=0 timeout=10 title redhat root=(hd0,1) kernel=/boot/vmlinuz-2.4.18-3 root=/dev/hda3 initrd=/boot/initrd-2.4.18-3.img title redhat-new root=(hd0,1) kernel=/boot/vmlinuz-2.4.19 root=/dev/hda3 initrd=/boot/initrd-2.4.19.img title windows rootnoverify=(hd0,0) chainloader +1 存檔離開後,下次重新開機時就可看到三個選單供您選擇。 7.編譯過程如有問題,大都卡在make bzImage、make modules,如遇Error結尾就要小心。 若碰到warning:kernel is too big for standalone boot from Floppy,表所編核心過大,裝不進磁片內,亦即無法製作開機片,故要刪除一些編入核心選項 ”*”或將其改成M。 遇Unresolved symbol…錯誤訊息時,可能舊模組還在 /lib/modules下,故應將其改名,再執行make modules_install,也可試試在編譯選項時,Loadable module support內Set version information on all module symbols的 ”*”取消。 8.當我們安裝好作業系統後,發覺系統預設沒把ntfs編進去,這時候可能就 需重編核心了。我們以redhat 7.3為例來作說明: # cd /usr/src # cp –a linux-2.4.18-3 newlinux # ln –s newlinux linux # cd linux # make menuconfig 將ntfs編進去,然後存檔離開。 # make dep # make clean # make bzImage # make modules # make modules_install 會產生2.4.18-3custom於 /lib/modules/ 之下。 # cd /lib/modules # cp –a 2.4.18-3custom 2.4.18-3 直接用mv改名亦可。 這樣就算完成了,不必再執行make install,因我們目的只是要那個模組 而已。 補充:1. kernel可編譯方式除make menuconfig外,尚有: make config→逐行輸入設定項目,但無法往前修改。 make xconfig→在X-Window下的設定方式。 2.製作開機片: # mkbootdisk --device /dev/fd0 2.4.19 →可用`uname –r`代替2.4.19。 開機片內有執行檔:boot.msg、intrd.img、ldlinux.sys、syslinux.cfg、vmlinuz。 3. # free→顯示記憶體訊息。
__________________ 如果您覺得"文章小說討論區"所發的主題不錯 請不要吝嗇 在主題 " 點閱" 及 並給予 發文者一些鼓勵 --------------------------------------------- 為了防止世界被破壞 為了保護世界的和平 貫徹下載與燒錄的邪惡 可愛又迷人的盜版角色 MP3....Program... 我們是穿梭在網際網路中的盜版大隊~~ 拷貝 拷貝的明天正等著我們~~ 就是這樣....喵~~@@ |