分析linaro-media-create 创建的qemu模拟sd卡文件。

本文详细介绍了如何使用linaro-media-create工具为qemu模拟器上的beagleboard创建SD卡映像文件,并通过分析该文件内部结构,手动创建定制化的SD卡映像,以解决启动问题。

在前面的文章《测试qemu上的beagleboard》中我们在测试了qemu模拟器上的beagleboard,文章链接如下:

http://blog.youkuaiyun.com/keyboardota/article/details/7580845


在文章中我们可以发现qemu模拟器使用了一个img文件作为模拟的sd卡,而这个模拟的sd卡文件是通过linaro项目中的linaro-media-create工具创建的,创建命令如下:

sudo linaro-media-create --image_file beagle_sd.img --dev beagle --binary nano-n-tar-20110823-1.tar.gz --hwpack hwpack_linaro-omap3_20110823-0_armel_supported.tar.gz


通过分析该命令我们可以知道linaro-media-create创建beagle_sd.img文件时使用了nano-n-tar-20110823-1.tar.gz和hwpack_linaro-omap3_20110823-0_armel_supported.tar.gz两个文件,而且linaro-media-create命令必须带--binary和--hwpack两个参数。也就是说我们不能简单地使用linaro-media-create创建空的模拟sd卡文件。

如果我们直接使用qemu-img命令创建img文件,并通过一般步骤格式化该img文件的话,使用qemu-system-arm启动对应的img文件时会报“no boot device found”,命令执行过程如下:

sudo qemu-system-arm -M beaglexm -m 512 -sd ./harddisk.img -clock unix -serial stdio
qemu: hardware error: no boot device found


这就给qemu上的beagleboard测试带来一些麻烦,我们无法有效地控制模拟sd卡的制作过程。


于是产生一个想法,准备分析linaro-media-create命令生成的img文件,利用该img文件作为基础创建我们自己定制的sd卡模拟器文件


为了分析linaro-media-create命令生成的img文件,首先将该文件loop回到设备上,命令如下:

sudo losetup /dev/loop3 ./beagle_sd.img

通过以上命令将beagle_sd.img文件变成了一个/dev/loop3设备


然后通过fdisk命令查看/dev/loop3设备:

sudo fdisk /dev/loop3


进入fdisk命令界面后通过p命令列出所有分区,结果如下:

Device Boot Start End Blocks Id System
/dev/loop3p1 * 63 106494 53216 c W95 FAT32 (LBA)
/dev/loop3p2 106496 6291455 3092480 83 Linux

列出分区后通过q命令退出,注意不要修改分区信息,也不要保存任何修改,否则可能破坏beagle_sd.img文件。


可以看到模拟的sd卡文件中分了两个区,开始位置分别是63和106496. 有了这些信息就可将这两个分区单独loop进来并mount成一个目录。


首先去除/dev/loop3的挂接:

sudo losetup -d /dev/loop3


然后通过以下命令将beagle_sd.img文件中的第一个分区加载进来:

sudo mount -o loop,offset=$[63*512] ./beagle_sd.img ./mountpoint

然后进入mountpoint目录,就可以查看第一个分区内的文件了,通过ls命令列出的文件如下:

board.dtb boot.ini boot.scr boot.txt MLO u-boot.bin uImage uInitrd

这样就可以操作beagle_sd.img文件中的第一个分区了,比如你要修改其中的boot.scr,或者拷贝你自己的uImage文件进来,都可以通过一般的linux命令进行,注意在命令前加上sudo


对应地,如果想修改beagle_sd.img中的第二个分区,使用以下命令进行挂载:
sudo mount -o loop,offset=$[106496*512] ./beagle_sd.img ./mountpoint

然后通过ls命令列出的文件列表如下:

bin etc lib media proc selinux tmp vmlinuz
boot home lost+found mnt root srv usr
dev initrd.img md5sum.txt opt sbin sys var

同样你可以通过一般的Linux命令操作这个模拟分区。


准备好在qemu的beagleboard上运行你编译的beagleboard系统了吗? 比如, QNX? Android?





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值