VMware+Ubuntu8.10+Skyeye+gdb实现u-boot源码调试

2024-02-27 13:58

本文主要是介绍VMware+Ubuntu8.10+Skyeye+gdb实现u-boot源码调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VMware+Ubuntu8.10+Skyeye+gdb实现u-boot源码调试

系统平台WindowsXP

虚拟机VMware Workstation 6.5.0

Ubuntu8.10安装程序ubuntu-8.10-desktop-i386.iso

下载地址:http://mirror.ylmf.net/ubuntu/8.10/ubuntu-8.10-desktop-i386.iso

u-boot-1.2.0

官方下载地址:ftp://ftp.denx.de/pub/u-boot/

Skyeye-1.2.6

下载地址

http://sourceforge.net/projects/skyeye/files/skyeye/skyeye-1.2.6_rc1/skyeye-1.2.6_rc1.tar.bz2/download

图形化GDB调试工具:insight-6.8.tar.bz2

下载地址ftp://sourceware.org/pub/insight/releases/

 

(一) 安装虚拟机VMware及虚拟安装Ubuntu8.10

VMware及在VMware上虚拟安装Ubuntu8.10的安装很简单这里不详细描述,不懂的朋友可在Baidu中搜索“Vmware 上安装Ubuntu8.10”,网上这方面的帖子很多。

安装完VMware Ubuntu8.10后要安装VMware Tools

安装好VMware Tools后可以就可在WindowsXPUbuntu8.10间进行文件共享及实现Ubuntu8.10下对屏幕分辨率的调整。

这里给个链接参考:

http://linux.chinaunix.net/techdoc/system/2009/04/30/1109676.shtml

http://blog.chinaunix.net/u3/93889/showart_1915654.html

这两个链接讲的很详细,非常感谢作者如此详细认真的描述。

(二)  为Ubuntu8.10换更新源

用虚拟机运行Ubuntu8.10

打开终端

输入:sudo gedit /etc/apt/sources.list

用以下内容覆盖原文件

#台湾:台湾的官方源速度也相当不错,有时甚至快于内地的

deb http://tw.archive.ubuntu.com/ubuntu intrepid main restricted universe multiverse

deb http://tw.archive.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse

 

deb http://tw.archive.ubuntu.com/ubuntu intrepid-updates main restricted universe multiverse

deb http://tw.archive.ubuntu.com/ubuntu intrepid-backports main restricted universe multiverse

deb http://tw.archive.ubuntu.com/ubuntu intrepid-proposed main restricted universe multiverse

deb-src http://tw.archive.ubuntu.com/ubuntu intrepid main restricted universe multiverse

deb-src http://tw.archive.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse

deb-src http://tw.archive.ubuntu.com/ubuntu intrepid-updates main restricted universe multiverse

deb-src http://tw.archive.ubuntu.com/ubuntu intrepid-backports main restricted universe multiverse

deb-src http://tw.archive.ubuntu.com/ubuntu intrepid-proposed main restricted universe multiverse

 

#电信服务器,Ubuntu China Official Mirror, maintained by Shanghai Linux User Group):

deb http://cn.archive.ubuntu.com/ubuntu intrepid main restricted universe multiverse

deb http://cn.archive.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse

deb http://cn.archive.ubuntu.com/ubuntu intrepid-updates main restricted universe multiverse

deb http://cn.archive.ubuntu.com/ubuntu intrepid-backports main restricted universe multiverse

deb http://cn.archive.ubuntu.com/ubuntu intrepid-proposed main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu intrepid main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu intrepid-updates main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu intrepid-backports main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu intrepid-proposed main restricted universe multivers

 

保存并退出。

在终端中输入:sudo apt-get update 更新列表。

由于更新源很多,可根据情况选择速度较快的几个。

(三) 用新立得软件管理器更新安装以下软件包

binutils

binutils-dev

build-essential

libx11-dev

libncurse5-dev

texinfo

autoconf

 

点击System-》系统管理-》新立得软件管理器 输入root权限密码 在软件管理器中标记以上软件,然后点击Apply进行软件包的安装。

(四) Skyeye的安装

下载skyeye-1.2.6_rc1.tar.bz2

tar  jxvf  skyeye-1.2.6_rc1.tar.bz2

cd   skyeye-1.2.6_rc1

修改文件 device/nandflash/nandflash_smallblock.c line 519  to

if(( nf->fdump=open(dev->dump,FILE_FLAG,0666))<0)

./configure

make

make install

查看/usr/local/bin,多出一项skyeye,这就是我们启动skyeye的命令文件。之后可在任何目录下运行skyeye。

在终端输入skyeye将显示以下内容,说明安装正确:

**************************** WARNING **********************************

If you want to run ELF image, you should use -e option to indicate

your elf-format image filename. Or you only want to run binary image,

you need to set the filename of the image and its entry in skyeye.conf.

***********************************************************************

 

Your elf file is little endian.

Failed to open skyeye config file skyeye.conf in the same directory

error: No such file or directory

SkyEye 1.2.6

Bug report: skyeye-developer@lists.gro.clinux.org

Usage: skyeye [options] -e program [program args]

Default mode is STANDALONE mode

------------------------------------------------------------------

Options:

-e exec-file        the (ELF executable format)kernel file name.

-l load_address,load_address_mask

                    Load ELF file to another address, not its entry.

-b                  specify the data type is big endian when non "-e" option.

-d                  in GDB Server mode (can be connected by GDB).

-c config-file      the skyeye configure file name.

-h                  The SkyEye command options, and ARCHs and CPUs simulated.

------------------------------------------------------------------

----------- Architectures and CPUs simulated by SkyEye-------------

-------- ARM architectures ---------

at91

lpc

s3c4510b

s3c44b0x

s3c44b0

s3c3410x

ep7312

lh79520

ep9312

cs89712

sa1100

pxa_lubbock

pxa_mainstone

at91rm92

s3c2410x

s3c2440

sharp_lh7a400

ns9750

-------- BlackFin architectures ----

bf533

bf537

(五) 安装arm-linux交叉编译工具链

交叉编译工具可以自己编译或使用别人已经编译好的交叉编译工具。

交叉编译工具的制作过于复杂,有兴趣有时间的可以学习下如何制作,这里我就使用别人已经编译好的交叉编译工具cross-3.2

下载地址:ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/

sudo cp cross-3.2.tar.bz2 /  将cross-3.2.tar.bz2 拷贝到跟目录下

sudo tar jxvf  cross-3.2.tar.bz2

sudo rm –rf cross-3.2.tar.bz2

/usr/local/下会多出一arm文件夹

/usr/local/arm 就是交叉编译工具所在的目录

设置环境变量PATH

sudo gedit /ect/apt/environment

将 :/usr/local/arm/bin 加入末尾保存并退出

注销重新登陆

在终端输入 arm-linux-gcc -v 显示以下信息说明安装正确

Reading specs from /usr/local/arm/bin/../lib/gcc-lib/arm-linux/3.2/specs

Configured with: ./configure --target=arm-linux --prefix=/usr/local/arm/ --with-headers=/home/sylam/armbuild/src/linux/include --disable-shared --disable-threads --enable-languages=c : (reconfigured) ./configure --target=arm-linux --prefix=/usr/local/arm/ --with-headers=/home/sylam/armbuild/src/linux/include

Thread model: posix

gcc version 3.2

 

(六) 编译u-boot

下载u-boot-1.2.0.tar.bz2

官方下载地址:ftp://ftp.denx.de/pub/u-boot/

tar jxvf u-boot-1.2.0.tar.bz2

cd u-boot-1.2.0

修改common/cmd_bootm.c

将第464-477

U_BOOT_CMD(

     bootm,   CFG_MAXARGS,     1,    do_bootm,

     "bootm   - boot application image from memory\n",

     "[addr [arg ...]]\n    - boot application image stored in memory\n"

     "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"

     "\t'arg' can be the address of an initrd image\n"

#ifdef CONFIG_OF_FLAT_TREE

      "\tWhen booting a Linux kernel which requires a flat device-tree\n"

      "\ta third argument is required which is the address of the of the\n"

      "\tdevice-tree blob. To boot that kernel without an initrd image,\n"

      "\tuse a '-' for the second argument. If you do not pass a third\n"

      "\ta bd_info struct will be passed instead\n"

#endif

);

改为:

#ifdef CONFIG_OF_FLAT_TREE
U_BOOT_CMD(
    bootm,  CFG_MAXARGS,    1,  do_bootm,
    "bootm   - boot application image from memory\n",
    "[addr [arg ...]]\n    - boot application image stored in memory\n"
    "passing arguments 'arg ...'; when booting a Linux kernel,\n"
    "\t'arg' can be the address of an initrd image\n"
    "\tWhen booting a Linux kernel which requires a flat device-tree\n"
    "\ta third argument is required which is the address of the of the\n"
    "\tdevice-tree blob. To boot that kernel without an initrd image,\n"
    "\tuse a '-' for the second argument. If you do not pass a third\n"
    "\ta bd_info struct will be passed instead\n"
);
#else
U_BOOT_CMD(
    bootm,  CFG_MAXARGS,    1,  do_bootm,
    "bootm   - boot application image from memory\n",
    "[addr [arg ...]]\n    - boot application image stored in memory\n"
    "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"
    "\t'arg' can be the address of an initrd image\n"
);
#endif

原文参见:http://shkliu.blogbus.com/logs/7898682.html

编译u-boot

make smdk2410_config

make

(七) GCC 版本降由GCC-4.3.2GCC-4.2.0

GCC-4.3.2版本过高对语法要求较严格编译gdb会有错误,若出现编译错误可将gcc 版本降低

sudo apt-get install gcc-4.2

rm /usr/bin/gcc

ln –s /usr/bin/gcc-4.2 /usr/bin/gcc

运行gcc –v查看gcc 版本将显示以下信息

Using built-in specs.

Target: i486-linux-gnu

Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu

Thread model: posix

gcc version 4.2.4 (Ubuntu 4.2.4-3ubuntu4)

 

要更改其他gcc 版本方法同上。

(八) 安装gdb-6.8

下载gdb-6.8.tar.bz2

 tar jxvf gdb-6.8.tar.bz2

 cd gdb-6.8

./configure  --target=arm-linux

make

sudo make install

编译 gdb-server

cd gdb-6.8/gdb/gdbServer

./configure  --target=arm-linux --host=arm-linux

make CC=/usr/local/arm/bin/arm-linux-gcc

 

(九) 安装图形化GDB调试工具:insight-6.8

下载insight-6.8.tar.bz2

下载地址ftp://sourceware.org/pub/insight/releases/

tar jxvf insight-6.8.tar.bz2

cd insight-6.8

./configure --target=arm-linux  --enable-sim --prefix=/usr/local

make

sudo make install

 

安装结束后在/usr/local/bin 中会有arm-linux-insight

在终端中是输入 arm-linux-insight 将启动insight

 

(十) arm-linux-insight skyeyeu-boot 进行调试

cd $HOME

mkdir skyeye

拷贝第六步中u-boot-1.2.0目录下编译生成的u-boot u-boot.bin文件到此文件下

建立skyeye.conf 文件

文件内容如下:

 

# skyeye config file for S3C2410X

 

cpu: arm920t

mach: s3c2410x

 

# physical memory

mem_bank: map=M, type=RW, addr=0x00000000, size=0x00100000

mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000

#mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./u-boot.bin,boot=yes

mem_bank: map=M, type=RW, addr=0x30000000, size=0x03f80000

mem_bank: map=M, type=RW, addr=0x33F80000, size=0x00080000,file=./u-boot.bin,boot=yes

 

# all peripherals I/O mapping area

mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000

mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020

net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=08:00:3E:26:0A:5B, ethmod=tuntap, hostip=192.168.245.100

#nandflash: type=s3c2410x,name=K9F1208U0B,dump=./nand.dump

#lcd: type=s3c2410x, mod=gtk

#dbct:state=on

 

 

 

 

 

(十一) U-boot源代码调试

进入skyeye文件夹,用-d命令启动skyeye

终端输入命令:

sudo skyeye –c  skyeye.conf –d

skyeye 将进入debug模式在TCP:12345端口等待gdb连接,u-boot程序运行到第一条指令0x33f8000处暂停

 

配置arm-linux-insight

按如下图所示:

打开文件:File-》Open

File-》Target Settings

 

如上图在0x33f80000 处设置断点(红色)

然后连接目标

Run-》Connect to target

如上图显示程序运行到0x33f80000 处(绿色)

按下Ctrl+R 将显示寄存器窗口,可以观察当前各Register的值,如下图

 

按下N程序将跳到reset 处如下图

 

 

我们在board.c start_armboot 入口处设置断点然后按下C键程序将在start_armboot入口处暂停

 

 

如上图所示我们可以对u-boot进行断点,单步跟踪调试。

       此篇文章是我在上海出差期间,闲暇之余做的总结,因为涉及的方面比较多,很多地方介绍不详细,可能会有很多错误,仅做为有兴趣用Skyeye搭建仿真开发环境的朋友提供参考。我觉得这一平台很适合那些想学习嵌入式开发的同学,在没有硬件的情况下不妨以此为出发点。既然现在可以调试u-boot,那我想应该也可以调试操作系统吧,比如可以从ucosii开始。

关于如何解决错误,在试验过程中在所难免出现这样那样的错误,我碰到了许多问题,有编译器版本问题,有缺少库文件的问题,以及一些源码有错误的地方。出现问题最好的方法不是马上发帖去问,应该把终端输出的错误信息中最重要的部分copy下来到百度里去搜索下,很有可能你遇到的问题已经有人遇到过且已经有解决方法。我觉得大部分问题是都可以找到答案的。

最后一点,虽然本文也借鉴了许多人的帖子,但毕竟也是辛苦总结出来的,希望转载的朋友注明出处,也算是对别人辛苦成果的一种肯定吧。

博客推荐文章
  • QT 曲线绘制 (1小时前)
  • android:shape的使用 (2小时前)
  • 动态调用动态库方法 c/c++ linux windows (3小时前)
  • USB 3G卡热插拔那些事1 (13小时前)
  • 安装Skyeye学习ARM汇编 (13小时前)

这篇关于VMware+Ubuntu8.10+Skyeye+gdb实现u-boot源码调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752628

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依