debian内核编译过程记录(使用kernel-package方法添加ftrace+gcov+CPU抢占模式+cgroup+ timer frequency)

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时可以

                                                                                 有详细的提示信息。

eg:

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 

3.
sudo make-kpkg --initrd --reversion 10.04.dlrc --append-ro-version -2013121 kernel_image kernel_headers


……


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需要:

debian内核编译过程记录(使用kernel-package方法添加ftrace+gcov+CPU抢占模式+cgroup+ timer frequency)_第1张图片


debian内核编译过程记录(使用kernel-package方法添加ftrace+gcov+CPU抢占模式+cgroup+ timer frequency)_第2张图片

2.2:gcov 需要:

debian内核编译过程记录(使用kernel-package方法添加ftrace+gcov+CPU抢占模式+cgroup+ timer frequency)_第3张图片

debian内核编译过程记录(使用kernel-package方法添加ftrace+gcov+CPU抢占模式+cgroup+ timer frequency)_第4张图片


debian内核编译过程记录(使用kernel-package方法添加ftrace+gcov+CPU抢占模式+cgroup+ timer frequency)_第5张图片


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)                                                  

######

  • (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                                                      
######

  • ( ) 100 HZ
    100 HZ是传统的对服务器、SMP 和 NUMA的系统选项。这些系统有比较多的处理器,可以在中断较集中的时候分担中断
  • ( ) 250 HZ
    250 HZ对服务器是一个好的折衷的选项,它同样在SMP 和 NUMA 系统上体现出良好的反应速度。
  • ( ) 300 HZ
  • (X) 1000 HZ
    1000 HZ对于桌面和其他需要快速事件反应的系统是非常棒的。

######

将上述内容全选,然后再加上适合自己内核的驱动,就可以完成了!

该篇文章仅作项目学习记录!!

你可能感兴趣的:(linux)