`
阿尔萨斯
  • 浏览: 4170429 次
社区版块
存档分类
最新评论

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

 
阅读更多

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

http://blog.csdn.net/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?





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics