当前位置:Linux教程 - Linux综合 - 升级2.6内核到底需要进行哪些事情

升级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
[1] [2] [3] 下一页 

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了,内核驱动载入。
上一页 [1] [2] [3] 下一页 

用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再所难免'

(出处:http://www.sheup.com)


上一页 [1] [2] [3] 

以我的判断,肯定是正确的,试试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再所难免'

(出处:http://www.sheup.com/)


上一页 [1] [2] [3] [4]