環境: HelperA64開發板 Linux3.10內核 時間:2019.01.12 目標:修改開機bootlogo的BUG 問題: 1.24bit深度的bootlogo.bmp圖片會導致Qt5有色差,32位的圖片沒有色差。 2.將開機bootlogo圖片修改為32點陣圖片只有部分圖片能夠點亮屏就顯示 ...
環境:
HelperA64開發板
Linux3.10內核
時間:2019.01.12
目標:修改開機bootlogo的BUG
問題:
1.24bit深度的bootlogo.bmp圖片會導致Qt5有色差,32位的圖片沒有色差。
2.將開機bootlogo圖片修改為32點陣圖片只有部分圖片能夠點亮屏就顯示,大部分圖片沒有在開機uboot中顯示,只在內核中顯示。
方法:修改uboot使其能正常顯示
1.查找uboot開機顯示圖片的地方,尋找源碼BUG地方
2.通過bmp格式解析發現沒錯,調用開機bootlogo解碼和顯示主要如下
3.BUG原因:helperA64每次開機都會執行下圖代碼,這代碼是lzma解壓。部分圖片執行解壓很快,而大部分bmp圖片就在這裡卡住了多達四五秒時間等待,這是uboot快速啟動所不能接受的。
4.uboot開機時開始時為多線程,導致解析圖片產生資源衝突,如下是start.S中先調用sunxi_secendary_cpu_task然後是sunxi_third_cpu_task。
4.修改開機bootlogo調用,禁掉lzma解壓,修改如下圖使其24位和32點陣圖片能正常顯示
5.不足之處:對lzma解壓調用還沒理清楚,沒搞清楚為什麼大部分bmp圖片會造成多線程資源的搶占,又怎麼衝突的。學習內核和UBOOT任重而道遠啊~