許久不見啊,今天我們繼續來修改我們的系統。
通過前面的幾篇文章我們已經能輕鬆駕馭我們的開發板了,但是現在都是追求個性化的時代,我們在開發板上打上了自己的Logo,那我們是否可以改變開機啟動的Logo呢,那就開始吧
本篇參考了
【正點原子】I.MX6U 修改開機進度條及核心logo參考手冊V1.0
1. 顯示Linux核心Logo
我們知道Linux核心是預設帶啟動Logo的,對就是那個小企鵝,關注過我在哇酷網站同步更新的帖子( https://whycan.com/t_7275.html) 的同學應該知道,
這個Logo檔案在哪呢?就在下面的路徑中(因為我已經使用了新的Logo所以,請忽略復件二字),而且大家發現沒有,這個logo的副檔名是*.ppm
那麼這應該如何顯示呢,我們需要在
make menuconfig
中進行配置
然後重新編譯核心,不出意外就可以看到對應的Logo檔案了,如果不顯示,可以通過工程清理命令 make clean 清理一下核心程式碼,然後重新編譯。
2.製作Logo檔案
小企鵝已經顯示,但是明顯還不夠個性呀,怎麼辦?當然是自己製作啊,但是我們通過常規軟體只能做出*.jpg、*.png之類的圖片,但是那裡面的logo是*.ppm,直接手動改副檔名肯定是不對的,那就要藉助一個特殊的圖片轉換工具netpdm
安裝netpdm:
sudo apt-get install netpbm
這個工具可以把png圖片轉換為ppm格式,使用方式如下
pngtopnm logo-linux.png > logo-linux.pnm #將png圖片轉成pnm pnmquant 224 logo-linux.pnm > logo-linux224.pnm #將pnm圖片的顏色數限制在224色 pnmtoplainpnm logo-linux224.pnm > logo_linux_clut224.ppm #將pnm圖片轉換成我們需要的ppm
這裡需要注意一下logo-linux.png 尺寸一定要小於和等於當前螢幕的尺寸,我們這裡的logo大小是240*135 ,也就是那個tft螢幕的大小。否則會報錯(其實等於也就是全屏顯示有的時候也會報錯,但是我們後續會處理)
得到ppm圖片以後,我們就可以當前logo複製到前面提到的Linux核心存放logo的資料夾下,注意如果以後需要那個小企鵝,就需要備份一下,然後貼上我們自制的logo,替換原有的logo。
3.修改程式碼
替換logo以後,如果直接編譯核心檔案,大概率不會顯示Logo檔案,並且會在啟動日誌中顯示如下報錯資訊
fbcon_init:disable boot-logo(boot-logo bigger than screen)。
我們製作的圖片大小和螢幕是一致的呀,為啥會報錯呢,先來分析報錯出處,在/linux-5.7.1/drivers/video/fbdev/core/fbcon.c 檔案的fbcon_prepare_logo()函式中。
logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
vc->vc_bottom=info->var.yres(螢幕高度)/vc_font.height;
vc->vc_bottom輸出為 16
不明白為什麼會這樣計算,然後通過下面比較
這樣自然就會載入失敗。過多的原理不想去深究,那我們怎麼改呢,簡單,我們改一下Logo_lines的計算方式:
logo_lines = DIV_ROUND_UP(logo_height, (vc->vc_font.height+1));
對,你沒看錯就是在DIV_ROUND_UP() 函式第二個引數加了個1 ,然而我在這裡吧啦吧啦了半天
4. 展示
最後到喜聞樂見的展示環節了
我們可以看到啟動Logo是顯示了,但是下面有一行是被載入日誌給覆蓋了,這個怎麼處理呢,墨雲暫時還沒有辦法,後續如果有進展,會在第一時間更新,這裡還請大佬們指點一下。
5. 修改u-boot中的Model欄位
我們來改一個與本節關係不大,而且不易發覺的地方,那就是u-boot中的Model 欄位,畢竟我們要武裝到牙齒嘛。
這個其實只需要修改u-boot專案中的arch/arm/dts/suniv-f1c100s-licheepi-nano.dts 裝置樹檔案就行,是的u-boot中也有對應的裝置樹檔案。
修改根節點下面的model欄位,編譯u-boot,重新燒寫到tf卡,如果不清楚怎麼操作,可以去看第二篇。
好了,又水完了一篇