Search code examples
embedded-linuxsd-cardu-bootbuildrootbeagleboard

Error in booting from uSD-card - No filesystem could mount root, tried:Ext4


I am trying to build an embedded Linux to be run on PocketBeagle using Buildroot; and following the instructions in (source1). The resulting images are copied then to the uSD-card. When inserting the uSD-card in the Pocketbeagle and monitor the booting process via a serial connection; I got the following error:

No filesystem could mount root, tried: 
ext4
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,1)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,1).

The used resources are: Buildroot: 2018.02
File system: ext4
Bootloader: U-Boot (custom version 2018.01)
Kernel version: 4.14.24
Applying all the patches stated in source above and can be found in (source2):
- 0001-Stripped-back-pocketbeagle-devicetree.patch
- 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
- 0002-U-Boot-BeagleBone-Cape-Manager.patch
- 0003-pocketbeagle-tweaks.patch

Runing the build results in the following files and images:
MLO: First stage bootloader
U-boot.img: Second stage bootloader
uEnv.txt: U-boot environmnt
zImage: Linux kernel image
am335x-pocketbeagle.dtb: Linux kernel Device Tree Blob
rootfs.ext4: Root filesystem image

The uEnv.txt is as follows:

fdtfile=am335x-pocketbeagle.dtb  
bootpart=0:1  
bootdir=  
bootargs=console=ttyO0,115200n8 root=/dev/mmcblk0p1 rw rootfstype=ext4   rootwait  
uenvcmd=run loadimage;run loadfdt;printenv bootargs;bootz ${loadaddr} - ${fdtaddr};  

Then by using genimage in buildroot (and rebuilding) to generate the uSd-image that contains two partitions:
1. FAT partition containing the bootloader images, the kernel image and Device Tree
2. Rootfs partition containing the root filesystem ext4

The resulting image is called sdcard.img is copies to the uSD-card by using program etcher (etcher-electron-1.4.3-x86_64.AppImage) or by (sudo dd if=output/images/sdcard.img of=/dev/mmcblk0 bs=1M)

I have used two different uSD-cards to test the build, but the result was the same:
1. Kingstone 32 GB (SDHC 10)
2. Sandisk 16GB (SDHC 10)

It's worth to say that I have used the same uSD-cards to load the original image of the PocketBeagle from the official site and boot from them, the cards boots without problem.

Any idea to help is highly appreciated.


ADDENDUM

Another error that is shown in the log file occurs in the beginning of the boot:

U-Boot SPL 2018.01 (Mar 24 2018 - 21:13:25) 
Trying to boot from MMC1 
*** Warning - bad CRC, using default environment 
reading u-boot.img 
reading u-boot.img 
U-Boot 2018.01 (Mar 24 2018 - 21:13:25 +0100) 
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 
Reset Source: Power-on reset has occurred. 
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 
*** Warning - bad CRC, using default environment  

The full log is as follows:

U-Boot SPL 2018.01 (Mar 24 2018 - 21:13:25)
Trying to boot from MMC1
*** Warning - bad CRC, using default environment

reading u-boot.img
reading u-boot.img


U-Boot 2018.01 (Mar 24 2018 - 21:13:25 +0100)

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
Reset Source: Power-on reset has occurred.
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
*** Warning - bad CRC, using default environment

Model: BeagleBoard.org PocketBeagle
<ethaddr> not set. Validating first E-fuse MAC
Net:   No ethernet found.
Press SPACE to abort autoboot in 2 seconds
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
gpio: pin 56 (gpio 56) value is 0
gpio: pin 55 (gpio 55) value is 0
gpio: pin 54 (gpio 54) value is 0
gpio: pin 53 (gpio 53) value is 1
switch to partitions #0, OK
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
Checking for: /uEnv.txt ...
reading uEnv.txt
218 bytes read in 4 ms (52.7 KiB/s)
gpio: pin 55 (gpio 55) value is 1
Loaded environment from /uEnv.txt
Importing environment from mmc ...
Checking if uenvcmd is set ...
gpio: pin 56 (gpio 56) value is 1
Running uenvcmd ...
reading /zImage
5540120 bytes read in 351 ms (15.1 MiB/s)
loading /am335x-pocketbeagle.dtb ...
reading /am335x-pocketbeagle.dtb
33516 bytes read in 9 ms (3.6 MiB/s)
bootargs=console=ttyO0,115200n8 root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Loading Device Tree to 8fff4000, end 8ffff2eb ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.14.24 (ammar@ammar-System-Product-Name) (gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)) #1 SMP Sat Mar 24 21:23:50 CET 2018
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: TI AM335x PocketBeagle
[    0.000000] Memory policy: Data cache writeback
[    0.000000] cma: Reserved 16 MiB at 0x9e800000
[    0.000000] CPU: All CPU(s) started in SVC mode.
[    0.000000] AM335X ES2.1 (sgx neon)
[    0.000000] random: fast init done
[    0.000000] percpu: Embedded 17 pages/cpu @df93f000 s40872 r8192 d20568 u69632
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129412
[    0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 479900K/522240K available (8192K kernel code, 810K rwdata, 2412K rodata, 1024K init, 7547K bss, 25956K reserved, 16384K cma-reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0xe0000000 - 0xff800000   ( 504 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xdfe00000   ( 510 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0900000   (9184 kB)
[    0.000000]       .init : 0xc0c00000 - 0xc0d00000   (1024 kB)
[    0.000000]       .data : 0xc0d00000 - 0xc0dca9b8   ( 811 kB)
[    0.000000]        .bss : 0xc0dcc000 - 0xc152af94   (7548 kB)
[    0.000000] Running RCU self tests
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  RCU event tracing is enabled.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[    0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[    0.000017] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[    0.000044] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[    0.000097] OMAP clocksource: timer1 at 24000000 Hz
[    0.000569] timer_probe: no matching timers found
[    0.001470] Console: colour dummy device 80x30
[    0.001516] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.001530] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.001542] ... MAX_LOCK_DEPTH:          48
[    0.001554] ... MAX_LOCKDEP_KEYS:        8191
[    0.001566] ... CLASSHASH_SIZE:          4096
[    0.001578] ... MAX_LOCKDEP_ENTRIES:     32768
[    0.001589] ... MAX_LOCKDEP_CHAINS:      65536
[    0.001601] ... CHAINHASH_SIZE:          32768
[    0.001613]  memory used by lock dependency info: 4655 kB
[    0.001626]  per task-struct memory footprint: 1536 bytes
[    0.001663] Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)
[    0.078740] pid_max: default: 32768 minimum: 301
[    0.079147] Security Framework initialized
[    0.079285] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.079306] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.082392] CPU: Testing write buffer coherency: ok
[    0.083889] CPU0: thread -1, cpu 0, socket -1, mpidr 0
[    0.085406] Setting up static identity map for 0x80100000 - 0x80100078
[    0.085975] Hierarchical SRCU implementation.
[    0.087625] smp: Bringing up secondary CPUs ...
[    0.087648] smp: Brought up 1 node, 1 CPU
[    0.087665] SMP: Total of 1 processors activated (996.14 BogoMIPS).
[    0.087679] CPU: All CPU(s) started in SVC mode.
[    0.091643] devtmpfs: initialized
[    0.116033] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[    0.116853] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.116916] futex hash table entries: 256 (order: 2, 16384 bytes)
[    0.118550] pinctrl core: initialized pinctrl subsystem
[    0.123225] NET: Registered protocol family 16
[    0.130326] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.171692] omap_hwmod: debugss: _wait_target_disable failed
[    0.226390] cpuidle: using governor menu
[    0.237629] OMAP GPIO hardware version 0.1
[    0.262333] No ATAGs?
[    0.262360] hw-breakpoint: debug architecture 0x4 unsupported.
[    0.262655] omap4_sram_init:Unable to allocate sram needed to handle errata I688
[    0.262675] omap4_sram_init:Unable to get sram pool needed to handle errata I688
[    0.298256] edma 49000000.edma: TI EDMA DMA engine driver
[    0.303666] SCSI subsystem initialized
[    0.305374] omap_i2c 44e0b000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c0_pins, deferring probe
[    0.307447] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 400 kHz
[    0.307764] omap_i2c 4819c000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/mma8452_pins_default, deferring probe
[    0.308058] pps_core: LinuxPPS API ver. 1 registered
[    0.308076] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    0.308128] PTP clock support registered
[    0.312478] clocksource: Switched to clocksource timer1
[    0.448001] VFS: Disk quotas dquot_6.6.0
[    0.448193] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.473020] NET: Registered protocol family 2
[    0.474843] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.474948] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.476120] TCP: Hash tables configured (established 4096 bind 4096)
[    0.476506] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.476689] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.477446] NET: Registered protocol family 1
[    0.479566] RPC: Registered named UNIX socket transport module.
[    0.479614] RPC: Registered udp transport module.
[    0.479629] RPC: Registered tcp transport module.
[    0.479643] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.482107] hw perfevents: no interrupt-affinity property for /pmu, guessing.
[    0.483357] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
[    0.487455] audit: initializing netlink subsys (disabled)
[    0.490304] audit: type=2000 audit(0.480:1): state=initialized audit_enabled=0 res=1
[    0.490640] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[    0.493682] NFS: Registering the id_resolver key type
[    0.494058] Key type id_resolver registered
[    0.494099] Key type id_legacy registered
[    0.494253] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[    0.500669] io scheduler noop registered
[    0.500700] io scheduler deadline registered
[    0.500822] io scheduler cfq registered (default)
[    0.500841] io scheduler mq-deadline registered
[    0.500856] io scheduler kyber registered
[    0.503256] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[    0.510527] Serial: 8250/16550 driver, 6 ports, IRQ sharing enabled
[    0.516492] omap_uart 44e09000.serial: no wakeirq for uart0
[    0.516942] 44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 30, base_baud = 3000000) is a OMAP UART0
[    1.250345] console [ttyO0] enabled
[    1.255586] omap_uart 48022000.serial: no wakeirq for uart1
[    1.261829] 48022000.serial: ttyO1 at MMIO 0x48022000 (irq = 31, base_baud = 3000000) is a OMAP UART1
[    1.272744] omap_uart 48024000.serial: no wakeirq for uart2
[    1.278844] 48024000.serial: ttyO2 at MMIO 0x48024000 (irq = 32, base_baud = 3000000) is a OMAP UART2
[    1.289570] omap_uart 481a8000.serial: no wakeirq for uart4
[    1.295781] 481a8000.serial: ttyO4 at MMIO 0x481a8000 (irq = 33, base_baud = 3000000) is a OMAP UART4
[    1.334046] brd: module loaded
[    1.362138] loop: module loaded
[    1.368162] mtdoops: mtd device (mtddev=name/number) must be supplied
[    1.383297] libphy: Fixed MDIO Bus: probed
[    1.390588] i2c /dev entries driver
[    1.398755] omap_hsmmc 48060000.mmc: Got CD GPIO
[    1.465093] ledtrig-cpu: registered to indicate activity on CPUs
[    1.472542] oprofile: using arm/armv7
[    1.477095] Initializing XFRM netlink socket
[    1.481985] NET: Registered protocol family 10
[    1.493215] Segment Routing with IPv6
[    1.497190] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    1.505262] NET: Registered protocol family 17
[    1.509973] NET: Registered protocol family 15
[    1.515090] Key type dns_resolver registered
[    1.519724] omap_voltage_late_init: Voltage driver support not added
[    1.526481] sr_dev_init: No voltage domain specified for smartreflex0. Cannot initialize
[    1.535007] sr_dev_init: No voltage domain specified for smartreflex1. Cannot initialize
[    1.543566] ThumbEE CPU extension supported.
[    1.548049] Registering SWP/SWPB emulation handler
[    1.553116] SmartReflex Class3 initialized
[    1.623490] mmc0: host does not support reading read-only switch, assuming write-enable
[    1.635560] mmc0: new high speed SDHC card at address 0007
[    1.644119] mmcblk0: mmc0:0007 SD32G 28.8 GiB 
[    1.655081]  mmcblk0: p1 p2
[    1.671199] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[    1.677649] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[    1.686633] omap_i2c 4819c000.i2c: bus 2 rev0.11 at 400 kHz
[    1.694194] hctosys: unable to open rtc device (rtc0)
[    1.699490] sr_init: No PMIC hook to init smartreflex
[    1.705144] sr_init: platform driver register failed for SR
[    1.720670] List of all partitions:
[    1.724586] 0100           16384 ram0 
[    1.724597]  (driver?)
[    1.730999] 0101           16384 ram1 
[    1.731008]  (driver?)
[    1.737842] 0102           16384 ram2 
[    1.737854]  (driver?)
[    1.744389] 0103           16384 ram3 
[    1.744400]  (driver?)
[    1.750791] 0104           16384 ram4 
[    1.750800]  (driver?)
[    1.757269] 0105           16384 ram5 
[    1.757278]  (driver?)
[    1.763737] 0106           16384 ram6 
[    1.763746]  (driver?)
[    1.770139] 0107           16384 ram7 
[    1.770148]  (driver?)
[    1.776597] 0108           16384 ram8 
[    1.776607]  (driver?)
[    1.783061] 0109           16384 ram9 
[    1.783071]  (driver?)
[    1.789456] 010a           16384 ram10 
[    1.789465]  (driver?)
[    1.795999] 010b           16384 ram11 
[    1.796008]  (driver?)
[    1.802540] 010c           16384 ram12 
[    1.802549]  (driver?)
[    1.809029] 010d           16384 ram13 
[    1.809038]  (driver?)
[    1.815571] 010e           16384 ram14 
[    1.815580]  (driver?)
[    1.822056] 010f           16384 ram15 
[    1.822065]  (driver?)
[    1.828679] b300        30228480 mmcblk0 
[    1.828690]  driver: mmcblk
[    1.835867]   b301           16384 mmcblk0p1 00000000-01
[    1.835877] 
[    1.843044]   b302          524288 mmcblk0p2 00000000-02
[    1.843053] 
[    1.850164] No filesystem could mount root, tried: 
[    1.850173]  ext4
[    1.855340] 
[    1.858913] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,1)
[    1.867873] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,1)


Solution

  • The failure to mount the rootfs is occurring because the correct partition of the SDcard has not been specified.
    In the kernel command line, the kernel is (incorrectly) instructed to find the rootfs in the partition corresponding to /dev/mmcblk0p1.

    bootargs=console=ttyO0,115200n8 root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait
    

    and

    [    0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait
    

    However the mmc subsystem reports that there are two partitions on your SDcard, and the boot log reports the device names of these partitions for you twice.
    First:

    [    1.635560] mmc0: new high speed SDHC card at address 0007
    [    1.644119] mmcblk0: mmc0:0007 SD32G 28.8 GiB 
    [    1.655081]  mmcblk0: p1 p2
    

    And then:

    [    1.720670] List of all partitions:
     ...
    [    1.828679] b300        30228480 mmcblk0 
    [    1.828690]  driver: mmcblk
    [    1.835867]   b301           16384 mmcblk0p1 00000000-01
    [    1.835877] 
    [    1.843044]   b302          524288 mmcblk0p2 00000000-02
    

    So the kernel command line (through bootargs) should specify the second partition, /dev/mmcblk0p2, rather than the first partition for the rootfs.

    Since the storage area for your U-Boot environment has not been properly initialized (i.e. the "Warning - bad CRC, using default environment" messages) (or your uEnv.txt file is missing or corrupt), U-Boot is booting the Linux kernel with a hardcoded bootargs value that is defined in your board's configuration file.
    You could either edit that file and re-build U-Boot, or abort the autoboot and use
    setenv bootargs console=ttyO0,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait and saveenv commands to correct this mis-specification.