Forums › Devices › OSD335x-SM › Custom Board: Gave up waiting for Root device
Tagged: Uboot
We are bringing up custom boards and followed the instructions for Robert C Nelsons EEPROM bypass in uboot. This was succesful as uboot detects it is a blank eeprom and continues the botting process. However it comes to the point where it says “Gave up waiting for root device” and “ALERT! /dev/mmcblk1p1 does not exist. Dropping to a shell!”. The boot log is located below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | U-Boot 2018.01-dirty (May 18 2018 - 17:23:40 -0400) 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 Using default environment not set. Validating first E-fuse MAC BeagleBone: cape eeprom: i2c_probe: 0x54: BeagleBone: cape eeprom: i2c_probe: 0x55: BeagleBone: cape eeprom: i2c_probe: 0x56: BeagleBone: cape eeprom: i2c_probe: 0x57: Net: eth0: RGMII MODE Could not get PHY for cpsw: addr 0 cpsw, usb_ether Press SPACE to abort autoboot in 2 seconds board_name=[A335BLNK] ... Card did not respond to voltage select! mmc_init: -95, time 13 ** Bad device mmc 0 ** 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 13 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 Card did not respond to voltage select! mmc_init: -95, time 13 Card did not respond to voltage select! mmc_init: -95, time 13 switch to partitions #0, OK mmc1 is current device Scanning mmc 1: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 mmc1 is current device gpio: pin 54 (gpio 54) value is 1 Checking for: /uEnv.txt ... Checking for: /boot.scr ... Checking for: /boot/boot.scr ... Checking for: /boot/uEnv.txt ... gpio: pin 55 (gpio 55) value is 1 2964 bytes read in 26 ms (111.3 KiB/s) Loaded environment from /boot/uEnv.txt debug: [dtb=am335x-pocketbeagle.dtb] ... Using: dtb=am335x-pocketbeagle.dtb ... Checking if uname_r is set in /boot/uEnv.txt... gpio: pin 56 (gpio 56) value is 1 Running uname_boot ... loading /boot/vmlinuz-4.4.91-ti-r141 ... 8938752 bytes read in 750 ms (11.4 MiB/s) loading /boot/dtbs/4.4.91-ti-r141/am335x-pocketbeagle.dtb ... 128789 bytes read in 53 ms (2.3 MiB/s) uboot_overlays: [fdt_buffer=0x60000] ... uboot_overlays: loading /lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo ... 2402 bytes read in 265 ms (8.8 KiB/s) loading /boot/initrd.img-4.4.91-ti-r141 ... 5368382 bytes read in 456 ms (11.2 MiB/s) debug: [console=ttyO0,115200n8 root=/dev/mmcblk1p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 quiet] ... debug: [bootz 0x82000000 0x88080000:51ea3e 88000000] ... ## Flattened Device Tree blob at 88000000 Booting using the fdt blob at 0x88000000 reserving fdt memory region: addr=88000000 size=80000 Using Device Tree in place at 88000000, end 88082fff Starting kernel ... [ 0.003003] clocksource_probe: no matching clocksources found [ 2.596533] wkup_m3_ipc 44e11324.wkup_m3_ipc: could not get rproc handle [ 2.817697] omap_voltage_late_init: Voltage driver support not added [ 2.827108] PM: Cannot get wkup_m3_ipc handle Loading, please wait... [ 3.333098] musb-hdrc musb-hdrc.1.auto: VBUS_ERROR in a_wait_vrise (80, <SessEnd), retry #3, port1 0008010c Gave up waiting for root device. Common problems: - Boot args (cat /proc/cmdline) - Check rootdelay= (did the system wait long enough?) - Check root= (did the system wait for the right device?) - Missing modules (cat /proc/modules; ls /dev) ALERT! /dev/mmcblk1p1 does not exist. Dropping to a shell! modprobe: module i8042 not found in modules.dep modprobe: module ehci-orion not found in modules.dep modprobe: module uhci-hcd not found in modules.dep modprobe: module ohci-hcd not found in modules.dep BusyBox v1.22.1 (Debian 1:1.22.0-9+deb8u1) built-in shell (ash) Enter 'help' for a list of built-in commands. /bin/sh: can't access tty; job control turned off (initramfs) |
What could be causing this error? Uboot is clearly able to locate the sd card to find the device tree and kernel image but always fails when it starts to load the kernel
Hello JAbella,
From your boot log, it looks like the board is having difficulty booting from MMC0 interface (MMC0 is typically connected to SD card slot on BB Black) as indicated by the lines:
You can see that the board is trying to boot from MMC1 once booting from MMC0 fails. At line 48, it says:
I’ll need a little more information before we proceed further.
1. What interface is SD card connected to in your design (MMC0 or MMC1)?
2. Does your design have both eMMC and SD card?
3. If yes to previous question, have you flashed both eMMC and SD card with the same image?
Thanks for the reply,
1. The SD Card is connected to MMC1 interface.
2. My design has no eMMC so only the SD card interface at MMC1.
Is there something in the image (originally a PocketBeagle Image) which only allows the SD interface to be set up on MMC0? I would think that if it had no trouble locating the kernel and device trees from the sd interface it should continue booting properly.
It looks like the kernel is having a hard time talking to the hardware peripherals. Having the SD car on MMC1 should be ok.
This is likely a kernel or dtb configuration issue.
What Kernel are you using?
-Eric
I am using kernel 4.4.91-ti-r141 and the am335x-pocketbeagle device tree. I’ve attached the device tree source to see if there’s a simple change that could be made to solve the problem.
Looks like your attachment was not uploaded successfully due to security reasons. Please ZIP the file and resend it.
Apologies, should be attached now
I’ll look at the attached dts soon..
your uboot output looks like it’s trying to use an overlay as well, line 66 and 67.. is that intentional? something that can be turned off in uEnv.txt?
You’re not able to boot from MMC1 interface because in the PocketBeagle device tree MMC1 interface is NOT enabled at all by default (This is because SD card is connected to MMC0 interface and MMC1 interface is not used on PocketBeagle). U-Boot will be able to see and read the MMC1 interface but the kernel will not be able to run from MMC1 if the interface is not enabled in the kernel’s device tree. This is why you get the error:
ALERT! /dev/mmcblk1p1 does not exist.
To successfully boot your board, you will have to modify the PocketBeagle Device Tree to exactly match your custom board hardware. This will involve enabling the MMC1 interface and also doing the required pin muxing in the device tree. If any of the other peripherals on your custom board is different from PocketBeagle, you will have to make suitable modifications to capture those differences as well.
Please note that MMC0 device tree node is labeled “mmc1” and MMC1 device tree node is labeled “mmc2” in Beagleboard/PocketBeagle device trees. This can lead to some confusion if you’re new to device trees. Keep this in mind while modifying device tree.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | mmc@48060000 { compatible = "ti,omap4-hsmmc"; ti,hwmods = "mmc1"; ti,dual-volt; ti,needs-special-reset; ti,needs-special-hs-handling; dmas = <0x31 0x18 0x0 0x0 0x31 0x19 0x0 0x0>; dma-names = "tx", "rx"; interrupts = <0x40>; interrupt-parent = <0x1>; reg = <0x48060000 0x1000>; status = "okay"; vmmc-supply = <0x32>; bus-width = <0x4>; pinctrl-names = "default"; pinctrl-0 = <0x33>; cd-gpios = <0x34 0x6 0x1>; linux,phandle = <0x1dc>; phandle = <0x1dc>; }; mmc@481d8000 { compatible = "ti,omap4-hsmmc"; ti,hwmods = "mmc2"; ti,needs-special-reset; dmas = <0x2c 0x2 0x0 0x2c 0x3 0x0>; dma-names = "tx", "rx"; interrupts = <0x1c>; interrupt-parent = <0x1>; reg = <0x481d8000 0x1000>; status = "disabled"; linux,phandle = <0x1dd>; phandle = <0x1dd>; }; |
Is it as simple as modifying the section in the dts where it says status = “disabled” and changing that to “okay” to match mmc1? Or are there other changes that need to be done for the kernel to recognize it.
Apart from changing the status property, you’ll have to set other properties as well as shown here to enable the MMC1 interface. In the link given, make sure you reference “mmc2” instead of “mmc1” by changing node name to “&mmc2” from “&mmc1”. Also make suitable name changes to pinctrl-0 property. Retain cd-gpios property if you plan to use chip detect pin. Else, remove it.
Next, setup proper pin muxing for your MMC1 interface as shown here (This is a reference to BB Black’s MMC1 pin muxing for eMMC). You should modify the pin muxing shown in the given link to 4 wire interface instead of 8 wire since SD card uses a 4 wire interface. If you’re using chip detect pin, setup pin mux for it too as shown here (Don’t forget to make suitable changes to node name).
The above two steps will help you bring up the MMC1 interface.
Octavo Systems LLC all rights reserved
OCTAVO is registered in the U.S. Patent and Trademark Office. OSD, C-SiP, and the Octavo Logo are trademarks of Octavo Systems LLC.
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields