海思3536内核裁减方法(详解)


前言

内核的裁减主要有两个思路:

  1. 通过控制内核的编译过程,让更少的代码编译进内核,以减少内核目标二进制文件的体积;

  2. 通过使用更高压缩率的压缩方法,让内核镜像文件更小。
    内核源代码中除了系统运行所必须的核心代码之外,还包含了各种各样的外部设备驱动、文件系统,以及一些跟某种特性相关的代码。而这些代码,在我们的业务环境中,并不都是必须的。我们将这些不必要的内容,通过配置选项进行筛选。

  3. 进入内核源代码目录,打开内核配置菜单,并对菜单上的选项进行配置,配置完成后编译:

    $ cd osdrv/opensource/kernel/linux-3.10.y/
    $ cp arch/arm/configs/hi3536_full_defconfig .config
    $ make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- menuconfig //打开内核配置菜单
    $ make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- uImage //编译内核


一、内核裁减

  1. 一些特殊功能和特性的支持
    1.1)POSIX标准的异步I/O操作支持:
    若使用了aio_read之类的函数(不要关闭)。
    General setup  --->
    -*- Configure standard kernel features (expert users)  --->
    [ ] Enable AIO support 
    
    1.2)系统的extended profiling(剖面)的支持:
    profiling(剖面图)是一个工具来扫描、统计和测评计算机性能的工具。对多数用户而言,可以关闭该选项。
    General setup  --->
    [ ] Profiling support
    
    1.3)Disk quotas支持:
    用于支持在多用户系统下,设置每个用户对硬盘的使用空间,可以关闭。
    File systems  --->
    [ ] Quota support
    
  2. 网络支持
    2.1)无线网络部分(可以根据实际需要,选择支持或者不支持):
    关闭对IEEE802.11 协议公共类库的支持和对 Linux wireless LAN配置API的支持。
    [*] Networking support  --->
    -*-   Wireless  --->
    < >   cfg80211 - wireless configuration API
    
    2.2)关闭所有IEEE802.11协议相关的无线网络设备驱动:
    Device Drivers  --->
    [*] Network device support  --->
    [ ]   Wireless LAN  ---> 
    
  3. 设备驱动支持
    3.1)nand flash 驱动的支持:
    如果系统不使用nand flash,可以将 nand flash的驱动去掉。另外,yaffs文件系统只能应用在nand flash上,去掉nand flash 驱动,意味着你不会使用yaffs文件系统。
    去掉nand flash驱动支持:
    Device Drivers  --->
    <*> Memory Technology Device (MTD) support  --->
    < >   NAND Device Support  --->
    
    去掉yaffs文件系统支持:
    File systems  --->
    [*] Miscellaneous filesystems  --->
    < >   YAFFS2 file system support
    
    3.2)输入设备驱动相关的支持
    可以不选该选项。
    Device Drivers  --->
    Input device support  ---> 
    Hardware I/O ports  --->
    < > Gameport support 
    
    3.3)USB相关的驱动
    U盘的支持,若不需要可以不选。
    Device Drivers  --->
    [*] USB support  --->
    < >   USB Mass Storage support
    
  4. 文件系统类型支持
    4.1)Ext2文件系统的支持:
    默认情况下,内核会自动把它选上。把下面选项关闭,可以去掉对Ext2的支持。
    File systems  --->
    < > Second extended fs support
    
    4.2)Ext3文件系统的支持:
    内核在默认情况下,通常都会支持Ext3。关闭下面选项,可以去掉对 Ext3 的支持。
    File systems  --->
    < > Ext3 journalling file system support
    
    4.3)Ext4文件系统的支持:
    内核在默认情况下,通常都会支持Ext4。关闭下面选项,可以去掉对Ext4的支持。
    File systems  --->
    < > The Extended 4 (ext4) filesystem
    
    4.4)XFS文件系统的支持:
    内核在默认情况下,通常都会支持XFS。关闭下面选项,可以去掉对XFS的支持。
    File systems  --->
    < > XFS filesystem support
    
    4.5)JAFFS2文件系统(一般都不需要关闭):
    *注意:多数情况下,我们都需要支持JFFS2,只有在明确不需要JFFS2的情况下,才关闭下面选项。
    File systems  --->
    [*] Miscellaneous filesystems  --->
    < >   Journalling Flash File System v2 (JFFS2) support
    
    4.6)不支持cramfs:
    Cramfs文件系统是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩。
    Cramfs的使用和 initrd/initial ram filesystem 密切相关,如果系统不使用 Cramfs,可以同时关闭 initrd/initial ram filesystem 选项:
    File systems  --->
    -*- Miscellaneous filesystems  --->
    < >   Compressed ROM file system support (cramfs)
    
    4.7)不支持SquashFS:
    SquashFS是另一种可用于 flash 设备的Linux只读文件系统。squashfs保存了全部的32位UID/GIDS 和文件的创建时间,支持多达4G的文件系统,squashfs使用简单,响应速度快。
    File systems  ---> 
    [*] Miscellaneous filesystems  ---> 
    < >   SquashFS 4.0 - Squashed file system support
    
    4.8)不支持UBIFS:
    如果不使用 UBIFS, 可以关闭。
    File systems  ---> 
    [*] Miscellaneous filesystems  ---> 
    < >   UBIFS file system support
    

二、内核镜像文件的压缩方式

  1. Linux内核编译生成二进制文件之后,需要通过某种压缩模式,将庞大的二进制文件压缩成体积更小的镜像文件。对此,linux 3.4.y 内核提供了多种压缩方式:Gzip,LZMA 和 LZO:
    Gzip: linux内核镜像默认的、也是最经典的压缩模式。它在压缩率和解压速度上,保持了最佳的平衡。
    LZMA: LZMA是linux 内核新近才支持的压缩模式,相比另外两种压缩模式,它具有最高的压缩率(同样文件,通过LZMA压缩后的体积通常只有Gzip的70%),但是压缩和解压缩的速度要差一些。适用于spi flash 大小非常有限的场合中。
    XZ: 使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。LZMA2 是 LZMA 的改进版本,相对于 LZMA,LZMA2 增进了 encoder 和 decoder 的实现,并改善了对多线程的支持。
    LZO: 这种压缩方式压缩率最低,但是压缩和解压的速度最快。(目前该算法在3.4内核中还不完善,使用该压缩算法会有风险,所以目前并不使用)
  2. 具体的选择方法(以选择LZMA模式为例):

    General setup —>
    Kernel compression mode (LZMA) —>
    ( ) Gzip
    (X) LZMA
    ( ) XZ
    ( ) LZO

总结

  1. 以上内核裁减的方法,大家可根据实际需要来进行,切勿照本宣科!!!
  2. 建议最好还是先整体编译一次osdrv后再做裁减,若编译osdrv遇到问题时可参考《海思SDK安装并编译osdrv问题汇总
  3. 若按照以上方法裁减,大概内核可以减小 800KB左右。
  4. 重点提醒: 若板子已经在运行内核了,而又需要重新裁减无线网络(见第二小节)的,在重新编译完内核后,需要再执行 make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- modules 来更新内核中 drivers/net/ethernet/stmmac/stmmac.ko 的驱动。此时,先不要将新的内核更新到板子,在运行旧内核时把这个新的 stmmac.ko 替换到板子的根目录下的( /hitoe/ ),然后更新新的内核后,再重启板子,就能正常使用了。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积步千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值