宿主机: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.执行:

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

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

 make zImage -j2 

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

 make dtbs 

或省略以上两步直接:

 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.执行:

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

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

Busybox Settings --->
  Build Options --->
    [*] Build BusyBox as a static binary (no shared libs)
完成后,执行:

 make

完成后,执行:

 make install

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

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

 #!/bin/bash

 rm -rf rootfs
rm -rf tmpfs
rm -rf rootfs.ext3 mkdir rootfs
mkdir -p rootfs/proc/
mkdir -p rootfs/sys/
mkdir -p rootfs/tmp/
mkdir -p rootfs/root/
mkdir -p rootfs/var/
mkdir -p rootfs/mnt/ cp busybox-1.25./_install/* rootfs/ -arf
cp /usr/arm-linux-gnueabi/lib rootfs/ -arf
cp etc rootfs/ -arf mkdir -p 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 dd if=/dev/zero of=rootfs.ext3 bs=1M count=64
mkfs.ext3 rootfs.ext3 mkdir -p tmpfs
mount -t ext3 rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/* tmpfs/
umount tmpfs

五、网络配置
在armv7/目录下
1.修改etc/init.d/rcS文件,在ifconfig lo 127.0.0.1 下加一句ifconfig eth0 192.168.xxx.xxx(也可以内核启动后手动运行,但这样开机自动运行比较方便)
2.依次执行以下shell指令:

 ifconfig ens33 down                       # 关闭ens33接口
brctl addbr br0 # 添加一个虚拟网桥br0
brctl addif br0 ens33 # 把ens33连接到br0上
ifconfig br0 promisc up # 以混杂模式打开br0接口
ifconfig ens33 promisc up # 以混杂模式打开ens33接口
dhclient br0 # 为br0分配ip
tunctl -t tap0 -u root # 创建一个tap0接口,只允许root用户访问
brctl addif br0 tap0 # 在虚拟网桥中增加一个tap0接口
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. VELT-0.1.5开发:使用kgdb调试Linux内核【转】

    转自:http://demo.netfoucs.com/lights_joy/article/details/44106589 VELT的全称是Visual EmbedLinuxTools,它是一个与 ...

  2. CentOS 7 利用qemu模拟ARM vexpress A9开发板

    听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...

  3. 基于 QEMU进行 arm 仿真开发 (以 vexpress-a9 为例)

    背景 基于 QEMU 的仿真可以节省 硬件成本. 参考:<qemu-system-arm仿真vexpress-a9踩坑记>.<在Ubuntu下使用QEMU搭建arm开发环境(一)搭建 ...

  4. 【基于mini2440开发板的交叉编译环境及内核树配置.

    在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙...笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大多 ...

  5. 烧写ARM开发板系统教程----->uboot 、内核以及文件系统

    一.sd启动 将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...

  6. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

    http://www.linuxidc.com/Linux/2012-09/70510.htm  来源:Linux社区  作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...

  7. 迅为八核cortex a53开发板android/linux/Ubuntu系统

    详情请点击了解:http://www.topeetobard.com 店铺:https://arm-board.taobao.com 核心板: 提供1G和2G内存版本,全机器焊接,杜绝手工,批量无忧. ...

  8. 【STM32】基于正点原子『探索者』开发板的烧录

    项目需要一个功能,开发板范例正好有,就买了一块,不过还是有点贵 我手边没有J-Link 用的都是串口烧录 烧录时,先打开右上的开关 如果是仿真器烧录,它无法供电,需要接12V适配器或是杜邦线供电 然后 ...

  9. 【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410

    作者 : 万境绝尘 转载请著名出处 终于拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

随机推荐

  1. Reliability diagrams

    Reliability diagrams (Hartmann et al. 2002) are simply graphs of the Observed frequency of an event ...

  2. python中with学习

    python中with是非常强大的一个管理器,我个人的理解就是,我们可以通过在我们的类里面自定义enter(self)和exit(self,err_type,err_value,err_tb)这两个内 ...

  3. Easyui后台管理角色权限控制

    最近需要做一个粗略的后台管理的权限,根据用户的等级来加载相应的菜单,控制到子菜单.使用的是Easyui这个框架. 1.我使用的mysql数据库.在这里我就建立四张表,角色表(tb_users),菜单表 ...

  4. 关于JQuery全选/反选第二次失效的问题

    最近在项目中,遇到一个问题,测试全选/反选功能时,第一次对母框进行选中/非选中时,能同步子框的全选/反选状态,之后再点击母框,子框就没反应了.原代码大致结构关键如下: function selectA ...

  5. Google Authenticator 如何集成(U盾的实现原理相同)

    Google Authenticator是一个类似U盾的二次验证工具,Google提供了它的开源客户端(https://github.com/google/google-authenticator)里 ...

  6. jvm中的垃圾回收器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用.Serial(串行GC)收集器 Serial收集器 ...

  7. 如何用Django从零开始搭建一个网站(0)

    python,django等安装就直接略过了.下面直接奔如主题,搭建网站. Step1:新建一个django project,运行命令:‘django-admin startproject myPit ...

  8. python之控制台(console)颜色显示

    #coding=utf-8 import ctypes,sys STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE = -11 STD_ERROR_HANDLE = -1 ...

  9. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

  10. DevOps之服务手册

    唠叨话 关于德语噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <DevOps服务手册(Manual)> <IT资源目标化>1.设施和设备(I ...