BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪

 

1.rootfs介绍

 

裁剪之前,我觉得有必要用一定的篇幅介绍一下rootfs

(1)rootfs目录

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第1张图片

(2)命令解析

         而内核的命令串为:root=/dev/mtdblock2 devfs=mount load_ramdisk=0 inti=/linuxrc console=ttyS0,115200 display=shp240

        root=告诉内核启动时使用设备/dev/mtdblock2 作为根文件系统。

        init=表示设置内核执行的初始化进程名为/linuxrc,Linux启动完毕右后首先执行根目录下的linuxrc,用来在安装过程中配置核心的程序,可以用来加载模块,挂载文件系统,创建文件夹,引导已安装的系统等。linuxrc文件中一般有条命令“exec /sbin/init”,表示开始系统的初始化进程。init程序在终结系统启动程序之前会衍生各种应用程序,并启动若干关键的软件组件。在busybox制作的根文件系统中,/sbin/init是/bin/busybox的符号链接,所以busybox是系统上执行的第一个应用程序,当busybox知道调用它的目的是要执行init,它立即跳转到init进程,进行以下工作:

  • 为init设置信号处理进程
  • 初始化控制台
  • 解析inittab文件
  • 执行系统初始化命令。缺省情况下运行初始化脚本/etc/init.d/rcS
  • 执行所有阻塞的(会导致init暂停的)inittab命令(动作类型:wait)
  •  执行所有仅执行一次的inittab命令(命令:once)
  • 一旦完成以上工作,init进程便会循环执行以下工作:

                 执行所有终止时必须重新启动的inittab命令(动作类型:respawn)

                 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)

 

(3)文件系统的类型

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第2张图片

所以制作文件系统之前,得根据项目需求选择对应的文件系统的类型,不同的文件系统有不同的特点,对启动速度,占用空间大小,读写权限等都有很大的影响。

 

2.rootfs裁剪

 

rootfs的裁剪主要包括两大部分:系统工具和库的裁剪,用户工具和库的裁剪,将根文件系统进行压缩;

这里先只讲系统工具和库的裁剪。

系统工具和库的裁剪

rootfs里面为了方便用户的使用,配置了很多系统工具和库,而项目可根据需要对此进行裁剪。

(1)shell工具和库

到buildroot目录下,执行make ARCH=平台 menuconfig,就可以通过图形化对需要的shell工具和库进行裁剪:

为了减小根文件系统的尺寸,在不影响功能的情况下,一些工具是可以删除的,比如:

调试工具:tcpdump,rz\sz,strace等;

性能测试工具:lmbench,sysstat,tiobench等;

冗余功能chattr,lsattr等;

其他:example等。

至于该menuconfig每个配置项的含义,可以参考一下附件四,地址如下:

 

然后根据提示进行裁剪,裁剪完以后,将.config覆盖到buildroot/configs/sun***_deforconfig,然后重新编译即可。

 

(2)busybox工具裁剪

系统的工具中有一部分的工具是busybox提供的,这部分工具裁剪要到相应的busybox目录进行裁剪。切换到buildroot/build/busybox-1.18目录,执行 make ARCH=平台 menuconfig,就能对busybox进行裁剪了,裁剪时将不需要的工具选项去掉即可:

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第3张图片

配置完成后,将.config覆盖buildroot/package/busybox/busybox-1.18.x.***.config

即可,推荐使用busybox的工具代替shell工具,毕竟busybox工具的尺寸较小,极限一般不会超过1M。

 

(3)C标准库的选择和裁剪

目前用gilbc还是比较多,但是glibc有着功能齐全的特点的同时也伴随着尺寸大的缺点,所以根据项目的不同可以选择不同的C标准库,这往往能减少根文件系统的尺寸,各个标准库的区别如下图:

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第4张图片

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第5张图片

而生成的函数库也有些未必在你的项目中能用到,根据你的项目可以对其进行裁剪,下面是对glibc库的总结:

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第6张图片

 

(4)系统库总结说明

BSP裁剪(6)rootfs裁剪--系统工具和库的裁剪_第7张图片

你可能感兴趣的:(Linux系统)