【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核

在前面的实验中,我们都是直接运行Linux内核。而在实际的嵌入式系统中都是通过BootLoader加载Linux镜像,然后再去运行。

嵌入式BootLoader

  • 功能类似PC中的BIOS,用以检测硬件是否正常。
  • 加载操作系统镜像到RAM
  • 设置不同启动方式
    • NOR/NAND Flash启动
    • 从SD卡启动
    • BootLoader从网络加载内核启动

下面将介绍QEMU从Ubuntu加载镜像然后启动。


一、U-BOOT编译

1、下载U-BOOT

<官网>下载,也可以从我的<网盘>直接下载,提取码:lrd6 。【建议下载网盘里的】

下载完毕拖曳到虚拟机目录./QEMU中,并输入tar jxvf u-boot-2017.05.tar.bz2进行解压!

2、修改Makfile

①、进入解压后的目录,修改Makefile文件,输入vi Makefile

和之前的一样,我们需要修改交叉编译器的相关变量值。在vi的一般模式下,输入/CORSS_COMPILE进行查找。

我的u-boot-2017.05在249行添加内容CROSS_COMPILE ?= arm-linux-gnueabi-,保存退出。

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第1张图片

行号,可以在一般模式下,然后输入:set nu进行显示。

vim永久显示行号配置

要想每次都显示,可以进入输入vi /etc/vim/vimrc,然后再文件末尾添加set nu,保存退出即可!

②、修改config.mk,输入vi config.mk

修改25行为:ARCH := arm

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第2张图片

3、修改配置文件

输入make vexpress_ca9x4_defconfig

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第3张图片

4、编译

①、输入make -j4

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第4张图片
完成后
【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第5张图片
②、验证U-boot是否可用

输入qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot

注意:出现这个倒计时的时候按下任意键直接进入,不要让它自启动,我们还没有完全配置完成,让它自启动的话会出错的。
【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第6张图片

按下任意按键之后会出现
【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第7张图片

输入print ipaddr,若成功打印IP地址,说明安装的没有问题。否则需要再找问题!

二、QEMU网络功能配置

一般来说QEMU可以通过NAT方式与虚拟机进行连接,但是虚拟机也是通过NAT与我们主机PC进行连接的,进而外网不能访问虚拟机。若开发板也采用这种方式,造成实际虚拟机访问不了QEMU。

1、安装依赖包,apt install uml-utilities bridge-utils

2、查看tun设备文件

输入ls /dev/net,可看到Ubuntu16.04已经默认有一个tun文件。

3、查看网络配置

输入ifconfig
【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第8张图片

我的对应网口是ens33,IP地址是192.168.112.142

4、修改配置文件

①、输入vi /etc/network/interfaces

在其中添加如下内容

auto ens33
 
auto br0
iface br0 inet dhcp
bridge_ports ens33

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第9张图片
②、在/etc目录下添加qemu-ifupqemu-ifdown

qemu-ifup内容如下

#!/bin/sh

echo sudo tunctl -u $(id -un) -t $1
sudo tunctl -u $(id -un) -t $1

echo sudo ifconfig $1 0.0.0.0 promisc up
sudo ifconfig $1 0.0.0.0 promisc up

echo sudo brctl addif br0 $1
sudo brctl addif br0 $1

echo brctl show
brctl show

sudo ifconfig br0 192.168.112.142 

qemu-ifdown内容如下

#!/bin/sh

echo sudo brctl delif br0 $1
sudo brctl delif br0 $1

echo sudo tunctl -d $1
sudo tunctl -d $1
 
echo brctl show
brctl show

在这里插入图片描述

③、上面两个修改和添加完成后,输入reboot进行重启!

重启后输入ifconfig,可发现已经生成虚拟网口br0,这个就是以后的虚拟开发本与主机host通信接口。

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第10张图片

三、使用U-boot引导内核镜像

前提

  • 需要将内核编译为uImage格式
  • 需要指定uImage的加载地址
  • 编译时指定:$ make LOADADDR=0x60003000 uImage -j4

1、进入linux内核所在目录,cd /home/clay/QEMU/linux-4.4.195/

2、指定U-boot加载内核地址

①、输入make LOADADDR=0x60003000 uImage -j4

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第11张图片

②、查看uImage是否生成,输入ls arch/arm/boot

在这里插入图片描述

四、TFTP工具安装

1、安装tftp工具:apt install tftp-hpa tftpd-hpa xinetd

2、修改配置文件,输入vi /etc/default/tftpd-hpa

修改文件内容如下所示:

# /etc/default/tftpd-hpa
 
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/clay/QEMU/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第12张图片

3、在/home/clay/QEMU/下,创建tftpboot文件夹

在这里插入图片描述

然后设置其权限为最高权限,输入chmod 777 tftpboot
在这里插入图片描述

4、重启tftp服务

输入/etc/init.d/tftpd-hpa restart

在这里插入图片描述

5、拷贝文件到tftpboot文件夹

①、拷贝三个文件

  • uImage
    • cp -r /home/clay/QEMU/linux-4.4.195/arch/arm/boot/uImage .
  • u-boot
    • cp -r /home/clay/QEMU/u-boot-2017.05/u-boot .
  • vexpress-v2p-ca9.dtb
    • cp -r /home/clay/QEMU/linux-4.4.195/arch/arm/boot/dts/vexpress-v2p-ca9.dtb .

在这里插入图片描述

②、新建脚本boot-uboot.sh ,并添加可执行权限,然后写入代码如下。

qemu-system-arm \
	-M vexpress-a9 \
	-kernel u-boot  \
	-nographic  \
	-m 512M  \
	-net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
	-sd a9rootfs.ext3

【嵌入式Linux之QEMU模拟器】5、使用u-boot加载Linux内核_第13张图片

你可能感兴趣的:(搭建环境)