為什麼 uboot 忽略 uEnv.txt 中的 mmcroot?
我正在嘗試使用 yocto 建構嵌入式 linux 來工作。我非常接近,但我在啟動時遇到了問題。我有 2 個根文件系統。一個是主要的,另一個是在韌體升級期間使用的。但是,除了第一個 rootfs 之外,我無法讓系統啟動任何東西。
這是我的分區佈局:
Disk /dev/mmcblk1: 3825 MB, 3825205248 bytes 4 heads, 16 sectors/track, 116736 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/mmcblk1p1 * 33 6432 204800 c Win95 FAT32 (LBA) /dev/mmcblk1p2 6433 19232 409600 83 Linux /dev/mmcblk1p3 19233 32032 409600 83 Linux /dev/mmcblk1p4 32033 97568 2097152 5 Extended /dev/mmcblk1p5 32065 43264 358400 83 Linux /dev/mmcblk1p6 43297 97568 1736704 83 Linux
/dev/mmcblk1p2 和 /dev/mmcblk1p3 是根文件系統。
目前,當我啟動機器時,它會從 /dev/mmcblk1p2 啟動,儘管在 uEnv.txt 中將 mmcroot 配置為 /dev/mmcblk1p3。這是我的uEnv:
bootdir= bootfile=zImage fdtfile=am335x-boneblack.dtb loadaddr=0x80007fc0 fdtaddr=0x80F80000 console=ttyO0,115200 mmcroot=/dev/mmcblk1p3 mmcrootfstype=ext4 loadfdt=fatload mmc 1:1 ${fdtaddr} ${fdtfile} loaduimage=fatload mmc 1:1 ${loadaddr} ${bootfile} mmc_args=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype} uenvcmd=mmc rescan; run loaduimage; run loadfdt; run fdtboot fdtboot=run mmc_args; run mmcargs; bootz ${loadaddr} - ${fdtaddr}
此外,這是啟動的結果:
U-Boot SPL 2017.09 (Feb 15 2018 - 07:11:54) Trying to boot from MMC2 reading u-boot.img reading u-boot.img U-Boot 2017.09 (Feb 15 2018 - 07:11:54 -0500) CPU : AM335X-GP rev 2.1 I2C: ready DRAM: 512 MiB No match for driver 'omap_hsmmc' No match for driver 'omap_hsmmc' Some drivers were not found MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 Net: cpsw, usb_ether Press SPACE to abort autoboot in 2 seconds Card did not respond to voltage select! mmc_init: -95, time 12 Card did not respond to voltage select! mmc_init: -95, time 12 Card did not respond to voltage select! mmc_init: -95, time 13 Card did not respond to voltage select! mmc_init: -95, time 13 Card did not respond to voltage select! mmc_init: -95, time 12 switch to partitions #0, OK mmc1(part 0) is current device Scanning mmc 1:1... reading /am335x-boneblack.dtb 36168 bytes read in 9 ms (3.8 MiB/s) switch to partitions #0, OK mmc1(part 0) is current device SD/MMC found on device 1 5768968 bytes read in 380 ms (14.5 MiB/s) 36168 bytes read in 22 ms (1.6 MiB/s) ## Flattened Device Tree blob at 88000000 Booting using the fdt blob at 0x88000000 Loading Device Tree to 8fff4000, end 8ffffd47 ... OK Starting kernel ... Booting Linux on physical CPU 0x0 Linux version 4.12.12-yocto-standard (oe-user@oe-host) (gcc version 7.3.0 (GCC) ) #1 PREEMPT Thu Feb 15 07:09:00 EST 2018 CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache OF: fdt: Machine model: TI AM335x BeagleBone Black Memory policy: Data cache writeback cma: Reserved 16 MiB at 0x9e800000 CPU: All CPU(s) started in SVC mode. AM335X ES2.1 (sgx neon) Built 1 zonelists in Zone order, mobility grouping on. Total pages: 129666 Kernel command line: console=ttyO0,115200n8 root=PARTUUID=b804e92a-02 rw rootfstype=ext4 rootwait PID hash table entries: 2048 (order: 1, 8192 bytes) Dentry cache hash table entries: 65536 (order: 6, 262144 bytes) Inode-cache hash table entries: 32768 (order: 5, 131072 bytes) Memory: 486888K/523264K available (8192K kernel code, 778K rwdata, 2600K rodata, 1024K init, 595K bss, 19992K reserved, 16384K cma-reserved, 0K highmem) Virtual kernel memory layout: vector : 0xffff0000 - 0xffff1000 ( 4 kB) fixmap : 0xffc00000 - 0xfff00000 (3072 kB) vmalloc : 0xe0000000 - 0xff800000 ( 504 MB) lowmem : 0xc0000000 - 0xdff00000 ( 511 MB) pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB) modules : 0xbf000000 - 0xbfe00000 ( 14 MB) .text : 0xc0008000 - 0xc0900000 (9184 kB) .init : 0xc0d00000 - 0xc0e00000 (1024 kB) .data : 0xc0e00000 - 0xc0ec29ec ( 779 kB) .bss : 0xc0ecc6c4 - 0xc0f6134c ( 596 kB) SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 ftrace: allocating 30390 entries in 90 pages Preemptible hierarchical RCU implementation. NR_IRQS:16 nr_irqs:16 16 IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts OMAP clockevent source: timer2 at 24000000 Hz sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns OMAP clocksource: timer1 at 24000000 Hz clocksource_probe: no matching clocksources found Console: colour dummy device 80x30 Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736) pid_max: default: 32768 minimum: 301 Security Framework initialized Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) CPU: Testing write buffer coherency: ok Setting up static identity map for 0x80100000 - 0x80100060 devtmpfs: initialized VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3 clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns futex hash table entries: 256 (order: -1, 3072 bytes) xor: measuring software checksum speed arm4regs : 1201.600 MB/sec 8regs : 893.200 MB/sec 32regs : 1156.400 MB/sec xor: using function: arm4regs (1201.600 MB/sec) pinctrl core: initialized pinctrl subsystem NET: Registered protocol family 16 DMA: preallocated 256 KiB pool for atomic coherent allocations omap_hwmod: debugss: _wait_target_disable failed cpuidle: using governor ladder cpuidle: using governor menu OMAP GPIO hardware version 0.1 hw-breakpoint: debug architecture 0x4 unsupported. raid6: int32x1 gen() 209 MB/s raid6: int32x1 xor() 143 MB/s raid6: int32x2 gen() 226 MB/s raid6: int32x2 xor() 162 MB/s raid6: int32x4 gen() 190 MB/s raid6: int32x4 xor() 133 MB/s raid6: int32x8 gen() 175 MB/s raid6: int32x8 xor() 118 MB/s raid6: using algorithm int32x2 gen() 226 MB/s raid6: .... xor() 162 MB/s, rmw enabled raid6: using intx1 recovery algorithm edma 49000000.edma: TI EDMA DMA engine driver SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb omap_i2c 44e0b000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c0_pins, deferring probe omap_i2c 4802a000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c1_pins, deferring probe omap_i2c 4819c000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c2_pins, deferring probe clocksource: Switched to clocksource timer1 NET: Registered protocol family 2 TCP established hash table entries: 4096 (order: 2, 16384 bytes) TCP bind hash table entries: 4096 (order: 2, 16384 bytes) TCP: Hash tables configured (established 4096 bind 4096) UDP hash table entries: 256 (order: 0, 4096 bytes) UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. hw perfevents: no interrupt-affinity property for /pmu, guessing. hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available workingset: timestamp_bits=14 max_order=17 bucket_order=3 NFS: Registering the id_resolver key type Key type id_resolver registered Key type id_legacy registered Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251) io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) io scheduler mq-deadline registered io scheduler kyber registered pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568 omap_uart 44e09000.serial: no wakeirq for uart0 44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 158, base_baud = 3000000) is a OMAP UART0 console [ttyO0] enabled omap_uart 48022000.serial: no wakeirq for uart1 48022000.serial: ttyO1 at MMIO 0x48022000 (irq = 159, base_baud = 3000000) is a OMAP UART1 omap_uart 48024000.serial: no wakeirq for uart2 48024000.serial: ttyO2 at MMIO 0x48024000 (irq = 160, base_baud = 3000000) is a OMAP UART2 brd: module loaded mtdoops: mtd device (mtddev=name/number) must be supplied libphy: Fixed MDIO Bus: probed davinci_mdio 4a101000.mdio: davinci mdio revision 1.6 davinci_mdio 4a101000.mdio: detected phy mask fffffffe random: fast init done libphy: 4a101000.mdio: probed davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720 cpsw 4a100000.ethernet: Detected MACID = 68:9e:19:8f:7c:44 ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci-omap: OMAP-EHCI Host Controller driver usbcore: registered new interface driver usb-storage am335x-phy-driver 47401300.usb-phy: 47401300.usb-phy supply vcc not found, using dummy regulator irq: no irq domain found for /ocp/i2c@44e0b000/tps@24 ! am335x-phy-driver 47401b00.usb-phy: 47401b00.usb-phy supply vcc not found, using dummy regulator musb-hdrc musb-hdrc.1: Failed to request rx1. omap_rtc 44e3e000.rtc: already running omap_rtc 44e3e000.rtc: rtc core: registered 44e3e000.rtc as rtc0 i2c /dev entries driver omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec omap_hsmmc 48060000.mmc: Got CD GPIO usbcore: registered new interface driver usbhid usbhid: USB HID core driver oprofile: using arm/armv7 u32 classifier Actions configured NET: Registered protocol family 10 Segment Routing with IPv6 sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver NET: Registered protocol family 17 Key type dns_resolver registered omap_voltage_late_init: Voltage driver support not added ThumbEE CPU extension supported. Btrfs loaded, crc32c=crc32c-generic Key type encrypted registered mmc1: new high speed MMC card at address 0001 mmcblk1: mmc1:0001 S10004 3.56 GiB mmcblk1boot0: mmc1:0001 S10004 partition 1 4.00 MiB mmcblk1boot1: mmc1:0001 S10004 partition 2 4.00 MiB mmcblk1: p1 p2 p3 p4 < p5 p6 > tps65217 0-0024: TPS65217 ID 0xe version 1.2 omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz omap_i2c 4802a000.i2c: bus 1 rev0.11 at 50 kHz omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz musb-hdrc musb-hdrc.1: MUSB HDRC host driver musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 1 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected console [netcon0] enabled netconsole: network logging started omap_rtc 44e3e000.rtc: setting system clock to 2018-02-15 12:46:24 UTC (1518698784) EXT4-fs (mmcblk1p2): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext4 filesystem) on device 179:2. devtmpfs: mounted Freeing unused kernel memory: 1024K INIT: version 2.88 booting Starting udev udevd[111]: starting version 3.2.2 udevd[112]: starting eudev-3.2.2 EXT4-fs (mmcblk1p2): re-mounted. Opts: data=ordered INIT: Entering runlevel: 5 Configuring network interfaces... net eth0: initializing cpsw version 1.12 (0) cpsw 4a100000.ethernet: initialized cpsw ale version 1.4 cpsw 4a100000.ethernet: ALE Table size 1024 SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=4a101000.mdio:00, irq=-1) IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready udhcpc (v1.24.1) started Sending discover... cpsw 4a100000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Sending discover... Sending select for 10.1.1.73... Lease of 10.1.1.73 obtained, lease time 7200 /etc/udhcpc.d/50default: Adding DNS 10.1.0.1 done. Starting OpenBSD Secure Shell server: sshd done. Starting syslogd/klogd: done Starting web server: apache2. Poky (Yocto Project Reference Distro) 2.4.2 beaglebone /dev/ttyO0 beaglebone login:
您可以看到它以 root 身份掛載 /dev/mmcblk1p2。
我認為某些問題遠遠超出 uEnv.txt 的問題。 我可以從我的啟動分區 (/dev/mmcblk1p1) 中刪除 uEnv.txt,系統仍然可以正常啟動。 不應該是這樣的。事實上,我似乎可以將我的引導分區剝離為僅 MLO 和 u-boot.img,並且系統仍然可以引導。它似乎是從 /dev/mmcblk1p2 /boot 目錄中拉出扁平設備樹和 uEnv(如果我刪除那裡的文件,系統將無法啟動)。
因此,就好像 /dev/mmcblk1p2 或分區 2 以某種方式被硬編碼,儘管我找不到任何證據。有誰知道可能發生了什麼以及如何使我的系統能夠從我的任何一個根文件系統啟動?
這是我的預設 u-boot 設置:
arch=arm args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype} baudrate=115200 board=am335x board_name=A335BNLT board_rev=00C0 board_serial=0816BBBK018E boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr ${fdtcontroladdr};fi;load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}extlinux/extlinux.conf boot_fdt=try boot_fit=0 boot_net_usb_start=usb start boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg boot_scripts=boot.scr.uimg boot.scr boot_targets=mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 pxe dhcp bootcmd=if test ${boot_fit} -eq 1; then run update_to_fit; fi; run findfdt; run init_console; run envboot; run distro_bootcmd bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci; bootcmd_legacy_mmc0=setenv mmcdev 0; setenv bootpart 0:2 ; run mmcboot bootcmd_legacy_mmc1=setenv mmcdev 1; setenv bootpart 1:2 ; run mmcboot bootcmd_mmc0=setenv devnum 0; run mmc_boot bootcmd_mmc1=setenv devnum 1; run mmc_boot bootcmd_nand=run nandboot bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi bootcount=1 bootdelay=2 bootdir=/boot bootenvfile=uEnv.txt bootfile=zImage bootm_size=0x10000000 bootpart=0:2 bootscript=echo Running bootscript from mmc${mmcdev} ...; source ${loadaddr} console=ttyO0,115200n8 cpu=armv7 dfu_alt_info_emmc=rawemmc raw 0 3751936;boot part 1 1;rootfs part 1 2;MLO fat 1 1;MLO.raw raw 0x100 0x100;u-boot.img.raw raw 0x300 0x1000;u-env.raw raw 0x1300 0x200;spl-os-args.raw raw 0x1500 0x200;spl-os-image.raw raw 0x1700 0x6900;spl-os-args fat 1 1;spl-os-image fat 1 1;u-boot.img fat 1 1;uEnv.txt fat 1 1 dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw raw 0x100 0x100;u-boot.img.raw raw 0x300 0x1000;u-env.raw raw 0x1300 0x200;spl-os-args.raw raw 0x1500 0x200;spl-os-image.raw raw 0x1700 0x6900;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 0x4000000;fdt ram 0x80f80000 0x80000;ramdisk ram 0x81000000 0x4000000 distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/ envboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadbootscript; then run bootscript;else if run loadbootenv; then echo Loaded env from ${bootenvfile};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;fi;fi; eth1addr=68:9e:19:8f:7c:46 ethaddr=68:9e:19:8f:7c:44 fdt_addr_r=0x88000000 fdtaddr=0x88000000 fdtcontroladdr=9df219f8 fdtfile=undefined 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 = BBBW; then setenv fdtfile am335x-boneblack-wireless.dtb; fi; if test $board_name = BBG1; then setenv fdtfile am335x-bonegreen.dtb; fi; if test $board_name = BBGW; then setenv fdtfile am335x-bonegreen-wireless.dtb; fi; if test $board_name = BBBL; then setenv fdtfile am335x-boneblue.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 $board_name = A335_ICE; then setenv fdtfile am335x-icev2.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi; finduuid=part uuid mmc ${bootpart} uuid fit_bootfile=fitImage fit_loadaddr=0x87000000 importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize} init_console=if test $board_name = A335_ICE; then setenv console ttyO3,115200n8;else setenv console ttyO0,115200n8;fi; kernel_addr_r=0x82000000 load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0x82000000 loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile} loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile} loadfit=run args_mmc; bootm ${loadaddr}#${fdtfile}; loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile} loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi mmcboot=mmc dev ${mmcdev}; setenv devnum ${mmcdev}; setenv devtype mmc; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadimage; then if test ${boot_fit} -eq 1; then run loadfit; else run mmcloados;fi;fi;fi; mmcdev=0 mmcloados=run args_mmc; 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; mmcrootfstype=ext4 rootwait mtdids=nand0=nand.0 mtdparts=mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system) nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} rootfstype=${nandrootfstype} nandboot=echo Booting from nand ...; run nandargs; nand read ${fdtaddr} NAND.u-boot-spl-os; nand read ${loadaddr} NAND.kernel; bootz ${loadaddr} - ${fdtaddr} nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system,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; run netloadimage; run netloadfdt; run netargs; bootz ${loadaddr} - ${fdtaddr} netloadfdt=tftp ${fdtaddr} ${fdtfile} netloadimage=tftp ${loadaddr} ${bootfile} nfsopts=nolock partitions=uuid_disk=${uuid_gpt_disk};name=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs} pxefile_addr_r=0x80100000 ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype} ramboot=echo Booting from ramdisk ...; run ramargs; bootz ${loadaddr} ${rdaddr} ${fdtaddr} ramdisk_addr_r=0x88080000 ramroot=/dev/ram0 rw ramrootfstype=ext2 rdaddr=0x88080000 rootpath=/export/rootfs 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_scripts; done;run scan_dev_for_efi; scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; 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_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done scriptaddr=0x80000000 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@44e09000 stdin=serial@44e09000 stdout=serial@44e09000 update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile} usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi vendor=ti ver=U-Boot 2018.01 (Feb 15 2018 - 13:50:14 -0500) Environment size: 9701/131068 bytes
此外,以下是在 u-boot 中手動輸入時會導致系統完美啟動的命令列表:
setenv bootfile zImage setenv fdtfile am335x-boneblack.dtb setenv loadaddr 0x80007fc0 setenv fdtaddr 0x80F80000 setenv console ttyO0,115200 setenv mmcroot /dev/mmcblk1p3 setenv mmcrootfstype ext4 setenv loadfdt fatload mmc 1:1 ${fdtaddr} ${fdtfile} setenv loaduimage fatload mmc 1:1 ${loadaddr} ${bootfile} setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype} mmc rescan run loaduimage run loadfdt bootz ${loadaddr} - ${fdtaddr}
只有envboot目標會尋找uEnv.txt。此目標僅執行一次,而不是每個設備執行一次。所以引導過程會嘗試,失敗(所有卡都沒有..消息)並移動到 distro_boot 並及時成功。如果您設置 mmcdev=1 和 saveenv,它應該會在那裡查找 uEnv.txt,然後它可能會起作用。