qemu启动实践。环境:ubuntu 16.04 64 bit,使用SecureCRT
软件连接。
安装交叉编译器
到这里下载配套交叉编译器。按说明解压。
1 | $ arm-unknown-linux-gnueabihf-gcc -v |
qemu
参考《qemu使用笔记》安装qemu软件。
设置qemu网络:
1 | $ sudo tunctl -t tap0 -u `whoami` |
u-boot
下载源码
编译
1 | $ export ARCH=arm |
启动
1 | $ qemu-system-arm \ |
输出信息:
1 | pulseaudio: set_sink_input_volume() failed |
内核
下载配套内核
配置内核
1 | make CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm vexpress_defconfig |
1 | System Type --> |
其它配置:
编译内核
1 | make CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm |
TODO:编译设备树:make CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm dtbs
得到内核镜像为:arch/arm/boot/zImage
,设备树文件为:arch/arm/boot/dts/vexpress-v2p-ca9.dtb
。
启动内核
进入arch/arm/boot/
目录:
1 | cd arch/arm/boot/ |
启动:
1 | qemu-system-arm -M vexpress-a9 -nographic -m 512M \ |
注:
- 需要指定dtb,否则无法启动。
- 启动参数需要添加
console=ttyAMA0
,否则不会打印启动信息。log_buf_len
指定启动信息大小,过小会不显示最初的信息。 - qemu选项
-nographic
需要保留,否则会提示Could not initialize SDL(No available video device)
。 - 此时,内核可启动,但无法挂载rootfs,最终失败。这是正常情况。
busybox
下载源码
配置
生成默认配置:
1 | make CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm defconfig |
自定义配置:
1 | make CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm menuconfig |
将busybox编译为静态库版本:
1 | Settings ---> |
除此外,其它默认即可。原则上,删除不使用的工具(如Mail工具、打印工具),添加需要的工具(中文支持)。
中文支持:
1 | Settings ---> |
编译
1 | make CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm install |
根文件系统
主要包括:busybox生成的二进制文件、库文件(静态库、动态为、链接器)、设备文件、启动脚本。
库文件
拷贝交叉编译器的库:
位于(交叉编译器路径)/arm-unknown-linux-gnueabihf/arm-unknown-linux-gnueabihf/sysroot
目录的lib
、usr/lib
。注意,lib
目录有链接脚本:ld-2.25.so
,它连接到同目录下的文件ld-linux-armhf.so.3
。因此,拷贝时要使用cp -a
进行。
启动:
1 | qemu-system-arm -M vexpress-a9 -nographic -m 512M \ |
在uboot中启动内核
安装mkimage
工具:sudo apt-get install u-boot-tools
。
编译内核:
1 | make uImage LOADADDR=0x60003000 CROSS_COMPILE=arm-unknown-linux-gnueabihf- ARCH=arm |
启动uboot:
1 | # qemu-system-arm \ |
uboot中输入:
1 | setenv ipaddr 192.168.28.130 |
可正常启动
配套实验资源
本文已整理好配套的实验资源,直接下载使用即可。
busybox 注:busybox源码编译的二进制已整合到rootfs中。
外一篇:xilinx预编译
下载地址:http://www.wiki.xilinx.com/Zynq+2016.2+Release
文件名:
1 | $ 2016.2-zed-release.tar.xz |
解压:
1 | $ tar xf 2016.2-zed-release.tar.xz |
启动:
1 | $ qemu-system-aarch64 \ |
附
参考资料:
- Cross-compile Linux kernel for ARM and run on QEMU
- ARM Versatile Express Emulation On Qemu From Scratch: Part 1
- ARM Versatile Express Emulation On Qemu From Scratch: Part 2
- 用Qemu模拟vexpress-a9 (一) — 搭建Linux kernel调试环境
- 构建rootfs
- RootfsFromScratch
- Virtual Development Board
- Simulate vexpress-a9 recording with Qemu
李迟