【嵌入式】QEMU模拟FriendlyArm的Mini2440开发板
0赞此博文是我的51CTO的博客转贴过来的,希望对大家有帮助。 http://4526621.blog.51cto.com/4516621/1044040
本篇博文是基于参加网上法国OpenWide公司 http://www.openwide.fr/ 举办的嵌入式Linux竞赛 (自由,免费报名,可以个人也可以组队)的经历(今年题目是在Mini2440上实现一个可触摸数字/模拟示波器)。第一阶段是在QEMU下模拟 Mini2440开发板并运行编写的示波器图形软件(我是用Qt实现的)。第一阶段已经通过,获得了Mini2440开发板。第一阶段晋级第二阶段的名单在这个链接可以看到 http://www.linuxembedded.fr/2012/09/concours-2012-les-resultats-de-la-phase-1/ ,也有简易作品截图, 当然第一阶段的作品都还没太多完善,比较粗糙。
本人水品有限,难免有遗漏或错误之处,本文用到的命令等我都检查过了,不过可能还是会有错误,欢迎指正与提出宝贵意见!
这篇博文中主要从以下几点进行叙述:
1、Mini2440开发板和QEMU模拟器简介
2、编译适配Mini2440的QEMU
3、Buildroot (2012.05)的使用
4、在QEMU中运行编译好的系统
4.1、生成NAND镜像并初始化
4.2、基于NFS启动
4.3、基于NAND镜像启动
4.4、强大的工具 -- Flashimg
5、附件 -- 竞赛第一阶段提交作品压缩包,内含 build.sh 完成全部编译启动工作
一、 Mini2440开发板和QEMU模拟器简介
广大嵌入式爱好者所熟知,国内天嵌公司的TQ2440开发板就与其很类似(不过Mini2440可以移植Android系统,这点TQ2440似乎还没太多实做成功的文章,TQ6410倒是可以移植Android系统)。下面是Mini2440的简介:
二、 编译适配Mini2440的QEMU
- $ sudo apt-get install git git-core
- $ cd ~
- $ mkdir local
- $ git clone git://repo.or.cz/qemu/mini2440.git qemu
- $ cd qemu
- $ ./configure --target-list=arm-softmmu --prefix=$HOME/local
- $ make
- $ make install
此时QEMU可执行程序已经安装在 ~/local/bin 目录下了,为了方便使用,将其添加到环境变量里:
- $ export PATH=$HOME/local/bin:$PATH
验证一下正确安装与否:
- $ qemu-system-arm --version
如果输出了QEMU的版本等信息,则安装成功。
三、 Buildroot (2012.05)的使用
- $ sudo apt-get install wget
- $ cd ~
- $ wget http://buildroot.org/downloads/buildroot-2012.05.tar.gz
- $ tar zxvf buildroot-2012.05.tar.gz
在让Buildroot为我们生成三个镜像前,需要对其进行一些配置。Mini2440开发板的基本所需配置已经集成在Buildroot里了(众 多defconfig文件中的一个),省了不少功夫。在此基础上,我们只需再进行少许配置,就可以让Buildroot开工了。
我们选取mini2440_defconfig来生成我们的 .config 文件,再用 make menuconfig 进一步配置:
- $ cd buildroot-2012.05
- $ make mini2440_defconfig
- $ make menuconfig
一个方便的配置窗口会跟着出现,是基于Kconfig的配置机制:
- $ make
此时你可以倒杯茶,或者可以烤一只鸡
。。。总之干点别的,让Buildroot忙活去吧。如果中间出现错误,一般是没装必要的东西,照错误提示安装就好,然后接着 make。 视电脑速度和网速而定,我的情况是大概30分钟后 make 完成。
至此,Buildroot完成了他艰巨的任务,可以让他一边休息去了。我们进入下面的系统制作和启动部分。
四、在QEMU中运行编译好的系统
4.1、生成NAND镜像并初始化
- $ cd ~
- $ mkdir nand
- $ sudo mount -t tmpfs none nand/
我们接下来将从零开始生成一个NAND镜像文件。一般NAND的大小我们可以设定成64MB (NOR镜像文件一般设为2MB)。我们来做一下简单的计算: 要生成一个64MB的NAND,每个块是512字节,还要加上16字节的ECC,所以每个块是528字节。 总共需要的块数是 : (64 * 1024 * 1024) / 528 = 127100
用 dd 命令来生成一个NAND镜像:
- $ dd if=/dev/zero of=nand/nand.bin bs=528 count=127100
- $ cp ~/buildroot-2012.05/output/images/u-boot.bin ~/nand/
- $ qemu-system-arm -M mini2440 -serial stdio -mtdblock nand/nand.bin
- NAND: Bad block table not found for chip 0
- Bad block table not found for chip 0
- 64 MiB
- *** Warning - bad CRC or NAND, using default environment
- MINI2440 # nand scrub
- MINI2440 # nand createbbt
- MINI2440 # reset
- $ cp nand/nand.bin .
- $ sudo umount nand/
- $ rmdir nand
4.2、基于NFS启动
- $ sudo mkdir /srv/nfsroot/
- $ cd /srv/nfsroot/
- $ sudo tar xvf ~/buildroot-2012.05/output/images/rootfs.tar
- /srv/nfsroot/ 192.168.42.0/24(rw,sync,no_root_squash,no_subtree_check)
- $ sudo exportfs -r
- $ sudo tunctl -u $USER -t tap0
- $ sudo ifconfig tap0 192.168.42.1
- $ cd ~
- $ cp ~/buildroot-2012.05/output/images/uImage .
- $ qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -kernel uImage -net nic -net tap,ifname=tap0,script=no,downscript=no
- MINI2440 # setenv bootargs root=/dev/nfs rw nfsroot=192.168.42.1:/srv/nfsroot/ ip=192.168.42.2
- MINI2440 # bootm
4.3、基于NAND镜像启动
4.4、强大的工具 -- Flashimg
- $ cd ~
- $ git clone git://gitorious.org/flashimg/flashimg.git
编译安装
- $ cd flashimg
- $ ./autogen.sh
- $ ./configure
- $ make
- $ sudo make install
要生成NAND或NOR镜像文件,可以先把之前Buildroot替我们生成的三个文件 : u-boot.bin, uImage和rootfs.jffs2 拷贝到 flashimg文件夹下:
- $ cp ~/buildroot-2012.05/output/images/rootfs.jffs2 ~/flashimg/rootfs.jffs2
- $ cp ~/buildroot-2012.05/output/images/uImage ~/flashimg/uImage
- $ cp ~/buildroot-2012.05/output/images/u-boot.bin ~/flashimg/u-boot.bin
生成NAND或NOR镜像文件:
- $ ./flashimg -s 64M -t nand -f nand.bin -p uboot.part -w boot,u-boot.bin -w kernel,uImage -w root,rootfs.jffs2 -z 512
- $ ./flashimg -s 2M -t nor -f nor.bin -p uboot.part -w boot,u-boot.bin -w kernel,uImage -w root,rootfs.jffs2
最后,启动系统,我们以NAND文件为例:
- $ qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse
启动之后,还需要配置一下(其中 mini2440=3tb 是为了使屏幕分辨率成为320*240,横向显示。默认是 240*320,是竖着的)
- MINI2440 # nboot kernel
- MINI2440 # setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200 mini2440=3tb
- MINI2440 # saveenv
- MINI2440 # bootm
输入Buildroot的密码,默认是 root
我们再一次看到了亲切的小企鹅。
五、附件 -- 竞赛第一阶段提交作品压缩包,内含 build.sh 完成全部编译启动工作
- $ ./build.sh
就可以完成所有下载,编译,启动工作,不过在QEMU启动之后还要手动添加以下配置命令:
- MINI2440 # nboot kernel
- MINI2440 # setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200 mini2440=3tb
- MINI2440 # saveenv
- MINI2440 # bootm
而且build.sh把我的第一阶段的作品(简易示波器,菜单栏下有各种操作。可以用鼠标操作,可以模拟4×4=16种波形混叠或独立显示,波形可 以改变幅度和采样频率,简单的触发机制,可以保存成文件形式)也编译并集成到Linux系统里面了。启动Linux后,只要输入:
- # cle2012 -qws
就可以运行示波器的简易程序了。当然这个程序是8月底完成的,还远远不够好。第二阶段要进行优化,增加更多功能,并在Mini2440开发板上能够触摸操作,接收实际的开发板产生的电信号或声音信号作为输入。 欢迎同样爱好嵌入式的朋友跟我联系,彼此学习,共同进步。
个人简介:
姓名: 谢恩铭 (25岁)
邮箱: enmingx@gmail.com
QQ : 379641629
简要工作描述:(嵌入式)软件工程师




