[转贴]使用 GDB 调试 uCLinux 内核

uClinux在ColdFire无MMU平台的移植与调试实战指南 嵌入式Linux系统开发中,内存管理单元(MMU)是实现虚拟内存和进程隔离的核心硬件。对于成本敏感的工业控制与物联网终端,无MMU微处理器搭配精简Linux系统(如uClinux)是经典方案。uClinux通过移除MMU依赖,采用扁平地址空间和静态链接/扁平二进制格式,在ColdFire等低成本RISC处理器上实现了类Unix环境。其技术价值在于极致的成本控制与确定的实时性,适用于对内存保护要求不高但需要丰富网络协议栈和文件系统的场景。本文聚焦uClinux内核测试与ColdFire开发板应用移植,详细解析 阅读详情

慢慢的大家的 uClinux 都可以跑起来了,也能够自己编译一个内核出来了。但是,如果自己要写驱动、或者修改内核的一些代码、或者像 nickmit 一样要自己写一个内核的移植,那么调试就是不可或缺的了。

在这里我摸索了一个使用我们廉价的 Wiggler + GDB + OCDLibremote 来调试内核的方法。

关于 Wiggler 和 GDB 在这里我就不介绍了,说一下 Cygwin 和 OCDLibRemote 吧。

唉……其实 Cygwin 也没什么好说的,现在网络是那么样的发达,如果不知道那是什么东西的话,大家到他的网站看一下就知道了。网址:

http://www.cygwin.com

关于安装的话,如果你仅仅是用来调试,那么照它默认最小的来配置就可以了。如果还要自己编译一点东西的话,那么 Cliff 在这里向你推荐几个需要安装的软件包:
autoconf
automake
make
gcc
g++
gdb
msgfmt
bison
flex
gawk
sed
只要安装了这些,一般编译一些东西就没有什么问题了。

这是一个使用 Wiggler (当然还有一些其他的 JTAG,如 Raven)的调试器,支持 GDB。大家可以到他的官方网站

http://www.macraigor.com/full_gnu.htm 下载所需要的软件。
很可惜的是,只有 Windows 下的 OCDLibRemote 才支持我们的廉价 JTAG——Wiggler。因此虽然那里有 Linux 版本的,却是不能用的(除非

你有他支持的其他仿真器,如 Raven)。

安装了这个东西之后,似乎是不能直接运行的,他的驱动程序居然没有装好(我没试过重启一下是否就可以用,但是……我实在是太性急了)。因此我们需要手工安装它的驱动,使用 loaddrv 之类的,它的 sys 文件倒是已经放到了 Windows 的 System32/drivers 目录下了。

不过建议大家可以试一试重启之后能不能正常运行。

如果对这个手工安装驱动没有概念的话,没关系,我们可以在他的网站下载另一个软件:OCD Commander 。它的网址是 http://www.macraigor.com/ocd_cmd.htm 。只要安装了这个,它倒是要你重启的,然后就可以用我们的 OCDLibRemote 了。


这样软件安装好了之后,那么我们还需要一份 GDB。如果大家环境比较好,那么可以在 Windows 的机器上运行 OCDLibRemote,然后在 Linux 的机器上开发和调试内核。如果只有一台机器(比如我,这样的人应该还是大部分吧),那就需要编译一份 Cgywin 下面的 GDB(或者 Insight,GDB 的图形界面)。

现在的 GDB/Insight 版本是 6.1,但是在 Cygwin 下面 Insight 不能被正确编译。所以如果大家是初学者的话建议使用 Insight 6.0。

关于编译 GDB/Insight,我们首先需要下载它的源代码,这里以 GDB 6.1 为例子:

它的源代码的文件名是 gdb-6.1.tar.bz2 或者 gdb-6.1.tar.gz。下载了这个东西以后(可以在 ftp://sources.redhat.com/pub 下载):
tar xjvf gdb-6.1.tar.bz2   (tar xzvf gdb-6.1.tar.gz)
mkdir arm-elf-gdb
cd arm-elf-gdb
../gdb-6.1/configure --target=arm-elf
make
make install
如果嫌文件太大,可以使用 strip 命令把调试信息去掉:
strip /usr/local/bin/arm-elf-gdb.exe


开发环境配置好以后,就切入“如何调试”的正题了(我这个人……似乎废话永远比正经的话多啊……)

运行 OCDLibRemote。执行命令 OCDLibRemote -c ARM7 -d WIGGLER 就好了。

运行 arm-elf-gdb:
进入 linux 的目录,例如 uClinux-dist/linux-2.4.x
请注意,你的 Linux 内核在编译的时候需要选择加入调试信息。在配置内核的时候,是在 Kernel hacking 里面选中:
[*] Include debugging information in kernel binary

$ arm-elf-gdb linux
(gdb) target remote localhost:8888
Remote debugging using localhost:8888
0x00000000 in ?? ()
(gdb) c
Continuing.

如果你使用了我们新版本的 BIOS,那么请在执行 c 命令之后到超级终端看一下,因为需要在 10 秒钟内按键进入 BIOS。
进入 BIOS,使用 load 命令把我们的内核镜像 image.ram 下载到 RAM 中(这个我就不多说了吧)。

之后,我们需要设置断点(这才叫调试嘛)。请注意,断点必须是在 load 之后设置,因为软件断点其实是通过改写 RAM 来实现的。如果先设

置断点再 load 那就俗了——断点的特殊指令被冲掉了。

如下所示:
Auto boot in progress, press any key in 9 seconds to run BIOS...

/>load
Now begin address for download, use address 0xc008000
Load image file from host
Type tftp -i 192.168.111.8 put filename at the host PC
Press ESC key to exit
Begin to receive filename: image.ram, transtype: octet.
Begin to receive filename: image.ram, transtype: octet.
TFTP transfer finished, and receive 1ab9b8 bytes.

为了设置断点,我们要暂停 BIOS,这可以通过在 GDB 窗口按 CTRL+C 来实现。然后就可以设置断点。如下:
(gdb) target remote localhost:8888
Remote debugging using localhost:8888
0x00000000 in ?? ()
(gdb) c
Continuing.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x0c7c0774 in ?? ()
(gdb) br start_kernel
Breakpoint 1 at 0xc008588: file init/main.c, line 363.

之后继续运行,还是使用 c 命令,并且在 BIOS 使用 run 命令执行内核:
(BIOS)
/>run
Run program from 0xc008000, are you aure? [y/n]y
(GDB)

(gdb) c
Continuing.

Breakpoint 1, start_kernel () at init/main.c:363
363             setup_arch(&command_line);
(gdb)

然后就是如何调试,这也超出了本文的介绍范围,大家可以看一下 http://www.youkuaiyun.com/Develop/read_article.asp?id=19359

或者使用 Insight 就方便一些。

uClinux在ColdFire CF5206e的移植与调试实战指南 嵌入式Linux开发是构建智能设备的核心技术,其关键在于将通用操作系统适配到特定硬件平台。其原理在于通过交叉编译工具链,在主机上生成可在目标处理器上运行的代码。这项技术的价值在于实现了软件的可移植性和硬件资源的充分利用,广泛应用于工业控制、网络设备和物联网终端等领域。本文聚焦于uClinux操作系统在无MMU的ColdFire微处理器上的移植,深入讲解了从环境搭建、内核配置到系统下载与调试的完整流程。针对资源受限的嵌入式环境,文章详细分析了内存管理、启动代码定制等核心挑战,并提供了基于BDM接口和GDB的高 阅读详情

相关推荐

S3C44B0 调试笔记 uClinux部分

上班时间很少有机会搞这些东西,基本上都是下班在家里搞,不过在公司写写文挡还是可以的。调试uClinux也是断断续续进行的。以前根本没接触过linux,搞起来可真是头都要大了。虽说到最后调通比前面耗时少很多,主要原因是网上很多参考资料。但个人感觉这部分难度要更大一些。 接着前面的说吧,编译出一个uClinux的内核出来,就必须在linux环境下,windows下是编译不了的(如果可行的话,我很愿意那样做)。一阵迷惑,根本没有方向,从何下手。后来在44B0 QQ群里有人指点使用vmware + FC4。Vmware是一款虚拟平台软件,它支持在windows系统中运行linux,就好象cygwin一样,大家都说cygwin很复杂,不是很好用,我也不想去试了。

uclinux使用gdb和gdbserver远程调试

 Use gdbserver and gdb - remote debugging   target端要build gdbserver,host端要有cross version 的gdb,我用arm-elf-gdb和uClinux附的gdb server。  build program时,compile option要加上-g选项,加入debug informat

信号处理总结 2333

物理学建模及仿真平台Chrono安装

Chrono是一个基于物理学的建模和仿真基础设施,它是在C++中实现的独立于平台的开源设计。一个projectchrono库可以嵌入到一个软件项目中,例如在可变形地形上运行的轮式和履带式车辆、机器人、机械电子系统、顺应性机构和流体固体相互作用现象。系统可以由刚性和柔性/顺应性部件组成,并带有约束、电机和接触;部件可以具有三维形状,以便进行碰撞检测。然而安装还是出现了一些问题,所以在此总结。已经装好visual studio。

Already8888的博客 6501

uclinux交叉编译、调试工具

ToolchainFrom wikiPodLinuxTo build binaries for the iPod you will need a special version of the GNU toolchain, where the compiler is configured as a cross compiler. This is used to generate

信号处理总结 2408

MATLAB2022b安装

图文并茂,手把手教会你怎么安装MATLAB2022b

1万+

MATLAB点云处理总目录

点云处理研究学习

weixin_44329757的博客 2558

GDB模拟uClinux运行

1     得到uCLinux,GDB,arm-elftools-20030314.sh(或其他版本)。2     GDB:         ① bunzip2              gunzip                 ② cd gdb-5.0             ./configure –target=arm-elf                  ③  make && ma

MuseIn的专栏 1850

基于FPGA的多级CIC滤波器实现四倍插值

基于FPGA的多级CIC滤波器实现四倍插值 原文链接:基于FPGA的多级CIC滤波器实现四倍插值 在《基于FPGA的多级CIC滤波器实现四倍抽取一》和《基于FPGA的多级CIC滤波器实现四倍抽取二》中我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理以及它们的幅频响应。此篇我们将用verilog实现基于FPGA的多级CIC滤波器实现四倍插值。 1 CIC滤波器的基本概述 CIC(积分梳状...

baidu_34971492的博客 3142

使用 GDB 调试 uCLinux 内核

2007-12-25 09:33:44 慢慢的大家的 uClinux 都可以跑起来了,也能够自己编译一个内核出来了。但是,如果自己要写驱动、或者修改内核的一些代码、或者像 nickmit 一样要自己写一个内核的移植,那么调试就是不可或缺的了。在这里我摸索了一个使用我们廉价的 Wiggler + GDB + OCDLibremote 来调试内核的方法。 关于 Wiggl

mybirdsky的专栏 484

手把手教你学simulink实例--基于Simulink的船舶动力定位系统建模与仿真

船舶动力定位系统(Dynamic Positioning System, DPS)是一种通过控制推进器来保持船舶在指定位置和航向的技术。它广泛应用于海上钻井平台、海洋调查船、起重船等需要精确位置控制的场景。DPS的核心任务是实时感知环境干扰(如风、浪、流),并通过闭环控制算法调整推进器输出,以抵消外界扰动并维持船舶的位置和姿态。本项目旨在基于MATLAB/Simulink平台,构建船舶动力定位系统的数学模型,并进行仿真分析,验证其性能和稳定性。

MHD0815的博客 1085

智能体开发套件(ADK)介绍

city } ---") city_normalized = city . lower() . replace(" " , "") # 模拟天气数据库 mock_weather_db = {

lpfasd123的博客 1412

Linux下配置好skyeye.example跑起,感觉不错!

skyeye,linux平台下硬件仿真软件,很不错的工具.在linux下模拟AT91 /ARM7 / ARM9 MCU,支持交叉编译,使用gcc编译器 , 支持gdb调试 , 可以跑ucosii / uclinux内核+调试,一个字,爽! 

淡薄以明志,宁静以致远 956

YOLOv8改进,YOLOv8添加可变性卷积DCNv2

DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的ConvNets更接近于对象结构,但这种支持可能远远超出感兴趣区域,导致特征受到不相关图像内容的影响。为了解决这个问题,我们提出了一种可变形卷积网的重新表述,通过提高建模能力和更强的训练,提高了其专注于相关图像区域的能力。通过更全面地集成网络中的可变形卷积,并引入扩展变形建模范围的调制机制,增强了建模能力。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3607

在SkyEye上调试uClinux内核及与主机进行网络通讯

在SkyEye上调试uClinux内核及与主机进行网络通讯 在SkyEye上调试uClinux内核 (blackfin.kang@gmail.com) 1.1 安装skyeye 从服务器下载skyeye-2003-10-06.tar.bz2,然后解压: $ tar  jxvf  skyeye-2003-10-06.tar.bz2 进入skyeye目录,按照readme文件中的要求,

未来软件 1314

FFMPEG音视频开发: Linux下采集音频(alsa-lib库)、视频(V4L2框架)数据编码并实时推流到RTMP流媒体服务器,达到直播功能(推流)

一、环境介绍 操作系统: VM虚拟机运行的ubuntu18.04 FFMPEG版本: 4.4.2 摄像头: 罗技USB摄像头、电脑自带摄像头 声卡:电脑自带声卡 二、FFMPEG、X264的安装 参考这里:FFMPEG开发: Linux下采集摄像头数据录制成MP4视频保存到本: 地https://blog.youkuaiyun.com/xiaolong1126626497/article/d...

2993

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

uClinux学习笔记之三 uClinux驱动开发初步

uClinux学习笔记之三  uClinux驱动开发初步 uClinux和linux的驱动开发是一致的,只是调试的方式不一样,学习uClinux的驱动开发也就是学习linux驱动开发的过程。linux驱动的调试需要至少一台电脑,外加像GDB,KDBG这样的源码级的内核调试工具,如果装一个虚拟机的话,那么只需要一台电脑即可了,但这样对电脑的性能有更高的要求。对于像uClinux的驱动调试,则

I2Cbus的专栏 4480

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

向uClinux中添加应用程序2

以下通过一个具体实例向读者介绍将程序添加到uClinux的标准方法。例如要把前面提到的源程序lednxy.c添加到运行于目标板上的uClinux操作系统中,则文件应在目录/home/nie/uClinux-Samsung/user下,进入uClinux-Samsung/user目录并建立个自己的子目录,比如键入:mkdir myapp,这样在user目录下就建立了一个新的子目录myapp,把led

hitlerisyou的专栏 1309

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

在SkyEye上调试uClinux内核及与主机进行网络通讯(转)

中南大学 gaosong(嵌入式学生) 962

uClinux系统分析详解

简介     Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领

lifan5748的专栏 493

内核调试方法 二

九  KGDB kgdb提供了一种使用 gdb调试 Linux 内核的机制。使用KGDB可以象调试普通的应用程序那样,在内核中进行设置断点、检查变量值、单步跟踪程序运行等操作。使用KGDB调试时需要两台机器,一台作为开发机(Development Machine),另一台作为目标机(Target Machine),两台机器之间通过串口或者以太网口相连。串口连接线是一根RS-232接口的电缆,

bugouyonggan的专栏 2290

uClinux系统简介

uClinux系统简介 <br /><br />简介<br />    Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。<br /><br />

蚊室 825

uclinux驱动开发入门!

        uClinux和linux的驱动开发是一致的,只是调试的方式不一样,学习uClinux的驱动开发也就是学习linux驱动开发的过程。linux驱动的调试需要至少一台电脑,外加像GDB,KDBG这样的源码级的内核调试工具,如果装一个虚拟机的话,那么只需要一台电脑即可了,但这样对电脑的性能有更高的要求。对于像uClinux的驱动调试,则最好是有开发板,也可以用模拟器。在ARM芯片上的移

480

linux运行uclinux程序,uClinux的编译与运行详解

按常规编译完成后应该生成image.bin linux linux.data linux.text romfs.img这5个文件,不过我只有linux/boot.rom(=romfs.img),今天上网查了查它们的定义。romfs.img:这个文件是通过tools/romfs-inst.sh脚本,生成romfs目录及其下面的文件,然后通过genromfs程序打包成一个文件romfs.i...

weixin_39808877的博客 251
上一篇: 世界一流项目经理的54种技巧
下一篇: 十大受欢迎技能
仰泳的鱼儿
博客等级 码龄24年 42粉丝 84原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值