现在的位置: 首页 > 综合 > 正文

编译linux内核

2013年07月09日 ⁄ 综合 ⁄ 共 3002字 ⁄ 字号 评论关闭

一:环境
linux: centos6
kernel:linux-3.0.3.tar.bz2
使用root用户编译内核
内核裁剪:
驱动:保留常用USB驱动,支持常用磁盘接口如SCSI,sATA。因为内核需要从这些地方加载,所以必须把这些驱动编译到内核中,不能以模块的型式编译。
去掉无线,蓝牙,ISDN,,其他游戏手柄,手持设备等都已去掉
支持ext3,ext4,cifs,nfs,不支持虚拟化
内核debug模式已经关闭,编译方式采用优化code size方式编译
CPU架构:只保留intel,去掉AMD等,cpu采用非抢占调度(server)模式
语言:只保留UTF-8,ISO,简体中文

二:编译准备
1.准备相关软件包
yum install rpmdevtools yum-utils ncurses-devel make rpm-build rpm-devel

三. 源码编译安装步骤
0. 解压源码
tar xvf linux-3.0.3.tar.bz2
cd linux-3.0.3
1. make mrproper 
如果是第一次编译,省略该步骤,该步骤主要删除编译后生成的一些文件,如果.config,makefile,*.o等文件
如果是第一次编译失败,再一次编译,则必须执行。

2. make menuconfig  | make config | make menuconfig | make xconfig | make gconfig|make nconfig
定制内核配置,请以上方式任选一种。我这里选择make menuconfig

3. make
编译内核

4. make modules_install 
安装内核模块, 把上一步构建出来的内核放入一个模块子目录中:
/lib/modules/内核版本,这里是/lib/modules/3.0.3/

5. make install
把编译好的内核放入/boot中,并且会更新引导文件,会把vmlinuz和System.map复制到/boot目录下同时修改grub
主要会生成一下文件:
config-3.0.3   --内核编译配置文件内容就是make menuconfig出来的文件.config的内容,只是文件名不同而已
initrd-3.0.3.img 
vmlinux-3.0.3.bz2
System.map-3.0.3 
vmlinuz-3.0.3

6. new-kernel-pkg --mkinitrd --depmod --install 3.0.3   #生成initrd.img
安装grub,new-kernel-pkg --mkinitrd --depmod --install 内核版本号
修改/boot/grub/grub.conf文件,增加一下内容
title CentOS Linux (3.0.3)
        root (hd0,6)
        kernel /vmlinuz-3.0.3 ro root=UUID=db5edc6d-d16b-4308-8c7b-6df9f4f4e26c 
rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYS
FONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
        initrd /initrd-3.0.3.img

四. 编译成rpm包
0. 解压源码
tar xvf linux-3.0.3.tar.bz2
cd linux-3.0.3
vi scripts/package/mkspec 
增加一下几行,目的:当rpm -i kernel-3.0.3-1.x86_64.rpm 自动配置grub.conf

echo "%post"
echo 'if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ]; then'
echo  'if [ -f /etc/sysconfig/kernel ]; then'
echo  '/bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel || exit $?'
echo  'fi '
echo 'fi '
echo '/sbin/new-kernel-pkg  --mkinitrd --make-default --depmod --install %{version} || exit $?' 
上面这一步3.8.10以后版本可以不用加。只需要制做initramfs

cp /boot/initrd-3.0.3.img  /mnt/initrd.gz

gunzip initrd.gz

cpio -mdiv < initrd

mv initrd

General setup->

 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support         |
 |         (/mnt) Initramfs source file(s)                                        |    指定initramfs文件目录,内核分自动压缩到内核文件中
 |         (0)     User ID to map to 0 (user root)                                |
 |         (0)     Group ID to map to 0 (group root)                              |
 |           Built-in initramfs compression mode (None)  ---> 

编译完成后,initramfs包含着内核文件中。

1. make mrproper 
如果是第一次编译,省略该步骤,该步骤主要删除编译后生成的一些文件,如果.config,makefile,*.o等文件
如果是第一次编译失败,再一次编译,则必须执行。

2. make menuconfig  | make config | make menuconfig | make xconfig | make gconfig
定制内核配置,请以上方式任选一种。我这里选择make menuconfig
生产内核配置文件.config

3. make rpm-pkg
生成一下文件

Wrote: /root/rpmbuild/SRPMS/kernel-3.0.3-1.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-3.0.3-1.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-headers-3.0.3-1.x86_64.rpm

4. 安装内核
rpm -ivh /root/rpmbuild/RPMS/x86_64/kernel-3.0.3-1.x86_64.rpm

五.附录
kernel-3.0.3-1.src.rpm下载地址

http://dl.dbank.com/c0x5qcm826
kernel-3.0.3-1.x86_64.rpm下载地址
http://dl.dbank.com/c0twilsoi1

kernel-headers-3.0.3-1.x86_64.rpm下载地址
http://dl.dbank.com/c0056pznuh

抱歉!评论已关闭.