首先,配置终端程序,在我们的例子中是 minicom,按以下方式配置:9600 bps,8 位,无奇偶校验,1 个停止位,并且没有任何类型的流控制。Linux 中的串口应该是/dev/ttyS0对于COM1, /dev/ttyS1对于COM2等等。
启动目标机。您应该在终端屏幕上看到 vxWorks 引导加载程序,并且应该能够通过按空格键来停止启动序列。
![]() | 我们不能使用 vxWorks 引导加载程序来加载 Linux 内核,因为它会在 ELF 头部查找并将映像加载到那里写入的地址。然而,使用虚拟内存的 Linux 内核被链接到一个高内存地址,而 vxWorks 无法处理。 |
一旦目标机停止,运行 VisionICE 软件并执行以下步骤
通过按 Target|Initialize 初始化目标机
按下 File|Load Executable。将打开一个对话框,要求您选择一个文件。请选择您的内核映像 (vmlinux)。在按下 Load 之前,不要忘记在+/- 偏置字段中输入一个值。
![]() | 偏置字段使得可以告诉 ICE 将特定映像加载到与 ELF 二进制文件中声明的地址不同的地址。我们想要将内核加载到地址0x300000,并且由于二进制文件被链接到0xC0000000,我们输入了-0xBFD00000. |
一旦映像成功加载,您可以按 Run 或 Step 开始执行您的内核。
![]() | VisionICE 不是调试 Linux 时使用的正确工具。ICE 不了解虚拟内存和保护模式(至少我们拥有的版本是这样),并且由于 Linux 内核很早就开启了虚拟内存,因此 ICE 仅对调试最初的汇编器语句有用。在 VM 开启后,ICE 开始崩溃并给出奇怪的结果。 |