QEMU模拟FriendlyArm的Mini2440开发板

2020-05-22来源: eefocus关键字:QEMU  模拟FriendlyArm  Mini2440开发板

这篇博文中主要从以下几点进行叙述:
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模拟器简介
德国FriendlyARM(国内译为”友善之臂“)公司推出的Mini2440开发板,一直以来为
广大嵌入式爱好者所熟知,国内天嵌公司的TQ2440开发板就与其很类似(不过Mini2440可以移植Android系统,这点TQ2440似乎还没太多实做成功的文章,TQ6410倒是可以移植Android系统)。下面是Mini2440的简介:
http://www.quickembed.com/Tools/Shop/ARM/201110/179.html?gclid=COvJ193EqLMCFSbMtAodqjYA3Q
http://www.arm9.net/mini2440.asp

目前虚拟机软件领域可谓“高手林立”,以下链接基本列出了所有流行虚拟机软件:
http://www.ewei.com/article/2146.jhtm

在如此众多的产品中VMWare自然不用说(不过最近推出的Windows Server 2012貌似有点撼动VMWare在虚拟机领域的霸主地位)。微软的老牌产品VirtualPC也相当不错,还有Bochs之类的。不过说到开源的虚拟机软件,必定要提一下QEMU,不错的速度,可以模拟至接近真实电脑,开放源代码,可以模拟众多的操作系统和平台。就连最近几年很火的Android生态系统也用到了QEMU虚拟机。下面是QEMU的简介:
http://tagche.blog.51cto.com/649757/274651
http://www.oschina.net/p/qemu/

本文所述的Mini2440是由QEMU模拟,基于Linux操作系统内核。
好了,所谓简介就是要做到像水浒传里的 “话休絮烦”,下面就进入正题吧。

二、 编译适配Mini2440的QEMU本文基于的开发环境是Ubuntu 10.04, 需要安装 git, 如果还没有git,请安装:

  • $ sudo apt-get install git git-core

首先下载适配Mini2440的QEMU虚拟机,然后编译,安装QEMU:

  • $ 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)的使用
一般说来,我们需要三样东西来正常启动一个嵌入式操作系统: 引导程序(bootloader),内核镜像和根文件系统镜像。那我们是不是接下来需要下载一个bootloader(比如u-boot,supervivi之类),编译之;下载任意版本的linux内核,编译之(当然要适配mini2440);一点一点生成自己的根文件系统,再制作成jffs2, yaffs2之类的格式呢?哦,对了,还有编译这三样东西的交叉编译工具链 Cross-compiler toolchain 要制作。

以前我也这样做过,很费时间(交叉编译工具链和根文件系统都是一点一点制作。。。)。虽然我们在制作根文件系统时是可以偷懒使用Busybox这样的“瑞士军刀”,但是还不够方便,有没有能一次过帮我们把交叉编译工具链和三样东西都生成出来,将懒惰进行到底的“青龙偃月刀”呢?答案是肯定的,就是 Buildroot,一款超好用的开源软件。

Ok,首先我们下载Buildroot,竞赛期间我用的版本是2012年5月的 (2012.05),当然大家可以下载更新的版本,Buildroot项目每三个月就有一个新版本。首先我们安装wget这个小工具,便于下载Buildroot:

  • $ sudo apt-get install wget

接着下载Buildroot:

  • $ 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的配置机制:


以下列出比较重要的几个编译选项,需要改动的几项用红色表示:

- Toolchains : 在Toolchains目录里,须要选取Linux内核版本的适配的编译链版本。默认是设置为 3.3.x。后面的Kernel(内核版本)我使用的是3.3.7,所以没问题,这里不用改也可以。当然也可以使用诸如 3.0.x这样的版本,只要跟之后的Kernel版本适配就好了。
- Bootloaders : 默认是U-boot, 也可以选用其他版本的Bootloader。本文就用默认的U-boot。
- Kernel : 默认是 3.0.4,因为之前Toolchains目录选择的是 3.3.x版本,所以这里须要改选,比如 3.3.7版本。
- Package Selection for the target : Busybox已经包含在里面了,我们也可以选择更多的项目,比如 Qt, EFL, directfb之类的图形库。在 Graphic libraries and application子目录里选择。
- Filesystem images : 本文中使用的是 jffs2格式的根文件系统(也是Buildroot默认的),因为之后要制作NAND镜像,所以需要配置成一个每页512字节和16字节的ECC的NAND类型。在 Flash Type这项,改为 NAND flash with 512B Page and 16 KB erasesize 。
这些都配置好之后,就可以请出我们最喜欢的命令了 -- make :

  • $ make

此时你可以倒杯茶,或者可以烤一只鸡。。。总之干点别的,让Buildroot忙活去吧。如果中间出现错误,一般是没装必要的东西,照错误提示安装就好,然后接着 make。 视电脑速度和网速而定,我的情况是大概30分钟后 make 完成。
如果一切顺利, make 结束后,在 buildroot-2012.05目录的 output/images/ 子目录下可以找到生成的三个文件:
- u-boot.bin : bootloader的镜像
- uImage : u-boot格式的(用mkimage命令生成的)Linux内核镜像
- rootfs.jffs2 : jffs2格式的根文件系统镜像
至此,Buildroot完成了他艰巨的任务,可以让他一边休息去了。我们进入下面的系统制作和启动部分。

四、在QEMU中运行编译好的系统
4.1、生成NAND镜像并初始化在开始前,先说一下: 如果你想要比较快捷的话,可以直接去看 4.4、强大的工具 -- Flashimg, 不需自己一点一点制作NAND文件来启动或通过NFS来启动。Flashimg是一个不错的软件,可以使用 内核镜像,bootloader镜像和根文件系统镜像 快速生成NAND或NOR文件。 由同样参加竞赛的法国人 Fabrice Jouhaud (别名 Yargil, 已经工作多年的嵌入式高手 ,去年的冠军,极为牛,人也非常好,有问必答,我觉得他来参加竞赛就是来帮助我们这些新手的)开发,共享在git 上面, http://gitorious.org/flashimg
NAND和NOR的区别,请参看:
http://www.91tech.net/Article/SoftHardTech/EmbeddedSystem/200608/4147.html
http://forum.eet-cn.com/FORUM_POST_10003_1100023016_0.HTM

看来我又罗嗦了,没有秉持“话休絮烦”的原则。。。OK,重新进入正题:
如果在QEMU里生成NAND的话,会花不少时间。所以我们可以利用闲置的内存(RAM) --  tmpfs

  • $ 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

我们现在有了一个NAND镜像文件了,接下来要使用u-boot来初始化它。我们需要首先将 Buildroot替我们生成的 u-boot.bin 文件拷贝到nand.bin 相同的文件夹下:

  • $ cp ~/buildroot-2012.05/output/images/u-boot.bin ~/nand/

启动U-boot以便进行NAND的初始化:

  • $ qemu-system-arm -M mini2440 -serial stdio -mtdblock nand/nand.bin

U-boot启动了,并且会显示一些Warning信息:

  • 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

别担心,显示这些信息很正常,因为我们的NAND文件还没初始化呢。接下来初始化:

  • MINI2440 # nand scrub

  • MINI2440 # nand createbbt

  • MINI2440 # reset

至此,我们的NAND文件已经准备好了。现在可以将其从tmpfs拷贝到电脑硬盘,然后卸载掉 tmpfs。

  • $ cp nand/nand.bin .

  • $ sudo umount nand/

  • $ rmdir nand

        4.2、基于NFS启动
这里插进一段用NFS启动的实做。在Ubuntu里安装NFS,请参看:

http://www.linuxidc.com/Linux/2011-02/31947.htm
http://os.51cto.com/art/201001/176511.htm
在嵌入式开发阶段,通常我们会操作一个挂载在NFS上的系统,这样更加方便,快捷, 无需每次都烧写NAND或NOR文件。接下来我们用NFS启动系统:
之前在 ~/buildroot-2012.05/output/images/  这个目录里,除了生成 rootfs.jffs2文件外,还生成了 rootfs.tar 文件,是根文件系统的压缩文件包。我们在 /srv 文件夹下新建一个 nfsroot文件夹以储存解压的根文件系统:

  • $ sudo mkdir /srv/nfsroot/

  • $ cd /srv/nfsroot/

  • $ sudo tar xvf ~/buildroot-2012.05/output/images/rootfs.tar

接着需要在 /etc/exportfs

[1] [2]
关键字:QEMU  模拟FriendlyArm  Mini2440开发板 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic497978.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于mini2440的mp3播放器
下一篇:【重温经典】mini2440驱动程序之LED驱动(基于Linux-2.6.32.2)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Qemu搭建ARM vexpress开发环境(一)
嵌入式开发离不开硬件设备比如:开发板、外设等,但是如果只是想学习研究Linux内核,想学习Linux内核的架构,工作模式,需要修改一些代码,重新编译并烧写到开发板中进行验证,这样未必有些复杂。然而Qemu的使用可以避免频繁在开发板上烧写版本,如果进行与外设无关,仅仅是内核方面的调试,Qemu模拟ARM开发环境完全可以完美地胜任。下面简单介绍下我的Qemu开发环境搭建过程:1. 环境由于在开发过程中也需要Windows系统下的一些工具,于是放弃了以前搭建的双系统环境而采用在PC的Windows10系统下通过VirtualBox虚拟机安装Xubuntu系统进行开发,避免了双系统开发中需要不断重启切换PC系统的问题。Xubuntu系统
发表于 2020-02-15
Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
在上文《Qemu搭建ARM vexpress开发环境(一)》中已经简单讲述了通过Qemu模拟直接启动Linux内核,并挂在SD卡根文件系统的方法,这种方法是直接启动内核,与实际应用中ARM板的启动方式:u-boot、kernel、rootfs有些不同。现在就来讲述下通过Qemu搭建通过u-boot启动Linux内核并挂载根文件系统的方法。1. 开发环境简述嵌入式系统要正常运行,应该包含:u-boot、kernel、rootfs、appfs。这几部分在ARM开发板Flash上的位置关系应该类似于下图所示:BootLoader BootParameters Kernel Rootfs Appfsrootfs可以添加到开发板的Flash
发表于 2020-02-15
Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统
经过上一篇《Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核》,已经实现了通过u-boot加载Kernel启动开发板,并且挂载根文件系统,本文讲述通过NFS网络挂载根文件系统。通过NFS网络根文件系统,可以实现开发板在通过u-boot启动内核后,通过NFS网络在别的PC主机上挂载根文件系统。对于开发调试阶段的工作学习提供了很大的便利,可以直接在Linux主机上开发、编译驱动或者APP,并将目标文件拷贝到NFS服务目录中进行使用(此时文件相当于被拷贝到了开发板的根文件系统中)。也可以在主机端直接修改rootfs文件系统中别的文件,等效于在开发板上直接修改。本文来介绍NFS挂载网络根文件系统
发表于 2020-02-14
基于TQ2440和Qemu的GDB+串口调试(1)
执行quit命令,再次打开ckermit还可以连上板子,并且还可以再次通过echo使kernel再次进入等待远程gdb连接模式。三、Qemu + GDB这部分参考的是笨叔叔的《奔跑吧 Linux内核》。首先需要配置内核,确保编译出来的内核包含调试信息:Kernel hacking    ----> Compile-time checks and compiler options            ----> [*] Compile the kernel with debug info在启动Qemu的时候设置两个参数:-S: 表示Qemu
发表于 2020-02-09
qemu+chroot构建arm aarch64虚拟机
在X86环境下构建出arm虚拟机可以模拟arm环境进行开发、在arm linux的文件系统中安装相应的库文件,编译arm版本等。简单介绍下在X86环境下构建ARM虚拟机的步骤。1、x86环境安装qemu-user-staticsudo apt-get install qemu-user-static2、准备arm linux根文件系统arm linux根文件系统可以直接下载干净的版本或者从运行的arm单板上进行备份获取。arm单板上备份根文件系统命令:sudo tar -cvpzf rootfs.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude
发表于 2020-02-06
mini2440开发板之使用nfs无法启动的问题(Virtualbox桥接网络)
今天晚上研究了一下如何通过super-vivi来使用nfs网络文件系统来启动mini2440开发板,一开始一直无法成功,折腾了半天总算搞定了,总结一下:1、首先,介绍一下我的开发环境。物理机:win10;虚拟机:ubuntu 12.04;模拟器:virtualbox 5.20;我的步骤是,按照用户手册的说明,先用super-vivi引导系统,输入q进入命令行模式,然后输入nfs启动命令(如下),最后输入boot启动系统。param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.100.108:/opt/FriendlyARM
发表于 2020-05-26
mini2440开发板之使用nfs无法启动的问题(Virtualbox桥接网络)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved