【GCC】Lost weight for firmware Image


最近上頭圖發奇想,我們的程式又得瘦身了。不過我們不是用Linux,很多都要自己來。分析一下Linux常用的瘦身方法,看一下我們的限制在那邊。

【目前搭配 strip/objcopy/zip】
  • 目前壓縮方式
    - objcopy script: Makefile -> x86/Linksys
    - 之後回到Makefile作壓縮,除了boot區段,壓後面區段。
  • 目前解壓縮方式
    x86/init.c 找到 zip相關function就是作解壓縮。
  • 實驗結果
    ldx(238k)-> objcopy(113k) -> compressed(61k)
  • 補充: 用objcopy作strip與抽出執行碼
    - objcopy --strip-all --input-target=elf32-i386 --output-target=binary --verbose $src $dest
    - http://www.cmlab.csie.ntu.edu.tw/~daniel/linux/
  • 補充gzip使用方式: gzip -c $src > $dest
    - http://www.lslnet.com/linux/f/docs1/i30/big5239887.htm
【考慮方式】
  • lzma/SquashFS3.4
    - mksquashfs $src $dest
    - 官網 http://www.squashfs-lzma.org/
    - SquashFS 於 linux 2.6.27 內建於 linux
    - Set INITRAMFS_COMPRESSION_LZMA(1)
  • 因為我們bin file已經很小了(under 64k),做完實驗,壓起來頂多省1k上下而已。

【Action Items】

  • 用Hex editor看firmware image,drop useless static define in your code。
【參考】
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com