自用rk3568-firefly-itx-3568q核心板+fpga+自研底板,因底板所需外設、功能與原廠有較大差異,故裁剪相應sdk,編譯新的內核進行燒寫。然而在更改設備樹過程中kernel/drivers/media/i2c/fpga.c中的像素格式MEDIA_BUS_FMT_YUYV8_2X8誤改成MEDIA_BUS_FMT_YUYV8_1X16,故導致開發板上電掛掉,需重新燒寫原廠鏡像啟動板子,再通過ssh進行傳輸更改后的正確鏡像。在燒寫過程中遇到很多問題,差一點板子就變磚,簡單總結一下,便于后期備用,有遇到相同情況的也可以嘗試一下~
一、模式問題
需準備硬件:USB雙公頭一根(一端在PC機,另外一端在開發板的USB OTG口),12v電源
1.連接好電源和USB線后,電源燈亮,但是RKDevTool.exe顯示“識別不到設備”,換了一根usb也沒用,后來按了一下reset鍵,可以進maskrom模式(但是這種情況我幾個月才遇到過一次,太偶然了)
2.MaskRom
?模式是設備變磚的最后一條防線。強行進入?MaskRom
?涉及硬件操作,有一定風險,因此僅在設備進入不了?Loader
?模式的情況下,方可嘗試?MaskRom
?模式。進入?MaskRom
?的原理是人為的把 EMMC 的數據腳與地線短接,系統會認為 EMMC 數據出錯,從而清除 EMMC 數據。
連接好電源和USB線后,電源燈亮,但是RKDevTool.exe顯示“識別不到設備”,用firefly官方提供的說法,將EMMC附近的D0和GND 測試點對接,官方是要用鑷子短接,這邊為了方便焊出兩根線。
操作步驟如下:
-
設備斷開電源
-
使用雙公頭USB數據線連接設備和電腦
-
將兩根線的頭部接觸
-
設備插入電源
-
稍候片刻,之后松開線。
此時就會進入maskrom模式
二、燒寫問題
1.進入maskrom模式之后?,首先嘗試直接固件升級,但是大概率會顯示“固件升級失敗”,如果遇到這種情況,可以在RKDevTool.exe----->高級功能中下載對應的MiniLoaderAll.bin,而后選中讀取存儲列表,一般會顯示“SPINOR(√)”,再“擦除所有”,最后點一下emmc,選中“切換存儲”。便會顯示如下界面,即從emmc燒寫。
回到升級固件界面,選中對應的E:\3568資料\firefly_official\Ubuntu20.04\Public\kernel-5.10\ITX-3568Q_Ubuntu20.04-Xfce-r31113_v1.4.0a_240307\ITX-3568Q_Ubuntu20.04-Xfce-r31113_v1.4.0a_240307.img進行升級,片刻便會升級成功,如下
2.如果makrom模式燒寫不成功,有可能是emmc空間已滿,而系統鏡像太大,燒不進去,這種情況可以選擇直接下電,再上電,過30-60s后會自動識別為loader設備,此時進行燒寫便可以了
3.如果loader模式也燒寫不進去,可以選擇擦除flash,再燒RK356x_NorFlash2eMMCLoader_20211209.img和系統鏡像便可
4.當燒寫進去顯示
Bootdev(atags): mtd 2
GUID Partition Table Header signature is wrong: 0xA9425BF5A94153F3 != 0x5452415020494645
*** ERROR: Can't write GPT header ***
Backup GPT repair fail!
PartType: EFI
boot mode: recovery (misc)
FIT: No fdt blob
boot mode: None
Android 11.0, Build 2021.4, v2
Found DTB in boot part
Failed to read resource hdr
Failed to create resource list
Failed to load DTB
Failed to get kernel dtb, ret=-19
io-domain: OK
Model: Rockchip RK3568 Evaluation Board
rockchip_set_ethaddr: vendor_storage_write failed -5
rockchip_set_serialno: could not find efuse/otp device
no recovery key node
CLK: (sync kernel. arm: enter 816000 KHz, init 816000 KHz, kernel 0N/A)apll 816000 KHzdpll 780000 KHzgpll 1188000 KHzcpll 1000000 KHznpll 24000 KHzvpll 24000 KHzhpll 24000 KHzppll 100000 KHzarmclk 816000 KHzaclk_bus 150000 KHzpclk_bus 50000 KHzaclk_top_high 300000 KHzaclk_top_low 200000 KHzhclk_top 150000 KHzpclk_top 50000 KHzaclk_perimid 300000 KHzhclk_perimid 150000 KHzpclk_pmu 50000 KHz
Net:? ?No ethernet found.
Hit key to stop autoboot('CTRL+C'):??0
## Booting FIT Image FIT: No fit blob
FIT: No FIT image
ANDROID: reboot reason: "(none)"
optee api revision: 2.0
TEEC: blk_dread fail
TEEC: OpteeClientRkFsInit fail!
Can't read vboot flag
Android boot failed, error -1.
no mmc device at slot 1
no mmc device at slot 0
starting USB...
Bus dwc3@fcc00000: usb maximum-speed not found
Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
Bus dwc3@fd000000: usb maximum-speed not found
Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus dwc3@fcc00000 for devices... 1 USB Device(s) found
scanning bus dwc3@fd000000 for devices... cannot reset port 1!?
1 USB Device(s) foundscanning usb for storage devices... 0 Storage Device(s) foundDevice 0: unknown device
No ethernet found.
missing environment variable: pxeuuid
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default-arm-rockchip
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default-arm
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default
No ethernet found.
Config file not found
No ethernet found.
No ethernet found.
=>
這種情況是因為nor flash不為空,nor flash有一部分不完整的固件,通常是直接把固件燒到nor flash引起的
解決方法:
此uboot命令行中直接把nor flash擦除
=> mtd erase nor0
Erasing 0x00000000 ... 0x01ffffff (8192 eraseblock(s))
=> reboot
再重啟。
注:還有一種情況 是上電maskrom模式,而后按住recovery,再按一下reset,便可以進入loader模式。