- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux 内核裁剪的自动化方法
Linux 内核裁剪的自动化方法
Linux 内核裁剪的自动化方法
随着广泛地获得使用并被移植到不同的平台,Linux 内核源代码正在越来越大,比如, Linux 2.6.28 中, 文件数有 25282 个,大小有350M。
对于某一个平台,真正需要的的文件其实不到 10%, 为了提高研发效率,我们应当删除或者暂时删除那些永远也不会用到的文件, 比如,可以使内核的文件数缩减到5000, 从而节约拷贝、查找等的时间,提高研发效率。
本文提出一种高效、干净的进行内核裁剪的办法。
以往,我们是通过手工删除某些目录来完成这个任务的。 手工删除的缺点有:
1.花时间,每次裁剪都要花 1 – 2 天, 才能将文件数目删除到 5000 以下。
2.不够干净。 内核代码的 Makefile 以及 Kconfig 配置文件彼此的依赖性比较大, 即使某个目录下的功能不被使用,直接删除也会导致编译出错, 从而, 不得不修改相应的 Makefile 以及 Kconfig 才能使编译通过。 这留下一下隐患。
3.恢复困难。 根据2)的描述,在我们对外发布完整版本而需要将以前删除、修改的文件复原时,需要使用比较工具,仔细地比对,才能完整恢复, 这也非常花时间。
在经历了手工操作的痛苦之后,我们提出了一种自动化的方法。具体为:
1.只删除文件,不删除目录,保留 Makefile 及 Kconfig
2.使用时,只需要填充一个配置表,其中,可以指定:
1.删除某个文件, 比如:drivers/macintosh/adbhid.c
2.删除某个目录下的匹配文件, 比如:include/asm-arm/hardware/*.h
3.删除某个目录及其子目录下的匹配文件,比如:drivers/block/#.c
4.删除某个目录及其子目录下的适合删除文件, 比如:arch/alpha/##
3.脚本会根据配置表,将相关的文件移动到一备份目录,并保持原有的目录结构
4.需要恢复时,只需要将备份目录下的文件拷贝到原来的目录,既可。
优点如下:
1.配置文件一次指定,可反复使用, 对同一内核,不需要更改就可以再次运行。对不同内核,只要稍作修改(内核的目录结构不怎么变化),既可复用。
2.配置文件指定后,裁剪及备份内核的操作可以在几秒内完成,大大提高的效率。
3.由于我们只删除 *.c, *.h, *.txt 等文件,而不删除编译相关的配置文件,裁剪后的内核特别干净,不会影响编译。打外部 patch 也特别容易。
4.需要对外发布版本时,可以直接运行 restore.sh 脚本,瞬间完成。
5.由于操作的可反复性,我们可以不断优化裁剪列表,得到最小内核。最大程度地提高研发效率。
以下为例子配置文件:
############################################################
#################### README #######################
############################################################
#here to specify which files(unused in your project) to move
#you can specify a relative directory with file name followed
#you can specify
# *.c to mean all c files below the dir
# #.c to mean all c files below the dir and subdir
# ## to mean all files of known type below the dir and subdir
#
# Example:
# drivers/macintosh/adbhid.c
# drivers/dio/*.c
# drivers/block/#.c
# drivers/dio/##
############################################################
##################*kernel version: 2.6.25###################
############################################################
############################################################
#######################
文档评论(0)