【发布时间】:2015-09-01 05:21:39
【问题描述】:
我正在尝试将 openwrt 移植到 BBB。如标题所示,我无法在 BeagleBone Black 上启动 openwrt。 如果有人尝试在 BeagleBone Black(BBB) 上做某事,你必须知道它的闪存或 SD 卡中有两个分区。 第一个分区是FAT32作为引导分区,第二个分区是Ext4作为linux根文件系统。
当我为 BBB 使用 Angstrom 的原始文件和 BIN 时,我可以启动系统。 我的工作与http://wiki.openwrt.org/toh/beaglebone/black#installation有关
我做了很多实验:
在 OPENWRT 的snapshot 上使用 BIN 和其他文件、rootfs 等来替换所有原始文件。当我打开 BBB 电源时,我看不到任何来自 UART 的日志。我认为快照上的 MLO 文件错误。
-
我只修改了 uEvn.txt。我可以看到如下所示的日志。
gpio: pin 53 (gpio 53) 值为 1
mmc0 是当前设备
找到 micro SD 卡
mmc0 是当前设备
gpio:pin 54 (gpio 54) 值为 1
在设备 0 上找到 SD/MMC
阅读 uEnv.txt
438 字节在 3 毫秒内读取 (142.6 KiB/s)
从 uEnv.txt
加载环境 从 mmc 导入环境 ...
运行 uenvcmd ...
阅读 zImage
在 238 毫秒 (8.2 MiB/s) 内读取 2051400 字节
阅读 am335x-boneblack.dtb
** 无法读取文件 am335x-boneblack.dtb **
错误:未找到 cmdline 扁平化设备树
找不到有效的设备树
gpio:引脚 55 (gpio 55) 值为 1
** 找不到文件 /boot/uImage ** -
我只将快照上的 zImage 替换为我的闪存。 来自 UART 的日志显示,启动流程在
处停止正在启动内核...
日志如下所示。
U-Boot SPL 2014.01-rc1-00172-ge7e17b0 (Dec 12 2013 - 15:20:09)
reading args
spl: error reading image args, err - -1
reading u-boot.img
reading u-boot.img
U-Boot 2014.01-rc1-00172-ge7e17b0 (Dec 12 2013 - 15:20:09)
I2C: ready
DRAM: 512 MiB
WARNING: Caches not enabled
NAND: 0 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
*** Warning - readenv() failed, using default environment
Net: <ethaddr> not set. Validating first E-fuse MAC
cpsw, usb_ether
Hit any key to stop autoboot: 0
mmc0 is current device
SD/MMC found on device 0
reading uEnv.txt
494 bytes read in 5 ms (95.7 KiB/s)
Loaded environment from uEnv.txt
Importing environment from mmc ...
Running uenvcmd ...
reading zImage
2187584 bytes read in 214 ms (9.7 MiB/s)
reading am335x-boneblack.dtb
25172 bytes read in 11 ms (2.2 MiB/s)
Kernel image @ 0x80200000 [ 0x000000 - 0x216140 ]
Starting kernel ...
到这一步,我发现snapshot 上的文件可能不适合BBB。 之后,我为 BBB 编译了我自己的 openwrt 版本。并替换 zImage。问题仍然是启动内核时阻塞。
那么有没有人有将 openwrt 移植到 BBB 的经验? 你能告诉我我应该为移植做些什么吗?还是我做错了什么?
如果有人为 BBB 编译了你自己的 openwrt 版本,你能把你的配置文件分享给我吗?
非常感谢。
先发布我的 uEvn.txtx:
cat /mnt/p1/uEnv.txt
kernel_file=zImage
fdtfile=am335x-boneblack.dtb
loadzimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${kernel_file}
loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${fdtfile}
console=ttyO0,115200n8
mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait
mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}
uenvcmd=run loadzimage; run loadfdt; run mmcargs; bootz ${loadaddr} - ${fdtaddr}
optargs="debug init=/etc/preinit"
来自 printenv 的输出:
arch=arm
baudrate=115200
board=am335x
board_name=A335BNLT
board_rev=00A5
boot_fdt=try
bootcmd=i2c mw 0x24 1 0x3e; run findfdt; run mmcboot;setenv mmcdev 1; setenv bootpart 1:2; run mmcboot;run nandboot;
bootcount=1
bootdelay=1
bootdir=/boot
bootenv=uEnv.txt
bootfile=zImage
bootpart=0:2
console=ttyO0,115200n8
cpu=armv7
dfu_alt_info_emmc=rawemmc mmc 0 3751936
dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw mmc 100 100;u-boot.img.raw mmc 300 400;spl-os-args.raw mmc 80 80;spl-os-image.raw mmc 900 2000;spl-os-args fat 0 1;spl-os-image fat 0 1;u-boot.img fat 0 1;uEnv.txt fat 0 1
dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.backup3 part 0 4;u-boot part 0 5;u-boot-spl-os part 0 6;kernel part 0 8;rootfs part 0 9
dfu_alt_info_ram=kernel ram 0x80200000 0xD80000;fdt ram 0x80F80000 0x80000;ramdisk ram 0x81000000 0x4000000
ethact=cpsw
ethaddr=7c:66:9d:53:6f:07
fdt_high=0xffffffff
fdtaddr=0x80F80000
fdtfile=am335x-boneblack.dtb
filesize=1f8
findfdt=if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi; if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
kernel_file=zImage
loadaddr=0x80200000
loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${fdtfile}
loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
loadzimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${kernel_file}
mmcargs=setenv bootargs console=${console} root=${mmcroot}
mmcboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loadimage; then run mmcloados;fi;fi;
mmcdev=0
mmcloados=run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdtaddr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait
mtdids=nand0=omap2-nand.0
mtdparts=mtdparts=omap2-nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),128k(SPL.backup3),1792k(u-boot),128k(u-boot-spl-os),128k(u-boot-env),5m(kernel),-(rootfs)
nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${fdtaddr} u-boot-spl-os; nand read ${loadaddr} kernel; bootz ${loadaddr} - ${fdtaddr}
nandroot=ubi0:rootfs rw ubi.mtd=7,2048
nandrootfstype=ubifs rootwait=1
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
netboot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootz ${loadaddr} - ${fdtaddr}
nfsopts=nolock
optargs="debug init=/etc/preinit"
ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootz ${loadaddr} ${rdaddr} ${fdtaddr}
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M
ramrootfstype=ext2
rdaddr=0x81000000
rootfstype=${mmcrootfstype} ${optargs}
rootpath=/export/rootfs
soc=am33xx
spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}
spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootz ${loadaddr}
spibusno=0
spiimgsize=0x362000
spiroot=/dev/mtdblock4 rw
spirootfstype=jffs2
spisrcaddr=0xe0000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
stderr=serial
stdin=serial
stdout=serial
uenvcmd=printenv; run loadzimage; run loadfdt; run mmcargs; bootz ${loadaddr} -
usbnet_devaddr=7c:66:9d:53:6f:07
vendor=ti
ver=U-Boot 2014.01-rc1-00172-ge7e17b0 (Dec 12 2013 - 15:20:09)
Environment size: 4451/131068 bytes
【问题讨论】:
-
请发布 U-Boot
printenv命令的输出(根据日志应该是默认环境)以及文件 uEnv.txt 文件的内容在 SD 卡上。 -
@sawdust ,感谢您的建议。
-
环境变量没有表明 U-Boot 端有任何明显的负载问题。下一步通常是启用
earlyprintk;例如看到这篇文章 .stackoverflow.com/questions/30488942/… 但是你的情况似乎很复杂,因为你不确定你是否有适合你的硬件的内核映像。另一个复杂情况是,一些 zImage 文件被构建为不输出 "Uncompressing Linux ... done" 消息,这将有助于跟踪进度并指示内核是否真正开始执行。 -
@sawdust ,非常感谢。我真的希望有人有在 bbb 上构建 openwrt 的经验。我不确定内核映像是否正确。
标签: porting beagleboneblack openwrt beagleboard u-boot