最近群里有小伙用全志官方SDK, ?編譯了D1系統(tǒng)鏡像,說屏點(diǎn)不亮, 昨天我也編譯好了,沒有代碼里適配屏,也要這樣的操作一下。
準(zhǔn)備
開發(fā)板fex適配文件, 下載:
https://dl.sipeed.com/shareURL/LICHEE/D1/Lichee_RV/SDK/board
LicheeRV 86開發(fā)板 SDK編譯的系統(tǒng)鏡像屏不適配 原因分析
LicheeRV 86開發(fā)板是新出來的,全志官方SDK,未適配正常,但sipeed提供了 fex??適配
參考文檔https://www.freesion.com/article/42151346373/
driver連接硬件資源大概就這樣,mtk和qcom解析硬件資源直接就在廠商驅(qū)動(dòng)中通過dsti解析節(jié)點(diǎn),全志中間加了一層用于解析,解析的節(jié)點(diǎn)來自fex文件。基本是一樣,還是設(shè)備節(jié)點(diǎn),還是of api解析。
這個(gè)fex,應(yīng)該就是適配硬件的, 源碼應(yīng)該沒適配好
fex解說
這個(gè)網(wǎng)站上有詳細(xì)的介紹Fex
http://linux-sunxi.org/Fex_Guide#FEX_Description
也可以轉(zhuǎn)到
http://linux-sunxi.org
了解全志的sunxi
翻譯一下
一些翻譯和概括:
fex目錄:
lichee/tool/pack/chips/sun8iw11p1/config/a40-p1/sys_config.fex
fex是Allwinner的設(shè)備樹,用于配置gpio和一些配置,然后fex文件不是像dts一樣用于解析的,而是fex
編譯器編譯的。
然后后面英文有備注全志跟其他mtk和高通平臺(tái)不一樣,不依賴dts和dsti:
注意:主線Linux內(nèi)核不使用FEX / script.bin,而是依靠設(shè)備樹模型(.dtb文件)
--------------------
總結(jié)起來就是:
驅(qū)動(dòng) = driver code + fex配置
解決方法
官方文檔說:
如果燒錄的鏡像后綴與板子實(shí)際型號(hào)不符,下載對(duì)應(yīng)的 boot_package_XXX.fex 來覆蓋板級(jí)配置
覆蓋指令為:
sudo dd if=boot_package_XXX.fex of=/dev/sdX bs=1K seek=16400
小伙伴,不知道,怎么操作,這里吐槽一下,官方文檔寫的,很不詳細(xì),還有錯(cuò)誤
操作步驟
下面我把詳細(xì)步驟說一下:
1、系統(tǒng)鏡像燒錄到tf卡后,讀卡器插到linux開發(fā)機(jī),虛擬機(jī)的話先主機(jī)彈出tf卡設(shè)備(軟件操作)插電腦上,要點(diǎn)虛擬機(jī)訪問
2、插卡前 用命令
ls /dev/sd*
檢查下 設(shè)備號(hào)
3、插卡后,用命令
ls /dev/sd*
再檢查下 設(shè)備號(hào)
增加的,就是剛插入的tf卡設(shè)備號(hào)
sdx 要用查到設(shè)備號(hào)替換為sdb
4、dd燒錄fex
注意:LicheeRV 86開發(fā)板有兩個(gè)屏鏡,sipeed也提供了兩適配文件fex
標(biāo)配的是rgb
所以,執(zhí)行命令:
dd if=boot_package_86_480p_bgr.fex of=/dev/sdb bs=1k seek=16400
注:命令功能 把boot_package_86_480p_rgb.fex 寫seek=16400 開始扇區(qū),大小 1k
5、把卡插到LicheeRV 86開發(fā)板,啟動(dòng)LicheeRV 86開發(fā)板
6、網(wǎng)絡(luò)配置好操作參考:【平頭哥Sipeed LicheeRV 86開發(fā)板試用】連接網(wǎng)絡(luò)
7、測(cè)試屏,檢查是否適配成功
查看屏信息命令cat /sys/class/disp/disp/attr/sys
root@MaixLinux:~# cat /sys/class/disp/disp/attr/sys
screen 0:
de_rate 300000000 hz, ref_fps:60
mgr0: 480x480 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
lcd output backlight( 50) fps:59.5 esd level(0) freq(60)pos(0) reset(0) 480x 480
err:0 skip:314 irq:1870259 vsync:0 vsync_skip:0
BUF enable ch[1] lyr[0] z[16] prem[N] a[globl 255] fmt[ 0] fb[ 480, 480; 480, 480; 480, 480] crop[ 0, 0, 640, 240] frame[ 0, 0, 480, 480] addr[ffe00000, 0, 0] flags[0x 0] trd[0,0]
一切正常
運(yùn)行命令:
fbtest
可以看到條紋
屏幕彩條測(cè)試:
echo 1 > /sys/class/disp/disp/attr/colorbar
清除屏幕布彩條
echo 0 > /sys/class/disp/disp/attr/colorbar
用 ts_test進(jìn)行觸摸測(cè)試, 點(diǎn)屏,終端會(huì)打印坐
root@MaixLinux:~# ts_test
31928.017458:?????67?????45??????0
31928.143684:??????0??????0??????0
31928.570296:????226?????55??????0
31928.673580:??????0??????0??????0
31928.950407:????428?????66??????031929.007613: 0 0 0
..........
到 /root目標(biāo)ls查看
root@MaixLinux:~#?ls
app_sispeed.aot
render_example_d1_allwin.wasmrender_example.wasm
看到有3個(gè)可以waft程序
輸入命令
waft_app render_example_d1_allwin.wasm
可以看到如下效果,我們屏已經(jīng)適配好了
總結(jié)
全志fex屏適配方法,很好用,比修改代碼適配方便多,改代碼不一定改對(duì),群里小伙伴,改了很久都沒適配成功,編譯系統(tǒng)鏡像也是很費(fèi)時(shí),給全志點(diǎn)贊