版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用PEEDI 调试ARM Linux核和应用程序关键词:调试ARM Linux核,区分受保护区间,Ronetix PM9261,GNU工具;1、简介现在越来越流行的基于32位ARM高速微处理器允许Linux进入嵌入式。这就是调试它的内核和应用软件变得重要的原因。因为Linux是一个多进程的操作系统,它利用一个Memory Management Unit (MMU)给每一个进程分开的存储空间。同时,MMU负责把这些受保护的过程存储空间区分开来。不同进程的选择使得调试变得复杂,现在我将会向你展示如何在没有干预过程下调试Linux核和应用软件。我需要的一些工具为了本文的操作说明,我将会用到ARM-E
2、LF ,ARM-LINUX GNU系列工具和Ronetix PM9261。Ronetix 是装有Linux操作系统的。2.调试内核2.1内核的建立2.1.1安装GNU系列工具wget cd /tar xvfj ronetix-gnutools-arm-elf-4.1.1-linux.tar.bz2export PATH=/usr/cross/arm-elf/bin:$PATHexport ARCH=armexport CROSS_COMPILE=arm-elf-2.1.2安装和编制Linux核cdmkdir ronetixcd ronetixwget wget wget tar xvfj li
3、nux-2.6.23.tar.bz2cd linux-2.6.23.14patch -p1 < ./2.6.23-at91.patchpatch -p1 < ./linux-2.6.23-ronetix.patchmake pm9261_defconfigmake menuconfig- go to “Kernel hacking” and enable the “Kernel debugging” optionmake cleanmake modules- generate vmImage:mkdir imagecd imagearm-elf-objcopy -O binary
4、-S ./vmlinux vmlinux.bingzip -f9 vmlinux.binmkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -n "PM9261 Linux Kernel Only Image" -d vmlinux.bin.gz vmImagerm vmlinux.bin.gzcd .编程的二进制文件是:image/vmImage2.1.3安装核单元cdcd ronetixwget su -tar xvfj rootfs-pm926x-openzaurus.tar.bz
5、2cd linux-2.6.23.14make INSTALL_MOD_PATH=./openzaurus-gpe-install-ronetix modules_install2.1.4产生ROOTFS程序cdcd ronetixmkfs.jffs2 -v -n -d openzaurus-gpe-install-ronetix -little-endian -pad -eraseblock=131072 -pagesize=2048 -o rootfs.jffs2编程的二进制文件是:rootfs.jffs22.2 U-BOOT,内核和ROOTFS编程跟启动装入器一样拷贝刚才编写的vmIma
6、ge 和rootfs.jffs2文件()到你的T的根目录下,改正PEEDI的 configuration文件的路径。打开系列或者远程操作台到PEEDI:telnet 192.168.3.100 ; assuming the IP address of PEEDI is 192.168.3.100peedi> flash set 0 ; select the first flash profile (U-BOOT)peedi> flash erasepeedi> flash programpeedi> flash set 1 ; select the second fla
7、sh profile (Kernel)peedi> flash programpeedi> flash set 2 ; select the ROOTFS flash pro> flash erasepeedi> flash program代替上面的指令,用一个指令就可以编译所有的程序:peedi> run $prog2.3核调试这块板将会由u-boot编程,以vmlinux 和 the rootfs二进制形式。开始gdb/insight。Arm-elf-insight vmlinux在gdb的控制窗口:(gdb) target remote 192.168.3.
8、100:2000(gdb) set $pc = 0x10000040 ; assuming the u-boot is flashed at 0x10000000(gdb) c这块板开始运行了,u-boot第一个启动,然后是Linux核。如果你有系列的控制台,你可以看到Linux开始运行了。现在你可以暂停这个核,设置你想要的断点。如果你想在核运行之前设置断点,那么用这个暂停指令就不是那么好了,因为我们可能在用户进程里面中断了。所以最好在核里的某一部分设置。比如我们可以在start_kernel() 的main.c处设断点。用nm工具将会发现这个正确的地址。(gdb) target remote
9、 192.168.3.100:2000(gdb) set $pc = 0x10000040 ; assuming the u-boot is flashed at 0x10000000(gdb) hbreak start_kernel ; hardware breakpoint is used because the MMU is still not active(gdb) c这个板运行了(先u-boot,后内核),在start_kernel函数里面将会停止。(gdb) delete ; delete the hardware breakpoint现在你可以用软件设断点。我们可以把中断和观测点
10、放在我们想要目标中断的点,然后调试它,重新启动。如果到达了一些中断,目标将会停止,gdb将会显示相应的源文件。你可以进入和跳过引用函数,添加和除掉断点,观察变化的参数和检查目标的存储等等操作。3,应用软件的调试调试Linux的应用软件跟调试某些典型的核很相似。这个"Hello world"像我们调试的应用程序。#include <stdio.h>int main()printf( "Halting the target.rn" );asm( ".long 0xDFFFDFFF" ); / halt the target a
11、nd let us put breaksprintf( "Entering eternal loop.rn" );while ( 1 )sleep( 1 );printf( "tickrn" );return 0;这个0xDFFFDFFF值指定用PEEDI目标文件里的CORE_BREAK_PATTERN指令,打断add-1指令一定要添加到INIT部分,用来设置中断模式ARM调试记录我将会用-g选择来完成它,将包括gdb调试文件。arm-linux-gcc -g O0 main.c -o main.elf现在我们必须在目标中启动Linux,直到它显示Lin
12、ux 注册的提示。注册并启动这个应用。它将会显示一行"Halting the target.",并且执行它。这就体现了在maim()函数第二行的中断模式。我将会在这里给出更多的例子。通常Linux核是从比用户app更高的地址开始执行的,它的地址空间不会重叠任何其他进程的地址空间。换句话说,这里只有一个虚拟的用这些存储范围的地址空间,它属于内核的。这就允许我们用硬件中断,观察点和保证只有内核可以影响它们。跟内核不一样,用户的应用软件用同样的虚拟地址(是被MMU转移的不同的物理地址)。这就意味着,如果我们设置硬件中断,观测所有用户的进程的话将有可能影响到它。这就是为什么当调试用
13、户程序的时候只有用软件中断。这种方式它们就专注于已经调试过的进程,保证没有其它的进程干扰它们。这样的结果就是,目标的异步停止一定要避免。因为不保证当执行调试过程的时候CPU将会停止。这就意味着暂停PEEDI的指令,gdp的CTRL-C或者里面的停止按钮不一定要用到了。取代软件中断的设置在调试过程必须停止的地方。要提醒你的是你一定要在PEEDI的目标文件里设置CORE_BREAKMODE参数。 现在你就明白我为什么要用硬件中断来暂停内核了,但是在应用源中的软件中断模式来停止用户的进程。所以进程(和整个目标)暂停后,我可以看到现在的PC值,增加4(2个在THUMB里面已经调试过了)和设置回PC里。这样做只是跳过bkpt 指令:peedi> info targetCORE0 -> ARM9 - stopped by breakpoint (ARM9)PC=0x000083B8, CPSR=0x60000010peedi> set pc 0x83BC我们可以在主机里启动gdp:arm-elf-insight main.elf然后连接到PEEDI:(gdb) target remote 192.168.1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省广州番禺区七校联考2025-2026学年初三下学期周测英语试题含解析
- 2026届重庆市北碚区初三下学期联考押题卷语文试题试卷含解析
- 信息系统安全稳定维护策略
- 能源管控成果提升承诺书3篇范文
- 教育科学研究公平保证函9篇
- 科研成果创新维护承诺书6篇范文
- 智慧城市建设贡献承诺书6篇
- 企业培训需求分析模板员工成长与企业发展双赢版
- 智能出行技术指南手册
- 供应商交货周期协商商洽函8篇
- 尾箱集市商业计划书
- 精酿馆策划方案
- 少先队德育知识讲座
- 中医康复实训室方案及流程
- (完整)CRH380A动车组轮对检修流程及改进方案
- 四川省省属卫生事业单位公开招聘卫生专业技术岗位人员公共科目笔试大纲
- 船舶液压系统常见故障分析及解决方案
- 2023年中级注册安全工程师《安全生产专业实务(建筑施工安全)》真题及答案
- THSPP 0010-2023 欧标茶生产茶园栽培技术规程
- 危化品考试题库及答案参考
- 1213 日本当代建筑的坡屋顶的知识
评论
0/150
提交评论