通过jtag在目标上加载linux内核

时间:2013-02-18 14:30:19

标签: linux-kernel gdb boot jtag

我正在尝试通过AM3517评估板上的JTAG加载和启动Linux内核。我的调试器是BDI3000。我没有使用openocd,因为根据调试器的文档,它不是必需的。到目前为止,我认为我能够将vmlinux映像加载到内存中,但一旦完成,“cont”gdb命令就无法启动linux。我在串行控制台上没有收到任何消息。

我按照此链接http://elinux.org/Debugging_The_Linux_Kernel_Using_Gdb

中的说明进行操作

尝试获取链接中提到的log_buffer的地址,为我提供了以下输出

(gdb) p (char*) &__log_buf[log_start]
$1 = 0xc04cd460 <Address 0xc04cd460 out of bounds>

我在互联网上搜索过很多但找不到合适的答案。 不确定我做错了什么。

1 个答案:

答案 0 :(得分:2)

Linux内核不能只是加载然后执行 在可以执行Linux内核之前,ARM体系结构需要引导加载程序:

  • 配置内存系统。
  • 将内核映像加载到正确的内存地址。
  • (可选)将初始RAM磁盘加载到正确的内存地址。
  • 初始化引导参数以传递给内核(也称为内核命令行)。
  • 获取ARM Linux机器类型(以及ATAG的其他信息)
  • 输入具有相应寄存器值的内核。

这些步骤中的大多数对于所有体系结构都是通用的,但ATAG的系统信息列表对于ARM来说是唯一的 所有这些启动要求都在"Booting ARM Linux"中提到 通常,引导加载程序(例如U-Boot)执行这些任务 您提到的教程告诉您使用引导加载程序来初始化您的电路板:

  

最实用的方法是在内核开始时设置硬件断点   并使用JTAG复位信号重置电路板   您的引导加载程序将初始化您的电路板,执行将在内核开始时停止   之后,您可以将内核加载到内存中并运行它。