设为首页 收藏本站
查看: 1712|回复: 0

[经验分享] ubantu下用qemu搭建arm+linux运行环境

[复制链接]

尚未签到

发表于 2017-11-22 23:30:59 | 显示全部楼层 |阅读模式
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位。
  
可以上网搜索相关博客,我参考的主要博客是从零使用qemu模拟器搭建arm运行环境,ARM Versatile Express Emulation On Qemu From Scratch: Part 1
  提示:1.在输入linux命令时,一定要注意当前目录和你命令中出现的文件的路径关系;
  
若提示找不到文件,则优先检查是不是路径错误
  
2.若提示权限不够,加上sudoenter后,输入你的用户密码即可
  搭建步骤:

安装arm的交叉编译工具链
  打开ubantu终端,输入
  

sudo apt-get update  
sudo apt-get upgrade
  
sudo 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-kernel  
sudo chmod 777 linux-kernel
  

  解压
  

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

  编译内核
  

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig  
make 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/pro  
mkdir  _install/sys
  
mkdir  _install/tmp
  
mkdir  _install/root
  
mkdir  _install/var
  
mkdir  _install/mnt
  
mkdir  _install/Home
  
mkdir -p _install/etc/init.d
  
git clone https://github.com/mahadevvinay/Embedded_Linux_Files.git
  
cp Embedded_Linux_Files/fstab _install/etc
  
cp Embedded_Linux_Files/inittab _install/etc
  
cp 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/dev  
sudo 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.ext3  
mkdir tmpfs
  
sudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loop
  
sudo cp -r path/rootfs/* path/tmpfs
  
sudo 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 <stdio.h>  
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 loop  
sudo cp -r path/rootfs/* path/tmpfs
  
sudo 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!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409682-1-1.html 上篇帖子: Ubuntu12.04下安装VirtualBox 下篇帖子: linux管理面板
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表