嵌入式Linux系统Bootloader启动调试技术(回顾)
2015-07-17 22:56
459 查看
嵌入式系统搭建过程中,对于系统平台搭建工程师最初的一步通常是移植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 等) ,两个调试技术都有效。
(作者 冯青华 信庭嵌入式工作室- 主管)
<转载请注名来路>
。(作者通过这种方法调试成功过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 等) ,两个调试技术都有效。
(作者 冯青华 信庭嵌入式工作室- 主管)
<转载请注名来路>
相关文章推荐
- CentOS7开发环境搭建
- CentOS 5/6 安裝 GNOME 與 KDE 桌面環境
- 【Qt移植到linux】问题6 file not recognized is a directory
- hugepages大叶内存
- linux内核sk_buff的结构分析
- linux网络协议栈结构
- 各种Linux内核
- linux内核升级图文攻略
- LINUX之文件解压与压缩汇总
- User mode Linux
- Linux GCC常用命令
- 嵌入式linux之按键驱动,异步通知
- Linux下多线程的重要知识点
- linux重定向,将输出写入txt文件
- 每天一个Linux命令-5(tail)
- 每天一个linux命令(4):mkdir命令
- 防止ssh暴力破解linux密码
- Linux(定时任务)
- [献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南。
- <七> Linux 文件与目录管理