我正在使用 Arduino Yun,我想通过 NFS 挂载 rootfs。
我下载了openwrt源代码,构建了项目,然后从build_dir/target-mips_34kc_musl-1.1.15/root-ar71xx
下面复制了生成的rootfs/home/user/srv/nfs/root-ar71xx
在 uboot 提示符中我使用的命令行是:
setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/home/user/srv/nfs/root-ar71xx ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::off; bootm
uboot环境变量:
ar7240> printenv
bootcmd=bootm 0x9fea0000
bootdelay=4
baudrate=115200
ethaddr=0xb4:0x21:0x8a:0x00:0x00:0x10
ipaddr=192.168.1.2
serverip=192.168.1.1
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
bootargs=root=/dev/nfs rw nfsroot=192.168.1.1:/home/user/srv/nfs/root-ar71xx
ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::off
Environment size: 319/65532 bytes
但我得到了:
## Booting image at 81000000 ...
Bad Magic Number
我读到这个链接,为了让 U-Boot“了解”内核,有一种封装。 rootfs 也是一样吗
我还有另一个问题,但与主题不太相关:构建项目后,我在下面有几个二进制文件(24) bin/ar71xx/
:
openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-tftp.bin
openwrt-ar71xx-generic-tl-mr11u-v1-squashfs-sysupgrade.bin
openwrt-ar71xx-generic-wzr-hp-g300nh2-squashfs-factory.bin
...
我期望只有一个内核映像,所有这些映像应该做什么?
提前致谢。
编辑:
我将命令行更改为:
setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/home/bou6/srv /nfs/root-ar71xx ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::off; bootm 0x9fea0000
我已经没有了Bad Magic Number
,但仍然有疑问:
1-我们如何知道内核的加载地址
2-我注意到即使以太网电缆没有分支,内核仍然继续使用 Yun 上闪现的默认文件系统,有没有办法取消激活它。
答案1
bootargs
仅仅设置然后调用是不够的bootm
......你需要从某个地方加载内核映像 - 所以问题 1 的答案是“选择你喜欢的任何地址 - 只要它在 RAM 中并且有足够的空间适合您将加载到其中的内核映像”。
要加载内核映像,请设置 tftp 服务器并使用tftpboot
u-boot 命令。例如
tftpboot <address> openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-tftp.bin
(我猜测这是包含内核映像的文件,但可能不是) - 那么你可以使用命令bootm
例如
bootm <address>
你可能会发现一些线索这里。
顺便说一句,ip=...
内核命令行具有以下格式:
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
off
所以我觉得eg之前应该有两个冒号
ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0:::off
但我的想法可能是错的。
关于问题 2,我希望启动失败并且 u-boot 回退到提示符 - 不继续并使用闪存中的文件系统。
最后,您需要列出所有 24 个文件名,bin/ar71xx
以便我们可以确定其中哪个是内核映像(我上面的猜测感觉不正确)。