前言
原创文章欢迎转载,请保留出处。
若有任何疑问建议,欢迎回复。
邮箱:Maxwell_nc@163.com
手头上只有一块Smart210(Tiny210V2),无奈网上的资料多数是2440的资料,又不想再花钱买一块2440,后来发现qemu可以模拟arm,参考各种文章后成功模拟,留下博文作为笔记。
参考文章
本文主要参考
http://bbs.51cto.com/thread-970787-1-1.html
http://www.cnblogs.com/jinmu190/archive/2011/03/21/1990698.html
http://blog.csdn.net/zeroboundary/article/details/12657215
这三篇文章,虽然按照他们的做的出现了不少错误,但是非常感谢他们给出了路的方向,通过自己另外摸索成功了,在此和大家分享方法,如果你遇到问题也不妨再看看参考的网站或许会有意外的收获。
开发环境
虚拟机:VMware 10.0.3简体中文绿色版(含VMware Tools)
操作系统:Ubuntu 10.04 32位
不保证能在其他开发环境下正常实现本文最终结果,建议使用相同开发环境。另外本文不讨论如何搭建虚拟机Linux环境,一些库丢失问题请自行apt-get,另外我的所有终端操作均在超级用户下进行。
安装VMware Tools后鼠标捕获有问题的试试sudo apt-get install xserver-xorg-input-vmmouse
后重启虚拟机。
编译安装QEMU
首先下载qemu for mini2440,直接打包下载
http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz
解压后,进入源代码目录中,
./configure --target-list=arm-softmmu --prefix=$HOME/local
(prefix指定安装路径,这里是/root/local)
make -j4
(同时允许4个任务,据网友所说设置成2倍CPU核心数更快)
make install
可能会出现的库问题解决:
sudo apt-get install zlib1g-dev
sudo apt-get install libsdl-dev
安装完后,添加环境变量vi /etc/bash.bashrc
添加一行export PATH=$PATH:$HOME/local/bin
保存退出后,用source 生效或者注销重新登录,注意source只在当前终端有效,新开的均无效,然后使用qemu-system-arm --version
测试是否正常,正常如下图所示:
使用buildroot一键生成uboot和linux内核及根文件系统
首先下载buildroot的源代码,下载地址:
http://buildroot.org/downloads/buildroot-2012.05.tar.gz
(我使用这个版本2012.05)解压后,进入源代码目录中,make mini2440_defconfig
后make menuconfig
(可能出现的库问题用sudo apt-get install libncurses5-dev
解决)
出现如下画面:
其中以下需要修改,其他自己选择:
- Kernel :内核版本改选为 3.3.7版本
- Package Selection for the target : Busybox已经包含在里面了,我们也可以选择更多的项目,比如 Qt, EFL, directfb之类的图形库。在 Graphic libraries and application子目录里选择。
- Filesystem images :在 Flash Type这项,改为 NAND flash with 512B Page and 16 KB erasesize 。
- Toolchain:我选上了GDB和GDBServer方便调试。
然后保存退出。
接下来执行make
(注意这里不要加-j4之类参数,否则后面编译会出错),网上很多文章都对此过程轻描淡写,实际上这个过程会遇到一大堆问题。另外这个过程需要联网下载各种源码。
本人主要遇到的问题:
1. 遇到automake出错,使用apt-get install automake
后重新make
解决。
2. make不能加-j4参数,否则会中途报错停止编译退出。
3. 中途编译QT会问你选择商业版还是开源版,选择O后输入yes同意条款编译开源版。
4. 库问题,会遇到一大堆,本人总结一个列表。
apt-get install g++
apt-get install g++
apt-get install bison
apt-get install flex
apt-get install gettext
apt-get install texinfo
apt-get install patch
apt-get install git-core
apt-get install xz-utils
apt-get install automake
如果一切顺利, make 结束后,在 buildroot-2012.05目录的 output/images/ 子目录下可以找到生成的四个文件:
u-boot.bin: bootloader的镜像
uImage: u-boot格式的(用mkimage命令生成的)Linux内核镜像
rootfs.jffs2: jffs2格式的根文件系统镜像
rootfs.tar: 根文件系统源码打包
如下图所示:
Flashimg制作nand.bin并启动系统
这里参考上文给出的参考网站里的使用flashimg制作nand.bin
具体方法为:
下载flashimg源码 git clone git://gitorious.org/flashimg/flashimg.git
解压后,进入flashimg源码目录后:
./autogen.sh (要求autoconf版本大于2.67)
./configure
make
sudo make install
然后把我们生成的三个文件 : u-boot.bin, uImage和rootfs.jffs2 拷贝到 flashimg文件夹下运行 ./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
即可生成nand.bin。启动方法为: qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse
(若出现错误:浮点数例外启动不了qemu,请全屏最大化终端,再次执行,这是由于分辨率问题造成)
如上图启动后进入uboot模式,此时的qemu还不能显示图形界面,输入下面指令加载内核和根文件系统。
/*注意这里的“MINI2440 #”是提示符,不用输入。*/
MINI2440 # nboot kernel
MINI2440 # setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200
MINI2440 # saveenv
MINI2440 # bootm
启动后,输入默认密码root,即可成功登录,此时还没有配置网络。ifconfig
发现没有网卡。
如果你不需要网络功能,那么任务到此结束,你可以开始模拟2440的开发了。
如果你需要nfs和主机通讯,那得稍微期待下,我将会在下次发表采用的是挂在NFS根文件系统的方法,我们将不需要使用buildroot的根文件系统,而采用友善之臂提供的带Qtopia的根文件系统(请到mini2440附带的光盘找到rootfs_qtopia_qt4-20140103.tar.gz或者网上下载一份)你也可以使用buildroot生成的根文件系统,甚至可以用busybox自己制作一个,敬请期待,另外在此感谢参考文章的作者们。