imx6q LINUX 啟動時間優化

2021-08-14 23:13:33 字數 1206 閱讀 8044

1 u-boot的優化

1 首先去掉無關緊要的串列埠資訊

2 將config_bootdelay改為0

3 去掉一些不用的驅動,例如spi、usb、hdmi等等

4 關閉config_cmd_net

5 u-boot會重複初始化mmc,修改do_mmc_dev

2 kernel的優化

1 首先開啟config_printk_time,這樣每條printk的語句都會在前面列印乙個時間,這樣我們就可以很清楚的知道執行到每一條列印資訊的時候的時間了。(優化完,正式發布的時候關閉,列印時間本省也會浪費時間的)

2 在bootargs中增加initcall_debug=1,這樣kernel啟動後每呼叫驅動的init函式,都會將消耗的時間列印出來,這樣我們可以將消耗時間長的初始化列印出來,進行優化。

3 去掉不需要的驅動。

4 將printk的列印級別調高,減少列印的資訊。如果我們想看全部的列印資訊,可以在系統啟動後通過dmesg命令檢視所有的列印資訊。

5 對於初始化中一些小於10 毫秒的sleep,由msleep改為mdelay,因為msleep會讓出cpu的占用,而6q是100hz,也就是說最快排程一次也很定要大於10ms,所以用mdelay會更快些。

6 對於分配一些很大的記憶體用於dma,通過dma_alloc_writecombine分配時間會很長,可以在setup_arch函式中通過alloc_bootmem來預留一塊記憶體。

7 對於初始化中用時比較長,但是不一定馬上就需要的操作,可以移到open的時候執行,或者在初始化的時候開啟乙個工作佇列,在工作佇列中處理。

8 在bootargs中增加 rootflags=data=writeback,這樣載入rootfs的時間會快些。

3 init程序的優化

initlog列印資訊的時間比較長,可以將不需要的資訊注釋掉。

console_init 函式會找有效的控制台串列埠,這個函式可以改為直接為console_dev賦值為定義的串列埠。

init程序會呼叫/etc/rcs.d目錄下s***xx的指令碼檔案(s開頭,然後是資料,之後是名稱)。我們可以將不需要的指令碼檔案直接去掉,這樣也可以節約不少時間。

4 驅動的優化

對於一些不是馬上就要用到的驅動,可以編譯成ko檔案,放在我們的主介面啟動後在載入,或者在需要呼叫的時候在載入。

5 啟動指令碼的優化

可以將我們主介面盡可能提前啟動,將一些不是很緊急需要的指令碼放到後面來啟動。

啟動時檢查

dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 spring 初始化完成,以便上線時,能及早發現問題,預設check true 可以通過check false 關閉檢查,比如,測試時,有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動。另外,如果你的 spring 容器...

servlet啟動時載入

servlet預設是在第一次訪問的時候建立的物件。servlet啟動時載入,就是讓 tomcat 伺服器啟動的時候建立servlet的物件 servlet物件是第一次被訪問的時候會被建立的,init方法就會執行。假設在init方法中做了一些比較耗時的操作 比如 載入了一些配置檔案並且解析可能需要花費...

IMX6ULL啟動流程

假設板子設定為sd tf卡啟動,boot rom程式會做什麼?把程式從sd tf卡讀出來,執行。從 讀?從sd tf卡讀,這需要先初始化sd tf卡 根據efuse或gpio的設定初始化sd tf卡。讀到 去?讀到記憶體即ddr去,這需要先初始化ddr。除了初始化啟動裝置 初始化ddr,還需要初始化...