码迷,mamicode.com
首页 > 其他好文 > 详细

CentOS 7 利用qemu模拟ARM vexpress A9开发板

时间:2017-10-07 02:08:36      阅读:487      评论:0      收藏:0      [点我收藏+]

标签:文件系统   tty   字符设备   模拟器   环境   express   命令行   告诉   参数   

听说qemu用于仿真arm很不错,今日就来试了一把。由于刚刚开始,了解的并不多。本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程。后续将会深入了解仿真的其他内容。

先上成果图:

技术分享

1. 安装QEMU

QEMU是一套由Fabrice Bellard所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQMEU这个开源的加速器,QEMU能模拟至接近真实电脑的速度。
之前已有记录CentOS 7编译安装qemu的方法:
我的版本是2.10.0
技术分享

2. 编译内核

解压下载的kernel文件,进入解压后的文件夹,运行下面的指令编译。

生成vexpress开发板子的config文件:
make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm vexpress_defconfig

编译:

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

生成的内核镱像位于arch/arm/boot/zImage, 后续qemu启动时需要使用该镜像。 

这里简单介绍下qemu命令的参数:

 -M vexpress-a9 模拟vexpress-a9单板,你可以使用-M ?参数来获取该qemu版本支持的所有单板

 -m 512M 单板运行物理内存512M

 -kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage  告诉qemu单板运行内核镜像路径

 -nographic 不使用图形化界面,只使用串口

 -append "console=ttyAMA0" 内核启动参数,这里告诉内核vexpress单板运行,串口设备是哪个tty。 

注意:

我每次搭建,都忘了内核启动参数中的console=参数应该填上哪个tty,因为不同单板串口驱动类型不尽相同,创建的tty设备名当然也是不相同的。那vexpress单板的tty设备名是哪个呢? 其实这个值可以从生成的.config文件CONFIG_CONSOLE宏找到。

如果搭建其它单板,需要注意内核启动参数的console=参数值,同样地,可从生成的.config文件中找到。 

3. 制作根文件系统

到这里是否大功告成了呢? 其实在上面的测试中,你会发现内核报panic,因为内核找不到根文件系统,无法启init进程。 

根文件系统要考虑两个方面:

1. 根文件系统的内容

在嵌入式领域,几乎所有的东西,都是mini版本,根文件系统也不例外。

本文制本的根文件系统 = busybox(包含基础的Linux命令)  + 运行库 + 几个字符设备

2. 根文件系统放在哪里

其实依赖于每个开发板支持的存储设备,可以放到Nor Flash上,也可以放到SD卡,甚至外部磁盘上。最关键的一点是你要清楚知道开发板有什么存储设备。

    本文直接使用SD卡做为存储空间,文件格式为ext3格式

下载、编译和安装busybox

wget http://www.busybox.net/downloads/busybox-1.27.2.tar.bz2

make defconfig

make CROSS_COMPILE=arm-linux-gnueabi-

make install 

安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。

形成根目录结构

先在CentOS主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录。
 
1.  创建rootfs文件夹(根文件夹),根文件系统内的文件全部放到这里
sudo mkdir rootfs

2. 拷贝busybox命令到根文件夹下

sudo cp busybox-1.20.2/_install/* -r rootfs/
mkdir -p ~/rootfs/{dev,etc/init.d,lib}

3. 从工具链中拷贝执行库到lib文件夹下

sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/

4. 创建4个tty端终设备

sudo mknodrootfs/dev/tty1 c 4 1

sudo mknod rootfs/dev/tty2c 4 2

sudo mknod rootfs/dev/tty3c 4 3

sudo mknod rootfs/dev/tty4c 4 4

制作根文件系统镜像

1. 生成32M大小的镜像
 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32

2. 格式化成ext3文件系统

mkfs.ext3 a9rootfs.ext3

3.  将文件复制到镜像中

sudo mkdir tmpfs

sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop

cp -r rootfs/*  tmpfs/

sudo umount tmpfs

4. 系统启动运行

完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-kernel/linux-4.13/arch/arm/boot/zImage -dtb linux-kernel/linux-4.13/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

从内核启动打印。到命令行提示符出现,激动人心的时刻出现了……

5. qemu 退出方法

qemu 退出方法 ctrl + A  按 X ,不是很灵敏,但有效。

技术分享

----------------------------------------------------------------------------

搭建的过程看似简单,可也遇到了不少麻烦,很多都是通过百度/bing解决的。

 

参考:

从零使用qemu模拟器搭建arm运行环境

用Qemu模拟vexpress-a9 (二) --- 创建根文件系统

qemu 退出方法

 
 
 
 

CentOS 7 利用qemu模拟ARM vexpress A9开发板

标签:文件系统   tty   字符设备   模拟器   环境   express   命令行   告诉   参数   

原文地址:http://www.cnblogs.com/BinBinStory/p/7633296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!