許久不見啊,今天我們繼續來修改我們的系統。
通過前面的幾篇文章我們已經能輕松駕馭我們的開發板了,但是現在都是追求個性化的時代,我們在開發板上打上了自己的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卡,如果不清楚怎么操作,可以去看第二篇。
好了,又水完了一篇