宿主机: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. http://files.cnblogs.com/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/ -arf
16 cp /usr/arm-linux-gnueabi/lib rootfs/ -arf
17 cp etc rootfs/ -arf
18
19 mkdir -p rootfs/dev/
20 mknod rootfs/dev/tty1 c 4 1
21 mknod rootfs/dev/tty2 c 4 2
22 mknod rootfs/dev/tty3 c 4 3
23 mknod rootfs/dev/tty4 c 4 4
24 mknod rootfs/dev/console c 5 1
25 mknod rootfs/dev/null c 1 3
26
27 dd if=/dev/zero of=rootfs.ext3 bs=1M count=64
28 mkfs.ext3 rootfs.ext3
29
30 mkdir -p tmpfs
31 mount -t ext3 rootfs.ext3 tmpfs/ -o loop
32 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                           # 添加一个虚拟网桥br0
3 brctl addif br0 ens33                     # 把ens33连接到br0上
4 ifconfig br0 promisc up                   # 以混杂模式打开br0接口
5 ifconfig ens33 promisc up                 # 以混杂模式打开ens33接口
6 dhclient br0                              # 为br0分配ip
7 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信息与正确配置是一样的

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

  1. android平板开发板,基于ARM Cortex A9开发板平板电脑实战项目

    Cortex A9处理器基于先进的推测型八级流水线,该流水线具有高效.动态长度.多发射超标量及无序完成特征,这款处理器的性能.功效和功能均达到了前所未有的水平,能够满足消费.网络.企业和移动应用等领域 ...

  2. Linux利器:QEMU!用它模拟开发板能替代真开发板?

    不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我! QEMU,搞嵌入式开发的一定不陌生,最近各大群里都讨论疯了,说它是Linux利器一点也不夸张.它是一款知名的而且开源的模拟器(官网 ...

  3. 02 QEMU默认支持的所有开发板、芯片列表

    QEMU默认支持的所有开发板.芯片列表 作者 日期 将狼才鲸 2021-11-12 所属的Gitee源码和工程地址:才鲸嵌入式 / 开源安防摄像机(嵌入式软件) 一.QEMU相关文档 QEMU官方文档 ...

  4. [转] 高性能嵌入式处理器时代来临!多家中国芯片设计公司选择ARM® Cortex™-A9和Mali™图形处理器技术

    ARM公司(伦敦证交所:ARM:纳斯达克:ARMH)近日宣布,在过去一年多时间内,海思(Hisilicon).晶晨半导体(Amlogic).中天联科(Availink).海尔(Haier)等多家中国知 ...

  5. QEMU模拟FriendlyArm的Mini2440开发板

    这篇博文中主要从以下几点进行叙述: 1.Mini2440开发板和QEMU模拟器简介 2.编译适配Mini2440的QEMU 3.Buildroot (2012.05)的使用 4.在QEMU中运行编译好 ...

  6. 手工打造基于MM32F5微控制器的MicroPython开发板

    手工打造基于MM32F5微控制器的MicroPython开发板 苏勇,2022-07-21 文章目录 手工打造基于MM32F5微控制器的MicroPython开发板 引言 MM32F5微控制器简介 制 ...

  7. arch linux arm下载_arm开发板运行hello word的详细过程

    arm开发板运行helloword 1.uboot的编译 ​ 这里已经安装好了交叉编译工具链,如果自己的电脑下没有,请自行百度安装.将下载好uboot到linux下,进行解压-->打补丁--&g ...

  8. 基于涂鸦模组和ITOP4412开发板的宠物喂食器

    文章目录 基于涂鸦模组和ITOP4412开发板的宠物喂食器 1.作品描述 2.作品介绍 2.1 开发环境 2.1.1硬件设备 2.2 主要实现的功能 2.3 后续更新 3.开发流程 3.1 使用涂鸦I ...

  9. 玩转mini2440开发板之【linux内核的编译和下载】

    今天首先来玩一玩linux内核的编译和下载. 1.背景交代 开发环境:64位的Ubuntu 14.04: 编译工具:arm-linux-gcc 4.4.3: 下载工具:SuperViVi USB Tr ...

最新文章

  1. Linux定时增量更新文件--转
  2. .NET GC 实时监控工具 dotnet gcmon 介绍
  3. 使用Maven安装本地jar
  4. js获取当前日期星期几
  5. yum仓库与pxe自动装机
  6. 用 :focus-within 实现纯 CSS 下拉框组件
  7. Spring Controller – Spring MVC控制器
  8. 云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
  9. 十八:Java8新特性
  10. (一) Windows环境下的Detours编译
  11. 扒一个超棒的stm32的开源usb-can项目,canable及PCAN固件
  12. c语言编译defined,#if defined(__GNUC__)的意思是不是如果使用的是GCC编译器?
  13. handsome主题添加服务器信息,全屏响应式精美typecho主题handsome
  14. 海康威视多监控集成到同一页面
  15. setBackground()和setImageBitmap()看完就哦了
  16. 网络安全笔记-TCP/IP
  17. 今日头条阅读量怎么刷_怎么刷今日头条阅读量?
  18. vue:将Element UI的时间选择器(DatePicker)的Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)转化为XXXX-XX-XX的格式
  19. 某小学把10对双胞胎放一个班
  20. 第 296 场力扣周赛(C语言解

热门文章

  1. 网关服务Spring Cloud Gateway(三)
  2. redis 3.0的集群部署
  3. 在windows server 2008 R2上运行disk cleanup
  4. Mysql ERROR 2002 (HY000) Can't connect to local MySQL server through socket
  5. Spring配置与第一Spring HelloWorld
  6. 今日奇葩事件,一位不懂技术,却来管理技术团队的领导
  7. javascript的一些基本概念
  8. 客户端用mstsc不能用一台设备连接终端服务器的解决办法
  9. 为什么我要构建这个脚手架
  10. 解决 python中 使用tesserocr,File tesserocr.pyx, line 2401, in tesserocr._tesserocr.image_to_text 报错问题...