这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » linux系统内核编译过程及命令

共2条 1/1 1 跳转至

linux系统内核编译过程及命令

高工
2012-03-13 22:50:08     打赏
一.配置内核
1.在开始配置内核之前,首先需要通过下面的命令清除所有的临时文件、中间件和配置文件。对于一个刚从网上下载的内核来说,它肯定是干净的,这么做只会多此一举。但是这是一个良好习惯,而且不会有坏结果。

#make mrproper

2. 然后要了解自己系统的硬件配置情况,比如CPU的类型、主办芯片、显卡和声卡的型号等。
3. 配置内核选项,用到的命令是:

#make <config_opt>

用到的配置工具有:
◆ config 基于交互式的文本配置界面。每个问题以线形格式出现,并被一个一个地回答,而且一旦作出了回答就不能再修改了。
◆ oldconfig 同config相似,但是使用原有的配置文件,而且只会提问有关新内核特性的问题,对于内核升级很方便。
◆ menuconfig 一个文本模式、选单驱动的配置界面。
◆ xconfig 基于Tcl/Tk的X图形配置界面。
现在开始配置内核,使用的工具为menuconfig。在命令行模式下执行下面的命令:

#make menuconfig

在闪过几行字之后就出现内核配置界面。
使用方向键在各选项间移动;使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。
注意,如果“make menuconfig”命令失败,很可能是ncurses库没有安装。

二.编译内核

编译内核的软件环境是kbuild系统,它泛指构建一个完整并能够运行的Linux内核所需要的一切资源。这些资源包括构建程序、脚本、中间件、配置文件和Makefile。现在就讲解内核的编译过程,具体步骤如下:
1.“make dep”或“make depend”
kbuild调用中间件scripts/mkdep来生成描述与相关核心文件形成依赖关系的.h文件(绝大多数)列表。这个列表保存在.depend中。用户即使不执行这一步,kbuild也会自动执行的。

2. 构建内核镜像的命令是:

#make <boot_opt>

其参数如下:
◆ zImage 构建小内核镜像。
◆ compressed 同zImage。
◆ bzImage 构建大内核镜像。
◆ zdisk 使用zImage生成一张引导软盘。
◆ bzdisk 使用bzImage生成一张引导软盘。
◆ zlilo 使用lilo作为zImage的引导器。
◆ bzlilo 使用lilo作为bzImage的引导器。
根据实际情况选择内核境象类型,大多数情况下选择“make bzImage”。
2.6.0内核的kbuild系统与2.4.23比起来有一定的差异,但是绝大多数功能都是相似的。只是构建内核镜像的命令参数增加了一下几项:
◆ fdimage 制作一张1.44M的引导软盘
◆ fdimage144 同fdimage
◆ fdimage288 制作一张2.88M的引导软盘

3.通过下面的命令安装内核:

#make install

如果用户使用LILO,它会把内核镜像放到正确的位置并且修改LILO的配置,那么用户可以免去手动操作。如果使用别的引导器(例如GRUB),那么不使用这个命令。因为修改grub.conf需要交互式的手动编辑,自动修改可能会带来一些不可预计的错误,所以编译完毕后用户需要进行一些手动操作(见下面第6步)。
在2.6.0中“make install”更加智能,它会依此将arch/i386/boot/bzImage、System.map复制为/boot/vmlinuz-2.6.0,/boot/System.map-2.6.0,并创建vmlinuz-2.6.0的软链接vmlinuz和System.map-2.6.0的软链接System.map。kbuild还会自动创建/boot/initrd-2.6.0.img,并且修改grub.conf,以前这一切都要手动才能完成。引用别人的话来说:“2.4.x还是半自动的,而2.6.x是全自动的。”
4. 用下条命令编译所有被配置为模块的内核组件:

#make modules

5. 把所有编译好的内核模块按照功能拷贝到/lib/modules/2.4.23/目录下,使用下面命令:

#make modules_install

6. 手动操作将内核境像文件(/linux/arch/i386/boot/bzImage)拷贝到/boot分区,然后修改LILO或GRUB的相关设置。这里以grub.conf为例:

default=0

timeout=10

splashimage=(hd0,1)/grub/image/37.xpm.gz

title kernel-2.4.22

root (hd0,1)

kernel/vmlinuz-2.4.22 ro root=oot=LABEL=/

initrd /initrd-2.4.22.img

title kernel-2.4.23

root (hd0,1)

kernel /vmlinuz-2.4.23 ro root=/dev/hda1

initrd /initrd-2.4.23.img

title kernel-2.6.0

root (hd0,1)

kernel /vmlinuz-2.6.0 ro root=/dev/hda1

initrd /initrd-2.6.0.img
注意,在2.4.23之前的内核,通常制定LABEL参数,但是对于2.4.23和2.6.0内核,这个参数已经被废弃了,使用root参数指定根文件系统的位置。
如果重新启动后出现“kernel panic”错误或显示应该修改“init”信息,则基本都是以上kernel语句错误。
根据发行版的不同,通常GRUB配置文件会在/etc/grub.conf、/boot/grub/menu.lst或/boot/grub/grub.conf三个地方。

7.最后将在编译过程中的垃圾文件进行清理,命令如下:

#make clean




关键词: linux     系统     内核     编译     过程     命令     配置     使    

助工
2012-03-14 14:01:23     打赏
2楼
学习了!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]