编译 U-Boot
建立并进入工作目录
TOP=$HOME/arm-linux
mkdir -p $TOP
cd $TOP
注意:为了方便表述,这里使用了变量(变量在关闭终端后会消失,需要重新设置),你也可以不使用,直接把变量换成相应的文本即可。
上述命令的意义是:
TOP=$HOME/arm-linux
设定一个变量
TOP
用来指代顶层目录($HOME
是你的主目录,它是一个默认存在的环境变量)。mkdir -p $TOP
新建
$TOP
这个目录($TOP
指的是变量TOP
的内容)
下载 U-Boot 源码
这里下载的是 2017.03 的版本:
# 下载 U-Boot 源码并解压(15M)
# 从 Coding.net 上的一个仓库下载(国内地址)
# 但是没有文件大小显示,所以无法看到剩余下载时间
curl https://coding.net/u/stamp711/p/arm-linux/git/raw/master/downloads/u-boot-2017.03.tar.gz | tar -xzf -
上面的命令使用了传输工具 curl
下载了一个 tar.gz
格式的压缩包,并把下载的内容通过管道直接传递给解压程序 tar
。运行的结果:当前目录下出现解压后的文件夹 u-boot-2017.03
。
ftp://ftp.denx.de 的下载速度非常慢,除非你有代理。如果你想要其他版本的 U-Boot 源码而又嫌从国外下载速度太慢,可以告诉我。
进行编译
# 进入源码目录
cd u-boot-2017.03
# 为 vexpress 开发板生成配置文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
vexpress 是一个 ARM 的开发板。可以参看 这篇博客。
# 进行编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all
编译可能需要两到三分钟。如果你遇到了故障,记得要先使用 make clean
清除残留文件,然后再进行编译尝试。
在 QEMU 中测试
# 在 QEMU 中测试
TOP=$HOME/arm-linux
UBOOT=$TOP/u-boot-2017.03/u-boot
qemu-system-arm -M vexpress-a9 -kernel $UBOOT -serial stdio
上述命令将会模拟一个 vexpress
开发板,并且将当前的终端连接到这个开发板的串口。由于我们没有指定内存大小,内存将默认为 128 MB。如果你想要了解更多关于 QEMU 命令参数的信息,可以查看 QEMU 启动选项说明。
为了让命令具有可读性,这里使用了变量 UBOOT
,它指向的是编译好的二进制文件 $TOP/u-boot-2017.03/u-boot
(注意 $TOP
指的是 TOP
变量的内容,也就是我们的顶层文件夹;$HOME
是你的主目录,它是一个默认就存在的环境变量,无需设置)。
这些变量会在关闭终端后消失,需要重新设置。或者你可以不使用变量,但要输入一串非常长的启动命令。
开机后,U-Boot 会尝试以各种方式启动。不过,由于我们还没有任何可以启动的操作系统,所以会提示 ERROR
。就酱紫。