一、linux内核配置
linux内核配置有两种方式:
make config:是基于文本模式的交互式配置
make menuconfig:基于文本模式的菜单型配置
一般都会使用基于文本模式的菜单型配置来配置内核
1.1、主要需要配置的几个选项
处理器类型和特点的配置(processor type and features)
网络配置(networking support)
设备驱动配置(device drivers)
文件系统配置选择(file system)
1.2、具体到要配置的每一小项
按空格可以切换选择 ,带<>的表示可以选择M、*和空白,带[]只能选*和空白
空白:表示本次编译不选择该功能
*:表示要选择该功能,比如有a.c、b.c文件,则会编译成a.o、b.o文件,然后编译成内核镜像zImage,然后加载进内存运行
M:表示选择该功能,比如有a.c、b.c文件,则会编译成a.o、b.o文件,然后编译成a.ko、b.ko文件,然后放在硬盘里面,当需要的时候,作为内核模块加载进内存,这样可以节省内存,这些功能不是经常要使用的,经常要使用的要选择*选项。
1.3、配置结果
配置好的结果放在.config文件中,以.的形式的文件属于隐藏文件,要以ls
-a的方式才能显示出来。.config里面的每一项对应我们菜单里面选择的一项。选择help选项可以查看到对应的每一项.
1.4、使用已有的配置文件简化配置
由于我们配置项太多而且不够熟悉,不可能一个一个去配置,我们可以使用已有的配置文件来简化配置
例如我们将我们电脑上虚拟机正在使用的linux系统的配置文件(在/boot/config....中)作为参考,将其拷贝到我们内核中,然后基于该配置文件进行一个小的调整,不知道的我们可以保持默认。各种平台的配置参考文件我们都可以在内核的arch/...目录中找到,比如我们的ARM平台的,我们可以在arch/arm/configs/中找
二、编译内核
2.1、编译内核
make zlmage:在X86平台下,只能用于小于512k的内核,高版本的linux内核已经不支持make
zlmage命令了
make bzlmage:可以用于比较大的内核
所有选择为*的选项在这里都会一起编译成bzImage文件或者zImage文件
如果需要获取详细的编译信息,可以使用如下的编译选项:
make zImage V=1
make bzImage V=1
最后编译好的内核位于arch//boot目录下面,比如在我们这里是i386
2.2、编译内核模块
make modules:
编译好的内核模块散落在各个内核下面的各个目录里面,以.ko后缀结尾
make
modules_install:将散落在内核各个目录里面的.ko文件复制到我们自己自己linux操作系统的/lib/modules/目录下面,并会新建一个文件夹来存放,这个目录名和我们编译的内核版本是一样的
移动好了之后我们使用mkinitrd initrd-$version $version对这个目录进行打包操作。
其中initrd-$version:表示的是我们要打包出来的名字,后面这个$version表示我们要在lib/modules下要打包的目录名,比如mkinitrd
initrd-2.6.39 2.6.39,这个命令可以在任何目录下执行,表示我们将/lib/modules/目录下的2.6.39这个目录里面所有的内核模块打包为名为initrd-2.6.39文件,这个文件将会放在我们执行这条命令的当前目录中。
2.3、安装内核
1、cp
arch//boot/bzImage /boot/vmlinuz-$version
将我们编译好的bzImage文件拷贝到我们的linux目录下的/boot/目录下面,因为我们linux系统启动是从这里启动的,此处我们是将此内核在我们PC机上运行
2、cp
/(此处是我们打包好的内核模块所在的目录,不一定是当前目录) initrd-$version /boot/
将我们打包好的内核模块复制到我们linux系统的/boot/目录下
3、修改/etc/grub.conf文件,让系统可以从我们编译好的内核启动
将从title开始的下面四行代码复制一份,然后更改一下相应的几个名字即可
里面最后一行是打包好的文件名,我们这里应该是initrd-2.6.39
然后可以重启系统,会让你选择从哪个系统刚开始启动,我们选择从我们刚制作好的内核启动,我们可以使用我们uname
-a来查看我们所使用的linux内核版本,另外,我们只是更换了linux系统的内核,文件系统这些东西我们是没有更换的,而文件系统是放在磁盘上的,所以我们会发现操作系统里面的很多东西和之前的一样。
2.4、清理内核
make clean:清理掉编译过程中产生的.o/.ko文件,不能清除掉.config文件
make disclean:可以清理掉.config文件,同时也可以清楚掉.o/.ko文件