微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ubuntu kernel 编译安装

Ubuntu kernel 编译安装

最近参与一个 ubuntu 项目,基于 intel Cherrytrail 平台的系统开发,包括 kernel 层面的一些问题。

由于开始对那套ubuntu的开发编译环境不是很熟悉,问了下这几个月一直在这个项目中的同事,他提供的一套方法,说是ubuntu官网上的编译方法,每次编译要40分钟左右,天哪,每次编译kernel40分钟,那效率也太低了。他另外提供了一套优化过的方式,编译也要10-20分钟。 时间还是挺宝贵的,所以我尝试过一次之后,看看是否有更快的方式。

关于编译环境的搭建,略!

原始提供的方式:

Cd kernel

fakeroot debian/rules clean

fakeroot debian/rules binary-headers binary-cs1p

最终在项目根目录(包含kernel/ ubuntu/ .repo/)生成多个linux*.deb文件,将这些deb文件在调试机上通过dpkg 安装之后,即可更新最新的kernel

优化之后的方式:

将使用第一种方式生成kernel/debian/build/build-cs1p/.config copykernel/.config

Cd kernel/

$ cp ../minimal.mk ./debian/ruleset/

$ fakeroot make-kpkg --initrd kernel_image kernel_headers

10多分钟之后,在根目录生成4deb包,将这些deb包安装到调试机上即可。(其实只要使用linux-image-4.4.19+_4.4.19+-10.00.Custom_amd64.deb这个就能update kernel)

观察、思考并改进

工作绩效其实不是说你加多少班,投入很多时间,就能产生很高绩效,其实真正的绩效应该是说给公司,给团队带来多少价值。工作努力是一方面,实际的输出是另外一个层次。所以我们需要不断提高生产力,提高效率,这样才能在有限的时间,有限的条件下做更多的事 。

查看了下生产的几个deb 包,而对于kernel的更新来说,正真有用的是linux-image-4.4.19 +_4.4.19 +-10.00.Custom_amd64.deb包,可以将其解压缩打开,观看其庐山真面目。

$ ar -x linux-image-4.4.19+_4.4.19+-10.00.Custom_amd64.deb

生产两个压缩包:control.tar.gz data.tar.xz

Control.tar.gz可以通过tar -zxvf control.tar.gz -C ./control解压缩

Data.tar.xz 则通过xz -d data.tar.xz 解压缩生成data.tar

然后tar -xvf data.tar -C xxx/ 提出文件

-----------------------------------------------------以下题外话,可以略过此处----------------------------------------------------------

上面涉及到两个指令:(附带描述一下)

Ar指令是针对linuxarchive 包的操作的

-d :从archive包中delete文件

-m:移动archive中的文件

-t:列举archive包中的文件

-x提取archive中的文件

Xz指令是针对**.xz 压缩包的操作

据说XZ是压缩届最新压缩率之王,甚至比7z的压缩率还高。压缩率提高的一个副作用就是压缩解压缩的时间变长了。Ubuntu 14.04 LTS就带此工具。

xz -z 要压缩的文件

如果要保留被压缩的文件加上参数 -k ,如果要设置压缩率加入参数 -0 -9调节压缩率。如果不设置,认压缩等级是6.

xz -d 要解压的文件

使用 -k 参数来保留被解压缩的文件

解、压缩tar.xz文件

以为tar.xz也可以用单一命令搞定解压或压缩,就像tar czvf tar xzvf处理tgz一样。其实不行 tar里面没有征对xz格式的参数,比如 z是针对 gzipj是针对 bzip2

创建tar.xz文件

tar cvf xxx.tar xxx/ 得到xxx.tar文件

xz -z xxx.tarxxx.tar压缩成为xxx.tar.xz

解压tar.xz文件

xz -d xxx.tar.xz 解压成 xxx.tar

tar xvf xxx.tar提取文件

-----------------------------------------------------以上题外话,可以略过此处----------------------------------------------------------


继续

提取出来的xxx文件中找到boot/文件夹,里面看到三个与kernel相关的文件

config-4.4.19+System.map-4.4.19+vmlinuz-4.4.19+

config-4.4.19+ 是编译kernel.config文件

System.map-4.4.19+ 是编译生成的符号文件kernel启动的时候用到,尤其是相关log需要匹配到;

vmlinuz-4.4.19+ 才是真正的kernel文件

$ file vmlinuz-4.4.19+

vmlinuz-4.4.19+: Linux kernel x86 boot executable bzImage,version 4.4.19+ (root@R241) #8 SMP Tue Dec 27 17:42:56 CST 2016,RO-rootFS,swap_dev 0x7,normal VGA

其实,我们只需要将上面三个文件替换即可。在编译环境中找到生成的三个文件
kernel/.config

Kernel/.System.map

Kernel/arch/x86/boot/bzImage

那么剩下的问题是如何在短时间内编译kernel 生成新的kernel文件呢?(主要是上面三个kernel相关文件)

其实还是回到最原始的kernel编译方式上。

1,配置config文件,这个项目我们使用上面生成.config文件,将其放到kernel路径下;或者从调试机的/boot路径下获取config文件

若需要修改,通过make menuconfig

2make

包含几种:

$ sudo make

$ sudo make install 在调试机上编译安装,最终只要reboot即可更新到最新的kernel版本

$ sudo make modules_install 在调试机上编译安装modules 更新/lib/modules中的模块;

一般情况下,在kernel根目录会生成vmlinux 或者bzImage,System.map,当然或者如./arch/x86/boot/路径下找bzImage文件

将三个文件copy出来即可。

纯粹编译kernel时间会短很多,不过第一次也会较长,后面会快很多了。

如果只是修改个别kernel文件,编译会更快。

使用多线程编译:

Make -j8 线程数依据当前编译电脑的cpu 线程数决定,最好不要超过cpu线程数的2倍;

原文地址:https://www.jb51.cc/ubuntu/355152.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐