树莓派3B/3B+ 64位 uboot的编译

本文详细介绍了在Ubuntu16.04环境下,使用aarch64-linux-gnu交叉工具链编译树莓派64位U-Boot的过程。包括操作系统和U-Boot源码的获取、环境变量的配置、配置文件的生成及编译流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期: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://raspberrypi.stackexchange.com/questions/63822/u-boot-for-raspberry-pi-install-cross-compiler-and-export-environment-variables?answertab=active#tab-top

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

 

 

 

 

### 移植 U-Boot 到 Raspberry Pi 3B #### 准备工作 为了在Raspberry Pi 3B上成功移植U-Boot,需要准备适合的开发环境。这通常是在一台Linux主机上完成,因为大多数嵌入式系统的工具链都是基于Linux构建的。 对于树莓派来说,由于其部分组件特别是GPU的相关代码并未开源,在此情况下移植过来的u-boot并不能完全发挥作为引导加载程序的作用[^1]。不过出于学习目的或是特定需求下的应用,这样的操作仍然是有意义且可行的。 #### 下载源码 获取最新的U-Boot源代码可以通过Git仓库来实现。通过终端输入如下指令可以克隆官方GitHub上的最新版本: ```bash git clone https://github.com/u-boot/u-boot.git ``` 该命令会把整个项目复制到本地机器以便后续处理[^4]。 #### 配置编译选项 进入解压后的文件夹之后,针对不同型号的树莓派有不同的配置方法;对于Raspberry Pi 3B而言,则需指定相应的架构和支持特性。具体做法是利用`make`命令加上对应的参数来进行初始化设置: ```bash cd u-boot/ make rpi_3_defconfig ``` 这里使用的是预定义好的默认配置文件,它包含了启动Raspberry Pi 3所需的基础设定[^5]。 #### 编译过程 有了正确的配置后就可以开始实际编译流程了。考虑到目标平台与当前使用的计算机可能属于不同的CPU体系结构,因此要指明交叉编译器的置以及名称前缀。例如如果已经安装好了ARM架构的支持包并且路径于 `/usr/local/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/`,那么完整的编译语句应该是这样子的: ```bash export CROSS_COMPILE=/usr/local/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- make -j$(nproc) ``` 上述脚本中的`CROSS_COMPILE`变量用来告知Makefile应该调用哪个系列的GCC编译器去生成适用于ARM设备的目标二进制文件;而后面的`-j$(nproc)`则是让编译任务能够充分利用多核处理器的优势加快速度。 #### 安装部署 当编译顺利完成以后就会得到名为`u-boot.bin`或者其他形式(取决于所选板级支持包)的固件映像。接下来就是将其写入SD卡或其他存储介质内供树莓派读取执行。常见的手段有借助于专门软件如Etcher或者直接采用dd命令从命令行界面操作: ```bash sudo dd if=u-boot.bin of=/dev/sdX bs=1M conv=fsync; sync ``` 注意这里的`sdX`应当替换成为真实的磁盘节点名,并且务必确认无误以免造成数据丢失风险[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值