制作RedBoot启动光盘以及下载调试eCos应用

时间:2022-11-20 20:58:06


不是我对软盘有什么意见,反正都是通过虚拟机启动,无论是软盘还是光盘都只是个镜像文件。问题是我使用的VirtualBox虚拟机不支持RedBoot生成的软盘镜像。用二进制工具查看RedBoot生成的镜像文件,原来在第一扇区没有包含FAT文件系统要求的数据结构,本来也就没有使用FAT文件系统嘛,VirtualBox认识第一扇区包含FAT文件系统要求数据结构的软盘镜像,但不认识未包含该数据结构的软盘镜像。又不想修改RedBoot代码,无奈之下想出使用光盘的招数。

本想使用isolinux来制作启动光盘,但一时没找到编译好的isolinux二进制文件,后来发现不用isolinux就可以实现启动光盘制作。如果使用isolinux估计会有更多的麻烦,因为RedBoot的启动代码是通过读取软盘来加载自己的,因此如果使用isolinux最终可能是无法启动的。

编译RedBoot

目标机模板选择:i386 PC target(vmware)

组件包模板选择:redboot

导入配置:<repo>/hal/i386/pc/<version>/misc/redboot_FLOPPY.ecm

保存配置后编译。

制作启动光盘

cd <prefix>_install/bin
dd conv=sync if=redboot.bin of=redboot.flp bs=1440k
mkdir isofs
cp redboot.flp isofs/
mkisofs -o redboot.iso -b redboot.flp isofs/

(2)使用dd命令复制RedBoot镜像并填充至1.44M,刚好是3.5寸软盘的容量,必须是软盘容量大小,否则创建启动光盘失败。

(5)使用mkisofs命令创建启动光盘,光盘镜像文件名为redboot.iso,启动镜像为redboot.flp,使用默认启动方式,默认启动方式将模拟软盘的启动方式,将redboot.flp加载到内存中,然后将redboot.flp镜像作为模拟的软盘,这个工作是BIOS完成的。

使用VirtualBox启动RedBoot

创建虚拟机,选择光盘启动,创建IDE控制器,添加生成的redboot.iso作为光盘镜像。启动后截图如下。

制作RedBoot启动光盘以及下载调试eCos应用

 

 

在真实PC上启动

 

 

理论上可以在真实PC机上通过启动光盘启动RedBoot,但是在我的戴尔一体机上启动失败,ThinkPad笔记本启动失败,原因不明。

GDB连接RedBoot

RedBoot集成了GDB stub功能,因此可以通过GDB连接RedBoot,然后可以加载调试eCos应用。GDB和RedBoot的连接方式可以是串口也可以是网络。

串口连接

修改RedBoot虚拟机配置,启用串口COM1,端口模式选择主机管道,端口/文件位置填入\\.\pipe\vmwaredebug。点​​这里​​下载VMWare Serial Line Gateway,在Windows命令提示符下运行VMWareGateway.exe /T,确保VMWareGateway.exe在当前目录或PATH指定目录内,不能在Cygwin终端下运行该程序。启动RedBoot虚拟机。打开GDB,输入target remote localhost:567建立连接。接下来就可以使用GDB加载eCos应用到虚拟机内并进行调试。

串口连接存在的问题

使用串口连接,无论RedBoot配置波特率为9600还是115200,下载速率均为8KB,显然虚拟机对串口速度进行了限制,大概是为了真实地模拟实际串口操作,但是波特率修改成115200也不能提高下载速度,原因不明,可能虚拟机没有实现虚拟串口设备的波特率设置,8KB的连接速度是不能接受的。比真实硬件的速度还慢,使用虚拟机的目的是解决使用真实硬件速度慢以及不方便的矛盾。显然使用串口连接不能解决这个矛盾。

网络连接

修改RedBoot虚拟机配置,打开网络的高级选项,点击端口转发按钮,添加TCP端口转发,主机端口9000,子系统端口9000。启动RedBoot虚拟机。打开GDB,输入target remote localhost:9000。接下来就可以使用GDB加载eCos应用到虚拟机内并进行调试。

网络连接存在的问题

在我的环境下,网络连接的速度比串口速度还要慢,直接崩溃,下载要等很长时间,调试时有时候响应很快有时候要等好一会。原因不明。我的环境:Windows XP SP3,奔腾双核E5200,VirtualBox-4.2.6。谁知道原因或你的环境可以正常工作,麻烦告诉我,谢谢。

虚拟机替代方案――仿真目标机

仿真目标机(Synthetic Target)将eCos作为Linux下的一个进程来运行,没有硬件的麻烦,没有虚拟机的问题。这次尝试使用虚拟机的惨败使我更加看中仿真目标机。仿真目标机可以满足学习eCos的部分需求(与硬件有关的部分不能通过仿真目标机完成),更重要的是可以使用仿真目标机调试硬件无关组件,例如HTTP服务器,对加快组件开发和测试是非常有帮助的。