使用wiki頁面Linux_SDK鏈接下載得到的old版本SDK壓縮包。
按照創建ubuntu rootfs和打包固件的教程製作的Linux固件,實際使用發現按住Recovery無法進入Laoder模式,log中輸出包含
download key pressed... entering recovery mode!
而Linux固件沒有Recover分區,因此轉而進入正常啓動模式。還好進入系統後可以使用reboot參數進入。
sudo reboot loader
loader是作爲可選參數傳入,推測進入loader的相應驅動是在kernel中實現。
回到正題,尋找uboot中關於按鍵檢測和啓動模式的關鍵地方:
board_late_init(void)->
setup_boot_mode(void)->
rockchip_dnl_mode_check(void)->這條函數下一條是更新啓動模式並執行,但實際需要修改的是這條;
rockchip_u2phy_vbus_detect()->
跟蹤發現這條函數始終返回0,查找源碼有兩處定義,但跟蹤發現卻都沒有運行,仔細尋找發現頭文件中有這樣一處定義:
static inline int rockchip_u2phy_vbus_detect(void)
轉到頭文件查看
#if defined(CONFIG_PHY_ROCKCHIP_INNO_USB2) || defined(CONFIG_ROCKCHIP_USB2_PHY)
int rockchip_u2phy_vbus_detect(void);
#else
static inline int rockchip_u2phy_vbus_detect(void)
{
return -ENOSYS;
}
#endif
搜索源碼,發現CONFIG_PHY_ROCKCHIP_INNO_USB2使用較多,通過menuconfig查找並使能宏和相關依賴,編譯燒入後OTG HOST檢測正常,再OTG口連接了HOST的情況下按住Recovery重啓可正常進入loader模式。