博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ubantu下用qemu搭建arm+linux运行环境
阅读量:4577 次
发布时间:2019-06-08

本文共 3754 字,大约阅读时间需要 12 分钟。

ubantu下用qemu搭建arm+linux运行环境

概述

模拟的单板为vexpress-a9,内核为cortex-a9;安装完qemu可用以下命令查看支持的机器:

qemu-system-arm -M ?qemu-system-arm -M help
没有支持ST公司的板子,有支持arm9,arm11,cortex-m3,cortex-a8,cortex-a9,cortex-a15这些架构其他公司的板子,不过好多都已经停产了。
我的ubantu版本为16.04,64位。
可以上网搜索相关博客,我参考的主要博客是,

提示:1.在输入linux命令时,一定要注意当前目录和你命令中出现的文件的路径关系;

若提示找不到文件,则优先检查是不是路径错误
2.若提示权限不够,加上sudoenter后,输入你的用户密码即可

搭建步骤:

安装arm的交叉编译工具链

打开ubantu终端,输入

sudo apt-get updatesudo apt-get upgradesudo apt-get install gcc-arm-linux-gnueabi

安装完后可用以下命令查看是否安装成功

dpkg -l gcc-arm-linux-gnueabi
出现ii gcc-arm-linux- 4:5.3.1-1ubu amd64 GNU C compiler for the armel arch即表明安装成功。

安装qemu

sudo apt-get install qemu

查看安装的版本:
qemu-system-arm --version
显示版本QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.15), Copyright (c) 2003-2008 Fabrice Bellard

编译linux内核

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.13.tar.xz

建立放内核的文件夹

sudo mkdir linux-kernelsudo chmod 777 linux-kernel

解压

xz -d linux-4.13.tar.xztar xvf linux-4.13.tar

编译内核

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

生成的内核镱像位于arch/arm/boot/zImage

测试qemu和内核能否运行成功

qemu-system-arm -M vexpress-a9 -m 512M -kernel /path/to/kernel/dir/arch/arm/boot/zImage -dtb  /path/to/kernel/dir/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

/path/to/kernel/dir/是内核的编译目录

当末行显示end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)说明内核正常加载,只是还没有根文件系统

制作根文件系统

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

解压
tar xjf busybox-1.27.2.tar.bz2
在源代码目录运行

make defconfig  make CROSS_COMPILE=arm-linux-gnueabi-  make install CROSS_COMPILE=arm-linux-gnueabi-

安装完成后,该目录下生成的_install,即是基本的运行指令

创建rootfs目录

sudo mkdir rootfs sudo mkdir rootfs/lib

完善根文件系统,先回到_install的父目录

mkdir  _install/promkdir  _install/sysmkdir  _install/tmpmkdir  _install/rootmkdir  _install/varmkdir  _install/mntmkdir  _install/Homemkdir -p _install/etc/init.dgit clone https://github.com/mahadevvinay/Embedded_Linux_Files.gitcp Embedded_Linux_Files/fstab _install/etccp Embedded_Linux_Files/inittab _install/etccp Embedded_Linux_Files/rcS _install/etc/init.d

更改rcS的权限

chmod a+x _install/etc/init.d/rcS
复制完,不需要Embedded_Linux_Files,删除掉
sudo rm -rf Embedded_Linux_Files

拷贝busybox命令

sudo cp path/_install/* -r rootfspath是你自己放_install的路径
从工具链中拷贝运行库到lib下
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib
注意所有命令中文件若不在当前的文件夹中,都要加上绝对路径
创建4个tty终端设备

sudo mkdir -p rootfs/devsudo mknod rootfs/dev/tty1 c 4 1  sudo mknod rootfs/dev/tty2 c 4 2  sudo mknod rootfs/dev/tty3 c 4 3  sudo mknod rootfs/dev/tty4 c 4 4

生成ext3镜像文件并挂载

sudo dd if=/dev/zero of=path/a9rootfs.ext3 bs=1M count=32 path为父目录路径,若当前目录是父目录则不用

mkfs.ext3 path/a9rootfs.ext3mkdir tmpfssudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loopsudo cp -r path/rootfs/* path/tmpfssudo umount path/tmpfs

启动qemu模拟系统

sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel path/arch/arm/boot/zImage -dtb path/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd path/a9rootfs.ext3
按照终端最后一行的指示,按下enter键,即进入到模拟出的单板的根文件系统,输入ls可看到所制作的文件

运行hello world

在用户目录下vim hello.c输入:

#include 
int main(){printf("hello world!");return 0;}

编译程序,注意用交叉编译工具编译

arm-linux-gnueabi-gcc-5 hello.c -o hello
将程序拷到rootfs目录下执行以下命令:

sudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loopsudo cp -r path/rootfs/* path/tmpfssudo umount path/tmpfs

path为你的路径

启动qemu模拟系统

sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel path/arch/arm/boot/zImage -dtb path/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd path/a9rootfs.ext3
按照终端最后一行的指示,按下enter键,即进入到模拟出的单板的根文件系统,输入ls可看到所制作的文件
输入./hello
即可看到打印出hello world!

转载于:https://www.cnblogs.com/hxwater/p/7529108.html

你可能感兴趣的文章
资源相互引用时 需添加 PerformSubstitution=True
查看>>
MapRedece(单表关联)
查看>>
蒲公英App开发之检测新版本
查看>>
【安卓基础】倒计时按钮封装(验证码倒计时按钮)
查看>>
configparser模块
查看>>
SelectQueryBuilder的用法
查看>>
android的用户定位(一)
查看>>
creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
查看>>
IIS安装
查看>>
html块级元素和行级元素的区别和使用
查看>>
for循环嵌套
查看>>
寒冬夜行人
查看>>
poj1151 Atlantis
查看>>
HTML页面之间的参数传递
查看>>
java面试题集锦
查看>>
scikit-learn:4.2.3. Text feature extraction
查看>>
Spring Security构建Rest服务-0800-Spring Security图片验证码
查看>>
AE待整理
查看>>
java8中规范的四大函数式接口
查看>>
宝塔apache配置
查看>>