在Ubuntu下使用QEMU搭建arm开发环境(三)使用u-boot加载Linux内核

嵌入式启动概述

    嵌入式boot loader

        功能类似于PC的BIOS、硬件检测是否正常

       加载操作系统镜像到RAM

       设置不同的启动方式

    常见的启动方式

        NOR/NAND flash启动

        从SD卡启动

        BootLoader从网络加载Linux内核启动

U-boot编译

    下载源码

        从GitHub下载地址点我

    修改

        Makefile找CROSS_COMPILE

            CROSS_COMPILE ?= arm-linux-gnueabi-

        config.mk找ARCH

            ARCH ?= arm

    编译     

make -j4

    实验Uboot     

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

       

        启动成功

QEMU网络功能配置

    配置QEMU与主机的网络连接

        采用桥接的网络连接与Host通信

        需要主机内核tun/tap模块支持

    配置

        主机安装工具包:apt-get install uml-utilities bridge-utils

        创建tun设备文件(自动会创建)

            

        修改/etc/network/interface文件,重启生效,添加

auto br0
 
iface br0 inet dhcp
 
 bridge_ports ens33

        创建/etc/qemu-ifup和/etc/qemu-ifdown文件

        /etc/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.33.135 

        /etc/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

内核配置编译

    使用U-boot引导内核镜像

        将内核变异为UImage格式

        需要制定uImage的加载地址

        编译时指定

make LOADADDR=0x60003000 uImage -j4

        

主机TFTP工具安装

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

    修改配置文件

        vim /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
 
TFTP_DIRECTORY="/home/tftpboot"
 
TFTP_ADDRESS="0.0.0.0:69"
 
TFTP_OPTIONS="-l -c -s"

    创建tftp目录:mkdir /home/tftpboot  chmod 777 tftpboot/

    重启tftp服务:/etc/init.d/tftpd-hpa restart

两种引导方式

    自动引导

    1、修改include/configs/vexpress_common.h

        先搜索BOOTCOMMAND

        然后修改

#define CONFIG_BOOTCOMMAND \
 
        "tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb; \
        setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0'; \
        bootm 0x60003000 - 0x60500000; "

        在再下面添加

/*Netmask*/
 
#define CONFIG_IPADDR 192.168.1.128
 
#define CONFIG_NETMASK 255.255.255.0
 
#define CONFIG_SERVERIP 192.168.1.70

        注意:此处CONFIG_SERVERIP为tftp主机即我们的主机的ip

        CONFIG_IPADDR为同网段内随便一个IP就可以

    2、编译

        进入u-boot文件夹     

make vexpress_ca9x4_defconfig
make -j4

    3、将必要的文件移到tftpboot

        包括编译生成的u-boot、编译生成的uImage、vexpress-v2p-ca9.dtb、启动脚本

        

    4、修改启动脚本

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

    5、运行启动脚本启动

        

        会自动从tftp服务器下载uImage和vexpress-v2p-ca9.dtb并写入正确位置

        

       到此启动成功

手动引导

    自动引导适合我们自己学习时使用,一次配好就不用管了每次启动只要执行启动脚本就可以了,但是往往开发中是不一定能够使用自动引导的,我们需要进入u-boot后手动从tftp服务器下载内核并加载,以下为手动加载的方法

    在未加载时按下回车进入手动模式

    

    设置开发板地址:setenv ipaddr 192.168.1.128

    查看开发板地址:print ipaddr

    

    设置tftp服务器地址:setenv serverip 192.168.1.70

    设置bootargs:saveenv bootargs  'root=/dev/mmcblk0 console=ttyAMA0'

    下载uImage:tftp 60003000 uImage

        

    下载dtb文件:tftp 60500000 vexpress-v2p-ca9.dtb

        

    启动:bootm 60003000 - 60500000

       

        启动成功

修改u-boot的Makefile实现自动复制到tftpboot

    

    在u-boot的Makefile中找到此位置添加cp u-boot /home/tftpboot,在u-boot生成完成后拷贝

    

    

    可以看到实现了拷贝功能

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值