centos下利用qemu搭建arm模拟器

有点繁琐,整理一下,系统环境centos6.6,虚拟机以及实际系统中测试通过。

一、交叉编译器的下载与安装
1、下载地址:http://blog.csdn.net/dldw8816/article/details/46004167

下载其中的解压版。

2、然后解压缩

tar jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 

3、添加环境变量,假定压缩包所在目录为/home,解压后目录为arm-2014.05。

vim /etc/profile

 

在最下面添加

export PATH=$PATH:/home/arm-2014.05/bin

 然后更新

source /etc/profile

 

4、测试是否安装成功

arm-none-linux-gnueabi-gcc -v

 



二、qemu的安装

参考网站http://blog.csdn.net/oxford_d/article/details/51823473

wget https://download.qemu.org/qemu-2.11.0.tar.xz

tar xvJf qemu-2.11.0.tar.xz

cd qemu-2.11.0

./configure

make -j8

make install

 


说明:
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror  --target-list=arm-softmmu --audio-drv-list=
configure脚本用于生成Makefile,其选项可以用./configure --help查看。这里使用到的选项含义如下:
--enable-kvm:编译KVM模块,使QEMU可以利用KVM来访问硬件提供的虚拟化服务。
--enable-vnc:启用VNC。
--enalbe-werror:编译时,将所有的警告当作错误处理。
--target-list:选择目标机器的架构。默认是将所有的架构都编译,但为了更快的完成编译,指定需要的架构即可。


三、uboot安装

参考网站http://blog.csdn.net/aggresss/article/details/54945726

1、源文件下载http://ftp.denx.de/pub/u-boot/

2、解压源文件 

tar jvxf u-boot-2018.01.tar.bz2 -C xxxx  (xxx为需要解压的目录)

 

3. 进入U-Boot 源文件目录,然后执行:
               

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_ca9x4_defconfig
make

编译完成后,如果目录下生成 u-boot 文件,则说明编译成功。

 

4. 在U-Boot源码目录下编写脚本 run.sh
               

qemu-system-arm \
                -M vexpress-a9 \
                    -nographic \
                    -m 512M \
                    -kernel u-boot

 

然后 chmod +x run.sh 增加文件执行权限。

5. 最后执行  ./run.sh,可以看到启动了bootloader,但是会提示没有映像文件

四、内核编译

参考博文http://blog.csdn.net/aggresss/article/details/54946438

内核源码下载地址:https://www.kernel.org/pub/linux/kernel/v4.x/

1、从arch/arm/configs下找到需要编译内核的配置文件vexpress_defconfig,复制到源码根目录下

2、执行命令      

         export ARCH=arm
                export CROSS_COMPILE=arm-none-linux-gnueabi-
                make vexpress_defconfig
                make zImage
                make modules
                make dtbs

 

3、编译后生成 在 arch/arm/boot 目录下生成 zImage 文件,则说明编译成功。

五、编译busybox,目的是制作根文件系统

1、从https://busybox.net/downloads/下载busybox

2、进入 Busybox 源文件目录下执行 make menuconfig,如果报错,则yum list *ncurses*,然后安装列出来的东西
 

Busybox Settings  --->  
            [*] Build BusyBox as a static binary (no shared libs)  
            (arm-none-linux-gnueabi-) Cross Compiler prefix  

 

3、编译
 

make
make install


_install 目录下生成 需要的文件 bin linuxrc sbin usr 。

六、根文件系统制作

1、创建一个空白文件,32M
 

 dd if=/dev/zero of=a9rootfs.ext3  bs=1M  count=32

 

2、格式化
  

mkfs.ext3 a9rootfs.ext3

 

3、创建根文件系统目录
  

mkdir rootfs

 

4、拷贝busybox下的文件
 

 cp busybox-1.20.2/_install/* -r  rootfs/

 

5、拷贝交叉编译器的lib
  

mkdir rootfs/lib/
   cp -P /xxx/arm-none-linux-gnueabi/lib/* rootfs/lib/

 

6、创建终端设备
  

   mkdir rootfs/dev/
   mknod rootfs/dev/tty1  c 4  1
   mknod rootfs/dev/tty2  c 4  2
   mknod rootfs/dev/tty3 c 4 3
   mknod rootfs/dev/tty4 c 4 4
   mknod rootfs/dev/console c 5 1
   mknod rootfs/dev/null c 1 3

 

7、创建必要目录
  

   mkdir -p rootfs/proc/
   mkdir -p rootfs/sys/
   mkdir -p rootfs/tmp/
   mkdir -p rootfs/root/
   mkdir -p rootfs/var/
   mkdir -p rootfs/mnt/

 

8、创建临时目录并与空白文件映射,目的是将根文件系统拷贝进去
  

   mkdir tmpfs
   mount  -t ext3  a9rootfs.ext3  tmpfs/ -o  loop
   rootfs/* tmpfs/  -r
   umount tmpfs

 

建立一个目录,将zImage,vexpress-v2p-ca9.dtb,_install目录拷贝在一个目录下

vim mkrootfs.sh

 1 rm -rf rootfs
 2 rm -rf tmpfs
 3 rm -f a9rootfs.ext3
 4 
 5 mkdir rootfs
 6 cp ./_install/* rootfs/ -raf
 7 mkdir -p rootfs/proc/
 8 mkdir -p rootfs/sys/
 9 mkdir -p rootfs/tmp/
10 mkdir -p rootfs/root/
11 mkdir -p rootfs/var/
12 mkdir -p rootfs/mnt/
13 
14 cp -arf /home/yuanlj/arm-2014.05/arm-none-linux-gnueabi/lib rootfs/
15 rm rootfs/lib/*.a
16 arm-none-linux-gnueabi-strip rootfs/lib/*
17 
18 mkdir -p rootfs/dev/
19 mknod rootfs/dev/tty1  c 4  1
20 mknod rootfs/dev/tty2  c 4  2
21 mknod rootfs/dev/tty3 c 4 3
22 mknod rootfs/dev/tty4 c 4 4
23 mknod rootfs/dev/console c 5 1
24 mknod rootfs/dev/null c 1 3
25 
26 dd if=/dev/zero of=a9rootfs.ext3  bs=1M  count=32
27 mkfs.ext3 a9rootfs.ext3
28 
29 mkdir -p tmpfs
30 mount  -t ext3  a9rootfs.ext3  tmpfs/ -o  loop
31 cp -r rootfs/*  tmpfs/
32 umount tmpfs

 



七、启动

qemu-system-arm  -nographic -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"  
qemu-system-arm  -serial stdio -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"  

 



注意:
1、以上在编译前请确保export ARCH=arm ;export CROSS_COMPILE=arm-none-linux-gnueabi-

2、若报错,一般是某些库没有包含,自行百度或google

 

posted on 2018-01-16 23:06  寒水司天  阅读(4433)  评论(0编辑  收藏  举报

导航