嵌入式(八)——嵌入式Linux優(yōu)化

姓名:楊若婷? ? ? 學(xué)號(hào):19020100322? 學(xué)院:電子工程學(xué)院

轉(zhuǎn)自:https://blog.csdn.net/hpu11/article/details/80522774

【嵌牛導(dǎo)讀】嵌入式Linux優(yōu)化

【嵌牛鼻子】嵌入式Linux

【嵌牛提問(wèn)】可以從哪幾個(gè)方面考慮嵌入式linux系統(tǒng)的優(yōu)化?

【嵌牛正文】

嵌入式linux優(yōu)化,可以從三部分進(jìn)行考慮: bootloader,linux,根文件系統(tǒng)

1. bootloader

? ? uboot只是做系統(tǒng)啟動(dòng)過(guò)程中,所依賴的硬件初始化,為kernel的加載運(yùn)行做準(zhǔn)備,所以,bootloader在整個(gè)系統(tǒng)啟動(dòng)過(guò)程中只消耗1妙左右,相比較整個(gè)啟動(dòng)過(guò)程的10+, 20+妙可以忽略,甚至,對(duì)bootloader進(jìn)行優(yōu)化,毫無(wú)效果可言,簡(jiǎn)直是浪費(fèi)我們寶貴的時(shí)間。

2.? linux

? ? kernel是緊接著uboot執(zhí)行完之后執(zhí)行的,kernel的啟動(dòng)時(shí)間根據(jù)不同平臺(tái),不同廠家,不同版本的內(nèi)核,以及根據(jù)嵌入式產(chǎn)品的復(fù)雜程度,kernel的啟動(dòng)時(shí)間相差還是很大的,一般情況,內(nèi)核占據(jù)整個(gè)系統(tǒng)啟動(dòng)過(guò)程中幾秒到10幾秒。如果想要優(yōu)化kernel的啟動(dòng)時(shí)間,就要清楚的知道kernel啟動(dòng)過(guò)程中,都有哪些模塊啟動(dòng),并且這些模塊啟動(dòng)精確時(shí)間是多少,這樣就可以針對(duì)那些耗時(shí)長(zhǎng)的,或者沒有使用到的模塊進(jìn)行優(yōu)化。得到那些信息可以基本可以有兩種方法:

? ? 1) 使用dmesg記錄的后臺(tái)啟動(dòng)信息

? ? ? ? 編譯內(nèi)核的時(shí)候,設(shè)置CONFIG_PRINTK_TIME=y,這樣就可以在系統(tǒng)啟動(dòng)之后,在后臺(tái)終端使用dmesg命令,就可以得到帶有時(shí)間戳的信息記錄,我們通過(guò)分析這些信息,可以得到啟動(dòng)模塊,以及這些模塊啟動(dòng)過(guò)程中的耗時(shí)。

? ? 2)? 使用bootgraph.pl工具

? ? ? ? 編譯內(nèi)核的時(shí)候,設(shè)置CONFIG_PRINTK_TIME=y,CONFIG_BOOT_TRACER=y(如果內(nèi)核中有則設(shè)置,版本不同而已),在kernel正式啟動(dòng)時(shí),在uboot向kernel傳遞參數(shù),增加printk.time=1 和 initcall_debug兩個(gè)參數(shù),啟動(dòng)系統(tǒng),進(jìn)入系統(tǒng)的后臺(tái)終端,使用以下用以下命令進(jìn)行操作

$ dmesg > /tmp/boot.log

? ? 然后,將boot.log傳輸?shù)絧c上,并且將boot.log放到kernel的目錄下,就是剛才scripts/bootgraph.pl的同目錄

$ cat boot.log | perl scripts/bootgraph.pl > kernel.svg

? ? 使用瀏覽器打開得到的kernel.svg,如下圖,就可以一眼看到圖形化的kerlnel啟動(dòng)的詳細(xì)信息

? ? 這樣,就可以根據(jù)圖示的信息,使用make menuconfig重新配置kernel,該去除的去除,該模塊化的模塊化,重新編譯內(nèi)核,就可以將linux的啟動(dòng)耗時(shí)縮短,使我們的linux啟動(dòng)的時(shí)候,明顯的快很多。

3. 文件系統(tǒng) (只說(shuō)systemd管理系統(tǒng)的情況)

? ? 內(nèi)核啟動(dòng)到最后,就是將文件系統(tǒng)掛載,掛載文件系統(tǒng)后,還需要將文件系統(tǒng)中的服務(wù)策劃程序或者守護(hù)進(jìn)程啟動(dòng),這也會(huì)消耗一部分的時(shí)間,像linux優(yōu)化一樣,我們要找到需要優(yōu)化的部分,在使用systemd管理文件系統(tǒng)的,我們就可以使用systemdt提供的一個(gè)分析工具,就可以很塊的得到linux一樣的圖。

? ? 系統(tǒng)啟動(dòng)完成后,進(jìn)入系統(tǒng)的后臺(tái)終端:

$ systemd-analyze plot > boot.svg

? ? 將boot.svg傳輸?shù)絧c端,使用瀏覽器打開boot.svg,如下圖:

? ? 左邊空白部分就是kernel的啟動(dòng)時(shí)間,右邊有字的,就是啟動(dòng)時(shí)間,啟動(dòng)過(guò)程中耗時(shí),以及這些程序的狀態(tài),都可在這幅矢量圖上一眼看出。 我們也就可以根據(jù)上述圖標(biāo)信息,進(jìn)行對(duì)文件系統(tǒng)進(jìn)行改刪除的刪除,該禁止的禁止,縮短我們的啟動(dòng)時(shí)間。

針對(duì)Linux, 文件系統(tǒng)優(yōu)化過(guò)后,重寫加載到我們的嵌入式系統(tǒng)中,發(fā)現(xiàn),我們的系統(tǒng)啟動(dòng)過(guò)程飛的一樣完成了。

————————————————

版權(quán)聲明:本文為CSDN博主「香雨亭榭」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/hpu11/article/details/80522774

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容