我想使用 yocto 和 u-boot 为 Raspberry Pi 4b 实现网络启动(通过 tftp)。我目前有带有嵌入式 u-boot 的工作映像,从 SD 卡启动时板会正常启动到登录提示,不会中断。
我想通过网络启动开发板 - 我在 uboot 中执行了以下命令:
env set ipaddr <IP>
env set serverip <SERVER_IP>
env set nfsroot /nfsroot
env set image Image.bin
env set fdt_file bcm.dtb
env set netload 'tftpboot ${loadaddr} ${image};tftpboot ${fdt_addr} ${fdt_file}'
env set netargs 'setenv bootargs 8250.nr_uarts=1 console=ttyS0,115200 rootwait rw root=/dev/nfs ip=${ipaddr} nfsroot=${serverip}:${nfsroot}'
env set netboot 'echo Booting from net ...;run netargs;run netload;booti ${loadaddr} - ${fdt_addr}'
我没有更改loadaddr或fdt_addr,它们保留默认值。
在下载并加载图像和设备树之后,我看到内核启动并执行初始化。 VFS也不抱怨 但是,在某些时候会显示以下日志并继续:
run netboot
据我所知,当我不尝试通过网络启动时,相同的图像和设备树工作正常 - 所以 SD 卡本身没问题。 SD卡上的devicetree和tftp文件夹中的devicetree也是一样的,用$cmp检查一下。
当我不填写 fdt_image 变量时,uboot 会加载一些默认图像,并且它也会正确加载(屏幕上有登录提示)
为什么SD卡初始化失败?我是否错过了一些内核命令行参数或类似的东西?
完整内核启动日志:
https://pastebin.com/afPsknXnhttps://pastebin.com/Z7zb66W2