构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索。终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核。如下详细解释整个构建过程。
准备环境
- 运行环境:Ubuntu 16.04
- 需要的虚拟机:Qemu
- 交叉编译环境:ARM GCC
- 内核源码:Linux 4.7.3
- u-boot源码:u-boot-2016.09
安装 Qemu 、 ARM GCC
$ sudo add-apt-repository ppa:linaro-maintainers/tools
$ sudo apt-get install linaro-image-tools qemu-user-static qemu-system
$ sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
$ sudo apt install bridge-utils
下载、编译 U-BOOT 源码
- 下载源码
$ wget -c ftp://ftp.denx.de/pub/u-boot/u-boot-2016.09.tar.bz2
$ tar xvf u-boot-2016.09.tar.bz2
$ cd u-boot-2016.09
- 修改配置文件 include/configs/vexpress_common.h
#define V2M_BASE 0x80000000
#define CONFIG_SYS_TEXT_BASE 0x80800000
#endif /* 添加如下三行代码 */
#define CONFIG_IPADDR 192.168.0.5
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.0.3 /*
* Physical addresses, offset from V2M_PA_CS0-3
*/
#define V2M_NOR0 (V2M_PA_CS0)
#define V2M_NOR1 (V2M_PA_CS1)
........
........
........
/* 对如下 CONFIG_BOOTCOMMAND 作出修改 */
/* Basic environment settings */
#define CONFIG_BOOTCOMMAND \
"run distro_bootcmd; " \
"run bootflash; "
#undef CONFIG_BOOTCOMMAND #define CONFIG_BOOTCOMMAND "tftp 0x62008000 kernel; setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0,38400n8'; bootz 0x62008000" #define BOOT_TARGET_DEVICES(func) \
func(MMC, mmc, ) \
func(MMC, mmc, ) \
func(PXE, pxe, na) \
func(DHCP, dhcp, na)
#include <config_distro_bootcmd.h>
- 编译源码
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
$ mkdir -p ~/tftp
$ ln -sf $PWD/u-boot ~/tftp
准备内核镜像文件
- 下载源码
$ wget -c https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.7.3.tar.xz
$ tar xvf linux-4.7..tar.xz
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
- 打开如下几个选项
- 编译,一个漫长的过程
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all
$ ln -sf arch/arm/boot/dts/vexpress-v2p-ca9.dtb ~/tftp
$ ln -sf arch/arm/boot/zImage ~/tftp
准备 Qemu 网络
- qemu-ifup 内容如下。
#!/bin/sh
#
#cript to bring up the tun device in QEMU in bridged mode
# first parameter is name of tap device (e.g. tap0)
#
# some constants specific to the local host - change to suit your host
#
ETH0IPADDR=192.168.0.3
MASK=255.255.255.0
GATEWAY=192.168.0.1
BROADCAST=192.168.0.255
ETH=enp0s3 # 根据自己的网络接口修改。
#
# First take eth0 down, then bring it up with IP address 0.0.0.0
#
ifdown $ETH
ifconfig $ETH 0.0.0.0 promisc up
#
# Bring up the tap device (name specified as first argument, by QEMU)
#
#/usr/sbin/openvpn --mktun --dev $ --user `id -un`
ifconfig $ 0.0.0.0 promisc up
#
# create the bridge between eth0 and the tap device
#
brctl addbr br0
brctl addif br0 $ETH
brctl addif br0 $
#
# only a single bridge so loops are not possible, turn off spanning tree protocol
#
brctl stp br0 off
#
# Bring up the bridge with ETH0IPADDR and add the default route
#
ifconfig br0 $ETH0IPADDR netmask $MASK broadcast $BROADCAST
route add default gw $GATEWAY
#
# stop firewall - comment this out if you don't use Firestarter
#
#service firestarter stop
- qemu-ifdown
#!/bin/sh
#
# Script to bring down and delete bridge br0 when QEMU exits
#
# Bring down eth0 and br0
#
ETH=enp0s3 ifdown $ETH
ifdown br0
ifconfig br0 down
#
# Delete the bridge
#
brctl delbr br0
#
# bring up eth0 in "normal" mode
#
ifconfig $ETH -promisc
ifup $ETH
#
# delete the tap device
#
#/usr/sbin/openvpn --rmtun --dev $
#
# start firewall again
#
#service firestarter start
- 复制到 /etc 目录
$ sudo cp qemu-if* /etc
$ sudo chmod +x /etc/qemu-if*
搭建 TFTP 服务
- 本文中设置的 TFTP 服务的根目录为 ~/tftp 。
- 参考如下文章,配置 TFTP 服务。
- How do I install and run a TFTP server?
准备启动 U-BOOT
- append 设备树到 zImage
$ cd ~/tftp && cp zImage kernel
$ cat express-v2p-ca9.dtb >> kernel
- 启动 U-BOOT
$ sudo qemu-system-arm -M vexpress-a9 \
-m 128M -nographic \
-net nic -net tap,ifname=tap0 \
-kernel u-boot \
-dtb vexpress-v2p-ca9.dtb
- 如果中间没有出现问题,则能成功启动内核。
U-Boot 2016.07 (Sep - :: +) DRAM: MiB
WARNING: Caches not enabled
Flash: MiB
MMC: MMC:
*** Warning - bad CRC, using default environment In: serial
Out: serial
Err: serial
Net: smc911x-
Hit any key to stop autoboot:
smc911x: MAC :::::
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC :::::
Using smc911x- device
TFTP from server 192.168.0.3; our IP address is 192.168.0.5
Filename 'kernel'.
Load address: 0x62008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################
MiB/s
done
Bytes transferred = (367d5c hex)
smc911x: MAC :::::
Kernel image @ 0x62008000 [ 0x000000 - 0x3643e8 ] Starting kernel ... Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Linux version 4.7. (rain@rain-pc) (gcc version 5.4. (Ubuntu/Linaro 5.4.-6ubuntu1~16.04.) ) # SMP Fri Sep :: CST
CPU: ARMv7 Processor [410fc090] revision (ARMv7), cr=10c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine model: V2P-CA9
Memory policy: Data cache writeback
CPU: All CPU(s) started in SVC mode.
参考文章
- ARM Versatile Express Emulation On Qemu: From Scratch
- Virtual ARM Linux environment
- Virtual_Development_Board
- How do I install and run a TFTP server?
- Does kernel config option “Use appended device tree blob to zImage (EXPERIMENTAL)” work?
- 用Qemu模拟vexpress-a9 (三)— 实现用u-boot引导Linux内核
- Kernel - Common Problems Booting Linux
Next :构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS
原创文章、转载请注明出处!
构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel的更多相关文章
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS
上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...
- zju(1)嵌入式开发环境构建
1. 实验目的 搭建嵌入式开发环境,安装ubntu,编译交叉工具链,安装配置tftp,nfs.用makefile 编译几个文件,在实验台上运行. 2. 实验内容 1) 安装ubuntu12.04 2) ...
- 转:Qt 嵌入式开发环境搭建
地址: http://www.cnblogs.com/lishixian/articles/3013897.html 作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...
- Linux学习心得之 Linux下命令行Android开发环境的搭建
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...
- 【转】windows和linux中搭建python集成开发环境IDE
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Ubuntu嵌入式开发环境配置问题集锦(不断更新)
本文章主要记录在建立嵌入式开发环境中遇到的各种问题,并详细写上解决方法. 我的开发环境为:win7+Vmware9.0+Ubuntu12.04 之所以选择这样的开发环境是因为:1. 有 ...
- windows和linux中搭建python集成开发环境IDE——如何设置多个python环境
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Ubuntu Linux下如何配置Android开发环境
下载和安装Win7系统Android开发环境中讲了怎样在Win7系统中安装Android开发环境,那么怎样在Linux系统中配置Android开发环境呢?本篇文章就将演示如何使用Eclipse.And ...
- Linux下快速搭建php开发环境
php开发环境快速搭建 一.Linux下快速搭建php开发环境 1.安装XAMPP for Linux XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,使用XA ...
随机推荐
- CentOS 6.5/6.6 安装(install)mysql 5.7 最完整版教程
Step1: 检测系统是否自带安装mysql # yum list installed | grep mysql Step2: 删除系统自带的mysql及其依赖命令: # yum -y remove ...
- wso2esb之代理服务 Proxy Services
代理服务 顾名思义,代理服务充当了WSO2 ESB服务的代理,通常是一个已经存在的服务端点,代理服务可以使用不同的传输方式. 客户可以直接发送请求代理服务的ESB,客户看到服务代理. 运行示例 配置W ...
- .net字符串数组查找方式效率比较
下面是代码: static void Main(string[] args) { string[] arr = new string[] { "AAA", "BBBB&q ...
- Microsoft SQL Server Compact 4.0&&ADO.NET Entity Framework 4.1&&MVC3
最近重新查看微软MvcMusicStore-v3.0的源代码,发现忽略了很多重要的东西,特别是数据访问那一部分. 首先Microsoft SQL Server Compact 4.0 详细的介绍和下载 ...
- 简直要逆天!超炫的 HTML5 粒子效果进度条
我喜欢粒子效果作品,特别是那些能够应用于实际的,例如这个由 Jack Rugile 基于 HTML5 Cavnas 编写的进度条效果.看着这么炫的 Loading 效果,即使让我多等一会也无妨:)你呢 ...
- Spring------概述
Spring框架------概述: spring是j2ee应用程序框架,是轻量级的IOC和AOP的容器框架,主要是针对JAVABean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts ...
- HTML 文本格式化实例
一,文本格式化:此例演示如何在一个 HTML 文件中对文本进行格式化. <html> <body> <b>This text is bold</b> & ...
- TI的DSP、ST的ARM、Intel的X86浮点性能对比
估计没什么价值,单纯地记录下时间,以便以后查看. TMS320F28335 STM32f030 i3 4170 i3 4170 主频 150MHz 48MHz 3.7GHZ 3.7GHZ IDE ...
- SharePoint 2010 系统账户没完全控制权限了
网上下载了一个试用版的wsp包,安装部署后感觉不好就卸载掉了.坑爹的事情发生了,系统账户登录网站集竟然没完全控制权限了.连添加列表项的权限都没有了. 去管理中心查看,网站集管理员,没发现问题. 更坑爹 ...
- SAP 应用服务负载均衡的实现
共两步,一是服务器的设置,二是客户端登陆设置. 先在SAP中使用SMLG 进行服务器分组.实例名是SAP系统中定义过的,你没法删也没改.(可能是俺不会,会的教教).我们先建一个Gro ...