无心人 发表于 2010-9-29 10:12:50

ArchLinux下编译内核简介

http://www.kernel.org
下载内核,最新的是2.6.35.6
tar xvf linux-2.6.35.6.tar.bz2展开
下面的某些操作必须root用户,推荐,现在su到root
进入目录,执行make menuconfig精简
注意,硬盘驱动不可以编译为模块,否则等着死机吧
精简时,可以在当前内核下执行
lsmod列出本机装载的模块,来作为依据,凡是没有的一律可以精简掉
每项都可以在选中后,使用?来查询说明,其中有对应的内核符号
该符号在lsmod中列出的,必须编译,没有的可以不选择
至于不是驱动模块的选择项,网上有取舍的文章,很多,可以查到
另外在首项Genral setup中的local Version下,建议输入自定义的字符,比如-custom
这样编译后的内核将以2.6.35.6-custom表示,以便和系统通用内核区别
选择后,保存配置
make bzImage -->生成arch/x86/boot/bzImage
make modules
make modules_install -->安装到/lib/modules/2.6.35.6-custom(或者你自己设定的版本符号)
下面生成initrd映像
mkinitcpio -k 2.6.35.6-custom -g kernel.custom.img --> k后跟你设定的版本符号, g后跟生成映像名,名字可以随意起

cp kernel.custom.img /boot
cp arch/x86/boot/bzImage /boot/vmlinuz.custom -->名字任意起

然后仿照grub启动菜单中的别的启动项,书写新内核启动项
重启,测试,有问题,切换到旧内核,重配置,重编译。如果有错误,推荐备份.config,删除目录后,重新解压缩,拷贝回.config后再来

附上我的.config

无心人 发表于 2010-9-29 10:23:27

直到新内核能启动到字符界面后
安装别的非内核驱动
比如N卡, A卡驱动,VirtualBox驱动等等
然后一切正常后,就可以修改grub的default到你的内核了

无心人 发表于 2010-9-29 10:28:13

编译一遍内核的时间是很短的
大部分时间花在配置内核上
和出错,重来

昨天
前几次,SCSI硬盘选择成模块,找不到/dev/sda*
后来,选择成内置的,找到/dev/sda*了
又找不到模块项,后来明白在
mkinitcpio -k上,-k要指定内核版本,否则,生成的模块不对的

无心人 发表于 2010-9-29 10:30:42

另外分区格式
/boot是单独分区时,一定是ext2格式的
那么分区ext2驱动必须是内置的,不能为模块
其他分区格式驱动可以编译为模块

如果,非单独分区,那么包含/boot的分区的格式的驱动,必须内置
而不能为模块

如果错了,grub根本不能root到内核

无心人 发表于 2010-9-29 10:35:24

建议选择主分区是ext4或者JFS分区
都是日志文件系统,性能也不错
页: [1]
查看完整版本: ArchLinux下编译内核简介