小白自制Linux開發板 九. 修改開機Logo

淡墨青雲發表於2021-10-29

許久不見啊,今天我們繼續來修改我們的系統。

通過前面的幾篇文章我們已經能輕鬆駕馭我們的開發板了,但是現在都是追求個性化的時代,我們在開發板上打上了自己的Logo,那我們是否可以改變開機啟動的Logo呢,那就開始吧

本篇參考了

【正點原子】I.MX6U 修改開機進度條及核心logo參考手冊V1.0

1. 顯示Linux核心Logo

我們知道Linux核心是預設帶啟動Logo的,對就是那個小企鵝,關注過我在哇酷網站同步更新的帖子( https://whycan.com/t_7275.html) 的同學應該知道,

這個Logo檔案在哪呢?就在下面的路徑中(因為我已經使用了新的Logo所以,請忽略復件二字),而且大家發現沒有,這個logo的副檔名是*.ppm

 那麼這應該如何顯示呢,我們需要在

make menuconfig

中進行配置


Device Drivers  --->
    Graphics support  --->
       [*] Bootup logo  --->
            ........
           [*] Standard 224-color Linux logo

然後重新編譯核心,不出意外就可以看到對應的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);
通過日誌輸出,logo_lines 為 17 ,DIV_ROUND_UP() 為向上取整。
而vc->vc_bottom 計算方法如下:
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卡,如果不清楚怎麼操作,可以去看第二篇。


 

 好了,又水完了一篇

 

相關文章