日期:2018年12月12日
项目:树莓派 64位 uboot的编译
简介:目前网站上的都是编译树莓派3B/3B+ 64版本的文章很少,结合自身实际操作,记录下整个编译的过程。
1、使用Virtual Box安装Ubuntu 16.04的操作系统,操作系统ISO可以清华的官方镜像网站下载,速度很快,链接如下:
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/16.04.5/
2、下载uboot的源码
http://ftp.denx.de/pub/u-boot/ 本次编译下载的是u-boot-2017.11.tar.bz2 版本
由于最新的u-boot-2018.09以及之后的版本要求GCC版本大于6.0,ubuntu安装的交叉工具链是5.3.1-1ubuntu1
3、安装交叉工具链
目前大多数文章描述的树莓派uboot交叉编译提到的是32位的,64位的较少。
32位的工具链:gcc-arm-linux-gnueabi 安装命令:apt install gcc-arm-linux-gnueabi
64位的工具链:gcc-aarch64-linux-gnu 安装命令:apt install gcc-aarch64-linux-gnu
4、uboot的具体编译过程如下:
4.1、查看树莓派的defconfig配置文件
root@compile-VirtualBox:/home/Source/u-boot-2017.09# ls ./configs/ |grep rpi
rpi_2_defconfig 32位工具链可以编译
rpi_3_32b_defconfig 32位配置文件
rpi_3_defconfig 64位配置文件
rpi_defconfig 32位工具链可以编译
root@compile-VirtualBox:/home/Source/u-boot-2017.09#
4.2、配置ARCH/CROSS_COMPILE环境变量
root@compile-VirtualBox:/home/Source/u-boot-2017.09# export ARCH=arm
root@compile-VirtualBox:/home/Source/u-boot-2017.09# export CROSS_COMPILE=aarch64-linux-gnu-
如果编译32位的,交叉工具链配置如下:
root@compile-VirtualBox:/home/Source/u-boot-2017.09# export CROSS_COMPILE=arm-linux-gnueabi-
4.3、生成默认的配置文件.config
root@compile-VirtualBox:/home/Source/u-boot-2017.09# make rpi_3_defconfig V=1 //V=1 用于输出过程的打印
make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig rpi_3_defconfig
scripts/kconfig/conf --defconfig=arch/../configs/rpi_3_defconfig Kconfig
#
# configuration written to .config
#
root@compile-VirtualBox:/home/Source/u-boot-2017.09#
4.4、执行编译过程
root@compile-VirtualBox:/home/Source/u-boot-2017.09# make -j4
scripts/kconfig/conf --silentoldconfig Kconfig
CHK include/config.h
GEN include/autoconf.mk.dep
CFG u-boot.cfg
GEN include/autoconf.mk
*** Your GCC is older than 6.0 and will not be supported starting in v2018.01.
CHK include/config/uboot.release
CHK include/generated/timestamp_autogenerated.h
UPD include/generated/timestamp_autogenerated.h
CHK include/generated/version_autogenerated.h
CHK include/generated/asm-offsets.h
CHK include/generated/generic-asm-offsets.h
HOSTCC tools/mkenvimage.o
HOSTCC tools/fit_image.o
HOSTCC tools/image-host.o
CHK include/config.h
CFG u-boot.cfg
HOSTCC tools/dumpimage.o
HOSTCC tools/mkimage.o
HOSTLD tools/mkenvimage
HOSTLD tools/dumpimage
HOSTLD tools/mkimage
CC arch/arm/cpu/armv8/fwcall.o
LD arch/arm/cpu/armv8/built-in.o
CC cmd/version.o
CC common/main.o
LD cmd/built-in.o
LD common/built-in.o
make[2]: 'arch/arm/dts/bcm2837-rpi-3-b.dtb' is up to date.
CC lib/smbios.o
CC lib/display_options.o
CC lib/efi_loader/helloworld.o
LD lib/efi_loader/helloworld.so
OBJCOPY lib/efi_loader/helloworld.efi
LD lib/built-in.o
LD u-boot
OBJCOPY u-boot.srec
OBJCOPY u-boot-nodtb.bin
SYM u-boot.sym
start=$(aarch64-linux-gnu-nm u-boot | grep __rel_dyn_start | cut -f 1 -d ' '); end=$(aarch64-linux-gnu-nm u-boot | grep __rel_dyn_end | cut -f 1 -d ' '); tools/relocate-rela u-boot-nodtb.bin 0x00080000 $start $end
COPY u-boot.bin
CFGCHK u-boot.cfg
root@compile-VirtualBox:/home/Source/u-boot-2017.09#
5、参考链接:
https://www.jianshu.com/p/64a1197bd93e
https://www.linuxidc.com/Linux/2017-11/148627.htm
http://www.wowotech.net/x_project/bubblegum_uboot_porting.html