[国嵌攻略][099][Linux内核配置与编译]

为什么要配置内核

基于硬件和软件的需求选出需要的功能,去掉不要的功能。

内核配置的方法

make config:基于文本交互的配置。

make menuconfig:基于图形菜单的配置。

make menuconfig配置方法

1.菜单项的分类

processor type and features   处理器类型

networking support            网络协议支持

device drivers                设备驱动支持

file systems                  文件系统支持

2.菜单项的选择方式

< >,表示不选择该功能。

<*>,表示该功能对应的源文件(.c)先被编译成中间文件(.o),然后合并到内核映像中,该功能最终运行在内存里面。需要一直使用的功能选择该方式。

<M>,表示该功能对应的源文件(.c)先被编译成中间文件(.ko),然后集中到相应的文件夹中。模块最终存放在辅存上,当需要使用时再动态加载到内存。不需要一直使用的功能选择该方式。

3.配置文件保存位置

与Makefile文件同目录下的.config文件保存了配置结果,该文件为隐藏文件,通过ls –a命令可以看到此文件。该文件中每一项与菜单项的每一项对应。在配置菜单中选择help可以查看与之对应项的名称。

4.如何配置内核配置

4.1.选择一个已有的配置文件简化配置。

4.2.不清楚的配置项保存为默认值。

内核的配置与编译

1.配置内核配置文件

1.1.复制配置文件

复制PC机上的Linux系统中的/boot/config...的内核配置文件到内核源代码中。在arch/<cpu>/configs文件夹中也保存有相应参考的配置文件。

1.2.载入配置文件

make menuconfig->load an alternate configuration file->exit->yes

1.3.修改配置文件

make menuconfig->networking options->< >the ipv6 protocol->exit->yes

2.编译内核映像

选择为<*>的模块会被编译成内核映像文件(zImage)

示例:

make zImage

make bzImage

使用V=1选项显示详细编译信息

make zImage V=1

make bzImage V=1

编译好的内核位于arch/<cpu>/boot/目录下

3.编译内核模块

选择为<M>的模块会被编译成内核模块文件

示例:

make modules

4.移动内核模块

编译出来的内核模块散落在内核目录的各个位置,通过移动内核模块,移动到系统根目录的/lib/modules/目录下

示例:

make modules_install

5.打包内核模块(制作ramdisk)

格式:

mkinitrd initrd-$version $version

示例:

mkinitrd initrd-2.6.39 2.6.39

$version表示/lib/modules/目录下的对应文件夹名称,在运行命令的目录下会产生initrd-2.6.39文件

6.安装内核文件(x86)

1.拷贝内核映像

cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.39

2.拷贝内核模块

cp initrd-2.6.39 /boot/

3.修改启动文件

vim /etc/grub.conf

title Red Hat Enterprise Linux (2.6.)
root (hd0,)
kernel /vmlinuz-2.6. ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=128M LANG=zh_CN.UTF- rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initrd-2.6.

4.重新启动系统

uname –r 查看内核版本

7.清理内核文件

1.在配置的阶段产生了.config文件

2.在编译的过程中产生了很多中间文件(.o),一部分中间文件变成了内核映像(zImage),另一部分文件变成了内核模块(.ko)

示例:

make clean       清除编译产生的文件

make distclean   清除配置和编译产生的文件

上一篇:FFmpeg 中AVPacket的使用


下一篇:[LeetCode] Wiggle Subsequence 摆动子序列