linux kernel 2.6.36 编译升级

1.定制启动画面

a)linux启动画面分为两种,grub使用的背景图片,以及kernel启动时的图片(即一般在启用linux framebuffer设备时出现的小企鹅画面,一般系统有几个CPU,就会出现几个小企鹅)

首先定制grub的背景,要求图像尺寸为640*480(没试过其他尺寸), 而且主机已安装了convert开源图像处理工具。

例如准备了一张图像为splash.bmp,

执行:

convert -geometry 640x480 -colors 14 splash.bmp splash.xpm /*背景要求640x480的尺寸,以及14色*/

gzip -9 splash.xpm

cp splash.xpm.gz /boot/grub

注意备份原有的splash.xpm.gz

再次启动,grub的背景图片已被更改,需要注意的是grub的配置menu.cfg中需要命令行支持splash画面

 b)

linux kernel的启动logo存放于KERNEL_PATH/drivers/video/logo/logo_linux_cult224.ppm

是被编译到内核的,所以不能简单的替换就改变原有的logo,按以下命令制作logo_linux_cult224.ppm

bmptopnm logo.bmp > logo_linux_cult224.pnm            /*格式转换*/

pnmquant 224 logo_linux_cult224.pnm > logo_linux_cult224.pnm  /*将图像改为224色*/

pnmtopnm logo_linux_cult224.pnm > logo_linux_cult224.ppm    /*将图像转存为ppm格式*/

替换新内核中原有的logo_linux_cult224.ppm,注意备份原有的企鹅logo_linux_cult224.ppm。

内核编译后,且以framebuffer方式启动新内核,此时企鹅图标就变成了自定义的LOGO(注意LOGO图像的尺寸不能大于framebuffer的尺寸)

但是在启动中,logo上会有光标在闪烁,如果需要将光标去除(提示console的光标也会消失),将内核中的KERNEL_PATH/drivers/video/console/fbcon.c中的fb_flashcursor和fbcon_sursor函数体置空。重新编译安装内核即可。

2.内核编译

内核的编译需要依照实际的硬件配置,否则,对不明确的地方全选即可。需要注意的是:在2.6.xx版的内核中在配置文件中有部分配置需要手动修正:

CONFIG_SYSFS_DEPRECATED=y

CONFIG_SYSFS_DEPRECATED_V2=y

否则在使用LVM的linux系统下,内核编译成功但是会提示找不到VolGroup00等错误,并直接导致内核启动失败,文件系统挂载出错。

另外在2.6.36的内核中(可能此前的内核也存在这个问题),即使用intel和mavell以太网硬件的平台上,编译内核后会导致网络驱动加载失败,即找不到eth0和eth1设备。

这个问题和LVM的问类似,首先查看网卡设备信息:

lspci

结果会列出pci上所有的硬件设备信息,如ethernet,usb等,找到对应的以太网调制器。

cat /etc/modprobe.conf

找出ethx对应的驱动程序(如果系统在内核升级前正常,而升级后网络不正常了,那可以在这里找到此前的有效驱动名称)

在新内核下/lib/modules/2.6.xx/kernel/driver/net下如果能找到这些驱动,那么说明问题不出在驱动层,就可以不用再重新编译内核。否者查看新内核目录的.config配置文件

找到CONFIG_E1000E,和CONFIG_SKY2关键字,如果是“未设置”状态,将这两行加上:

CONFIG_E1000E=m

CONFIG_SKY2=m

保存后退出

make clean

make all

make modules_install

make install

修改grub的启动顺序使之选用新内核而后reboot

3.initrd定制

内核编译安装后,重启可能会遇到类似insmod xxxx.ko error: xxxx.ko exist的错误

这是因为在生存initrd.img文件时,打包软件重复的引入了某些驱动模块

按以下步骤解压initrd.img

新建一个目录用于存放解压的initrd

mkdir initrd

cd initrd

cp /boot/initrd.img initrd.img.gz

gunzip initrd.img.gz

cpio -idcmv < initrd.img

此时initrd目录下生成了诸多文件,其他不理会,编辑init文件,删除其中的重复项,保存并退出

删除旧的压缩文件

rm initrd.img

然后执行以下命令生成新的initrd.img

find . | cpio -c -o > initrd.img

gzip -9 initrd.img

mv initrd.img.gz inird.img

使用新的initrd.img替换boot目录下的对应文件,使用时注意initrd.img的具体文件名,中途勿随意更改中间结果的名称。

posted on 2011-01-05 14:16  空空色色  阅读(1341)  评论(0编辑  收藏  举报