uboot调试指南
uboot 调式方法

uboot 调式方法U-Boot调试方法U-Boot是一个开源的嵌入式系统引导加载程序,广泛应用于各种嵌入式设备中。
在开发嵌入式系统时,经常需要对U-Boot进行调试来解决问题或改进功能。
本文将介绍一些常用的U-Boot调试方法,帮助开发人员有效地进行调试工作。
一、串口调试串口调试是最常用的U-Boot调试方法之一。
通过串口调试,可以在开发板和主机之间建立一个串口通信通道,实时显示和获取U-Boot的调试信息。
1. 连接串口需要将开发板的串口和主机的串口进行连接。
一般来说,开发板会提供一个或多个串口接口,可以通过连接线将其与主机的串口接口相连。
2. 配置串口参数在主机上,需要打开一个串口终端程序,如minicom或PuTTY。
然后,设置串口参数,包括波特率、数据位、停止位等。
这些参数需要与U-Boot的配置相匹配,一般来说,U-Boot的默认串口配置为115200 bps、8数据位、1停止位、无校验位。
3. 启动开发板将开发板连接到主机后,可以通过重启或上电的方式启动开发板。
在开发板上电后,U-Boot会自动输出调试信息到串口终端程序。
4. 查看调试信息在串口终端程序中,可以实时查看U-Boot的调试信息。
这些信息包括启动过程中的各种状态、引导加载程序的执行过程以及命令行的输入输出等。
二、JTAG调试JTAG调试是另一种常用的U-Boot调试方法。
通过JTAG调试,可以在硬件级别上对U-Boot进行调试,实时监控和修改寄存器的值、查看内存数据等。
1. 连接JTAG调试器需要将JTAG调试器连接到开发板上的JTAG接口。
JTAG调试器一般会提供相应的连接线和插头,可以将其与开发板的JTAG接口相连。
2. 配置调试环境在主机上,需要安装相应的JTAG调试工具,如OpenOCD或J-Link等。
然后,配置调试环境,包括连接调试器、选择目标设备等。
3. 启动调试会话配置好调试环境后,可以启动一个JTAG调试会话。
u-boot没有串口打印信息调试uboot

【转】U-Boot没有串口打印信息调试u boot假如U-Boot没有任何串口打印信息,手头又没有硬件调试工具,那样怎么知道U-Boot执行到什么地方了呢?可以通过开发板上的LED指示灯判断。
开发板上最好设计安装八段数码管等LED,可以用来显示数字或者数字位。
U-Boot可以定义函数show_boot_progress (int status),用来指示当前启动进度。
在include/common.h头文件中声明这个函数。
#ifdef CONFIG_SHOW_BOOT_PROGRESSvoid show_boot_progress (int status);#endifCONFIG_SHOW_BOOT_PROGRESS是需要定义的。
这个在板子配置的头文件中定义。
CSB226开发板对这项功能有完整实现,可以参考。
在头文件include/configs/csb226.h中,有下列一行。
#define CONFIG_SHOW_BOOT_PROGRESS 1函数show_boot_progress (int status)的实现跟开发板关系密切,所以一般在board目录下的文件中实现。
看一下CSB226在board/csb226/csb226.c中的实现函数。
/** 设置CSB226板的0、1、2三个指示灯的开关状态* csb226_set_led: - switch LEDs on or off* @param led: LED to switch (0,1,2)* @param state: switch on (1) or off (0)*/void csb226_set_led(int led, int state){switch(led) {case 0: if (state==1) {GPCR0 |= CSB226_USER_LED0; } else if (state==0) {GPSR0 |= CSB226_USER_LED0; }break;case 1: if (state==1) {GPCR0 |= CSB226_USER_LED1; } else if (state==0) {GPSR0 |= CSB226_USER_LED1; }break;case 2: if (state==1) {GPCR0 |= CSB226_USER_LED2; } else if (state==0) {GPSR0 |= CSB226_USER_LED2;}break;}return;}/** 显示启动进度函数,在比较重要的阶段,设置三个灯为亮的状态(1, 5, 15)*/void show_boot_progress (int status){switch(status) {case 1: csb226_set_led(0,1); break;case 5: csb226_set_led(1,1); break;case 15: csb226_set_led(2,1); break;}return;}这样,在U-Boot启动过程中就可以通过show_boot_progresss指示执行进度。
CodeWarrior+USBTAP调试U-Boot技巧

CodeWarrior+USBTAP调试U-Boot2010-07-15 15:55:50分类:LINUX!# U-Boot 编译调试 ## 请参考Pro_&_Linux_App_Edition_Targeting_Manual.chm./ltib ## install ltib$ ./ltib -p u-boot -m prep ## get U-Boot source$ cd rpm/BUILD/u-boot-1.1.3$ vim config.mkDBGFLAGS = -g2 -gdwarf-2AFLAGS_DEBUG = -Wa,-gdwarf2OPTFLAGS = -O1$ vim u-boot-1.1.3/lib_ppc/board.c ## line624: debug => printfdebug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);=> printf ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);$ make ## 编译,最好用 ./ltib -p u-boot -m scbuild注意: 用ltib 编译,要修改confing/platform/mpc8349itx/.config中CLFAGS参数编译常用(make distclean ; make MPC8349ITX_config ; make )启动linux samba服务,将u-boot目录做共享目录由windows访问在windows上访问uboot共享目录,打开后右键点击共享目录,映射为磁盘驱动器z启动CodeWarrior IDE,@ IDE: File > Open , find and open ELF file: u-boot , click OK@ IDE: Choose Debugger : CodeWarrior USB TAP , click OK按照提示选择添加缺少的文件start.S(前提是将源码完全复制),其余会自动添加,不能自动添加的,手动添加。
uboot dm-gpio使用方法以及工作流程

uboot dm-gpio使用方法以及工作流程1. 引言1.1 介绍【引言】uboot dm-gpio是uboot中的一个驱动模块,用于控制板上的GPIO(General Purpose Input/Output)引脚。
GPIO引脚在嵌入式系统中起着非常重要的作用,可以用于控制外设、传输数据、进行通信等功能。
uboot dm-gpio模块可以帮助开发人员在bootloader阶段对GPIO进行操作,这在嵌入式系统的启动过程中是非常关键的。
本篇文章将介绍uboot dm-gpio的概述、使用方法、工作流程以及示例和注意事项。
读者可以通过学习本文了解如何在uboot中使用dm-gpio模块来控制GPIO,并且掌握一些使用上的注意事项,从而更好地应用于自己的嵌入式系统开发中。
1.2 背景在嵌入式系统开发中,GPIO(General Purpose Input/Output)是一种非常常用的接口,用于控制外部设备和传感器。
在嵌入式系统中,引导加载程序(Bootloader)的选择至关重要,因为它负责初始化硬件设备和加载操作系统。
U-Boot是一种常用的开源引导加载程序,它支持多种处理器架构和嵌入式设备。
随着U-Boot的不断发展,新的GPIO框架被引入,称为`dm-gpio`,它提供了更强大和灵活的GPIO控制接口。
`dm-gpio`通过设备模型(Device Model)的方式管理GPIO设备,使得开发者可以更方便地管理和控制GPIO。
在使用`dm-gpio`之前,开发者需要了解其概念、使用方法和工作流程,以确保正确地配置和操作GPIO接口。
本文将介绍`dm-gpio`的概念、使用方法和工作流程,同时给出一个示例来演示如何在U-Boot中使用`dm-gpio`来控制GPIO。
我们还会提供一些注意事项,帮助开发者避免常见的问题和错误。
2. 正文2.1 uboot dm-gpio概述在U-Boot中,dm-gpio是一个设备模型中的GPIO控制器,用于控制通用输入输出端口。
uboot启动参数设置

nand erase 40000 1c0000 nand erase offset size
nand write 30800000 40000 1c0000 存放内存30800000位置上的uImge,烧写到nandflash的40000位置上
=========================================================================================
例如如下:
FS2410# setenv serverip 192.168.7.x (其中X是虚拟机中IP的最后的数字[用ifconfig可以获取])
farsight_N中的N用座位号来表示,比如座位4即为farsight_4 //设置uboot传给内核的参数
saveenv
自定义参数版本:
4.设置UBOOT参数
确保一下FS2410的核心班上的JP1跳线帽短接了,给板子上电,
查看板子启动信息,如果板子启动信息中,有U-Boot 1.3.1(Oct 25 2008 - 15:45:21)或者更新的版本,则直接设置下面的参数,否则根据文档烧录 u-boot131-for-farsight-shenzhen-advanced-drivers.bin(请参考文档"farsight-实验前的准备步骤-v2.3.doc")
setenv bootargs console=ttySAC0,115200 init=/linuxrc root=/dev/nfs nfsroot=192.168.7.113:/opt/filesystem ip=192.168.7.173:192.168.7.113:192.168.7.1:255.255.255.0:farsight_13:eth0:off //或者console=ttySAC0,115200 root=1f02 rootfstype=jffs2 rw init=/linuxrc mem=64M
2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。
它是在操作系统内核启动之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
现在主流的bootloader有U-BOOT、vivi、Eboot等。
本次作业先做Uboot的烧写吧。
希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。
首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
富视安 IPC 搜索升级工具 客户使用说明书

IPC搜索升级工具客户使用说明书武汉富视安智能科技有限公司2022年8月1.运行工具Upgrade.exe2.工具主界面如下图(最新版工具20211215)设备状态显示未就绪:浅蓝色高亮未授权:红色高亮UBoot模式下:黄色高亮点击【搜索】,将搜索出局域网内在线设备;勾选/不勾选【全选】,将全选/全不选搜索到的所有在线设备;点击【系统配置】设置语言和搜索时间;选中设备,点击鼠标右键“预览单通道”或“一键预览”或双击IPC索引通道,可预览实时画面;注:状态为正常,IPC处于正常工作状态,此时能够通过IP地址进入IE网页。
状态为未就绪,此时不能通过IP地址进入IE网页,通常是IPC处于正在重启。
当电脑未关闭防火墙时,IPC搜索升级工具也会大批量显示状态为未就绪,应该关闭电脑防火墙,再搜索。
选中设备,点击鼠标右键“修改”,可修改设备IP地址;查看二维码功能需要IPC支持手机APP才能显示二维码,使用APP 扫描二维码即可添加;3.工具模块—常用功能区【一键预览】:勾选设备,开启设备实时预览界面启动UBoot模式:IPC启动UBoot模式升级UBoot包(单击后会变为关闭UBoot模式按钮)关闭UBoot模式:IPC关闭UBoot模式(UBoot升级完成后需要关闭UBoot模式)开启Telnetd:IPC开启Telnetd功能,进入调试模式。
关闭Telnetd:IPC关闭Telnetd功能。
【恢复默认】:根据需要选择旧版本恢复默认(针对之前老固件版本的恢复默认)恢复默认界面按电脑键盘ctrl+shift+alt键会新增{工厂级恢复默认},工厂级恢复默认,会删除IPC锁定的参数恢复默认尽量不要勾选网络参数,以免恢复为192.168.1.188,与当前局域网其他设备混淆,引起冲突。
【灯板参数】:设置IPC灯板类型、模式、亮度、日夜切换、红外是否收光、Ircut正反向;在全选栏中设置需要修改的参数然后下方点击修改,刷新验证是否修改成功【编码设置】:设置IPC的主子码流分辨率,编码类型,定/变码率,H264/265、图像质量在全选栏中设置需要修改的参数,然后下方点击修改,刷新验证是否修改成功【启用UBOOT模式】:作为设备IPC升级的一种模式,详细使用方法见本文档第6部分。
UBOOTPHY驱动分析及调试方法

UBOOTPHY驱动分析及调试⽅法UBOOT版本:2017.11⼀、PHY 简介M edia I ndependent I nterface ( MII ),介质独⽴接⼝,起初是定义 100M 以太⽹(Fast Ethernet)的MAC层与PHY 芯⽚之间的传输标准。
MAC 与 PHY 之间的 MII 连接可以是可插拔的连接器,或者是同⼀块 PCB 上 MAC 与 PHY 之间的⾛线。
MDIO与MDCLK是 MII 接⼝的⼀部分,⼆者可称为SMI (Serial Management Interface) 串⾏管理接⼝,⽤于在 MAC 和 PHY 之间传递配置信息。
在 MDIO 规范中定义 PHY 地址为5 bit,即同⼀组MDIO最多可配置 2^5 = 32个 PHY。
MII 接⼝图如下所⽰:能够和MII相提并论的还有RMII(精简MII)、SMII(串⾏MII)、GMII(千兆MII)、RGMII(精简GMII)等接⼝,它们与普通MII相⽐较,仅是传输速率与数据传输⽅式不同等,这⾥不做过多的介绍。
⼆、PHY 设备创建及驱动匹配以 rockchip 为例,当它的 mac 驱动 gmac_rockchip 成功的被匹配时,会调⽤到 gmac_rockchip_probe ,mac 相关我们不做分析,直接进⼊主题 designware_eth_probe 函数中。
⾸先会获取到对应的 regulator ,并会做⼀些电源配置,1 device_get_supply_regulator(dev, "phy-supply",2 &phy_supply);3 regulator_set_enable(phy_supply, true);UBOOT 中引⼊了 DM 驱动模型,相关的设备与驱动事先已经绑定过,如这⾥通过 phandle 进⽽找出其对应的,驱动在 rk8xx.c 中定义:1 U_BOOT_DRIVER(rk8xx_switch) = {2 .name = "rk8xx_switch",3 .id = UCLASS_REGULATOR,4 .ops = &rk8xx_switch_ops,5 .probe = rk8xx_switch_probe,6 };接下来要初始化 mdio 总线,并将其注册到系统的 mii_devs 中,在获取某个控制器时,即可通过 miiphy_get_dev_by_name 来获取:1 dw_mdio_init(dev->name, dev);2 priv->bus = miiphy_get_dev_by_name(dev->name);电源以及 MDIO 总线已初始化完毕,万事俱备,接下来就正式的对 phy 进⾏操作了,⼀起来看 dw_phy_init 函数:1static int dw_phy_init(struct dw_eth_dev *priv, void *dev)2 {3struct phy_device *phydev;4int mask = 0xffffffff, ret;56 #ifdef CONFIG_PHY_ADDR7 mask = 1 << CONFIG_PHY_ADDR;8#endif910 phydev = phy_find_by_mask(priv->bus, mask, priv->interface);11if (!phydev)12return -ENODEV;1314 phy_connect_dev(phydev, dev);1516 phydev->supported &= PHY_GBIT_FEATURES;17if (priv->max_speed) {18 ret = phy_set_supported(phydev, priv->max_speed);19if (ret)20return ret;21 }22 phydev->advertising = phydev->supported;2324 priv->phydev = phydev;25 phy_config(phydev);2627return0;28 }我们主要来看 phy_find_by_mask ,这⾥是核⼼,其它细节配置不去分析以免喧宾夺主。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Uboot调试参考指南
一、调试目的
Uboot的调试旨在通过观察uboot运行时状态来测试硬件问题。
二、调试步骤
1.修改代码
在uboot代码路径下,编辑uboot代码,需要做以下修改;
a.修改config.mk文件,添加以下两行内容:
AFLAGS += -Wa,-gdwarf2
CFLAGS += -g2 -gdwarf-2
b.修改. /arch/powerpc/lib/board.c文件
debug("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
printf("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
将debug改为printf,如上所示。
2.编译uboot
执行make BSC9131RDB_SYSCLK100_NAND,编译uboot
3.将编译好的u-boot-nand.bin(uboot image格式)及u-boot(elf格式文件)文件拷
贝出来
4.烧录uboot
将步骤3中保存的u-boot-nand.bin烧录到目标板中,烧录过程略。
5.建立工程
a.在cw界面,点击file->import, 选择code warrior -> Power architecture ELF
executable,如图1所示:
图1 建立elf工程
b.选择步骤3中保存的u-boot(elf格式文件),toolchain选择bareboard application,
target OS选择none,工程名字请根据需要设置,比如我的机器上设置为example,
点击next,如图2所示:
图2 载入elf文件c.选择处理器,9131,如图3所示
图3 选择处理器d.选择调试链接使用硬件,如图4所示
图4 选择调试链接使用硬件
e.配置硬件连接特性,图5所示
图5 配置工程连接特性
f.完成工程创建
6.匹配源代码
Uboot调试工程创建完成后,通过在修改uboot代码编译的uboot elf文件中已经包含符号表信息,其对应的源代码信息已经包含着elf文件中,因为我们的uboot编译是在linux服务器上执行,而cw的调试是在Windows机器上,因此,需要将uboot elf中的代码信息链接到windows的代码中。
A.指定某一个文件的连接关系,后续的连接都会自动对应起来;
图6 配置源代码映射
B.若双击其中某个文件显示找不到源代码,则指定源代码即可
7.编辑连接/调试
A.启动configuration配置,点击run->debug configuration,如图7所示
图7 配置调试
B.选择codewarrior attach进行配置,如图8所示
图8 配置cw attach
C.配置连接,选择连接,new,选择硬件或软件模拟器连接,选择PA,
BSC9131RDB->ROM,选择BSC9131RDB-core0_ROM_BSC9131PA NAND u-boot 32 all stage,如图9所示:
图9 配置硬件或者模拟器连接
D.在目标行,选择new目标,选择硬件或者软件模拟器连接->PA,选择9131,如
图10所示
图10 配置目标
E.点击next,选择初始化目标
${PA_TOOLS_HOME}/PA_Support/Initialization_Files/Qonverge/BSC9131RDB_uboo t_32.tcl,如图11所示
图11 选择初始化目标
F.选择内存初始化目标,点击内存选项卡,选择内存配置
BSC9131RDB_uboot_32_NAND.mem,如图12所示
图12 选择内存配置
G.点击finish,完成配置
H.在cw attach配置界面,在main选项卡中点击apply,应用配置
I.配置debugger备用加载地址,点击debugger选项卡,点击PIC选项卡,进行备
用加载地址配置,如图13所示:
图13 配置备用加载地址
J.填入0xfffff000,点击apply,点击debug,如图14所示,即可调试uboot启动第一阶段
图14 启动调试
K.执行上一步骤后调试界面出现,如图15所示,调试界面
图15 启动调试界面
L.点击复位按钮,在弹出的服务对话框中,确定初始化目标为BSC9131RDB_uboot_32.tcl,如图16所示
图16 执行复位
M.复位后即可执行单步调试,如图17所示
图17 执行服务后调试界面N.执行单步跟踪,可以调试start.S代码,如图17所示
图17 调试uboot启动第一阶段
三、调试阶段
Uboot的调试从内存布局的视图可以分为四个主要阶段:
1.Flash内执行阶段
2.使能MMU并在flash内执行
3.使能MMU并relocate到内存阶段
4.内存运行阶段
Uboot不同阶段的调试工程建立,连接建立的过程基本一致,不同之处是PIC的设置;
四、后续阶段调试
在第二部分建立的工程中已经可以调试第一阶段uboot,当单步执行到无法对应C代码时,即显示no source available for 0x****时,说明代码已经执行到第二阶段,如图18所示,需要进行第二阶段调试的配置;
图18 第二阶段开始
1.点击主菜单Windows->show view->debug shell,如图19所示
图19 调出debug shell窗口
2.在开始的debug shell中输入命令setpicloadaddr 0xff801000,如图20所示,则即可对
应C代码继续单步执行:
图20 设置第二阶段pic offset
3.继续单步调试,可以在汇编语言或者c语言出设置断点,继续执行;
4.当发生no source available for 0x*****时,说明已经进入uboot启动第三阶段,此时
如图21所示;
图20 uboot调试进入第三阶段
5.在debug shell窗口中设置setpicloadaddr 0xff800000,如图21所示
图21 设置第三阶段的pic offset
6.继续调试,当进入第四阶段运行时,在debug shell中输入setpicloadaddr 0x36f30000,
即可继续进行调试。
五、各阶段PIC offset的确定
1.启动阶段pic offset的确定
系统启动后,pc指针会指向0xfffffffc的地址执行,此地址上是一条跳转指令,会跳
转到0xfffff000地址执行。
如图22所示,此地址即为uboot的加载地址,因此需要
设置uboot pic offset为0xfffff000地址;
图22 第一阶段pic offset地址确定
2.第二阶段pic offset地址的确定
第二阶段与第三阶段的pic offset地址确定都是通过查看代码的方式来确定的。
将disassembly窗口向上滚动,发现到代码起始处地址即为当前阶段pic offset地址,如图22,图23所示:
图22 第二阶段pic offset地址确定
图23 第三阶段启动pic便宜地址确定
3.第四阶段pic offset地址的确定:
a)修改将uboot代码arch/powerpc/lib/board.c,将其中debug("Now running in
RAM - U-Boot at: %08lx\n", dest_addr);修改为printf输出;
b)在uboot启动过程中,查看串口输入,如图24所示,记下地址,即为ram运
行后的pic 偏移地址。
图24 第四阶段pic offset的确定
六、调试过程中其他需要注意的问题
1.注意代码的匹配,生成elf即uboot-nand.bin的代码为同一份代码,此特性在编译
时已经保证,无需赘述,但是往往windows调试环境上的代码与生成uboot的代码
不严格匹配,将导致软件调试时代码不匹配。
2.调试时需要初始化,即调试开始后往往需要按下reset按钮,才能如我所愿的进行
单步调试
3.Pic offset的确定,不同阶段的确定方法不同,而freescale并没有提供第一、第二、
第三阶段的确定方式,此方法非官方,不过在我的机器上可以调试工作。
4.调试过程中寄存器、内存、断点等调试方法不再赘述。