u-boot 引导linux内核

1.下载、编译u-boot (u-boot用于嵌入式Linux系统的内核引导)
u-boot 官方下载地址: http://ftp.denx.de/pub/u-boot/ (我选择的是u-boot-2017-11)
解压、进入文件夹
编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

2.使用qume测试
qemu-system-arm -M vexpress-a9 \ -kernel u-boot-2017-11\u-boot \ -nographic \ -m 512M
显示没有找到Image(镜像)是正常的,还未配置uImage

3.配置qemu网络功能
qemu支持多种网络连接方式,其中最常用的是桥接(bridge)。这需要依赖内核的tun/tap模块的支持
下载必要的工具包:
sudo apt-get install uml-utilities
sudo apt-get install bridge-utils

查看 /dev/net/tun文件, 若存在,则表明内核已经开启了tun支持(ubuntu-12.04以及之后的版本默认开启了该功能)
ls -l /dev/net/tun

查看本地连接的名称以及ip地址(这里因为用的是虚拟机,所以是虚拟机的ip地址,与mac的ip地址不同)
ifconfig
输入上述命令,可以看到 enp0s5 即为本地连接的名称,其中inet addr后面的地址即为虚拟机的ip地址

修改本地网络配置文件 添加桥接方式
vim /etc/network/interfaces
可以看到默认的配置文件已经有两行内容,在末尾添加如下配置:
auto br0
iface br0 inet dhcp
bridge_ports enp5s0

重启网络配置
sudo /etc/init.d/networking restart

qemu使用tap设备时,会执行 /etc/qemu-ifup 和 /etc/qemu-ifdown脚本,新版本的qemu已经自带了这两个脚本

4.开启tftp功能(tftp是一个在客户端与服务器之前传输文件的简单协议)
使用u-boot引导内核需要通过tftp协议来传输uImage和dtb文件

下载客户端程序:
sudo apt-get install tftp-hpa
下载服务器程序:
sudo apt-get install tftpd-hpa
修改配置文件 添加tftp的工作目录:
sudo vim /etc/default/tftpd-hpa
修改 "TFTP_DIRECTORY"后面的文件路径,在我的虚拟机中,我将tftpboot放在了/home/parallels/linux-rtthread/tftpboot
因此我将该路径作为 "TFTP_DIRECTORY" 的值

修改tftpboot工作目录的权限(777,最松的权限,允许写和传):
chmod 777 /home/parallels/linux-rtthread/tftpboot

重启服务:
service tftpd-hpa restart

测试tftp:
在tftpboot文件夹下创建一个文件test:
cd /home/parallels/linux-rtthread/tftpboot
touch test

切换一个目录,在该目录下执行(10.211.55.4为虚拟机的ip地址):
tftp 10.211.55.4
>get test

在该目录下发现有了test文件,说明tftp正常工作

5.修改U-boot的配置
cd u-boot-2017-11
vim /include/configs/vexpress_common.h
找到 "CONFIG_BOOTCOMMAND"大约在80%左右的位置,进行如下修改:
#define CONFIG_BOOTCOMMAND \
"run distro_bootcmd; " \
"run bootflash; " \
"setenv serverip 10.211.55.4; " \
"tftp 0x60003000 uImage; " \
"tftp 0x60500000 vexpress-v2p-ca9.dtb; " \
"setenv bootargs 'init=/linuxrc root=/dev/mmcblk0 rw; " \
"bootm 0x60003000 - 0x60500000; "
这一段脚本会在启动时自动执行,其中setenv serverip 为设置服务器的ip地址,setenv bootargs为设置qemu窗口的参数

6.将zImage转换成uImage(使用u-boot提供的工具)
cd u-boot-2017-11/tools
./mkimage -n 'Cortex-A9' -A arm -O linux -T kernel -C none -a 0x60003000 -e 0x60003000 -d ../../extra_folder/zImage uImage

将生成的uImage和之前编译内核生成的vexpress-v2p-ca9.dtb放到tftpboot文件夹下

7.启动
qemu-system-arm -M vexpress-a9 -serial stdio -kernel u-boot-2017.11/u-boot -sd a9rootfs.ext3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值