环境
参考资料
- http://wiki.qemu.org/Hosts/Linux
- http://blog.csdn.net/linyt/article/details/42504975
- http://www.cnblogs.com/pengdonglin137/p/5023342.html
整体流程说明
- 安装交叉编译工具链
- 安装qemu模拟器
- 编译arm架构u-boot
- 用u-boot测试qemu是否正常启动(至此为第一次实验需要完成的内容)
- 编译arm架构内核
- Qemu运行内核
- 制作文件系统
- 系统启动运行
注意事项
- 实验中需要工具,如 git、 vim(系统自带vim是精简版,对键盘识别有问题)等,请自行下载安装、更新
- 对于实验中遇到的问题请复制相关提示信息,google
- 注意执行完指令后终端给出的提示,请确认命令是否正确执行。
- 请使用实验提供的正确版本
- 确认输入命令是否正确,请使用tab键补全,不要直接复制粘贴
- 请选择网易源、清华源、阿里源(科大源近期故障)
- vmware虚拟机安装vmware tool (不要卸载光驱、软驱,屏幕自适应)
一、 安装交叉编译工具链下载必备库
1. 创建工作目录
$ mkdir ~/qemu_linux
$ cd ~/qemu_linux
2. 安装arm交叉编译工具(可以通过crosstool-ng开源软件构建,本方法直接通过apt下载)
$ sudo apt-get install gcc-arm-linux-gnueabi
3. 安装qemu模拟器
下载源码(自行安装配置 _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 update
编译前安装依赖库
遇到无法apt安装软件 缺少依赖库,或者循环依赖,先看提示解决方法,或者尝试
$sudo apt-get upgrade$ sudo apt-get install build-essential kernel-package libncurses5-dev
$ sudo apt-get install libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
build-essential (基本的编程库(gcc, make等)
kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig要调用的)
_(若出错,请尝试分开安装,可先跳过该步骤遇到需要再根据提示安装)_
其他可能需要的库,参考官网: http://wiki.qemu.org/Hosts/Linux
二、 安装qemu模拟器
1. 编译安装
$ mkdir build (当前路径为 ~/qemu_linux )
$ cd build
2. 将配置生成的中间文件放到build中
$ ../qemu/configure –target-list=arm-softmmu –audio-drv-list=
$ make
$ make install //(该步骤需要根据机器情况安装相应的依赖库)
直接安装也可(简单粗暴)
$ sudo apt-get install qemu
3. 安装完成查看qemu支持哪些板子
$ qemu-system-arm –M ?
三、 编译u-boot
1. 下载u-boot
$ cd ~/qemu_linux
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-2016.09.tar.bz2
2. 解压
$ tar jxvf u-boot-2016.09.tar.bz2
$ cd u-boot-2016.09
3. 配置、编译
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
4. qemu中u-boot启动
$ qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic -m 128M
四、 编译arm架构内核
1. 下载内核
$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.1.tar.gz
2. 解压
$ tar zcvf linux-3.16.1.tar.gz
$ cd linux-3.16.1
4. 生成vexpress-a9 的config文件 (建议先执行make clean && make mrproper)
$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 vexpress_defconfig
5. 执行内核配置
$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 menuconfig
选项位于:
System Type —>[] Enable the L2x0 outer cache controller
取消该项 其他保持默认不变
6. 编译
$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 zImage -j2
生成的内核镱像位于./out_vexpress_3_16/arch/arm/boot/zImage
7. 测试qemu 能否正常启动
$ cp ./out_vexpress_3_16/arch/arm/boot/zImage ~/qemu_linux
$ cd ~/qemu_linux
$ qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage -nographic -append “console=ttyAMA0”
出现kernel panic
问题在于需要挂载文件系统
五、 制作文件系统
(一)形成根目录结构
1. 下载busybox
$ wget https://busybox.net/downloads/busybox-1.20.2.tar.bz2
$ make defconfig
$ make CROSS_COMPILE=arm-linux-gnueabi-
$ make install
安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。
先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录
2. 创建rootfs目录(根目录),根文件系统内的文件全部放到这里
$ sudo mkdir rootfs
3. 拷贝busybox命令到根目录下
$ sudo cp busybox-1.20.2/_install/* -r rootfs/
4. 从工具链中拷贝运行库到lib目录下
$ sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
5. 创建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
(二)制作根文件系统镜像
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
$ cp rootfs/* tmpfs/ -r
$ sudo umount tmpfs
六、 系统启动运行
完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:
$ qemu-system-arm -M vexpress-a9 -m 512M -kernel /the/path/to/your/kernel/dir/arch/arm/boot/zImage -nographic -append “root=/dev/mmcblk0 console=ttyAMA0” -sd a9rootfs.ext3