歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

升級2.6內核到底需要進行哪些事情

  升級2.6內核到底需要進行哪些事情? 升級到2.6是不是make config;make bzImage;make modules;make ...到最後處理一下grub或lilo的配置這麼簡單? 本文講述了一點升級到kernel-2.6最起碼的事情,注意是最起碼的: 首先你要知道2.6需要注意的幾件事情: 多了一個sysfs虛擬文件系統 老版本的modutils不能用了,module-init-tools要安裝。 modules.conf和modprobe.conf是怎麼回事兒? USB模塊名都變了 聲卡配置怎麼辦?kernel-2.6采用alsa, alsa的配置工具是什麼? 升級kernel會導致一些軟件不能使用嗎? 什麼版本的gcc都行嗎? ... 好了,繼續,我的系統環境: MagicLinux 1.2pre4b, gcc-3.3.1 要升級的2.6版本是2.6.0test7 編譯: 第一步很簡單,按照慣例,打好補丁,配置,編譯。 我仍然是打成了rpm包,打了cp936少數漢字錯誤的一個補丁。 SMBFS和系統文件系統缺省的codec都為cp936。 因為是作產品,所以打開了盡可能多的驅動,包括USB鍵盤和鼠標。 打了for i586, i686, athlon的3個包,成功。 編譯initscripts, 編譯modutils和module-init-tools, 編譯mkinitrd 安裝。 你會發現,系統多了一套modules命令,就是*.old,這就是不能用的命令, 新的命令基於這些old,由module-init-tools提供。 安裝所有軟件包,檢查grub配置沒有問題,重啟。 啟動過程中USB驅動載入錯誤。 發現自己在/etc/modules.conf中定義的alias char-major-188 off無效 檢查,發現一個generate-modprobe.conf腳本:到/etc/運行。 generate-modprobe.conf modprobe.conf移植modules.conf配置。 重啟:char-major-188模塊找不到錯誤消失,說明alias char-major-188生效。 繼續usb配置問題:發現/proc/bus/usb/根本不存在,這就是前面提到到sysfs問題: 代碼: 1, mkdir /sys 2, 在/etc/rc.sysinit中,只要有mount -f /proc就在下面加上mount -f /sys 3, 在/etc/rc.sysinit中,找到: action $"Mounting proc filesystem: " mount -n -t proc /proc /proc 加上: action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys 4,在/etc/fstab中加上: none /sys sysfs defaults 0 0 5,把/etc/rc.d/init.d/halt中的: awk '$2 ~ /^/$^/proc^/dev/{next} 修改成: awk '$2 ~ /^/$^/proc^/sys^/dev/{next} 重啟,USB載入仍然錯誤。 但是/下已經多了一個文件系統/sys /sys/bus/usb仍然不存在。 怎麼辦?手動probe模塊測試: modprobe hid modprobe usbmouse(注意不是mousedev了和keybdev了) lsmod看看,內核裡確實加載了,但是usb鼠標紋絲不動。 忘了最重要的一個: modprobe usb-uhci 系統提示不存在。 原來usb-uhci也沒有了,usb-ohci當然也沒有了。 而是uhci-hcd. modprobe uhci-hcd,呵呵,鼠標可以用了。 修改/etc/rc.sysinit/ 找到跟usb有關的信息: 代碼: usb=0 if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && ! LC_ALL=C grep -q "usb" /proc/devices 2>/dev/null ; then


aliases=`/sbin/modprobe -c awk '/^alias usb-controller/ { print $3 }'` if [ -n "$aliases" -a "$aliases" != "off" ]; then modprobe usbcore for alias in $aliases ; do [ "$alias" != "off" ] && action $"Initializing USB controller ($alias): " modprobe $alias done [ $? -eq 0 -a -n "$aliases" ] && usb=1 fi fi if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && LC_ALL=C grep -q "usb" /proc/devices 2>/dev/null ; then usb=1 fi if [ $usb = 1 -a ! -f /proc/bus/usb/devices ]; then action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs /proc/bus/usb fi needusbstorage= if [ $usb = "1" ]; then needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null` LC_ALL=C grep 'hid' /proc/bus/usb/drivers action $"Initializing USB HID interface: " modprobe hid 2> /dev/null action $"Initializing USB keyboard: " modprobe keybdev 2> /dev/null action $"Initializing USB mouse: " modprobe mousedev 2> /dev/null fi 大體解釋一下: 定義usb變量為0 定義aliases變量為: /sbin/modprobe -c awk '/^alias usb-controller/ { print $3 }的執行結果。 aliases存在且不為空時: 載入usbcore 然後載入aliases定義的內容, 置usb為1 掛接usbdevfs needusbstorage大概就是U盤了,這個變量跟下面幾句沒關系。 載入hid,鍵盤,鼠標驅動。 這裡需要修改的是: 1,/proc/sys/usb定義是錯的,應該是/sys 2,modprobe -c 能不能找到alias usb-controller,從而定義變量aliases為usb-uhci, 運行一下是不能的。 3,模塊名不對,usbmouse和usbkbd才對。 根據邏輯,修改成: 代碼: modprobe usbcore action $"Initializing USB controller (uhci-hcd): " modprobe uhci-hcd usb=1 if [ $usb = 1 -a ! -f /sys/bus/usb/devices ]; then action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs /sys/bus/usb fi needusbstorage= if [ $usb = "1" ]; then needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null` action $"Initializing USB HID interface: " modprobe hid 2> /dev/null action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null fi 載入usbcore, uhci-hcd(也就是usb-uhci的新版本) 然後掛接usbdevfs,然後定義needusbstorage為以後的使用,然後就是載入鼠標鍵盤驅動。 檢查一下rc.sysinit和/etc/rc.d/init.d/halt腳本,看看還有沒有/proc/bus/usb的定義,通通搞成/sys/bus/usb. 重啟,OK,模塊正常載入,鼠標可以用了。 啟動kde,沒聲。 對了,以前一直用oss,現在內核提供的是alsa. 找出一個配置工具alsaconf,這個是alsa-drivers的utils 配置,不行,找不到聲卡,問題在於kernel-2.6的模塊不再是.o而是.ko 修改alsaconf中所有的.o為.ko. 配置,OK,找到聲卡為i810內嵌的,也就是ac97音效,正確的寫入了 /etc/modules.conf, lsmod一看,內核模塊沒有馬上載入,說明alsaconf還是有點問題, modprobe一下: modprobe snd-intel8x0,OK了,內核驅動載入。

用alsa play播放: aplay sample.wav 有聲音了。 重啟,lsmod看看,snd-intel8x0沒有載入,/etc/modules.conf裡不是有了嗎? 以我的判斷,肯定是正確的,試試generate-modprobe.conf,剛才那個 char-major-188的錯誤就是這麼解決的。 做完之後,再重啟,再lsmod看看,還是沒有載入聲卡驅動。 modprobe snd-intel8x0,出錯,看來是modprobe.conf導致的, 把裡面的sound相關配置通通刪掉,重啟後modprobe又可以出聲了。 沒有辦法,好好讀讀alsaconf代碼,發現了以前單獨安裝alsa的時候一個經典的東西: alsasound啟動進程。 這個東西也在alsadrivers的utils目錄,找出來。 ./alsasound start自動載入所有模塊 ./alsasound stop 自動卸載所有模塊 OK,目的達到。 cp alsasound /etc/rc.d/init.d chkconfig --add alsasound 再看看alsaconf原來可以進行測試聲音的播放,只是以前從來沒有把wav文件裝上過, 拷貝一個wav文件,再次運行: alsaconf 配置成功,然後自動載入模塊成功,然後就是aplay這個wav. OK,至此為止,基本的kernel-2.6升級工作完成了。 lsusb, usbview, kde 信息中心中usb目錄定義仍然不對,所以通過這些命令你看不到系統任何usb信息 自己修正吧,其他的軟件問題也不少,所以以上的工作是最基礎的,所以建議大家沒事不要趕什麼潮流。 對了,忘了說了,kernel-2.6安裝後,我測試重新編譯kernel-2.6,gcc出現異常,連續測試7次,每次 都在隨機的位置退出編譯,說明gcc已經不能正常工作,可能又要LD_ASSUME_KERNEL,始終不是一件好事。 繼續升級glibc, gcc再所難免'



以我的判斷,肯定是正確的,試試generate-modprobe.conf,剛才那個 char-major-188的錯誤就是這麼解決的。 做完之後,再重啟,再lsmod看看,還是沒有載入聲卡驅動。 modprobe snd-intel8x0,出錯,看來是modprobe.conf導致的, 把裡面的sound相關配置通通刪掉,重啟後modprobe又可以出聲了。 沒有辦法,好好讀讀alsaconf代碼,發現了以前單獨安裝alsa的時候一個經典的東西: alsasound啟動進程。 這個東西也在alsadrivers的utils目錄,找出來。 ./alsasound start自動載入所有模塊 ./alsasound stop 自動卸載所有模塊 OK,目的達到。 cp alsasound /etc/rc.d/init.d chkconfig --add alsasound 再看看alsaconf原來可以進行測試聲音的播放,只是以前從來沒有把wav文件裝上過, 拷貝一個wav文件,再次運行: alsaconf 配置成功,然後自動載入模塊成功,然後就是aplay這個wav. OK,至此為止,基本的kernel-2.6升級工作完成了。 lsusb, usbview, kde 信息中心中usb目錄定義仍然不對,所以通過這些命令你看不到系統任何usb信息 自己修正吧,其他的軟件問題也不少,所以以上的工作是最基礎的,所以建議大家沒事不要趕什麼潮流。 對了,忘了說了,kernel-2.6安裝後,我測試重新編譯kernel-2.6,gcc出現異常,連續測試7次,每次 都在隨機的位置退出編譯,說明gcc已經不能正常工作,可能又要LD_ASSUME_KERNEL,始終不是一件好事。 繼續升級glibc, gcc再所難免'



Copyright © Linux教程網 All Rights Reserved