imx6ull之uboot移植进入bootcmd输入不了信息卡死

用户53722026-02-05 00:19:4187

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)时的中断处理上。以下是可能的原因和解决方案:

可能的原因

  1. 中断处理问题

    • 在第一次自动启动时,中断处理可能没有正确初始化,导致在尝试输入命令时系统卡死。
    • 中断处理可能在第一次启动时被禁用或未正确配置,导致无法处理键盘输入。
  2. CPU复位问题

    • 第一次自动启动失败后,CPU复位可能修复了一些初始化问题,使得第二次启动时中断处理正常工作。
    • CPU复位可能重新初始化了一些硬件资源,使得键盘输入能够正常处理。
  3. 移植缺陷

    • 移植的U-Boot可能存在一些缺陷,导致在第一次启动时无法正确处理中断。
    • 可能需要检查U-Boot的移植代码,确保所有必要的初始化步骤都正确执行。

解决方案

  1. 检查中断初始化

    • 确保在U-Boot启动时正确初始化中断控制器。
    • 检查中断处理函数是否正确注册和配置。
  2. 调试信息

    • 在U-Boot启动时添加更多的调试信息,查看中断处理的状态。
    • 使用串口打印中断相关的寄存器值,查看中断是否被正确处理。
  3. 复位处理

    • 检查CPU复位后的状态,确保所有硬件资源都被正确初始化。
    • 比较第一次启动和第二次启动时的硬件状态,找出差异。
  4. 移植代码审查

    • 仔细审查U-Boot的移植代码,确保所有必要的初始化步骤都正确执行。
    • 检查是否有遗漏的初始化步骤或错误的配置。

具体步骤

  1. 检查中断控制器初始化

    void board_init_f(ulong dummy)
    {
        // 确保中断控制器被正确初始化
        init_interrupt_controller();
        // 其他初始化代码
    }
    
  2. 添加调试信息

    void interrupt_handler(void)
    {
        printf("Interrupt occurred\n");
        // 处理中断
    }
    
  3. 复位处理

    void reset_cpu(ulong addr)
    {
        // 确保复位后所有硬件资源被正确初始化
        init_hardware();
        // 其他复位代码
    }
    
  4. 移植代码审查

    • 仔细检查U-Boot的移植代码,确保所有必要的初始化步骤都正确执行。
    • 检查是否有遗漏的初始化步骤或错误的配置。

通过以上步骤,可以逐步排查和解决第一次自动启动时输入命令卡死的问题。希望这些信息对你有所帮助

1条评论
用户5372
用户5372
有没有人明白
点赞
评论