搞定Microchip MPU的U-boot源码仿真调试

文章目录

    • 准备工作
    • 编译at91bootstrap和U-boot源码
      • 下载并编译at91bootstrap源码
      • 下载并编译u-boot源码
    • 使用Eclipse导入U-boot源码并进行配置
    • cfg配置文件内容
    • 仿真调试
    • 视频教程

在嵌入式Linux开发中,免不了接触到U-boot,随着U-boot功能越来越强大,如何加快U-boot代码的调试变得越来越重要。作为一名优秀的嵌入式软件开发工程师,现在让我们来学习下U-boot源码的仿真调试。

准备工作

调试仿真需要借助第三方IDE、JLink工具和仿真器,另外在编译U-boot源码的时候需要用到交叉编译工具,在仿真的时候需要用到GDB Client,也需要借助第三方的工具,当然还要有Microchip SAMA5D27 MPU开发板。

现在将具体工具列出如下,部分工具给出了下载地址:

  • Eclipse for embedded C/C++:

https://www.eclipse.org/downloads/packages/release

  • JLink工具软件 - 建议用JLink V692:

https://www.segger.com/downloads/jlink/

  • Linaro 交叉编译工具:

个人用的是:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.xz

  • SAMA5D2-XULT开发板和一个JLink仿真器

  • xpack工具,会用到它做GDB Client

https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/

编译at91bootstrap和U-boot源码

下载并编译at91bootstrap源码

  • 下载at91bootstrap源码
    git clone https://github.com/linux4sam/at91bootstrap.git

  • 设置交叉编译工具
    export CROSS_COMPILE=/home/xxxx/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-

  • 选择sama5d2_xplained_bkptnone_defconfig配置文件并编译
    cd at91bootstrap
    make sama5d2_xplained_bkptnone_defconfig
    make -j10

  • 进入at91bootstrap/build/binaries
    拷贝生成的at91bootstrap.bin文件并重命名为sama5d2boot.bin,后面将sama5d2boot.bin文件拷贝到U-boot文件目录下。

下载并编译u-boot源码

  • 下载u-boot源码
    git clone https://github.com/linux4sam/u-boot-at91.git

  • 设置交叉编译工具
    export CROSS_COMPILE=/home/xxxx/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-

  • 选择sama5d2_xplained_emmc_defconfig配置文件并编译
    cd u-boot-at91
    make sama5d2_xplained_emmc_defconfig
    make -j10
    cp u-boot.dtb uboot-dtb.bin

将U-boot目录下生成的u-boot.dtb文件做一份拷贝并重命名为uboot-dtb.bin,JLink在加载文件到SAMA5D27的DDR或者内部SRAM时,只支持bin文件。

使用Eclipse导入U-boot源码并进行配置

打开Eclipse for embedded C/C++,在Eclipse下导入u-boot源码

在Eclipse下选择File -> Import -> C/C++ -> Existing Code as Makefile project -> Next -> Browse -> choose u-boot source code directory -> Finish

配置工程的仿真配置,操作过程如下:
右键点击新导入的工程 -> Debug As -> Debug Configurations -> GDB SEGGER J-Link Debugging -> 此时双击一下,创建一个新的仿真配置
在这里插入图片描述
在Main配置界面,选择Search Project,然后找到u-boot这个elf文件,然后选择OK。记得要勾选上Diable auto build选项。
在这里插入图片描述
在Debugger配置界面,参照上述配置做好设定,对于J-Link GDB Server的版本没有特别要求,选择推荐的V692版本也没问题。
在这里插入图片描述
Startup配置的话可以参考上述配置,两段配置命令如下:

shell /home/afan/Tools/JLink_Linux_V692_x86_64/JLinkExe -device ATSAMA5D27 -if JTAG -speed 2000 -jtagconf -1,-1 -autoconnect 1 -CommandFile sama5d2boot.cfg
monitor sleep 10
monitor halt

第二段如下:

shell /home/afan/Tools/JLink_Linux_V692_x86_64/JLinkExe -device ATSAMA5D27 -if JTAG -speed 2000 -jtagconf -1,-1 -autoconnect 1 -CommandFile sama5d2load.cfg

cfg配置文件内容

在U-boot工程目录下新建一个sama5d2boot.cfg文件,文件内容如下:

loadfile sama5d2boot.bin 0x200000
setpc 0x200000
g
sleep 10
q

另外再新建一个sama5d2load.cfg文件,文件内容如下:

loadfile uboot-dtb.bin 0x26f96370
sleep 10
q

需要注意的是0x26f96370这个文件的地址需要参考U-boot目录下编译生成的System.map文件来决定。
例如生成的System.map最后内容如下:

26f8e19c b tftp_windowsize
26f8e1a0 b time_start
26f8e1a4 b timeout_count
26f8e1a8 B __bss_end
26f8e1a8 B __bss_limit
26f96370 D __rel_dyn_end
26f96370 D _end
26f96370 D _image_binary_end

loadfile uboot-dtb.bin 所指定的地址必须与_end所在的地址保持一致。

仿真调试

完成上述配置后,确保J-Link仿真器已经连接到SAMA5D27开发板,而且SAMA5D27开发板BOOT
DISABLE模式使能,也就是说SAMA5D27开发板不会上电自动运行,让其只能执行ROM BOOT CODE。

这样我们在Debug Configuration下,选择刚才新创建的Debug配置,进行仿真调试即可。## 标题

视频教程

视频教程点击这里。
记得一键三连,关注、点赞与收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年4月26日力扣每日一题(1146)

2024年4月26日力扣每日一题(1146) 前言 ​ 这道题在做的时候感觉很简单,题意很容易理解,但直接去做直接干爆内存,参考了一下灵神的代码,豁然开朗,觉得这道题很有意思,便想着写篇博…

【YOLO改进】换遍IoU损失函数之GIoU Loss(基于MMYOLO)

GIoU损失函数 论文链接:https://arxiv.org/pdf/1902.09630 GIoU(Generalized Intersection over Union)损失函数是一种用于改善目标检测模型中边界框回归的方法。它是基于传统的IoU(交并比)损失的一个改进版本,解决了…

node.js的安装与配置

Node.js 是一种基于 JavaScript 编程语言的服务器端平台,它可以让你在浏览器之外运行 JavaScript 代码。以下是 Node.js 的安装步骤: 下载 Node.js: 访问 Node.js官网。根据你的操作系统选择合适的版本下载。 运行安装文件: 在下载…

计算机视觉——使用OpenCV GrabCut算法从图像中移除背景

GrabCut算法 GrabCut算法是一种用于图像前景提取的技术,由Carsten Rother、Vladimir Kolmogorov和Andrew Blake三位来自英国剑桥微软研究院的研究人员共同开发。该技术的核心目标是在用户进行最少交互操作的情况下,自动从图像中分割出前景对象。 在Gra…

直流有刷电机入门

文章目录 123455.25.3 1 2 电刷 材质是 石墨 3 130马达 就几毛钱 几块钱这学的就是减速电机P MAX一定 pf*v 降低速度 扭矩就会大 4 还有空载电流 过大负载 时 有堵转电流 (可分析电流 来看电机工作状态)RPM 转每分钟 5 5.2 这的线圈 是简化后的转子绕组…

Ubuntu终端常用指令

cat cat 读取文件的内容 1、ls 一、 1、ll 显示当前目录下文件的详细信息,包括读写权限,文件大小,文件生成日期等(若想按照更改的时间先后排序,则需加-t参数,按时间降序(最新修改的时间排在最前)执行: $ ll -t, 按时间升序执行: $ ll -t | tac): ll 2、查看当前所处路径(完整…

服务器数据恢复—服务器重装系统导致XFS分区丢失的数据恢复案例

服务器数据恢复环境: 一台服务器MD1200磁盘柜,通过raid卡将15块磁盘组建成一组raid5磁盘阵列。raid5阵列分配了2个lun,操作系统层面对lun进行分区:1个分区采用LVM扩容方式加入到了root_lv中,其余分区格式化为XFS文件系…

大数据时代,保护个人隐私小Tips Get 起来!

随着大数据时代的到来,我们的隐私正处于越来越易被侵犯的风险中。在各种社交媒体和信息共享平台上,我们需要输入各种个人信息,而这些信息可能被不法分子盗取,甚至被用来进行欺诈行为。在如今的大数据时代,保护个人隐私…

元宇宙中的DAPP:你了解多少?

元宇宙是什么?这是一个在当今科技圈炙手可热的话题。而在元宇宙中,DAPP起着至关重要的角色,它作为连接现实世界与虚拟世界的桥梁,为未来的数字世界开启了一个全新的篇章。 一、元宇宙:一个虚拟的数字世界 元宇宙是一…

【JavaWeb】Day51.Mybatis动态SQL(一)

什么是动态SQL 在页面原型中,列表上方的条件是动态的,是可以不传递的,也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中,我们会看到,我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

【麒麟(Linux)系统远程连接到windows系统并进行文件传输】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言使用步骤总结 前言 一般来说,windows自带远程桌面,使用的RDP协议,Linux上支持RDP协议的软件很多,常用的是Remmi…

Java 网络编程之TCP(五):分析服务端注册OP_WRITE写数据的各种场景(二)

接上文 二、注册OP_WRITE写数据 服务端代码: import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.S…

【cf】Codeforces Round 941(Div.2)题解 A - D

前三题出的最快的一次&#xff0c;但是d没出 A. Card Exchange 只要有一种颜色大于等于 k&#xff0c;那就是 k-1&#xff0c;否则就是 n #include <bits/stdc.h>using namespace std;#define int long long using i64 long long;typedef pair<int, int> PII;…

CONSOB 又下令封锁5个未经授权的投资网站,总数达1065

FX110讯&#xff1a;意大利金融市场监管局 CONSOB 已下令关闭 5 个非法提供金融服务/金融产品的网站。自2019年7月CONSOB有权下令封锁欺诈性金融网站以来&#xff0c;被封禁的网站数量已升至1065个。 以下是 CONSOB 下令新屏蔽的 5个网站&#xff1a; “Luno Invest” Vantage …

C#基础:WPF中常见控件的布局基础

一、用ViewBox实现放缩控件不变 二、布局代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"MainWindow"…

将静态资源解析成组件使用的库

vite版本的vite-plugin-svgr vite-plugin-svgr - npm 使用

排序试题解析(二)

8.4.3 01.在以下排序算法中&#xff0c;每次从未排序的记录中选取最小关键字的记录&#xff0c;加入已排序记录的 末尾&#xff0c;该排序算法是( A ). A.简单选择排序 B.冒泡排序 C.堆排序 D.直接插入排序 02&#xff0e;简单选择排序算法的比较次数和移动次数分别为( C )。…

MongoDB的安装(Linux环境)

登录到Linux服务器执行 lsb_release -a &#xff0c;即可得知服务器的版本信息为&#xff1a;CentOS 7。 # CentOS安装lsb_release包 [rootlinux100 ~]# sudo yum install redhat-lsb# 查看Linux版本 [rootlinux100 ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-…

Signed的本质和作用

前言 Verilog中的signed是一个很多人用不好&#xff0c;或者说不太愿意用的一个语法。因为不熟悉它的机制&#xff0c;所以经常会导致运算结果莫名奇妙地出错。其实了解了signed以后&#xff0c;很多时候用起来还是挺方便的。 signed的使用方法主要有两种&#xff0c;其中一种…

【C语言】动态内存分配(一)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1malloc 2.2free 1.为什么要有动态内存分配 我们已经掌握的内存开辟方式有: 但是上述的开辟空间的方式有两个特点: ⭐空间开辟大小是固定的。 ⭐数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;数组空间一旦…
最新文章