信庭嵌入式工作室-Linux系统Bootloader启动调试技术

嵌入式系统搭建过程中,对于系统平台搭建工程师最初的一步通常是移植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 等) ,两个调试技术都有效。

(作者 冯青华 信庭嵌入式工作室- 主管)

<转载请注名来路>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 23:27:04

信庭嵌入式工作室-Linux系统Bootloader启动调试技术的相关文章

信庭嵌入式工作室-Linux系统Bootloader简介(回顾)

支持Linux的Bootloader比较多,发展到2010年,出现了一些必然的结果,有些Bootloader已经消失,有些Bootloader被取代,有些Bootloader被合并,有些虽然在发展,不过已退居一个偏僻的角落.现在就主流的或者说应用的有点广泛的Bootloader做个介绍. GRUB/GRUB2:GRUB是主要针对x86系列处理器的Bootloader,同时支持服务器级PowerPC/MIPS处理器,曾经作为LILO(原Linux + x86的主流Bootloader)的后继者出现

信庭嵌入式工作室-简介

信庭团队具备嵌入式操作系统(Vxworks.Linux.uC/OS-II.WindowsCE 5.0/6.0 )工程实践经验,从事过CPLD/FPGA (使用VHDL硬件编程语言) .MCU (AT89S52).DSP (TI F2407/C5402/F28335).CKCORE (Motorola IS1526).PowerPC(Freescale MPC8540).ARM (Freescale M9328MX1/IntelXscale IXP240 0/TI Davinci DM6446/C

信庭嵌入式工作室-老冯终生的遗憾

未能当兵,老冯终生的遗憾. (作者 冯青华 信庭嵌入式工作室-主管) <转载请注名来路> 版权声明:本文为博主原创文章,未经博主允许不得转载.

信庭嵌入式工作室-互联网+五棵松黑车的一次对话

引用:"人老了!?,喜欢早晨5:00,买5个烤肉串,看五道口–宇宙中心的集市,看美女散场,看专车(滴滴).TAXI(市政).黑车(民间)抢生意,看TAXI的拒载.看专车确认身份.看黑车揽客,一切杂乱而有序,偶尔还有跑车飞过,于是猜想这里也许是海天盛宴的延续 "- 正文: 每当面对黑车,思想总是很复杂的,对于服务态度非常好的会夸奖他们,对于服务态度差的,如果黑车了还NB,不好意思我就会动手了,黑车NB,可能有黑警的背景,不过我向来不忌讳这个.6月6号在五棵松经历了一回,态度恶劣,我打了一

信庭嵌入式工作室-互联网+的交流

06月04日 06:23 [消息来自安卓] 你好,个人对嵌入式和硬件很感兴趣.希望交流一下- 06月04日 13:14 你好,幸会.因不用微信,无QQ,希望有机会碰面聊,电话:13522608137,我在五道口附近. 06月04日 14:31 [消息来自安卓] 看了您的介绍,感觉是个技术大拿,性情中人.小弟不才,略做过2年嵌入式,后来又做手机平台开发.android开发等.现在金融公司混.内心觉得如果创业的话,走硬件路子比较合适,所以对嵌入式技术很看好 06月04日 15:31 嵌入式技术还算主

详解linux系统的启动过程及系统初始化

一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其 BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab,其进程流 程图如下: 二.剖析详细启动过程 ⑴. POST开机自检:电脑主机打开电源的时候,随后会听到滴的一声,系统启动开始了开机

Linux系统快速启动方案

=========================        基本常识       ========================= Linux系统基本启动流程: 1. CPU从ROM(如果有的话)的0x0地址开始读取代码,执行loader: 2. Loader初始化ram,从rom中拷贝uboot或kernel的镜像到ram的指定地址并执行: 3. Uboot(如果有)拷贝kernel镜像和dtb文件到ram的指定地址,并运行kernel: 4. 设置bootargs会被覆盖,kerne

Linux系统开机启动原理

我理解的linux系统开机顺序如下,如有分歧,可一起探讨. Linux系统开机启动的顺序是: BIOS自检,检查硬件,选择引导介质如光盘or硬盘orU盘等等. 进入bootloader,它是写在硬盘最前面的部分,大小是512字节.由446字节的mbr和64字节的DPT和2字节的返回码组成. bootloader会去读取/boot/grub/grub.conf,然后根据配置文件寻找/boot分区下面的内核文件vmlinuz.....及内核辅助文件initrd......以及加载根分区 读取/etc

Linux系统的启动

Linux系统的启动:1.上电以后,BIOS(Basic Input Output System)加电自检,检测硬件设备,然后按照CMOS上的顺序依次搜索相关的可引导的硬件设备. 2.加载主引导程序:主引导程序主要是为了加载次引导程序到内存中运行. 3.加载次引导程序:加载次引导程序后,其在内存中跑起来,进而加载Linux的内核. 4.Linux内核映像:加载linux内核后,次引导程序便会依据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取linux内核映像