基于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.执行:
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内核的编译和运行相关推荐
- android平板开发板,基于ARM Cortex A9开发板平板电脑实战项目
Cortex A9处理器基于先进的推测型八级流水线,该流水线具有高效.动态长度.多发射超标量及无序完成特征,这款处理器的性能.功效和功能均达到了前所未有的水平,能够满足消费.网络.企业和移动应用等领域 ...
- Linux利器:QEMU!用它模拟开发板能替代真开发板?
不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我! QEMU,搞嵌入式开发的一定不陌生,最近各大群里都讨论疯了,说它是Linux利器一点也不夸张.它是一款知名的而且开源的模拟器(官网 ...
- 02 QEMU默认支持的所有开发板、芯片列表
QEMU默认支持的所有开发板.芯片列表 作者 日期 将狼才鲸 2021-11-12 所属的Gitee源码和工程地址:才鲸嵌入式 / 开源安防摄像机(嵌入式软件) 一.QEMU相关文档 QEMU官方文档 ...
- [转] 高性能嵌入式处理器时代来临!多家中国芯片设计公司选择ARM® Cortex™-A9和Mali™图形处理器技术
ARM公司(伦敦证交所:ARM:纳斯达克:ARMH)近日宣布,在过去一年多时间内,海思(Hisilicon).晶晨半导体(Amlogic).中天联科(Availink).海尔(Haier)等多家中国知 ...
- QEMU模拟FriendlyArm的Mini2440开发板
这篇博文中主要从以下几点进行叙述: 1.Mini2440开发板和QEMU模拟器简介 2.编译适配Mini2440的QEMU 3.Buildroot (2012.05)的使用 4.在QEMU中运行编译好 ...
- 手工打造基于MM32F5微控制器的MicroPython开发板
手工打造基于MM32F5微控制器的MicroPython开发板 苏勇,2022-07-21 文章目录 手工打造基于MM32F5微控制器的MicroPython开发板 引言 MM32F5微控制器简介 制 ...
- arch linux arm下载_arm开发板运行hello word的详细过程
arm开发板运行helloword 1.uboot的编译 这里已经安装好了交叉编译工具链,如果自己的电脑下没有,请自行百度安装.将下载好uboot到linux下,进行解压-->打补丁--&g ...
- 基于涂鸦模组和ITOP4412开发板的宠物喂食器
文章目录 基于涂鸦模组和ITOP4412开发板的宠物喂食器 1.作品描述 2.作品介绍 2.1 开发环境 2.1.1硬件设备 2.2 主要实现的功能 2.3 后续更新 3.开发流程 3.1 使用涂鸦I ...
- 玩转mini2440开发板之【linux内核的编译和下载】
今天首先来玩一玩linux内核的编译和下载. 1.背景交代 开发环境:64位的Ubuntu 14.04: 编译工具:arm-linux-gcc 4.4.3: 下载工具:SuperViVi USB Tr ...
最新文章
- Linux定时增量更新文件--转
- .NET GC 实时监控工具 dotnet gcmon 介绍
- 使用Maven安装本地jar
- js获取当前日期星期几
- yum仓库与pxe自动装机
- 用 :focus-within 实现纯 CSS 下拉框组件
- Spring Controller – Spring MVC控制器
- 云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
- 十八:Java8新特性
- (一) Windows环境下的Detours编译
- 扒一个超棒的stm32的开源usb-can项目,canable及PCAN固件
- c语言编译defined,#if defined(__GNUC__)的意思是不是如果使用的是GCC编译器?
- handsome主题添加服务器信息,全屏响应式精美typecho主题handsome
- 海康威视多监控集成到同一页面
- setBackground()和setImageBitmap()看完就哦了
- 网络安全笔记-TCP/IP
- 今日头条阅读量怎么刷_怎么刷今日头条阅读量?
- vue:将Element UI的时间选择器(DatePicker)的Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)转化为XXXX-XX-XX的格式
- 某小学把10对双胞胎放一个班
- 第 296 场力扣周赛(C语言解
热门文章
- 网关服务Spring Cloud Gateway(三)
- redis 3.0的集群部署
- 在windows server 2008 R2上运行disk cleanup
- Mysql ERROR 2002 (HY000) Can't connect to local MySQL server through socket
- Spring配置与第一Spring HelloWorld
- 今日奇葩事件,一位不懂技术,却来管理技术团队的领导
- javascript的一些基本概念
- 客户端用mstsc不能用一台设备连接终端服务器的解决办法
- 为什么我要构建这个脚手架
- 解决 python中 使用tesserocr,File tesserocr.pyx, line 2401, in tesserocr._tesserocr.image_to_text 报错问题...