使用Ubuntu+qemu模拟器搭建arm运行环境

我的环境:
VMware
Ubantu8.2-19ubuntu1
Linux内核 3.13.0-32-generic

1.下载Linux内核
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.xz

2.安装arm的交叉编译工具链
sudo apt-get install gcc-arm-linux-gnueabi

3.编译Linux内核
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 vexpress_defconfig

如果报错:根据提示,需要安装ncurses-devel,于是输入命令进行安装:
sudoapt-get install ncurses-dev

接着执行:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 menuconfig

会出来一个图形界面,将其中的
System Type —>
[*] Enable the L2x0 outer cache controller 中的 “ * ”去掉
然后编译:make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 zImage -j2

这个需要编译很久
生成的内核镜像位于 linux-3.12/out_vexpress_3_12/arch/arm/boot/zImage , 后续qemu启动时需要使用该镜像

4.下载安装qemu模拟器
首先sudo apt-get install git

git clone git://git.qemu-project.org/qemu.git
cd qemu
git checkout remotes/origin/stable-2.4 -b stable-2.4

安装一大堆依赖文件
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
sudo apt-get install libtool
sudo apt-get install libsdl1.2-dev
sudo apt-get install autoconf

…/qemu/configure --target-list=arm-softmmu --audio-drv-list=
出现一个错误:ERROR: pixman >= 0.21.8 not present
安装 :sudo apt-get install libpixman-1-dev

出现一个错误:ERROR: DTC (libfdt) version >= 1.4.0
安装 :sudo apt-get install libfdt-dev

make
make install

5.可以查看qemu支持哪些板子
qemu-system-arm -M help

6,加载arm内核
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel 自己的内核路径 -nographic -append “console=ttyAMA0”

这里简单介绍下qemu命令的参数:
-M vexpress-a9 模拟vexpress-a9单板,你可以使用-M ?参数来获取该qemu版本支持的所有单板

-m 512M 单板运行物理内存512M
-kernel /path/to/kernel/dir/arch/arm/boot/zImage 告诉qemu单板运行内核镜像路径
-nographic 不使用图形化界面,只使用串口
-append “console=ttyAMA0” 内核启动参数,这里告诉内核vexpress单板运行,串口设备是那个tty。
-M 指定开发板
-m 指定内存大小
-kernel 指定内核文件
-dtb 指定dtb文件
-nographic 指定不需要图形界面
-append 指定扩展显示界面,串口或者LCD

使用Ubuntu+qemu模拟器搭建arm运行环境_第1张图片

由于没有挂载rootsf系统,内核会死在这里

使用Ubuntu+qemu模拟器搭建arm运行环境_第2张图片

7,u-boot环境搭建
直接在windows本机官网http://ftp.denx.de/pub/u-boot/下载的

然后移到ubantu主文件夹,然后解压
tar jxvf u-boot-2016.09.tar.bz2

得到文件夹u-boot-2016.09
cd u-boot-2016.09

配置,编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

将生成的u-boot.bin放到~/Linux-3.16/qemu中
执行:
sudo qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic -m 512M

使用Ubuntu+qemu模拟器搭建arm运行环境_第3张图片

里面还有一些错误,
使用Ubuntu+qemu模拟器搭建arm运行环境_第4张图片

8.制作根文件系统
1》下载、编译和安装busybox
wget http://www.busybox.net/downloads/busybox-1.25.0.tar.bz2 --no-check-certificate
然后解压,在busybox-1.25.0文件夹中打开终端
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make CROSS_COMPILE=arm-linux-gnueabi- install

可能会编译失败
解决方法:BusyBox源码的include目录下/libbb.h 文件添加一行引用 #include

如果下载失败可参考如下图:

保存后再次编译,成功
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make CROSS_COMPILE=arm-linux-gnueabi- install

使用Ubuntu+qemu模拟器搭建arm运行环境_第5张图片

2》形成根文件目录
先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录
i. 创建rootfs目录(根目录),根文件系统内的文件全部放到这里
mkdir -p rootfs/{dev,etc/init.d,lib}
ii.拷贝busybox命令到根目录下
sudo cp busybox-1.20.2/_install/* -r rootfs/
iii.从工具链中拷贝运行库到lib目录下
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/

iiii.创建4个tty端终设备
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

3》制作SD卡文件系统镜像

  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
    sudo cp -r rootfs/* tmpfs/
    sudo umount tmpfs

启动命令:
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/linux/linux-3.12/arch/arm/boot/zImage -nographic -append “root=/dev/mmcblk0 console=ttyAMA0” -sd a9rootfs.ext3
使用Ubuntu+qemu模拟器搭建arm运行环境_第6张图片

总结:搭建ARM虚拟机相当于新产品移植Linux系统,并跑起来
包含:

  1. 内核下载、编译
  2. U-boot下载、编译
  3. 根文件系统制作、挂载

Busybox的作用:就是一些命令,把这些命令放到根文件系统里面,目标机器就可以正常操作了。

拷贝文件到ARM虚拟机:
可以在根文件系统做好之后,放到根文件系统rootfs里面,重新挂载根文件系统到SD卡

你可能感兴趣的:(arm)