编译Linux内核的详细过程

系统 Linux
默认情况下,编译输出的文件是放在源码目录里的,可以通过O=output/dir参数来指定输出文件的位置(字母O,不是数字0)。

1、准备源码

最新的源码可以从kernel.org上获取,如当前最新版本为2.6.31:$ wget linux-kernel/v2.6/linux-2.6.31.tar.bz2">http://oss.ustc.edu.cn/linux-kernel/v2.6/linux-2.6.31.tar.bz2

2、解压源码:

$ tar xvf linux-2.6.31.tar.bz2 -C /usr/src/ TIP:当然,解压缩到/usr/src/中并不是必须的,你可以解压缩到任何位置。

3、检查源码(该步不是必须):

$ cd /usr/src/linux-2.6.31

$ make mrproper

TIP:该步的作用是检查源码是否有.o文件和依赖问题,从全新的源码编译时不需要这一步。配合make clean(主要清除.o文件)使用更好,make mrproper主要清除环境变量及配置文件

4、编译内核

默认情况下,编译输出的文件是放在源码目录里的,可以通过O=output/dir参数来指定输出文件的位置(字母O,不是数字0)。很多第一次编译内核的人都会碰到一个问题,/usr所在分区的空间不够,此时,这个参数就很有用。

源码提供了很多配置方式,推荐使用menuconfig:进入/usr/src/linux-2.6.31,已经进入则略过:$ cd /usr/src/linux-2.6.31

创建/build/kernel menuconfig文件夹:$ mkdir -p /home/你的用户名/build/kernel menuconfig

使用menuconfig配置:$ make O=/home/你的用户名/build/kernel menuconfig

对于第一次编译内核的人,不推荐直接从内核默认配置开始,推荐使用发行版自带的配置文件,通常/boot下会有config-2.6.xx的文件。选择Load an Alternate Configuration File,然后输入/boot下那个config文件的名字,载入即可。第一次编译最好还是不要随便修改配置了,如果失败的话,会留下心理阴影的:-)在配置里随便看看,如果有什么懂的也可以根据自己的需求改改,不明白的地方就不要动了吧。完了之后别忘了save,保存的时候文件名就填.config。

接下来就开始正式编译了。编译时间可能会有些长,为了避免终端意外关闭,可以使用screen,具体用法这里就不谈了。

$ make O=/home/name/build/kernel

为了加快编译的速度,可以使用-j参数,开启多线程。比如双核的cpu可以这样编译

$ make -j4 O=/home/name/build/kernel

一般-jn的n为核数的两倍即可

5、安装内核

$ sudo make O=/home/name/build/kernel modules_install install

6、生成initrd

$ sudo mkinitramfs -o /boot/initrd-img.2.6.31 2.6.31关于mkinitramfs的其他参数,请参考man mkinitramfs,关于initrd的作用,请自己google搜索。我近期也会写一篇文章剖析一下initrd。

7、修改引导

使用grub的话,可以直接使用:

$ sudo update-grub

来更新引导文件,当然也可以自己编辑/boot/grub/menu.lst或者/boot/grub/grub.cfg文件。

8、重启

重启之后可以通过以下命令确认你当前使用的是不是刚编译的内核:

$ uname -a

【编辑推荐】

  1. Linux内核SCSI IO子系统分析
  2. 如何成为一个Linux系统内核开发者
  3. Linux的2.6.32获取R600的内核模式设置
责任编辑:赵宁宁 来源: chinaitlab
相关推荐

2017-03-27 18:05:49

Linux内核编译与开发

2023-05-08 08:05:42

内核模块Linux

2021-01-19 11:40:40

Linux代码程序编译

2022-06-09 09:20:40

Linux语言编写代码

2021-05-26 07:53:58

Linux运维Linux系统

2009-10-28 09:54:32

Linux内核详细解析

2023-07-25 15:17:38

Linux操作系统开发

2011-01-04 17:00:32

Linux内核编译

2010-03-02 16:13:56

Linux升级

2009-12-17 15:18:47

2023-10-05 15:47:04

Linux内核编译

2010-07-20 10:04:25

Linux内核编译

2010-05-13 09:45:26

Linux地址空间

2009-09-07 08:58:23

VMWare编译lin

2009-12-01 12:59:50

编译Suse Linu

2022-05-18 07:58:21

Linux程序编译代码

2021-09-09 12:01:13

Linux内核f宏

2009-12-24 10:04:38

Linux进行C编译

2012-07-31 16:06:28

Linux内核编译

2010-02-02 13:26:53

Linux内核
点赞
收藏

51CTO技术栈公众号