基于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. 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内核的编译和运行的更多相关文章
- VELT-0.1.5开发:使用kgdb调试Linux内核【转】
转自:http://demo.netfoucs.com/lights_joy/article/details/44106589 VELT的全称是Visual EmbedLinuxTools,它是一个与 ...
- CentOS 7 利用qemu模拟ARM vexpress A9开发板
听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...
- 基于 QEMU进行 arm 仿真开发 (以 vexpress-a9 为例)
背景 基于 QEMU 的仿真可以节省 硬件成本. 参考:<qemu-system-arm仿真vexpress-a9踩坑记>.<在Ubuntu下使用QEMU搭建arm开发环境(一)搭建 ...
- 【基于mini2440开发板的交叉编译环境及内核树配置.
在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙...笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大多 ...
- 烧写ARM开发板系统教程----->uboot 、内核以及文件系统
一.sd启动 将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...
- u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
http://www.linuxidc.com/Linux/2012-09/70510.htm 来源:Linux社区 作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...
- 迅为八核cortex a53开发板android/linux/Ubuntu系统
详情请点击了解:http://www.topeetobard.com 店铺:https://arm-board.taobao.com 核心板: 提供1G和2G内存版本,全机器焊接,杜绝手工,批量无忧. ...
- 【STM32】基于正点原子『探索者』开发板的烧录
项目需要一个功能,开发板范例正好有,就买了一块,不过还是有点贵 我手边没有J-Link 用的都是串口烧录 烧录时,先打开右上的开关 如果是仿真器烧录,它无法供电,需要接12V适配器或是杜邦线供电 然后 ...
- 【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
作者 : 万境绝尘 转载请著名出处 终于拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...
随机推荐
- Cornfields poj2019 二维RMQ
Cornfields Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Submit S ...
- 线段树专题—ZOJ1610 Count the Colors(涂区间,直接tag标记)
Painting some colored segments on a line, some previously painted segments may be covered by some th ...
- Variational Bayes
一.前言 变分贝叶斯方法最早由Matthew J.Beal在他的博士论文<Variational Algorithms for Approximate Bayesian Inference> ...
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法.SMO由微软研究院的 ...
- C#设计模式之六原型模式(Prototype)【创建型】
一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...
- springMVC中的redirect和forward区别?
1.forward在跳转后可以取到message值,redirect在跳转后无法取到message值. 2.forward跳转后地址栏URL不会改变,而redirect会改变.
- IOC模式理解
理解IOC inversion of control 控制反转 与 DI Dependency Injection 依赖注入概念之前,我们需要知道在一个系统的设计过程中,降低各模块之间的相 ...
- springboot mybatis优雅的添加多数据源
springboot的原则是简化配置,本文试图不通过xml配置,使用configuration配置数据源,并进行简单的数据访问. 并且配置了多数据源,在开发过程中这种场景很容易遇到. 1.依赖 spr ...
- 快速高效掌握企业级项目中的Spring面向切面编程应用,外带讲面试技巧
Spring面向切面编程(AOP)是企业级应用的基石,可以这样说,如果大家要升级到高级程序员,这部分的知识必不可少. 这里我们将结合一些具体的案例来讲述这部分的知识,并且还将给出AOP部分的一些常见面 ...
- win10 uwp App-to-app communication 应用通信
这篇文章都是乱说的,如果觉得有不好的,可以发我邮箱 应用之间需要相互的发送信息,就是我们经常用的分享 有个人看到一个网页很好,于是就希望把这个网页发送到邮件,那么这样的话就是使用应用通信. 因为每个应 ...