(1)編譯內核於升級內核沒有直接關聯。如果編譯的內核的版本比現在系統使用的版本新,那麼使用編譯後的內核可以看成是內核升級。但是有時候是因為需要而編譯內核,比如某些模塊需要重新編譯,打開某些原來內核沒打開的選項,這時候可以是同版本內核重新編譯,這就不能說是升級內核。
(2)新內核編譯好後,還需要安裝。也就是make install(把bzimage移動到boot,重命名為vmlinuz) ,make moles install(把模塊全部放到/lib/moles/(內核名)文件夾內);然後depmod,在/lib/moles/(內核名)建好新的***.dep文件,這樣啟動時系統就能通過讀取***.dep文件信息來載入模塊。還要在boot下新建一個於內核名一樣的.img文件,如vmlinuz,那麼就是vmlinuz.img,至於系統使用哪個內核,那是在grub.cfg裡面寫的配置文件決定的。指定哪個就從哪個啟動,寫兩個entry就可以選擇啟動到哪一個。老內核當然還可以繼續使用。
(3)新內核主要是一些新的特性,驅動更改什麼的,我不是很清楚,比如2.6.34以上的內核就支持通過echo OFF>/sys/kernel/debug/vgaswitchroo/switch關閉某個顯卡,也就是雙顯卡切換支持,又比如2.6.38中加入了所謂的autogroup在某些情況下提升桌面性能的特性,還有一些對系統某些情況的處理方式的變化等。但是從用戶層來說一般感覺不到明顯變化。對於程序什麼的使用不影響(絕大多數)。
❷ 編譯內核模塊錯誤(linux)
在進行內核模塊開發時,編譯內核模塊可能會遇到一些問題。例如,在RedHat Linux 2.6版本中,kernel-devel-2.6.9-5.gz包中並不包含完整的內核源代碼,導致編譯模塊時可能會失敗。因此,需要手動安裝kernel-source-2.6.9-5.gz包來獲取完整的內核源代碼。
另外,對於內核模塊開發,可以使用rpmbuild -ba --target=i686命令來編譯內核模塊。但是,編譯過程中需要注意修改spec文件中的某些行。例如,將%define buildsource 0行中的0改為1,可以編譯出kernel-source包。然後,通過安裝kernel-source包來獲取完整的內核源代碼。
在進行內核模塊開發時,還需要注意各rpm包的內容和用途。例如,kernel-2.6.9-5包用於內核開發,kernel-devel-2.6.9-5包用於內核模塊開發。此外,qt-devel、gtk2-devel、readline-devel和ncurses-devel等包也非常重要。
對於內核模塊開發,需要安裝src包來獲取內核源代碼。如果只需要編譯sourcecode和doc包,可以使用rpmbuild -bb --target=i686命令。此外,還可以通過make dep命令來編譯內核模塊。
在編譯內核模塊時,還需要注意spec文件中的Requires行。例如,requires X-window行表示需要X-window。因此,在編譯內核模塊時,可以將requires X-window行注釋掉,以避免依賴於X-window。
總之,在進行內核模塊開發時,需要明確各rpm包的內容和用途,並正確修改spec文件中的某些行,以確保編譯過程順利進行。
❸ 內核編譯出現問題,求解答
depmod: WARNING: could not open /lib/moles/2.6.32.65/moles.builtin: No such file or directory
root@ubuntu:/usr/src/linux-2.6.32.65# make install
sh /usr/src/linux-2.6.32.65/arch/x86/boot/install.sh 2.6.32.65 arch/x86/boot/bzImage \
System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 2.6.32.65 /boot/vmlinuz-2.6.32.65
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.32.65 /boot/vmlinuz-2.6.32.65
update-initramfs: Generating /boot/initrd.img-2.6.32.65
depmod: WARNING: could not open /tmp/mkinitramfs_aJ9f5K/lib/moles/2.6.32.65/moles.builtin: No such file or directory