300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

时间:2018-06-21 09:53:52

相关推荐

基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

宿主机:Ubuntu16.04 x64(Linux内核4.4.0)

交叉编译工具链:gcc-arm-linux-gnueabi

arm-linux-gcc:4.4.3

QEMU:2.5.0

Linux kernel:4.4.1

busybox:1.25.1

一、准备

1.创建工作目录armv7/,进入该目录

2.下载内核源码文件linux-4.4.1.tar.xz

3.下载busybox源码文件busybox-1.25.1.tar.bz2

4. /files/pengdonglin137/etc.tar.gz下载内核启动配置文件etc.tar.gz,解压

二、编译Linux内核

在armv7/目录下

1.解压linux-4.4.1.tar.xz

2.进入linux-4.4.1目录

3.执行:

1 export ARCH=arm 2 export CROSS_COMPILE=arm-linux-gnueabi- 3 make vexpress_defconfig

完成后,执行:(j2表示两个线程执行)

1 make zImage -j2

最后执行:(一定要make dtbs,且启动时加上相应的dtb,否则内核启动不了)

1 make dtbs

或省略以上两步直接:

1 make all

4.在armv7/目录下新建temp/目录

5.将生成的arch/arm/boot/zImage和arch/arm/boot/dts/vexpress-v2p-ca9.dtb复制到temp/中

三、编译busybox

在armv7/目录下

1.解压busybox-1.25.1.tar.bz2

2.进入busybox-1.25.1目录

3.执行:

1 1 export ARCH=arm 2 2 export CROSS_COMPILE=arm-linux-gnueabi-3 make menuconfig

出现图形界面,做如下配置(这一步是可选的,如果执行了就可以不用执行cp /usr/arm-linux-gnueabi/lib rootfs/这一步):

Busybox Settings --->

Build Options --->

[*] Build BusyBox as a static binary (no shared libs)

完成后,执行:

1 make

完成后,执行:

1 make install

完成后,该目录下生成的_install中即是基本的busybox指令。

四、制作根文件系统

1. 先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与虚拟arm板上linux内核运行所需要的目录结构完全一样,然后再打包成镜像(在虚拟arm板看来就是SD卡),这个临时的目录结构称为根目录。在armv7/目录下,创建bash脚本,并运行(注意这里不能使用ext4格式,否则内核启动后文件系统是只读的,原因目前不清楚):

1 #!/bin/bash2 3 rm -rf rootfs4 rm -rf tmpfs5 rm -rf rootfs.ext36 7 mkdir rootfs8 mkdir -p rootfs/proc/9 mkdir -p rootfs/sys/10 mkdir -p rootfs/tmp/11 mkdir -p rootfs/root/12 mkdir -p rootfs/var/13 mkdir -p rootfs/mnt/14 15 cp busybox-1.25.1/_install/* rootfs/ -arf16 cp /usr/arm-linux-gnueabi/lib rootfs/ -arf17 cp etc rootfs/ -arf18 19 mkdir -p rootfs/dev/20 mknod rootfs/dev/tty1 c 4 121 mknod rootfs/dev/tty2 c 4 222 mknod rootfs/dev/tty3 c 4 323 mknod rootfs/dev/tty4 c 4 424 mknod rootfs/dev/console c 5 125 mknod rootfs/dev/null c 1 326 27 dd if=/dev/zero of=rootfs.ext3 bs=1M count=6428 mkfs.ext3 rootfs.ext329 30 mkdir -p tmpfs31 mount -t ext3 rootfs.ext3 tmpfs/ -o loop32 cp -r rootfs/* tmpfs/33 umount tmpfs

五、网络配置

在armv7/目录下

1.修改etc/init.d/rcS文件,在ifconfig lo 127.0.0.1 下加一句ifconfig eth0 192.168.xxx.xxx(也可以内核启动后手动运行,但这样开机自动运行比较方便)

2.依次执行以下shell指令:

1 ifconfig ens33 down # 关闭ens33接口2 brctl addbr br0 # 添加一个虚拟网桥br03 brctl addif br0 ens33 # 把ens33连接到br0上4 ifconfig br0 promisc up # 以混杂模式打开br0接口5 ifconfig ens33 promisc up # 以混杂模式打开ens33接口6 dhclient br0# 为br0分配ip7 tunctl -t tap0 -u root# 创建一个tap0接口,只允许root用户访问8 brctl addif br0 tap0 # 在虚拟网桥中增加一个tap0接口9 ifconfig tap0 up# 打开tap0接口

六、系统启动运行

qemu-system-arm \-M vexpress-a9 \-m 512M \-kernel temp/zImage \-dtb temp/vexpress-v2p-ca9.dtb \-nographic \-append "root=/dev/mmcblk0 rw console=ttyAMA0" \-sd rootfs.ext3 \-net nic \-net tap,ifname=tap0,script=no

七、后记

存在的问题:

1.显示文件系统是只读的 (已解决:文件系统格式改为ext3)

2.联网问题尝试过之前的方法,失败(已解决,宿主机内需要进行网桥、接口的配置,还要修改etc/init.d/rcS,加入一句ifconfig eth0 <ip>,<ip>是希望分配给虚拟arm板的ip)

3.ARM9选择了versatilepb (ARM926EJ-S)平台,但在启动时提示无法加载设备树,追溯问题发现是versatile-pb.dts没有编译导致dtb文件没有生成

新增问题:

1.qemu虚拟机只能与宿主机ping通,无法ping通外网

2.宿主机进行网桥、接口配置只能一条条输入shell指令完成,写成脚本运行后ping不通外网,但ifconfig信息与正确配置是一样的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。