18
8.3 μClinux 内内内内内内 内内内内内内 内内内内 内内内内 内内内内 内内内内 1 2 3 4 5

8.3 μClinux 内核调试实验

  • Upload
    carsyn

  • View
    117

  • Download
    5

Embed Size (px)

DESCRIPTION

1. 2. 3. 4. 5. 8.3 μClinux 内核调试实验. 实验目的. 实验设备. 实验内容. 实验原理. 实验操作步骤. 一、实验目的. 了解和掌握 μClinux 的内核调试方法。. 二、实验设备. 硬件: Embest S3CEV40 实验平台, Embest 仿真器, PC 机 软件: Embest IDE 2003 , Windows 98/2000/NT/XP 下的 cygwin 开发环境. 三、实验内容. 使用 Embest IDE 软件进行内核调试,并将内核在运行过程中的调试信息打印到终端。. 四、实验原理. - PowerPoint PPT Presentation

Citation preview

Page 1: 8.3 μClinux  内核调试实验

8.3 μClinux 内核调试实验

实验操作步骤

实验原理

实验内容

实验设备 实验目的1

2

3

4

5

Page 2: 8.3 μClinux  内核调试实验

一、实验目的

了解和掌握 μClinux 的内核调试方法。

Page 3: 8.3 μClinux  内核调试实验

硬件: Embest S3CEV40 实验平台, Embest 仿真器, PC 机

软件: Embest IDE 2003 , Windows 98/2000/NT/XP 下的 cygwin 开发环境

二、实验设备

Page 4: 8.3 μClinux  内核调试实验

三、实验内容

使用 Embest IDE 软件进行内核调试,并将内核在运行过程中的调试信息打印到终端。

Page 5: 8.3 μClinux  内核调试实验

四、实验原理

1. Flash 本地运行方式:内核的未经压缩的可执行映像固化在 Flash ,系统启动时内核从 Flash 中开始逐句执行。

2. 压缩内核加载方式:内核的压缩映像固化在 Flash 上,系统启动时由附加在压缩映像前的解压复制程序读取压缩映像,在内存中解压后执行,这种方式相对复杂,但是运行速度更快( RAM 的存取速率要比 Flash 高)。

μClinux 内核启动过程

Page 6: 8.3 μClinux  内核调试实验

四、实验原理

Flash 本地运行方式:

1. 内核的启动包括特定体系结构设置和 μClinux系统初始化两步

2. 内核启动的入口文件是 head-armv.s 。

3. head-armv.s 实现特定体系结构设置

4. start_kernel 实现 μClinux 系统初始化

Page 7: 8.3 μClinux  内核调试实验

四、实验原理

1. 配置系统寄存器;2. 初始化 ROM 、 RAM 以及总线控制寄

存器等;3. 设置堆栈指针,将 bss 段清零;4. 修改 pc 指针,跳转到 linux-2.4.x/init/ma

in.c 中的 start_kernel 函数,开始 μClinux 系统的初始化。

head-armv.s 的基本运行过程:

Page 8: 8.3 μClinux  内核调试实验

四、实验原理

1. 配置内核在 RAM 中执行 2. 生成内核映像文件 3. 设置 Embest IDE

4. 调试内核

进行内核调试时,通常使用未经压缩在RAM 中执行的内核映像

Embest IDE 调试内核

Page 9: 8.3 μClinux  内核调试实验

四、实验原理

1 、在内核定制 Customize Kernel Settings 中,系统类型 System Type 中选择内核执行方式 Kernel executes from 为 RAM 。

2 、在链接脚本文件 linux-2.4.x/arch/armnommu/vmlinux.lds 中设置内核运行起始地址为 0x8000 。

配置内核在 RAM 中执行

Page 10: 8.3 μClinux  内核调试实验

四、实验原理

在调试设置中,设置调试信息文件为 linux-2.4.x/linux ,下载文件为 image.ram ,下载地址为 0x8000 。

设置 Embest IDE

Page 11: 8.3 μClinux  内核调试实验

四、实验原理

依次执行 Debug 菜单中的 Remote Connect 和 D

ownload 命令,反汇编窗口将显示 μClinux 内核的汇编执行代码,此时可以通过 IDE 使用断点设置、单步执行、变量监视、寄存器查看修改等方法对 μClinux 内核进行调试。

调试内核

Page 12: 8.3 μClinux  内核调试实验

四、实验原理

start_kernel ()函数,在执行完其中的 console_init ()函数之前,串行口终端不会输出任何信息,因此可以通过串行口终端输出 console_init ()函数后执行信息。

串口打印信息调试内核

Page 13: 8.3 μClinux  内核调试实验

四、实验原理

1. 第一部分的信息调用函数 printk ()输出,该函数在 linux-2.4.x/kernel/printk.c 中。

2. 第二部分信息是在文件系统装载以后,执行 /etc/rc 文件里的系统命令的打印结果,这些打印信息是由 user/sash/ 文件夹下的 sash.c 文件中包含的 printf("Command: %s\n",buf) 命令产生。

超级终端显示的启动信息分两部分

Page 14: 8.3 μClinux  内核调试实验

五、实验操作步骤

1 、准备实验环境,使用 Embest S3CEV40 目标板附带的串口线连接目标板上的 UART0 和PC 机的串口,使用 Embest S3CEV40 目标板附带的网线连接目标板上的 ETHERNET 和PC 机的网口。

2 、在 PC 机上运行 Windows 自带的超级终端串口通信程序(波特率 115200 、 1 位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。

Page 15: 8.3 μClinux  内核调试实验

五、实验操作步骤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

Page 16: 8.3 μClinux  内核调试实验

五、实验操作步骤

对 linux 文件执行以下命令,生成 μClinux内核的反编译文件:

arm-elf-objdump –S linux | tee linux.dump

Page 17: 8.3 μClinux  内核调试实验

五、实验操作步骤

4 、 Embest 仿真器连接目标板 Embest S3CEV40 ,使用 Embest IDE 通过 Embest 仿真器与目标板建立联系。

将 image.ram 放到 D 盘根目录(或其他目录)下,因为 μClinux 内核从 RAM 地址 0x8000 处开始执行,所以 Embest 仿真器下载的起始地址定为 0x8000 。

Page 18: 8.3 μClinux  内核调试实验

五、实验操作步骤

将 image.ram 文件下载到目标板 RAM 中。在 Embest IDE 的 Toggle Output 框里输入以下下载命令:

download d:\image.ram 0x8000

5 、 Embest IDE 的 Disassembly 框里出现的码就是 μClinux 内核的汇编执行代码。

6 、用 Embest IDE 在 0x8000 地址处运行内核。