逸珺 發表於 2020-04-21 09:22:52
本文主要講述嵌入式Linux啟動時間優化的秘密,我們繼續上篇沒有講完的嵌入式Linux啟動時間優化方法,本文主要會講啟動腳本。想看上一篇的請查看本文結尾的連結。
啟動腳本
1.優化初始化腳本和系統啟動
有多種方法可以減少啟動應用程式之前執行啟動腳本中花費的時間:
僅在啟動必要的依賴項之後,儘快啟動應用程式。
簡化shell腳本
可以嘗試執行啟動腳本之前啟動應用程式
1.1.bootchart
如果想更詳細地了解用戶區的引導順序,則可以使用使用grabserial中的bootchart來實現,例如:
那麼如何配置並使用bootchart 呢?
在busybox中配置使用bootchartd(CONFIG_BOOTCHARTD = y)
通過命令行init = / sbin / bootchartd 引導您的開發板
將/var/log/bootlog.tgz從目標複製到開發主機
生成時間表:
cd bootchart-《version》
java -jar bootchart.jar bootlog.tgz
bootchart 參見 http://www.bootchart.org
1.2. systemd
如果將systemd用作初始化程序,則可以使用systemd-analyze。
http://www.freedesktop.org/software/systemd/man/systemd-analyze.html
1.3. init 進程
在所有依賴項啟動之後,應儘快啟動:
取決於您的init進程。在這裡,我們假設使用sysV init腳本。
init腳本按字母數字順序運行,並以字母開頭(K表示停止(殺死),S表示開始)。
將應用程式啟動腳本使用最小的號碼。
甚至可以用應用程式替換init!如果可以成為第一個啟動的應用程式,啟動速度無疑大大加快!
直接通過一個啟動腳本啟動所有服務(例如/etc/init.d/rcS)。這消除了對/ bin / sh的多次調用。
甚至可以直接在應用程式的C代碼中掛載文件系統:如
1.4 減少fork的使用
fork/exec系統調用開銷很大。故從Shell調用可執行文件的速度很慢。
即使BusyBox實現的shell中echo也會導致fork 系統調用!
在BusyBox配置中選擇Shells-》 Standalone shell,以使Shell儘可能調用小程序。
管道和反引號也由fork/exec實現。應減少它們在腳本中的使用。例:
cat /proc/cpuinfo | grep model
應修改為:
grep model /proc/cpuinfo
更詳細,請參考:
http://elinux.org/Optimize_RC_Scripts
又例如:
僅此一項優化就可以在ARM AT91SAM9263系統(200MHz)上節省87毫秒!
1.5 減小固件的尺寸
剝離可執行文件和庫,刪除僅用於開發和調試的ELF部分。strip命令由交叉編譯工具鏈提供。默認情況下在Buildroot中完成的。
superstrip超級剝離
http://muppetlabs.com/~breadbox/software/elfkickers.html。
使用strip可以剝離出Linux未用於啟動可執行文件的更多位。Buildroot停止支持它,因為它可能破壞可執行文件。 僅在保存一些字節至關重要時才嘗試。
還可以嘗試https://packages.debian.org/sid/mklibs上提供的mklibs:
mklibs產生精簡的共享庫,其中僅包含一組特定的可執行文件所需的例程。對於像OpenGL和QT這樣的大型庫確實很有用。它甚至可以在沒有原始碼的情況下工作。
在Yocto中可用,但在Buildroot中不可用(2019.02狀態)。
限制:mklibs可以刪除傾斜的庫(由應用程式「手動」加載),因為它看不到它們。
3.5.5 快速啟動畫面顯示
可以使用fbv顯示啟動畫面,
http://freshmeat.sourceforge.net/projects/fbv
使用armel,可以只使用我們的靜態編譯二進位文件:
https://github.com/bootlin/static-binaries/tree/master/fbv/
但是在MicrochipAT91SAM9263系統上很慢為878毫秒!
為了更快地執行此操作,可以轉儲幀緩衝區framebuffer中的內容:
fbv -d 1/root/logo.bmp
cp /dev/fb0/root/logo.fb
lzop -9/root/logo.fb
然後儘早在initramfs中將其複製回:
lzopcat/root/logo.fb.lzo 》 /dev/fb0
編輯連載推薦:嵌入式Linux啟動時間優化的秘密之一工具鏈/應用程式優化
編輯連載推薦:嵌入式Linux啟動時間優化的秘密之二文件系統
編輯連載推薦:嵌入式Linux啟動時間優化的秘密之三-內核
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴