使用U-Boot让树莓派从U盘启动

本文详细介绍了如何使用U-Boot在树莓派上实现从U盘启动,包括获取源码、编译镜像、测试镜像等步骤,以及通过SD卡或网络启动的方法。

使用U-Boot让树莓派从U盘启动



概述
Das U-Boot, 通常叫做U-Boot, 嵌入式系统的常用bootloader. U-Boot允许使用SD卡上单个指定文件的内容作为额外的启动参数, 为树莓派增加不少灵活性.

本文将详细介绍如何让U-Boot运行在树莓派上, 以及通过SD卡或者从网络走TFTP服务器来启动镜像.
准备U-Boot镜像文件获得源码
现在U-Boot的主分支还不支持树莓派. 我们需要从GitHub上 Gonzoua的分支 获取代码. 请注意显示为默认的’master’分支是未修改的U-Boot代码 – 我们需要用’rpi’分支获取正确的代码.
你可以通过 此链接 下载源码的压缩包.
编译源码
首先, 我们需要导出交叉编译器的前缀来指定树莓派. 如果你的gcc库为arm-none-linux-gnueabi-gcc, 运行命令:
CROSS_COMPILE=arm-none-linux-gnueabi-
export CROSS_COMPILE
然后在U-Boot源码目录中, 运行下列命令开始编译:
make rpi_b
整个编译过程应该花不了几分钟时间.
编译镜像文件
不知道如何编译内核的同学请移步 内核编译 . u-boot.bin文件应该用作输入文件.
在编译完成后, 把kernel.img文件移动到SD卡上. 最好把镜像文件名改成类似uboot.img, 和实际内核镜像区分开来. 在config.txt文件中加上:
kernel=uboot.img

测试镜像
树莓派将会使用新的U-Boot镜像启动. 在屏幕上应该会显示U-Boot加载, 如果你连上了串口还应该有其输出.
编译U-Boot镜像
请确认获取了内核的源码, 并且对内核编译过程比较熟悉. 有内核源码就可以编译U-Boot镜像了, 相比而言编译内核镜像还容易些. 首先, 我们要把U-Boot工具mkimage放到能被编译进程找到的地方, 把工具复制到交叉编译器的bin目录下. 然后在U-Boot源码目录执行命令把路径和前缀替换为实际交叉编译器的相应内容)
cp tools/mkimage <your_cross_compiler_path>/bin/arm-none-linux-gnueabi-mkimage

在内核源码目录, 开始编译U-Boot镜像:
make uImage

生成的启动镜像文件在 arch/arm/boot/uImage.
U-Boot引导选项从SD卡启动
从SD卡启动时无需修改config.txt便可以使用多内核镜像. 把uImage文件放到SD卡上, 然后启动. 按任意键进入命令行, 输入以下命令:
mmc rescan
fatload mmc 0:1 ${loadaddr} <your_uImage_file>
bootm

通过网络走TFTP服务器启动
我们需要有一个配置好的TFTP服务器. 将uImage文件放到TFTP根目录中, 并确认有相应文件权限 (允许任何人进行读取 – 如果不确定, 执行一次chmod a+r uImage).
用DHCP启动前, 请先确认DHCP已经设置过next-server和filename参数. 接着启动树莓派, 按任意键进入命令行, 输入以下命令:
usb start
dhcp
bootm

用固定IP启动:
usb start
setenv serverip <tftp_server_ip>
setenv ipaddr <a_spare_ip_address>
tftpboot uImage
bootm

U-Boot脚本文件
上一节的内容可以写进一个文本文件, 然后编译到U-Boot脚本文件中, 以便在启动时自动执行. 用下面的命令来生成脚本:
arm-none-linux-gnueabi-mkimage -A arm -O linux -T script -C none -d <your_script_text_file> boot.scr

把boot.scr文件放在SD卡上, 在树莓派启动的时候会自动使用.


树莓派停留在EMM启动界面无法启动且无法从USB和U启动,可尝试以下解决办法: ### 检查硬件连接 - **电源供应**:确保树莓派使用的是官方推荐的电源适配器,电源功率不足可能导致启动问题。可以尝试更换电源适配器,使用符合树莓派规格(如5V 3A)的电源,查看是否能正常启动- **USB和U连接**:检查USB和U是否正常插入,尝试重新插拔,确保连接稳固。同时,更换不同的USB接口进行尝试,因为部分接口可能存在故障。 ### 检查存储设备 - **SD卡或U内容**:确认SD卡或U上的系统镜像是否正确烧录。可以使用官方的Raspberry Pi Imager工具重新烧录系统镜像到SD卡或U。烧录前,要确保存储设备已正确格式化,建议格式化为FAT32格式。 ```bash # 示例使用dd命令在Linux系统下烧录镜像到SD卡(需谨慎操作) sudo dd if=path/to/your/image.img of=/dev/sdX bs=4M status=progress ``` 注:将`path/to/your/image.img`替换为实际的镜像文件路径,`/dev/sdX`替换为实际的SD卡设备名。 - **存储设备兼容性**:某些USB存储设备可能与树莓派不兼容。尝试使用不同品牌和型号的USB和U,确保其兼容性。 ### 更新固件 - **更新树莓派固件**:通过命令行更新树莓派的固件,以确保其为最新版本。可以在树莓派能正常连接网络的情况下,执行以下命令: ```bash sudo rpi-update ``` 执行该命令后,重启树莓派,查看是否能解决问题。 ### 检查启动设置 - **配置启动顺序**:编辑树莓派的`config.txt`文件,确保启动顺序设置正确。可以通过以下命令打开该文件: ```bash sudo nano /boot/config.txt ``` 在文件中添加或修改相关配置,例如设置从USB启动: ```plaintext program_usb_boot_mode=1 ``` 保存并退出文件,然后重启树莓派。 ### 硬件故障排查 - **硬件损坏**:如果上述方法都无法解决问题,可能是树莓派硬件出现故障。可以尝试将SD卡或U插入其他正常的树莓派设备,查看是否能正常启动,以判断是否是存储设备的问题。如果仍然无法启动,可能是树莓派主板本身存在故障,需要联系售后进行维修或更换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值