imx6ull之uboot移植进入bootcmd输入不了信息卡死
1、git clone https://gitee.com/weidongshan/uboot-imx(韦东山老师官方移植uboot适配phy芯片的仓库)
2、克隆到本地的uboot工程make defconfig、 make all编译
3、通过100ask_imx6ull_flashing_tool_v4.0.exe工具将编译生成的u-boot-dtb.imx烧写到开发板里
4、boot from emmc 上电观察mobax串口打印:
uboot第一次的auto boot失败,内容如下:

立即自动第二次auto boot,第二次能成功,并引导内核,进入linux系统
但是!我在第一次auto boot之前hit any key to stop autoboot,进入bootcmd
=>
无论我输入什么信息,立刻卡死,且该现象不是偶发现象,每次在第一次auto boot之前进入bootcmd都会如此!但是uboot的自动启动第二次auto boot之前进入bootcmd就可以正常输入信息了,很奇怪?
是第一次autoboot之后触发boot abort之后,第二次的autoboot会进入不同的boot分支路径吗?
还是移植的uboot本身有缺陷,boot abort进行cpu reset能修复这个缺陷?
浏览 (87)
点赞 (1)
收藏
AI智能回答
根据你的描述,问题可能出在第一次自动启动(autoboot)时的中断处理上。以下是可能的原因和解决方案:
可能的原因
-
中断处理问题:
- 在第一次自动启动时,中断处理可能没有正确初始化,导致在尝试输入命令时系统卡死。
- 中断处理可能在第一次启动时被禁用或未正确配置,导致无法处理键盘输入。
-
CPU复位问题:
- 第一次自动启动失败后,CPU复位可能修复了一些初始化问题,使得第二次启动时中断处理正常工作。
- CPU复位可能重新初始化了一些硬件资源,使得键盘输入能够正常处理。
-
移植缺陷:
- 移植的U-Boot可能存在一些缺陷,导致在第一次启动时无法正确处理中断。
- 可能需要检查U-Boot的移植代码,确保所有必要的初始化步骤都正确执行。
解决方案
-
检查中断初始化:
- 确保在U-Boot启动时正确初始化中断控制器。
- 检查中断处理函数是否正确注册和配置。
-
调试信息:
- 在U-Boot启动时添加更多的调试信息,查看中断处理的状态。
- 使用串口打印中断相关的寄存器值,查看中断是否被正确处理。
-
复位处理:
- 检查CPU复位后的状态,确保所有硬件资源都被正确初始化。
- 比较第一次启动和第二次启动时的硬件状态,找出差异。
-
移植代码审查:
- 仔细审查U-Boot的移植代码,确保所有必要的初始化步骤都正确执行。
- 检查是否有遗漏的初始化步骤或错误的配置。
具体步骤
-
检查中断控制器初始化:
void board_init_f(ulong dummy) { // 确保中断控制器被正确初始化 init_interrupt_controller(); // 其他初始化代码 } -
添加调试信息:
void interrupt_handler(void) { printf("Interrupt occurred\n"); // 处理中断 } -
复位处理:
void reset_cpu(ulong addr) { // 确保复位后所有硬件资源被正确初始化 init_hardware(); // 其他复位代码 } -
移植代码审查:
- 仔细检查U-Boot的移植代码,确保所有必要的初始化步骤都正确执行。
- 检查是否有遗漏的初始化步骤或错误的配置。
通过以上步骤,可以逐步排查和解决第一次自动启动时输入命令卡死的问题。希望这些信息对你有所帮助
1条评论
请 登录后发表观点
有没有人明白
点赞
评论