180 likes | 329 Views
1. 2. 3. 4. 5. 8.3 μClinux 内核调试实验. 实验目的. 实验设备. 实验内容. 实验原理. 实验操作步骤. 一、实验目的. 了解和掌握 μClinux 的内核调试方法。. 二、实验设备. 硬件: Embest S3CEV40 实验平台, Embest 仿真器, PC 机 软件: Embest IDE 2003 , Windows 98/2000/NT/XP 下的 cygwin 开发环境. 三、实验内容. 使用 Embest IDE 软件进行内核调试,并将内核在运行过程中的调试信息打印到终端。. 四、实验原理.
E N D
1 2 3 4 5 8.3 μClinux 内核调试实验 实验目的 实验设备 实验内容 实验原理 实验操作步骤
一、实验目的 • 了解和掌握μClinux的内核调试方法。
二、实验设备 • 硬件:Embest S3CEV40实验平台, Embest仿真器,PC机 • 软件:Embest IDE 2003, Windows 98/2000/NT/XP下的cygwin开发环境
三、实验内容 • 使用Embest IDE软件进行内核调试,并将内核在运行过程中的调试信息打印到终端。
四、实验原理 • μClinux内核启动过程 Flash本地运行方式:内核的未经压缩的可执行映像固化在Flash,系统启动时内核从Flash中开始逐句执行。 压缩内核加载方式:内核的压缩映像固化在Flash上,系统启动时由附加在压缩映像前的解压复制程序读取压缩映像,在内存中解压后执行,这种方式相对复杂,但是运行速度更快(RAM的存取速率要比Flash高)。
四、实验原理 • Flash本地运行方式: • 内核的启动包括特定体系结构设置和μClinux系统初始化两步 • 内核启动的入口文件是head-armv.s。 • head-armv.s实现特定体系结构设置 • start_kernel实现 μClinux系统初始化
四、实验原理 • head-armv.s的基本运行过程: • 配置系统寄存器; • 初始化ROM、RAM以及总线控制寄存器等; • 设置堆栈指针,将bss段清零; • 修改pc指针,跳转到linux-2.4.x/init/main.c中的start_kernel函数,开始μClinux系统的初始化。
四、实验原理 • 配置内核在RAM中执行 • 生成内核映像文件 • 设置Embest IDE • 调试内核 • Embest IDE调试内核 进行内核调试时,通常使用未经压缩在RAM中执行的内核映像
四、实验原理 • 1、在内核定制Customize Kernel Settings中,系统类型System Type中选择内核执行方式Kernel executes from为RAM。 • 2、在链接脚本文件linux-2.4.x/arch/armnommu/vmlinux.lds中设置内核运行起始地址为0x8000。 • 配置内核在RAM中执行
四、实验原理 • 设置 Embest IDE • 在调试设置中,设置调试信息文件为 linux-2.4.x/linux,下载文件为image.ram,下载地址为0x8000。
四、实验原理 • 依次执行Debug菜单中的Remote Connect和Download命令,反汇编窗口将显示μClinux内核的汇编执行代码,此时可以通过IDE使用断点设置、单步执行、变量监视、寄存器查看修改等方法对μClinux内核进行调试。 • 调试内核
四、实验原理 • start_kernel()函数,在执行完其中的console_init()函数之前,串行口终端不会输出任何信息,因此可以通过串行口终端输出console_init()函数后执行信息。 • 串口打印信息调试内核
四、实验原理 • 第一部分的信息调用函数printk()输出,该函数在linux-2.4.x/kernel/printk.c中。 • 第二部分信息是在文件系统装载以后,执行/etc/rc文件里的系统命令的打印结果,这些打印信息是由user/sash/文件夹下的sash.c文件中包含的printf("Command: %s\n",buf)命令产生。 • 超级终端显示的启动信息分两部分
五、实验操作步骤 • 1、准备实验环境,使用Embest S3CEV40目标板附带的串口线连接目标板上的UART0和PC机的串口,使用Embest S3CEV40目标板附带的网线连接目标板上的ETHERNET和PC机的网口。 • 2、在PC机上运行Windows自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
五、实验操作步骤 • 3、在cygwin下修改内核,如在start_kernel函数里的mem_init函数前加入一句“printk(“This is mem_init............................./n”);”。编译出μClinux内核,进入μClinux目录下的linux-2.4.x目录,对elf格式的linux文件执行以下命令,生成可执行文件image.ram: arm-elf-objcopy -O binary -R .note -R .comment -S linux image.ram
五、实验操作步骤 • 对linux文件执行以下命令,生成μClinux内核的反编译文件: arm-elf-objdump –S linux | tee linux.dump
五、实验操作步骤 • 4、Embest仿真器连接目标板Embest S3CEV40,使用Embest IDE通过Embest仿真器与目标板建立联系。 • 将image.ram放到D盘根目录(或其他目录)下,因为μClinux内核从RAM地址0x8000处开始执行,所以Embest仿真器下载的起始地址定为0x8000。
五、实验操作步骤 • 将image.ram文件下载到目标板RAM中。在Embest IDE的Toggle Output框里输入以下下载命令: download d:\image.ram 0x8000 5、Embest IDE的Disassembly框里出现的码就是μClinux内核的汇编执行代码。 6、用Embest IDE在0x8000地址处运行内核。