搭建QEMU环境

QEMU是一款模拟嵌入式的开发环境,下面文章列举了搭建arm9架构开发环境的流程,具体操作起来还有几个小问题,这里记录一下。
地址: 从零使用qemu模拟器搭建arm运行环境 -海枫

  • 下载linux内核:
    采用 vexpress_defconfig 单板的配置,很多搭建QEMU环境的笔记都是这个单板。这里需要内核版本高一点,文中用了3.16,当然是可以的,我开始用了2.6.38就不行。

  • 编译内核:
    内核编译中有一个报错: return_address函数 redefinition
    看了下代码 编译时不带下面条件,这个函数应该是无用的,直接定义为了空。
    #if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
    函数定义在 gedit arch/arm/kernel/return_address.c 中,
    gedit arch/arm/include/asm/ftrace.h 中又包含了一次
    但当函数定义成空时,上面头文件中却又自己定义了一次,就导致了重复定义。
    处理很简单,把头文件中的定义删了,还用包含就行。

#else
/*
extern inline void *return_address(unsigned int level)
{
    return NULL;
}
*/
void *return_address(unsigned int);
#endif
  • 安装QEMU:
    ubuntu系统的话可以不用下载安装了,直接apt install 就行

  • 编译busyBox:
    make install CROSS_COMPILE=arm-linux-gnueabi-
    最好换下顺序:
    make CROSS_COMPILE=arm-linux-gnueabi- install
    不换顺序的话我这里生成不了 _install 目录,费解。。。
    编译中报错误: RLIMIT_FSIZE 未定义
    在 include\libbb.h 再包含一个头文件可以解决:
    include

  • 完善文件系统
    编译出来的文件系统还不完整,需要创建 proc sys etc等目录
    新建 /etc/init.d/rcS文件,至少包含以下内容:

#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mdev -s
  • 生成文件系统
    这里用下面命令生成 .gz的文件系统,然后用-initrd 加载比较好,
    这样文件 系统是可读写的。
    find . | cpio -o -H newc | gzip -9 > ../rootfs.gz
    用文中ext3的文件系统,挂载后是只读的。

  • 最后,启动

#!/bin/sh
if [ $# != 2 ]
then
    echo 'usage: go [path to zImage] [path to fileSystem]'
    exit
fi
qemu-system-arm -m 128M -M vexpress-a9 -kernel $1 -serial stdio -initrd $2 -append "console=ttyAMA0 root=/dev/mmcblk0 rdinit=/sbin/init"

附另一篇参考:
QEMU模拟ARM嵌入式LINUX系统

你可能感兴趣的:(搭建QEMU环境)