听说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

执行启动脚本

   #! /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目录,该目录下的程序就是单板运行所需要的命令。

形成根目录结构

先在CentOS主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录。
#!/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来模拟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

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

如果内核报错:

[    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模拟器搭建arm运行环境

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

qemu 退出方法

用Qemu模拟vexpress-a9(一) --- 搭建Linux kernel调试环境

 

CentOS 7 利用qemu模拟ARM vexpress A9开发板的更多相关文章

  1. centos下利用qemu搭建arm模拟器

    有点繁琐,整理一下,系统环境centos6.6,虚拟机以及实际系统中测试通过. 一.交叉编译器的下载与安装1.下载地址:http://blog.csdn.net/dldw8816/article/de ...

  2. 利用qemu模拟嵌入式系统制作全过程

    http://www.tinylab.org/using-qemu-simulation-inserts-the-type-system-to-produce-the-whole-process/ 利 ...

  3. Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核

    Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...

  4. Qemu搭建ARM vexpress开发环境(一)

    Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...

  5. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  6. Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统

    Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...

  7. 【转帖】Linux系统上面qemu 模拟arm

    零基础在Linux系统搭建Qemu模拟arm https://blog.csdn.net/weixin_42489042/article/details/81145038 自己没搞定 改天再试试 感谢 ...

  8. ubuntu下使用qemu模拟ARM(六)------驱动程序【转】

    转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...

  9. QEMU让你无需开发板即可玩溜RT-Thread~

    1.1 本文的目的和背景 嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用QEMU等类似的虚拟机来模拟开发板.QEMU是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板.为了方便大家在 ...

随机推荐

  1. C++ extern关键字

    [参考] 关于C++中extern的简单笔记

  2. SIGAI机器学习第六集 决策树

    讲授决策树的基本概念,分类与回归树的原理,决策树的表示能力,决策树的训练算法,寻找最佳分裂的原理,叶子节点值的标记,属性缺失与替 代分裂,决策树的剪枝算法,决策树应用. 非常直观和易于理解的机器学习算 ...

  3. c实现队列

    使用链表实现队列的入队和出队 #include <iostream> #include <stdio.h> #include <string.h> #include ...

  4. go - GOPATH配置

    查看配置信息 go env 然后找到对应的 GOPATH=>修改为你自己的目录 ..liunx 系统下,注意要给权限 go bulid 编译文件 go run  先编译后执行. -------- ...

  5. Python—“helloworld”

    接触一门计算机新语言,第一件事就是要准备好一个编译器用来打代码. 网上很多环境搭建的方法,具体参照https://www.runoob.com/python/python-install.html 由 ...

  6. 如何用 Windows Live Writer 和 Word 2013 分别发表博客到Cnblog 和CSDN

    ps CSDN 老是505错误,放弃了 为什么会写这篇 最近写博客在 Cnblog 上面写博客, 发现图片不能复制了直接粘贴上,这对于把博客当随手笔记的人来说无疑非常痛苦.求助于博客园,他们让我用 W ...

  7. MongoDB-python操作mongodb

    安装 pip install pymongo 连接mongodb from pymongo import MongoClient my_client = MongoClient("127.0 ...

  8. scrapy框架之items项目

    Items 主要目标是从非结构化来源(通常是网页)提取结构化数据.Scrapy爬虫可以将提取的数据作为Python语句返回.虽然方便和熟悉,Python dicts缺乏结构:很容易在字段名称中输入错误 ...

  9. 【CF589 E】Another Filling the Grid

    一个很套路的容斥裸题,这里记录一下scb 的切题过程 Description 有一个 \(n\times n\) 的矩阵,你需要往每格里填一个 \([1,k]\) 的整数,使得每一行.每一列的最小值都 ...

  10. JAVA RPC (九) netty服务端解析

    源码地址:https://gitee.com/a1234567891/koalas-rpc 企业生产级百亿日PV高可用可拓展的RPC框架.理论上并发数量接近服务器带宽,客户端采用thrift协议,服务 ...