1.
之前我们编译内核一般也就是使用make -->make modules_install --> make install --> update-grub 这一系列步骤,自从知道Debian、Ubuntu 机器上可以使用 kernel-package 神器来编译安装内核,上述方法就被我等菜鸟摒弃了。
kernel-package是Debian提供的一个编译Linux内核的一个工具集,安装kernel-package 会同时安装上
build-essential、libncurses-dev、linux-source等一系列工具。
该等神器的神奇之处可以在如下链接中体会进行体会:
http://blog.csdn.net/wangyezi19930928/article/details/23833375
看完这个工具的厉害之后,还是编译一个内核体验一下kernel-package的真正威力:
# cd linux-3.9.11/ // 进入你想要编译的内核的解压文件夹
# make defconfig // arch/arm/defconfig是一个缺省的配置文件,
make defconfig时会根据这个文件生成当前的.config
# make menuconfig // 编译内核,自己选择(在此过程中一定要把适合自己机器的驱动选好,不然会遇到各种问题,我就遇到了gnome3不被支持的问题,原因是因为显卡驱动没有装好!)
# sudo CONCURRENCY_LEVEL=4 make-kpkg --initrd kernel-image
// 这一句就是在使用kernel-package在编译,CONCURRENCY_LEVEL=4 是设置多线程
(类似于我们make -j4的多线程控制),make-kpkg就是kernel-package提供的编译工具,make-kpkg的安装包是kernel-package。
--initrd参数是说明在生成的image包里有initrd。
1. --initrd: 生成initramfs
2. --revision: deb文件的版本信息,需要数字开头,如10.04.dlrc
3. --append-to-version: 内核版本附加信息
4. kernel_image:内核和模块的安装包
5. kernel_headers,生成内核头文件的安装包。//一般在编译内核时都要加上这个参数,这样在开机grub时可以
有详细的提示信息。
1.sudo CONCURRENCY_LEVEL=16 make-kpkg --initrd --append-to-version=-gcov kernel_image
2.
sudo make-kpkg --initrd --reversion 10.04.dlrc --append-ro-version -2013121 kernel_image
……
dpkg --build /home/wangye/kernel-sources/linux-3.9.11/debian/linux-headers-3.9.11-gcov ..
dpkg-deb:正在新建软件包 linux-headers-3.9.11-gcov,包文件为 ../linux-headers-3.9.11-gcov_3.9.11-gcov-10.00.Custom_amd64.deb。
cp -pf debian/control.dist debian/control
make[2]: Leaving directory `/home/wangye/kernel-sources/linux-3.9.11'
make[1]: Leaving directory `/home/wangye/kernel-sources/linux-3.9.11'
从上面的信息可以看出,我们的make-kpkg生成了一个deb文件,其实这就是我们编译好的内核,
放在当前内核文件夹的上层目录。
#cd ..
linux-headers-3.9.11-gcov_3.9.11-gcov-10.00.Custom_amd64.deb
到此我们的编译工作结束,我们可以使用dpkg 安装我们刚编译好的目录!当然……如果你的编译的内核对其他机器也适用,你可以拷贝这个deb文件到其他机器上直接安装使用。这是神器的一大优势。
#sudo dpkg -i linux-headers-3.9.11-gcov_3.9.11-gcov-10.00.Custom_amd64.deb
// dpkg -i 安装生成的deb格式image文件
所以这个神器使得我们编译内核工作变得更加简单快捷。当然如果仅限于此还不能称之为神器!我们使用kernel-package编译内核最大的好处是我们可以使用 dpkg -r 删除我们编译的内核。
如上: 安装我们使用的是 sudo dpkg -i linux-image-3.4.33_3.4.33-10.00.Custom_i386.deb
时我们可以直接使用: sudo dpkg -r linux-image-3.4.33
Eg:
wangye@wangye:~/kernel-sources$ ls
linux-3.9.11
linux-3.9.11.tar.bz2
linux-headers-3.9.11-gcov_3.9.11-gcov-10.00.Custom_amd64.deb
linux-image-3.9.11-gcov_3.9.11-gcov-10.00.Custom_amd64.deb
linux-image-3.9.11-sil4_3.9.11-sil4-10.00.Custom_amd64.deb //卸载安装之后的该版本内核!
wangye@wangye:~/kernel-sources$ sudo dpkg -r linux-image-3.9.11-sil4
[sudo] password for wangye:
(正在读取数据库 ... 系统当前共安装有 149088 个文件和目录。)
正在卸载 linux-image-3.9.11-sil4 ...
Examining /etc/kernel/prerm.d.
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.9.11-sil4 /boot/vmlinuz-3.9.11-sil4
update-initramfs: Deleting /boot/initrd.img-3.9.11-sil4
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.9.11-sil4 /boot/vmlinuz-3.9.11-sil4
Generating grub.cfg ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.9.11-gcov
Found initrd image: /boot/initrd.img-3.9.11-gcov
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
done #卸载完毕!!
2.
内核添加选项:
2.1 ftrace需要:
2.2:gcov 需要:
3.3 :Cgroup 选项:
[*] 64-bit kernel
General setup --->
[*] Control Group support --->
[*] Example debug cgroup subsystem
[*] Freezer cgroup subsystem
......
[*] Block IO controller
[*] Enable Block IO controller debugging
3.4 CPU 抢占模式选项:
Processor type and features --->
[*] Multi-core scheduler support
Preemption Model (Preemptible Kernel (Low-Latency Desktop))
( ) No Forced Preemption (Server)
(X) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)
######
######
3.5 时钟频率选项:
Processor type and features --->
[*] Enable seccomp to safely compute untrusted bytecode
Timer frequency (1000 HZ) --->
( ) 100 HZ
( ) 250 HZ
( ) 300 HZ
(X) 1000 HZ
######
######
将上述内容全选,然后再加上适合自己内核的驱动,就可以完成了!
该篇文章仅作项目学习记录!!