CentOS 7 利用qemu模拟ARM vexpress A9开发板
听说qemu用于仿真arm很不错,今日就来试了一把。由于刚刚开始,了解的并不多。本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程。后续将会深入了解仿真的其他内容。
先上成果图:

1. 安装QEMU

2. 编译内核
解压下载的kernel文件,进入解压后的文件夹,运行下面的指令编译。
make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm vexpress_defconfig
编译:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
执行启动脚本
#! /bin/bash qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-kernel /home/walt740/kernel/linux-4.13./arch/arm/boot/zImage \
-dtb /home/walt740/kernel/linux-4.13./arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic \
-append "console=ttyAMA0"

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 menuconfig make CROSS_COMPILE=arm-none-linux-gnueabi- #重要 make install

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

形成根目录结构
#!/bin/bash sudo rm -rf rootfs
sudo rm -rf tmpfs
sudo rm -f a9rootfs.ext3 sudo mkdir rootfs
sudo cp _install/* rootfs/ -raf mkdir -p rootfs/{lib,proc,sys,tmp,root,var,mnt} sudo cp -arf /usr/local/gcc-arm-none-eabi/arm-none-linux-gnueabi/lib rootfs/
sudo cp etc rootfs/ -arf
sudo rm rootfs/lib/*.a sudo mkdir -p rootfs/dev/
sudo mknod rootfs/dev/tty1 c
sudo mknod rootfs/dev/tty2 c 2pro
sudo mknod rootfs/dev/tty3 c
sudo mknod rootfs/dev/tty4 c
sudo mknod rootfs/dev/console c
sudo mknod rootfs/dev/null c sudo dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=
sudo mkfs.ext3 a9rootfs.ext3 sudo mkdir -p tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
其中,etc下是启动配置文件,可以的到这里下载:
4. 系统启动运行
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
从内核启动打印。到命令行提示符出现,激动人心的时刻出现了……
如果内核报错:
[ 1.965000] Failed to execute /linuxrc (error -). Attempting defaults...
[ 1.990000] request_module: runaway loop modprobe binfmt-464c
[ 2.000000] Starting init: /sbin/init exists but couldn't execute it (error -8)
[ 2.020000] request_module: runaway loop modprobe binfmt-464c
[ 2.030000] Starting init: /bin/sh exists but couldn't execute it (error -8)
[ 2.040000] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[ 1.955000] request_module: runaway loop modprobe binfmt-464c
//该错误是由于没有配置交叉编译工具
配置busybox时,在配置中发现busybox setting->build options->
在cross compile prefix中写入arm-none-linux-gnueabi-


这个错误可在编译阶段排除 make CROSS_COMPILE=arm-none-linux-gnueabi- #重要
5. qemu 退出方法
此时先按CTRL+A组合键并且放手后再按X键退出QEMU。

----------------------------------------------------------------------------
搭建的过程看似简单,可也遇到了不少麻烦,很多都是通过百度/bing解决的。
参考:
用Qemu模拟vexpress-a9 (二) --- 创建根文件系统
用Qemu模拟vexpress-a9(一) --- 搭建Linux kernel调试环境
CentOS 7 利用qemu模拟ARM vexpress A9开发板的更多相关文章
- centos下利用qemu搭建arm模拟器
有点繁琐,整理一下,系统环境centos6.6,虚拟机以及实际系统中测试通过. 一.交叉编译器的下载与安装1.下载地址:http://blog.csdn.net/dldw8816/article/de ...
- 利用qemu模拟嵌入式系统制作全过程
http://www.tinylab.org/using-qemu-simulation-inserts-the-type-system-to-produce-the-whole-process/ 利 ...
- Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...
- Qemu搭建ARM vexpress开发环境(一)
Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统
Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...
- 【转帖】Linux系统上面qemu 模拟arm
零基础在Linux系统搭建Qemu模拟arm https://blog.csdn.net/weixin_42489042/article/details/81145038 自己没搞定 改天再试试 感谢 ...
- ubuntu下使用qemu模拟ARM(六)------驱动程序【转】
转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...
- QEMU让你无需开发板即可玩溜RT-Thread~
1.1 本文的目的和背景 嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用QEMU等类似的虚拟机来模拟开发板.QEMU是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板.为了方便大家在 ...
随机推荐
- python自动华 (七)
Python自动化 [第七篇]:Python基础-面向对象高级语法.异常处理.Scoket开发基础 本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 ...
- 001_ARM学习_六大类指令集---LDR、LDRB、LDRH、LDM、STR、STRB、STRH、STM
以下内容为转载: 注:非常感谢博主“希望之光”,文章转自他的博客:http://blog.chinaunix.net/uid-20379123-id-1956584.html ARM的六大类指令集 ...
- Irrlicht引擎剖析一
代码风格: 1.接口以I开头,实现以C开头,保存数据的结构体以S开头 2.函数名以小写字母开头,变量以大字母开头 3.接口的公共函数,其参数大部分给了默认值 4.采用名字空间 名字空间i ...
- c++ 判断是元音还是辅音
#include <iostream> using namespace std; int main() { char c; int isLowercaseVowel, isUppercas ...
- JavaWeb_(Mybatis框架)MyBatis Generator简单入门
官方文档 传送门 下载地址 传送门 MyBatis Generator(MBG)简介: MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将为 ...
- 子线程里调用performSelector需要注意什么
以下代码执行顺序是什么 ? - (void)action { NSLog(@"1"); dispatch_queue_t queue = dispatch_get_global_q ...
- C#winform和百度API互动-----之读取中js的参数
上百度的API <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" c ...
- WINFORM控件tabcontrol,隐藏,调用等等
1先说显示项的控制, 第一个是selectedIndex属性这个实用性不是太强,但是如果不涉及到隐藏,删除,增加tabpage的话,也可以用. 第二个是selectedTab=tabPage1,这个属 ...
- C#中正则表达式解析字符串信息
正则表达式提取0~9数字 private static string RegexPickupNumber(string str) { string pattern = @"[^0-9]+&q ...
- ndroid如何监听开机广播和关机广播
需求描述:有些时候,我们需要我们的程序在开机后能自动运行,在系统即将关闭时,能写入一些记录到指定的文件里. 一.开机广播监听: Android系统启动完成后会发出启动完成广播(android.inte ...
