使用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模式。