1.先解压内核
命令:tar jxvf linux.2.6.29.tar.bz2
备注:执行此命令前需要先把linux.2.6.29.tar.bz2复制到/usr/src/文件下。
cp -Rf/mnt/hgfs/linux-shared/linux.2.6.29.tar.bz2/usr/src/(其中linux-shared是通过VM tools让物理主机与虚拟机之间共享文件夹)
cp命令定义如下:
cp -Rf /home/user1/* /root/temp/
将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
即格式为:cp -Rf 原路径/ 目的路径/
2.清理内核
命令:make distclean
或 make clean
或make mrproper
备注:执行此命令一定要在内核代码的顶层目录
3确定目标系统的软硬件系统情况:cpu型号、网卡类型、所支持的网络协议
4.配置内核
命令:make menuconfig
使用默认配置即可,退出保存
备注1:内核配置通常在一个已有的配置文件的基础上,通过修改得到新的配置文件,linux内核提供了一系列可供参考的内核配置文件,位于Arch/Scpu/configs/(linux-2.6.29/arch/x86/configs)(复制到内核的顶层目录即linux-2.6.29下)
系统当前的配置位于:/boot/
5.编译内核
命令:make bzImage
完成后,生成的内核映像bzImage位于/arch/x86/boot目录下
6.编译内核模块
命令:make modules
备注:编译内核和编译内核模块之间的区别:因为内核可以将驱动和功能模块动态的载入内核,所以在需要时吧功能模块动态载入,所以就有了,内核模块的编译!
7.安装内核模块
命令:make modules_install
完成安装后,编译好的内核模块会从内核源代码目录拷贝至/lib/modules下,本实验会拷贝到/lib/modules/2.6.29目录下
备注:编译某个文件出错,找到对应文件的makefile,修改里面的宏定义
Usb驱动:linux-2.6.29/drivers/usb/musb
Vi makefile
8.制作init ramdisk 作用:提供一种让内核可以简单使用ramdik的能力。这些能力包括:格式化一个ramdisk,加载文件系统内容到ramdisk,将ramdisk作为根文件系统。
命令:mkinitrd init-2.6.29 2.6.29
完成后,在当前目录下会生成initrd-2.6.29
9.安装内核
(1)因为linux启动时,会从/boot目录下来寻找内核文件与init ramdisk,所以需将内核与init armdisk拷贝至/boot目录
命令:cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29(可任意命名)
cp initrd-2.6.29 /boot/
此时,vmlinuz-2.6.29为内核 initrd-2.6.29为init ramdis
(2)为了让grub在启动的时候,提供我们自己制作的linux内核的选择项,需要修改grub的
配置文件
命令:vi /etc/grub.config
添加 title my linux(2.6.29)
root (hd0,0)
kernel /vmlinuz-2.6.29 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.29
10.重启虚拟机,选择我们制作的内核