ImageVerifierCode 换一换
格式:DOC , 页数:20 ,大小:43KB ,
资源ID:8734363      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-8734363.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux 内核裁剪的自动化方法.doc)为本站会员(jw66tk88)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

Linux 内核裁剪的自动化方法.doc

1、Linux 内核裁剪的自动化方法Linux 内核裁剪的自动化方法随着广泛地获得使用并被移植到不同的平台,Linux 内核源代码正在越来越大,比如, Linux 2.6.28 中, 文件数有 25282 个,大小有 350M。 对于某一个平台,真正需要的的文件其实不到 10%, 为了提高研发效率,我们应当删除或者暂时删除那些永远也不会用到的文件, 比如,可以使内核的文件数缩减到 5000, 从而节约拷贝、查找等的时间,提高研发效率。本文提出一种高效、干净的进行内核裁剪的办法。以往,我们是通过手工删除某些目录来完成这个任务的。 手工删除的缺点有:1.花时间,每次裁剪都要花 1 2 天, 才能将文件

2、数目删除到 5000 以下。2.不够干净。 内核代码的 Makefile 以及 Kconfig 配置文件彼此的依赖性比较大, 即使某个目录下的功能不被使用,直接删除也会导致编译出错, 从而, 不得不修改相应的 Makefile 以及 Kconfig 才能使编译通过。 这留下一下隐患。3.恢复困难。 根据 2)的描述,在我们对外发布完整版本而需要将以前删除、修改的文件复原时,需要使用比较工具,仔细地比对,才能完整恢复, 这也非常花时间。在经历了手工操作的痛苦之后,我们提出了一种自动化的方法。具体为:1.只删除文件,不删除目录,保留 Makefile 及 Kconfig2.使用时,只需要填充一个配

3、置表,其中,可以指定:1.删除某个文件, 比如:drivers/macintosh/adbhid.c2.删除某个目录下的匹配文件, 比如:include/asm-arm/hardware/*.h3.删除某个目录及其子目录下的匹配文件,比如:drivers/block/#.c4.删除某个目录及其子目录下的适合删除文件, 比如:arch/alpha/#3.脚本会根据配置表,将相关的文件移动到一备份目录,并保持原有的目录结构4.需要恢复时,只需要将备份目录下的文件拷贝到原来的目录,既可。优点如下:1.配置文件一次指定,可反复使用, 对同一内核,不需要更改就可以再次运行。对不同内核,只要稍作修改(内核

4、的目录结构不怎么变化),既可复用。2.配置文件指定后,裁剪及备份内核的操作可以在几秒内完成,大大提高的效率。3.由于我们只删除 *.c, *.h, *.txt 等文件,而不删除编译相关的配置文件,裁剪后的内核特别干净,不会影响编译。打外部 patch 也特别容易。4.需要对外发布版本时,可以直接运行 restore.sh 脚本,瞬间完成。5.由于操作的可反复性,我们可以不断优化裁剪列表,得到最小内核。最大程度地提高研发效率。以下为例子配置文件:# README #here to specify which files(unused in your project) to move#you ca

5、n 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# d

6、rivers/dio/#*kernel version: 2.6.25# arch/#arch/alpha/#arch/avr32/#arch/blackfin/#arch/cris/#arch/frv/#arch/h8300/#arch/ia64/#arch/m32r/#arch/m68k/#arch/m68knommu/#arch/mips/#arch/mn10300/#arch/parisc/#arch/powerpc/#arch/ppc/#arch/s390/#arch/sh/#arch/sparc/#arch/sparc64/#arch/v850/#arch/x86/#arch/xt

7、ensa/# arch/arm#arch/arm/mach-s3c2442/#arch/arm/mach-imx/#arch/arm/mach-s3c2440/#arch/arm/mach-omap2/#arch/arm/mach-clps711x/#arch/arm/mach-s3c2443/#arch/arm/plat-iop/#arch/arm/mach-davinci/#arch/arm/mach-ixp2000/#arch/arm/mach-iop13xx/#arch/arm/mach-integrator/#arch/arm/mach-iop33x/#arch/arm/plat-s

8、3c24xx/#arch/arm/plat-s3c/#arch/arm/plat-omap/#arch/arm/mach-sa1100/#arch/arm/mach-omap1/#arch/arm/mach-aaec2000/#arch/arm/mach-ixp23xx/#arch/arm/mach-mx3/#arch/arm/mach-l7200/#arch/arm/mach-ixp4xx/#arch/arm/mach-at91/#arch/arm/mach-clps7500/#arch/arm/mach-rpc/#arch/arm/mach-s3c2400/#arch/arm/plat-m

9、xc/#arch/arm/mach-iop32x/#arch/arm/mach-footbridge/#arch/arm/mach-h720x/#arch/arm/mach-ep93xx/#arch/arm/mach-ebsa110/#arch/arm/mach-realview/#arch/arm/mach-s3c2412/#arch/arm/mach-ns9xxx/#arch/arm/mach-orion/#arch/arm/mach-shark/#arch/arm/mach-netx/#arch/arm/mach-pnx4008/#arch/arm/mach-s3c2410/#arch/

10、arm/mach-lh7a40x/#arch/arm/mach-ks8695/#arch/arm/mach-versatile/#arch/arm/mach-msm/# Documetation#Documentation/# drivers #drivers/acorn/#drivers/acpi/#drivers/amba/#drivers/ata/#drivers/atm/#drivers/auxdisplay/#drivers/cdrom/#drivers/dca/#drivers/dio/#drivers/edac/#drivers/eisa/#drivers/ide/#driver

11、s/ieee1394/#drivers/infiniband/#drivers/isdn/#drivers/macintosh/#drivers/mca/#drivers/md/#drivers/memstick/#drivers/nubus/#drivers/of/#drivers/parisc/#drivers/parport/#drivers/pci/#drivers/pcmcia/#drivers/pnp/#drivers/ps3/#drivers/rapidio/#drivers/s390/#drivers/sbus/#drivers/sh/#drivers/sn/#drivers/

12、ssb/#drivers/telephony/#drivers/thermal/#drivers/xen/#drivers/zorro/# drivers/char #drivers/char/agp/#drivers/char/mwave/#drivers/char/pcmcia/#drivers/char/rio/#drivers/char/drm/# drivers/net #drivers/net/appletalk/#drivers/net/ibm_emac/#drivers/net/ibm_newemac/#drivers/net/ixp2000/#drivers/net/pcmc

13、ia/#drivers/net/tokenring/# drivers/scsi #drivers/scsi/aic7xxx/#drivers/scsi/aic7xxx_old/#drivers/scsi/aic94xx/#drivers/scsi/lpfc/#drivers/scsi/pcmcia/#drivers/scsi/qla2xxx/#drivers/scsi/qla4xxx/#drivers/scsi/sym53c8xx_2/# drivers/media #drivers/media/dvb/# drivers/media/video #drivers/media/video/b

14、t8xx/#drivers/media/video/cpia2/#drivers/media/video/cx23885/#drivers/media/video/cx25840/#drivers/media/video/em28xx/#drivers/media/video/ivtv/#drivers/media/video/pvrusb2/#drivers/media/video/saa7134/#drivers/media/video/sn9c102/#drivers/media/video/zc0301/# fs #fs/9p/#fs/afs/#fs/adfs/#fs/affs/#fs

15、/bfs/#fs/befs/#fs/coda/#fs/dlm/#fs/freevxfs/#fs/gfs2/#fs/hfs/#fs/hfsplus/#fs/hpfs/#fs/isofs/#fs/jbd/#fs/jbd2/#fs/jfs/#fs/minix/#fs/ntfs/#fs/ncpfs/#fs/ocfs2/#fs/qnx4/#fs/udf/#fs/ufs/#fs/xfs/# include #include/acpi/#include/asm-alpha/#include/asm-avr32/#include/asm-blackfin/#include/asm-cris/#include/

16、asm-frv/#include/asm-h8300/#include/asm-ia64/#include/asm-m32r/#include/asm-m68k/#include/asm-m68knommu/#include/asm-mips/#include/asm-mn10300/#include/asm-parisc/#include/asm-powerpc/#include/asm-ppc/#include/asm-s390/#include/asm-sh/#include/asm-sparc/#include/asm-sparc64/#include/asm-um/#include/

17、asm-v850/#include/asm-x86/#include/asm-xtensa/#include/pcmcia/# include/asm-arm #include/asm-arm/arch-ks8695/#include/asm-arm/arch-iop33x/#include/asm-arm/arch-mxc/#include/asm-arm/arch-iop32x/#include/asm-arm/arch-ep93xx/#include/asm-arm/arch-h720x/#include/asm-arm/arch-iop13xx/#include/asm-arm/arc

18、h-ns9xxx/#include/asm-arm/arch-ebsa285/#include/asm-arm/arch-orion/#include/asm-arm/arch-ixp2000/#include/asm-arm/arch-s3c2400/#include/asm-arm/arch-msm/#include/asm-arm/arch-ixp4xx/#include/asm-arm/arch-lh7a40x/#include/asm-arm/arch-ebsa110/#include/asm-arm/arch-netx/#include/asm-arm/arch-imx/#incl

19、ude/asm-arm/arch-ixp23xx/#include/asm-arm/arch-davinci/#include/asm-arm/arch-sa1100/#include/asm-arm/plat-s3c24xx/#include/asm-arm/plat-s3c/#include/asm-arm/arch-l7200/#include/asm-arm/arch-versatile/#include/asm-arm/arch-clps711x/#include/asm-arm/arch-aaec2000/#include/asm-arm/arch-cl7500/#.h inclu

20、de/asm-arm/arch-pnx4008/#include/asm-arm/arch-integrator/#include/asm-arm/arch-at91/#include/asm-arm/arch-shark/#include/asm-arm/arch-rpc/#include/asm-arm/arch-s3c2410/#include/asm-arm/arch-realview/# net/#net/ax25/#net/can/#net/decnet/#net/ipv6/#net/x25/# sound/#sound/aoa/#sound/isa/#sound/mips/#so

21、und/oss/#sound/parisc/#sound/pci/#sound/pcmcia/#sound/ppc/#sound/sh/#sound/sparc/#以下为备份脚本:#! /bin/bash#name: move.sh#function: move unused files from kernel to make size smaller#set -xfunction usage()echo “Usage:“ $0 “filename“echo “ filename is the file that includes files to be deleted“echo “ if n

22、ot provided, filename default to to_delete_files“if $# -ne “1“ ; thenINPUT_FILE=“to_cutoff_files“echo inputfile default to $INPUT_FILEelseif $1 = “-h“ ; thenusageexit 0fiINPUT_FILE=$1fiBASE_ORIG=cd ; pwd/BASE_NEW=cd files; pwd/FILES_LIST=.$INPUT_FILE_detailedrm -f $FILES_LIST#echo “restore files“#cp

23、 -a files/* / 2/dev/null#rm -rf files/* 2 /dev/nullecho “generate detailed file list.“cat $INPUT_FILE | grep -v # | while read LINEdoif ! -z $LINE ; thenif expr index $LINE “#“ != “0“ ; thenDIR_ORIG=$BASE_ORIG$LINEDIR_ORIG=$DIR_ORIG%/*find $DIR_ORIG -name *.h $FILES_LISTfind $DIR_ORIG -name *.c $FIL

24、ES_LISTfind $DIR_ORIG -name *.S $FILES_LISTfind $DIR_ORIG -name *.txt $FILES_LISTfind $DIR_ORIG -name *_defconfig $FILES_LISTelif expr index $LINE “#“ != “0“ ; thenDIR_ORIG=$BASE_ORIG$LINEDIR_ORIG=$DIR_ORIG%/*FILE_EXT=$LINE#*.find $DIR_ORIG -name *.$FILE_EXT $FILES_LISTelif expr index $LINE “*“ != “

25、0“ ; thenDIR_ORIG=$BASE_ORIG$LINEDIR_ORIG=$DIR_ORIG%/*FILE_EXT=$LINE#*.find $DIR_ORIG -name *.$FILE_EXT -maxdepth 1 $FILES_LISTelse echo $BASE_ORIG$LINE $FILES_LISTfifidoneecho “move files.“INPUT_FILE=$FILES_LISTcat $INPUT_FILE 2/dev/null | grep -v # | while read LINEdoif ! $LINE = “ ; thenFILE_ORIG=$LINELINE2=$LINE#$BASE_ORIGFILE_NEW=$BASE_NEW$LINE2DIR_NEW=$FILE_NEW%/*if ! -d $DIR_NEW ; thenmkdir -p $DIR_NEWfiif -f $FILE_ORIG ; then mv -f $FILE_ORIG $DIR_NEWfifidone以下为恢复脚本:#! /bin/bashcp -a files/* /rm -rf files/*

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报