(Mark) (Ubuntu)Ubuntu 12.04 LTS 编译内核 (Linux) (内核)
编译环境为Ubuntu 12.04 LTS 64 Bit 内核版本3.2.0-59
1.https://www.kernel.org/下载内核和补丁linux-3.13.6.tar.xz和patch-3.13.6.xz
2.安装编译时需要的工具,构建编译环境
sudo apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
注:
build-essential (基本的编程库(gcc, make等)
kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig要调用的)
libqt3-headers (make xconfig要调用的)
3.解压内核到/usr/src/下,补丁到/usr/src/linux-3.13.6/下
sudo tar xvf linux-3.13.6.tar.xz -C /usr/src/ xz -d patch-3.13.6.xz sudo cp patch-3.13.6 /usr/src/linux-3.13.6/
4.净化内核
cd /usr/src/linux-3.13.6/ sudo make mrproper
注:
make mrproper
删除之前编译所生成的文件和配置文件,备份文件,如.config配置文件。如果你是第一次编译,可不执行。
5.为内核打上补丁,用file 命令查看补丁
file patch-3.13.6
输出:patch-3.13.6: unified diff output, ASCII text
此处Patch文件使用diff 做的,因此使用diff命令打补丁
sudo diff -rN patch-3.13.6 ./
注:如果patch文件是patch做成的,那么就相应的用:patch -p1 < xxxx.patch
5.配置内核
对于内核配置可不是那么熟练什么的,可以用原来系统中存在的配置文件。原来系统中的配置文件,位置有两种情况:一是放在/boot下面的,一个是放在/usr/src/linux-headers-xxxxx-generic/下面.
本机是把/usr/src/linux-headers-xxx-generic/下面的.config复制到要编译的内核路径下
sudo cp ../linux-headers-3.2.0-59-generic/.config ./
或者 sudo cp /boot/config-3.2.0-59-generic ./.config
6.清理编译中间文件
sudo make clean
注: 删除绝大多数编译生产的文件并保留配置文件。如果你是第一次编译,可不执行
7.在menuconfig中配置内核
sudo make menuconfig
默认会加载.config的配置,也可根据自己的需求在界面中修改。然后 Exit --->Yes
8.编译
sudo make -j4
注:make命令可以理解为 make bzImage(编译内核) 和make modules (编译模块)
-j4 表示jobs=4,同时最多跑4个进程。make自己会协调,如果CPU等资源不够可能小于4个。不过一般瓶颈都在硬盘,所以一般能看到4个进程一起跑。
9.安装模块,将编译好的模块安装到/lib/modules/下
sudo make modules_install
10.创建创建initrd 文件
sudo mkinitramfs -o /boot/initrd.img-3.13.6-generic
注:如果linux系统安装在scsi磁盘上,这步是必须的,否则可以跳过。
11.安装内核
sudo make install
注:此步包含如下操作
cp /usr/src/linux-3.13.6/arch/x86/boot/bzImage /boot/vmlinuz-3.13.6-generic cp/usr/src/linux-3.13.6/System.map /boot/System.map-3.13.6-generic
12.更新grub
update-grub2
到此完成内核编译安装完成
注:使用命令查看grub添加的信息 3.13.6 为新编的内核
sudo gedit /boot/grub/grub.cfg
查看信息中包含如下配置描述
menuentry 'Ubuntu,Linux 3.13.6-generic' --class ubuntu --class gnu-linux --class gnu --class os { recordfail gfxmode $linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos8)' search --no-floppy --fs-uuid --set=root 67f03453-7d9b-4a50-9441-ce3af69abc42 linux /boot/vmlinuz-3.13.6-generic root=UUID=67f03453-7d9b-4a50-9441-ce3af69abc42 ro quiet splash $vt_handoff initrd /boot/initrd.img-3.13.6-generic }
重新编译可从第6步开始,如要清除配置文件从第4步开始。