嵌入式Linux系统Bootloader启动调试技术(回顾)

时间:2023-01-23 20:16:17

    嵌入式系统搭建过程中,对于系统平台搭建工程师最初的一步通常是移植Bootloader ,当然移植有几个级别,通常最常见的是参考的EVM 的硬件有了修改(如更改了FLASH ,更改了SDRAM 、DDR SDRAM 等),并且是初次调试硬件,更大的困难是公司为节省成本不打算买上万的EVM 开发板,或者EVM 开发板需要license 才能购买,这时移植Bootloader 是比较难做的,不过也不是没有方法,最有效的有两个--点灯和串口打印 。(作者通过这种方法调试成功过IXP2400(Xscale) 的Redboot 、EP9307(ARM9) 的U-boot 等Bootloader )

    Bootloader 调试技术- 点灯 ,当烧写好Bootloader ,启动Bootloader ,肯定是从一个固定的地址开始执行程序,最初的程序是从FLASH 中读取执行的,有些处理器是直接使用FLASH 地址,有些会影射到FLASH 地址,此时SDRAM 可以认为没用到,如何确认程序有没有直接执行,通常用点灯来验证,在Bootloader 入口代码段尽量靠前初添加点灯代码(使用GPIO 控制),跟踪代码的执行,如果确认点灯代码没问题,程序没执行,那可能是启动地址没有指向FLASH 地址,硬件晶振没起振,硬件IC 电源供电问题,硬件IC 引脚接地问题,CPU 配置字问题(如启动模式),CPLD 时序调节问题等等,这需要硬件和软件工程师联合调试(这需要团队精神)。当然如果移植Bootloader 的工程师做过硬件那是再好不过的。所有的问题排查和解决之后,点灯成功是种必然。

    Bootloader 调试技术- 串口打印 ,点灯成功之后就可以对重要的配置参数跟踪调试,比较重要的是程序跳转到SDRAM 执行( 重点是SDRAM 时序参数和clk 配置正确) ,而后就需要打通串口,打通串口需要对UART 参数进行正确配置,测试用输出字符函数(这里可没printf() 函数可用),通常点灯成功之后打通串口相对容易,这里重点是使用串口调试程序,在printf() 函数可用之前使用低级别的串口输出函数实现程序的跟踪调试(通常是调试汇编代码),在printf() 函数可用之后使用printf() 调试代码。

    如上是Bootloader 调试过程中最重要的两个调试技术,灵活使用将带来工作效率的提升,不管是U-boot 、Redboot 还是厂商专有的Bootloader( 如rrload 、vivi 等) ,两个调试技术都有效。

      (作者 冯青华 信庭嵌入式工作室- 主管)
               <转载请注名来路>