前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再也不用花钱买开发板了,自己搭建arm模拟器!

再也不用花钱买开发板了,自己搭建arm模拟器!

作者头像
bigmagic
发布2020-03-17 14:35:55
4.1K3
发布2020-03-17 14:35:55
举报
文章被收录于专栏:嵌入式iot嵌入式iot

很多时候,做嵌入式往往需要大量的金钱来购买设备,并且带着这些电路板非常的不方便,那么有没有一种办法可以解决这个问题呢?这时就可以利用QEMU来模拟一个设备进行实验了。

1. 介绍

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。

简单的说,通过这个模拟器,对于做嵌入式的人来说,可以在pc仿真开发板的运行情况,不用每次都需要将程序下载到开发板,特别是调试驱动与编译内核这将节省大量的时间!

2.准备

首先下载2440的qemu

为什么要下载qemu,直接在ubuntu上apt-get install不行吗?

不行!下载后的不带这个2440

首先在git上下载代码

代码语言:javascript
复制
git clone git://repo.or.cz/qemu/mini2440.git qemu

下载完成后开始编译配置

代码语言:javascript
复制
./configure--target-list=arm-softmmu --prefix=/usr/local/qemu/mini244
make -j4
sudo make install

(其中--prefix=/usr/local/qemu/mini2440表示install的目录;make -j4表示4个目标同时构建,jobs=4,一般来说编译速度会更快些)

然后将bin路径添加到环境变量中方便使用qemu-system-arm

在这个目录中,有一个mini2440_start.sh的脚本

为了直接看到效果,这里直接采用韦东山老师的uboot,kernel和文件系统

关于文件系统,可以采用nfs文件系统进行相关的开发,十分的容易,以后介绍

3.flashimg

所以目前的文件系统是在在这些基础上进行的。

接着,采用一个工具进行制作,这个工具的就是flashimg工具

flashimg的官方网站访问不进去了!!!

然后就只能使用github了。

代码语言:javascript
复制
git@github.com:cailiwei/flashimg.git

下载完成后就可以进行编译

代码语言:javascript
复制
./autogen.sh
./configure
make
sudo make install

将文件转移到这里面,然后开始制作

现在采用的是nandflash,所以先采用这种方式

代码语言:javascript
复制
#!bin/bash
./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

如果要采用nor flash

代码语言:javascript
复制
flashimg -s 2M -t nor -f nor.bin -p uboot.part -w boot,u-boot.bin -w kernel,uImage -w root,rootfs.jffs2

4.写脚本

又到了写脚本时间了

制作完成后,生成nand.bin 将生成的nand.bin转移到我们编译的2440的qemu之中

在这里面,我们最好不用自带的mini2440_start.sh

自己写一个start.sh

qemu-ifdown

代码语言:javascript
复制
#!/bin/sh
echo "Close tap!"
sudo ifconfig $1 192.168.31.196  down

qemu-ifup

代码语言:javascript
复制
#!/bin/sh
echo "Excuting qemu-ifup"
ifconfig $1 192.168.31.196

5. nfs文件系统

接下来开始搭建nfs方案了

代码语言:javascript
复制
sudo apt-get install nfs-kernel-server

之后修改/etc/exports

代码语言:javascript
复制
/home/bigmagic/work/zfjqemu/rootfs *(rw,sync,no_root_squash)

重启nfs

代码语言:javascript
复制
sudo /etc/init.d/nfs-kernel-server restart

6. 启动

编写好启动脚本后,直接运行

代码语言:javascript
复制
sudo sh start.sh

接着,输入nfs的启动参数

代码语言:javascript
复制
set bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.31.196:/home/bigmagic/work/fs_qtopia/,proto=tcp,nfsvers=,nolock ip=192.168.31.195:192.168.31.196::255.255.255.0 console=ttySAC,

然后保存参数

代码语言:javascript
复制
saveenv

然后输入nboot

代码语言:javascript
复制
nboot kernel

那么这个nboot命令是什么?

nboot是uboot指令--将nand flash中的内容加载到sdram中,比如"nboot 0x30000000 0 0x60000\;bootm

0x30000000是拷到的sdram的地址,0是nand flash设备号,0x60000是内核在nand flash的地址。再通过bootm从0x30000000启动内核。

由于uImage的前64个字节是zImage的描述信息,所以do_nandboot能知道需要加载的kernel的size。

输入bootm开始启动内核!

打印下面的语句则成功

注意,这里的有一个地方就是文件系统

在fs_qtopia/etc/init.d/rcS

代码语言:javascript
复制
#!/bin/sh
ifconfig eth0 192.168.31.195

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
if [ ! -e /etc/pointercal ]
then
/bin/ts_cal.sh
fi
/bin/qpe.sh &

这里的ifconfig eth0 192.168.31.195需要改成开发板的ip地址

还需要修改一下串口

代码语言:javascript
复制
mknod -m  console c  
mknod -m  null c  

7.测试

刚进来就要校验触摸屏

启动完成后,输入

代码语言:javascript
复制
qpe.sh -&

8. 总结

这个qemu真的好用!

以后表示调试Linux都方便多了!再也不用下载程序到开发板这么麻烦了!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍
  • 2.准备
  • 3.flashimg
  • 4.写脚本
  • 5. nfs文件系统
  • 6. 启动
  • 7.测试
  • 8. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档