编译树莓派的uboot固件

9 篇文章 0 订阅
9 篇文章 1 订阅

编译树莓派的uboot固件

下载uboot源码和切换分支(应该也可以不切换)

git clone git://git.denx.de/u-boot.git
git checkout v2021.10 -b u-boot-2021-10

下载arm编译器

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

从上面的链接中下载自己对应的编译器

我的编译器信息:

gcc version 10.3.1 20210621 (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))

https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

配置编译环境和编译uboot

​​​​​​​export CROSS_COMPILE=/usr/local/aarch64-linux-gnu/bin/aarch64-none-linux-gnu-
make rpi_4_defconfig
make -j 8

如果执行make menuconfig和make rpi_4_defconfig及make -j 8报错,请看文章最后

uboot在树莓派上的启动展示

U-Boot> print
arch=arm                                                                        
baudrate=115200                                                                 
board=rpi                                                                       
board_name=4 Model B                                                            
board_rev=0x11                                                                  
board_rev_scheme=1                                                              
board_revision=0xB03114                                                         
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefi
x}${script}; source ${scriptaddr}                                               
boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};el
se bootefi bootmgr ${fdtcontroladdr};fi;load ${devtype} ${devnum}:${distro_bootp
art} ${kernel_addr_r} efi/boot/bootaa64.efi; if fdt addr ${fdt_addr_r}; then boo
tefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontrolad
dr};fi                                                                          
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} 
${prefix}${boot_syslinux_conf}                                                  
boot_net_usb_start=usb start                                                    
boot_pci_enum=pci enum                                                          
boot_prefixes=/ /boot/                                                          
boot_script_dhcp=boot.scr.uimg                                                  
boot_scripts=boot.scr.uimg boot.scr                                             
boot_syslinux_conf=extlinux/extlinux.conf                                       
boot_targets=mmc0 mmc1 usb0 pxe dhcp                                            
bootcmd=run distro_bootcmd                                                      
bootcmd_dhcp=run boot_net_usb_start; run boot_pci_enum; if dhcp ${scriptaddr} ${
boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; 
setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_v
ci PXEClient:Arch:00011:UNDI:003000;setenv bootp_arch 0xb;if dhcp ${kernel_addr_
r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; th
en bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtco
ntroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arc
h};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;                   
bootcmd_mmc0=devnum=0; run mmc_boot                                             
bootcmd_mmc1=devnum=1; run mmc_boot                                             
bootcmd_pxe=run boot_net_usb_start; run boot_pci_enum; dhcp; if pxe get; then px
e boot; fi                                                                      
bootcmd_usb0=devnum=0; run usb_boot                                             
bootdelay=2                                                                     
cpu=armv8                                                                       
dfu_alt_info=u-boot.bin fat 0 1;uboot.env fat 0 1;config.txt fat 0 1;Image fat 0
 1                                                                              
dhcpuboot=usb start; dhcp u-boot.uimg; bootm                                    
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done    
efi_dtb_prefixes=/ /dtb/ /dtb/current/                                          
ethaddr=dc:a6:32:f1:84:55                                                       
fdt_addr=2eff4200                                                               
fdt_addr_r=0x02600000                                                           
fdt_high=ffffffffffffffff                                                       
fdtcontroladdr=3af48ff0                                                         
fdtfile=broadcom/bcm2711-rpi-4-b.dtb                                            
gatewayip=192.168.1.1                                                           
initrd_high=ffffffffffffffff                                                    
ipaddr=192.168.1.10                                                             
kernel_addr_r=0x00080000                                                        
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix
}${efi_fdtfile}                                                                 
loadaddr=0x00200000                                                             
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi 
netmask=255.255.255.0                                                           
preboot=pci enum; usb start;                                                    
pxefile_addr_r=0x02500000                                                       
ramdisk_addr_r=0x02700000                                                       
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for 
prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scrip
ts; done;run scan_dev_for_efi;                                                  
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env ex
ists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fs
type ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_b
oot; fi; done; setenv devplist                                                  
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; for prefix in ${efi_dtb_prefixes
}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}
; then run load_efi_dtb; fi;done;if test -e ${devtype} ${devnum}:${distro_bootpa
rt} efi/boot/bootaa64.efi; then echo Found EFI removable media binary efi/boot/b
ootaa64.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; seten
v efi_fdtfile                                                                   
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefi
x}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boo
t_extlinux; echo SCRIPT FAILED: continuing...; fi                               
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${d
evnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${pr
efix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done  
scriptaddr=0x02400000                                                           
serial#=10000000a0ce333e                                                        
serverip=192.168.1.43                                                           
soc=bcm283x                                                                     
stderr=serial,vidconsole                                                        
stdin=serial,usbkbd                                                             
stdout=serial,vidconsole                                                        
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boo
t_part; fi                                                                      
usbethaddr=dc:a6:32:f1:84:55                                                    
vendor=raspberrypi                                                              
                                                                                
Environment size: 4166/16380 bytes                                              
U-Boot>

在编译时需要安装以下组件

sudo apt install libc6-dev
sudo apt install libncurses-dev 
sudo apt install libssl-dev 

在编译是遇到的报错信息如下,使用上面的办法解决

:~/opt/u-boot$ make rpi_4_defconfig   ///sudo apt install libc6-dev
  HOSTCC  scripts/basic/fixdep
scripts/basic/fixdep.c:92:10: fatal error: sys/types.h: No such file or directory
   92 | #include <sys/types.h>
      |          ^~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:95: scripts/basic/fixdep] Error 1
make: *** [Makefile:488: scripts_basic] Error 2



:~/opt/u-boot$ make menuconfig  ///sudo apt install libncurses-dev 
*
* Unable to find the ncurses package.
* Install ncurses (ncurses-devel or libncurses-dev
* depending on your distribution).
*
make[1]: *** [scripts/kconfig/Makefile:224: scripts/kconfig/.mconf-cfg] Error 1
make: *** [Makefile:569: menuconfig] Error 2


:~/opt/u-boot$ make -j 8    //sudo apt install libssl-dev 
  UPD     include/generated/timestamp_autogenerated.h
  CFGCHK  u-boot.cfg
  HOSTCC  tools/lib/crc8.o
  HOSTCC  tools/mkenvimage.o
  HOSTCC  tools/aisimage.o
  HOSTCC  tools/atmelimage.o
  HOSTCC  tools/fit_common.o
  HOSTCC  tools/fit_image.o
  HOSTCC  tools/image-host.o
  HOSTCC  tools/common/image-fit.o
In file included from tools/aisimage.c:9:
include/image.h:1178:12: fatal error: openssl/evp.h: No such file or directory
 1178 | #  include <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
In file included from tools/atmelimage.c:10:
include/image.h:1178:12: fatal error: openssl/evp.h: No such file or directory
 1178 | #  include <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
In file included from tools/fit_common.h:11,
                 from tools/fit_common.c:22:
include/image.h:1178:12: fatal error: openssl/evp.h: No such file or directory
 1178 | #  include <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
In file included from tools/fit_common.h:11,
                 from tools/fit_image.c:17:
include/image.h:1178:12: fatal error: openssl/evp.h: No such file or directory
 1178 | #  include <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
In file included from include/bootm.h:10,
                 from tools/image-host.c:12:
include/image.h:1178:12: fatal error: openssl/evp.h: No such file or directory
 1178 | #  include <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
In file included from include/bootm.h:10,
                 from ./tools/../common/image-fit.c:31,
                 from tools/common/image-fit.c:1:
include/image.h:1178:12: fatal error: openssl/evp.h: No such file or directory
 1178 | #  include <openssl/evp.h>
      |            ^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:112: tools/fit_common.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [scripts/Makefile.host:112: tools/aisimage.o] Error 1
make[1]: *** [scripts/Makefile.host:112: tools/atmelimage.o] Error 1
make[1]: *** [scripts/Makefile.host:112: tools/fit_image.o] Error 1
make[1]: *** [scripts/Makefile.host:112: tools/image-host.o] Error 1
make[1]: *** [scripts/Makefile.host:112: tools/common/image-fit.o] Error 1
make: *** [Makefile:1817: tools] Error 2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是一个人的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值