title: UBI layout volume not found
body: <p>I am following <a href="https://bootlin.com/doc/training/embedded-linux/" rel="nofollow noreferrer">Bootlin's embedded Linux training</a> which aims to put an embedded Linux system on an <a href="http://ww1.microchip.com/downloads/en/devicedoc/atmel-44005-32-bit-cortex-a5-microcontroller-sama5d4-xplained-ultra_user-guide.pdf" rel="nofollow noreferrer">Atmel SAMA5D4 Xplained board</a> (<a href="https://bootlin.com/doc/training/embedded-linux/embedded-linux-slides.pdf" rel="nofollow noreferrer">theory slides</a>, <a href="https://bootlin.com/doc/training/embedded-linux/embedded-linux-labs.pdf" rel="nofollow noreferrer">practical lab instructions</a>) and I am stuck a putting the whole system on the NAND flash.</p>
  
  <p>They ask me to put the DTB, the kernel, the root filesystem and a data filesystem in a UBI image to be written to the flash but I cannot access the UBI partitions once I flashed it (the access fails with error code 22, or -22 in an embedded Linux environment).</p>
  
  <h3>Detailed description</h3>
  
  <p>(to see my actual questions, go to the end of the question)</p>
  
  <p>In U-Boot, the partitions are defined by <code>mtdparts</code>:</p>
  
  <pre><code>device nand0 &lt;atmel_nand&gt;, # parts = 8
   #: name                size            offset          mask_flags
   0: bootstrap           0x00040000      0x00000000      1
   1: uboot               0x00080000      0x00040000      1
   2: env                 0x00040000      0x000c0000      1
   3: envbackup           0x00040000      0x00100000      1
   4: dtb                 0x00020000      0x00140000      0
   5: kernel              0x00500000      0x00160000      0
   6: rootfs              0x01000000      0x00660000      0
   7: datafs              0x01000000      0x01660000      0
  
  active partition: nand0,0 - (bootstrap) 0x00040000 @ 0x00000000
  
  defaults:
  mtdids  : 
  mtdparts:
  </code></pre>
  
  <p>With <code>printenv mtdparts</code>, I get:</p>
  
  <pre><code>mtdparts=mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env)ro,256k(envbackup)ro,128k(dtb),5M(kernel),16M(rootfs),16M(datafs)
  </code></pre>
  
  <p>and <code>printenv mtdids</code></p>
  
  <pre><code>mtdids=nand0=atmel_nand
  </code></pre>
  
  <p>The UBI image was created with <code>ubinize</code> and the following configuration:</p>
  
  <pre><code>[dtb]
  peb=0x20000
  min_io_size=0x800
  mode=ubi
  image=dtb.img
  vol_id=0
  vol_size=128KiB
  vol_type=static
  vol_name=dtb
  vol_alignment=1
  
  [kernel]
  peb=0x20000
  min_io_size=0x800
  mode=ubi
  image=zImage
  vol_id=1
  vol_size=5MiB
  vol_type=static
  vol_name=kernel
  vol_alignment=1
  
  [rootfs]
  peb=0x20000
  min_io_size=0x800
  mode=ubi
  image=root.img
  vol_id=2
  vol_size=16MiB
  vol_type=static
  vol_name=rootfs
  vol_alignment=1
  
  [datafs]
  peb=0x20000
  min_io_size=0x800
  mode=ubi
  image=files.img
  vol_id=3
  vol_size=16MiB
  vol_type=static
  vol_name=datafs
  vol_alignment=1
  </code></pre>
  
  <p>and this command (the <code>sama5-ubinize.cfg</code> is the above configuration)</p>
  
  <pre><code>ubinize -o ubi.img -p 128KiB -m 2KiB sama5-ubinize.cfg
  </code></pre>
  
  <p>The PEB is indeed 128KB (<code>0x2000</code>) and the page size is 2048B (<code>0x800</code>). I added those parameters based on <a href="https://stackoverflow.com/a/20949325/10805404">this answer</a>.</p>
  
  <p>Both UBI partitions have been make with the following commands:</p>
  
  <pre><code>mkfs.ubifs -e 124KiB -c 132 -m 2KiB -r nfsroot/ root.img
  mkfs.ubifs -e 124KiB -c 132 -m 2KiB -r nfsroot/www/upload/files data.img
  </code></pre>
  
  <p>I then write the UBI image to the flash with the following commands (in U-Boot):</p>
  
  <pre><code>nand erase 0x140000 0xfec0000
  tftp 0x21000000 ubi.img
  nand write.trimffs 0x21000000 0x140000 0x880000
  </code></pre>
  
  <hr>
  
  <p>When trying to access the partitions from U-Boot with <code>ubi part rootfs</code>, I get the following error:</p>
  
  <pre><code>ubi0: attaching mtd1
  ubi0: scanning is finished
  UBI init error 22
  </code></pre>
  
  <p>For now I am booting Linux from a SD card. The Linux boot arguments are (from <code>printenv bootargs</code>):</p>
  
  <pre><code>bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait
  </code></pre>
  
  <p>When booting Linux, I get the following log:</p>
  
  <pre><code>resetting ...
  RomBOOT
  
  
  AT91Bootstrap 3.8.9 (Mi Dez 12 21:06:49 CET 2018)
  
  NAND: ONFI flash detected
  NAND: Manufacturer ID: 0x2c Chip ID: 0xda
  NAND: Page Bytes: 2048, Spare Bytes: 64
  NAND: ECC Correctability Bits: 4, ECC Sector Bytes: 512
  NAND: Disable On-Die ECC
  NAND: Initialize PMECC params, cap: 4, sector: 512
  NAND: Image: Copy 0xa0000 bytes from 0x40000 to 0x26f00000
  NAND: Done to load image
  &lt;debug_uart&gt; 
  
  U-Boot 2017.09 (Dec 12 2018 - 23:16:12 +0100)
  
  CPU: SAMA5D36
  Crystal frequency:       12 MHz
  CPU clock        :      528 MHz
  Master clock     :      132 MHz
  DRAM:  256 MiB
  NAND:  256 MiB
  MMC:   Atmel mci: 0, Atmel mci: 1
  In:    serial@ffffee00
  Out:   serial@ffffee00
  Err:   serial@ffffee00
  Net:   eth0: ethernet@f0028000
  Error: ethernet@f802c000 address not set.
  
  Hit any key to stop autoboot:  0 
  reading zImage
  4279056 bytes read in 281 ms (14.5 MiB/s)
  reading at91-sama5d3_xplained.dtb
  34404 bytes read in 7 ms (4.7 MiB/s)
  ## Flattened Device Tree blob at 22000000
     Booting using the fdt blob at 0x22000000
     Loading Device Tree to 2fb39000, end 2fb44663 ... OK
  
  Starting kernel ...
  
  Booting Linux on physical CPU 0x0
  Linux version 4.18.20 (dopsi@dopsi-ThinkPad-T430) (gcc version 8.1.0 (crosstool-NG 1.23.0.435-eb65)) #4 Sat Dec 15 14:07:41 CET 2018
  CPU: ARMv7 Processor [410fc051] revision 1 (ARMv7), cr=10c53c7d
  CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
  OF: fdt: Machine model: SAMA5D3 Xplained
  Memory policy: Data cache writeback
  CPU: All CPU(s) started in SVC mode.
  random: get_random_bytes called from start_kernel+0x9c/0x3d8 with crng_init=0
  Built 1 zonelists, mobility grouping on.  Total pages: 65024
  Kernel command line: console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait
  Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
  Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
  Memory: 250120K/262144K available (6144K kernel code, 237K rwdata, 1588K rodata, 1024K init, 124K bss, 12024K reserved, 0K cma-reserved)
  Virtual kernel memory layout:
      vector  : 0xffff0000 - 0xffff1000   (   4 kB)
      fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
      vmalloc : 0xd0800000 - 0xff800000   ( 752 MB)
      lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
      modules : 0xbf000000 - 0xc0000000   (  16 MB)
        .text : 0x(ptrval) - 0x(ptrval)   (7136 kB)
        .init : 0x(ptrval) - 0x(ptrval)   (1024 kB)
        .data : 0x(ptrval) - 0x(ptrval)   ( 238 kB)
         .bss : 0x(ptrval) - 0x(ptrval)   ( 125 kB)
  NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
  clocksource: pit: mask: 0xfffffff max_cycles: 0xfffffff, max_idle_ns: 14479245754 ns
  sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 21474836475000000ns
  Console: colour dummy device 80x30
  Calibrating delay loop... 351.43 BogoMIPS (lpj=1757184)
  pid_max: default: 32768 minimum: 301
  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 0x20100000 - 0x20100060
  devtmpfs: initialized
  VFP support v0.3: implementor 41 architecture 2 part 30 variant 5 rev 1
  clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
  futex hash table entries: 256 (order: -1, 3072 bytes)
  pinctrl core: initialized pinctrl subsystem
  NET: Registered protocol family 16
  DMA: preallocated 256 KiB pool for atomic coherent allocations
  AT91: PM: standby: standby, suspend: ulp0
  No ATAGs?
  gpio-at91 fffff200.gpio: at address (ptrval)
  gpio-at91 fffff400.gpio: at address (ptrval)
  gpio-at91 fffff600.gpio: at address (ptrval)
  gpio-at91 fffff800.gpio: at address (ptrval)
  gpio-at91 fffffa00.gpio: at address (ptrval)
  pinctrl-at91 ahb:apb:pinctrl@fffff200: initialized AT91 pinctrl driver
  clocksource: tcb_clksrc: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 115833966437 ns
  at_hdmac ffffe600.dma-controller: Atmel AHB DMA Controller ( cpy set slave ), 8 channels
  at_hdmac ffffe800.dma-controller: Atmel AHB DMA Controller ( cpy set slave ), 8 channels
  AT91: Detected SoC family: sama5d3
  AT91: Detected SoC: sama5d36, revision 2
  SCSI subsystem initialized
  usbcore: registered new interface driver usbfs
  usbcore: registered new interface driver hub
  usbcore: registered new device driver usb
  at91_i2c f0014000.i2c: using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
  at91_i2c f0014000.i2c: AT91 i2c bus driver (hw version: 0x402).
  at91_i2c f0018000.i2c: using dma0chan2 (tx) and dma0chan3 (rx) for DMA transfers
  at91_i2c f0018000.i2c: AT91 i2c bus driver (hw version: 0x402).
  at91_i2c f801c000.i2c: can't get DMA channel, continue without DMA support
  at91_i2c f801c000.i2c: AT91 i2c bus driver (hw version: 0x402).
  videodev: Linux video capture interface: v2.00
  pps_core: LinuxPPS API ver. 1 registered
  pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti &lt;giometti@linux.it&gt;
  PTP clock support registered
  Advanced Linux Sound Architecture Driver Initialized.
  clocksource: Switched to clocksource tcb_clksrc
  NET: Registered protocol family 2
  tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes)
  TCP established hash table entries: 2048 (order: 1, 8192 bytes)
  TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
  TCP: Hash tables configured (established 2048 bind 2048)
  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.
  Initialise system trusted keyrings
  workingset: timestamp_bits=30 max_order=16 bucket_order=0
  squashfs: version 4.0 (2009/01/31) Phillip Lougher
  Key type asymmetric registered
  Asymmetric key parser 'x509' registered
  io scheduler noop registered (default)
  io scheduler mq-deadline registered
  io scheduler kyber registered
  f001c000.serial: ttyS1 at MMIO 0xf001c000 (irq = 23, base_baud = 4125000) is a ATMEL_SERIAL
  f0020000.serial: ttyS2 at MMIO 0xf0020000 (irq = 24, base_baud = 4125000) is a ATMEL_SERIAL
  f0024000.serial: ttyS5 at MMIO 0xf0024000 (irq = 25, base_baud = 4125000) is a ATMEL_SERIAL
  ffffee00.serial: ttyS0 at MMIO 0xffffee00 (irq = 38, base_baud = 8250000) is a ATMEL_SERIAL
  console [ttyS0] enabled
  brd: module loaded
  loop: module loaded
  atmel_spi f0004000.spi: Using dma0chan4 (tx) and dma0chan5 (rx) for DMA transfers
  atmel_spi f0004000.spi: Atmel SPI Controller version 0x213 at 0xf0004000 (irq 19)
  atmel_spi f8008000.spi: Using dma1chan0 (tx) and dma1chan1 (rx) for DMA transfers
  atmel_spi f8008000.spi: Atmel SPI Controller version 0x213 at 0xf8008000 (irq 28)
  libphy: Fixed MDIO Bus: probed
  CAN device driver interface
  at91_can f000c000.can: device registered (reg_base=(ptrval), irq=45)
  libphy: MACB_mii_bus: probed
  Micrel KSZ9031 Gigabit PHY f0028000.ethernet-ffffffff:07: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=f0028000.ethernet-ffffffff:07, irq=POLL)
  macb f0028000.ethernet eth0: Cadence GEM rev 0x00020119 at 0xf0028000 irq 46 (12:34:56:ab:cd:ef)
  macb f802c000.ethernet: invalid hw address, using random
  libphy: MACB_mii_bus: probed
  Micrel KSZ8081 or KSZ8091 f802c000.ethernet-ffffffff:01: attached PHY driver [Micrel KSZ8081 or KSZ8091] (mii_bus:phy_addr=f802c000.ethernet-ffffffff:01, irq=POLL)
  macb f802c000.ethernet eth1: Cadence MACB rev 0x0001010c at 0xf802c000 irq 47 (62:aa:eb:b7:c1:48)
  ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
  ehci-atmel: EHCI Atmel driver
  atmel-ehci 700000.ehci: EHCI Host Controller
  atmel-ehci 700000.ehci: new USB bus registered, assigned bus number 1
  atmel-ehci 700000.ehci: irq 50, io mem 0x00700000
  atmel-ehci 700000.ehci: USB 2.0 started, EHCI 1.00
  usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.18
  usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  usb usb1: Product: EHCI Host Controller
  usb usb1: Manufacturer: Linux 4.18.20 ehci_hcd
  usb usb1: SerialNumber: 700000.ehci
  hub 1-0:1.0: USB hub found
  hub 1-0:1.0: 3 ports detected
  ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
  ohci-atmel: OHCI Atmel driver
  at91_ohci 600000.ohci: USB Host Controller
  at91_ohci 600000.ohci: new USB bus registered, assigned bus number 2
  at91_ohci 600000.ohci: irq 50, io mem 0x00600000
  usb usb2: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18
  usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  usb usb2: Product: USB Host Controller
  usb usb2: Manufacturer: Linux 4.18.20 ohci_hcd
  usb usb2: SerialNumber: at91
  hub 2-0:1.0: USB hub found
  hub 2-0:1.0: 3 ports detected
  usbcore: registered new interface driver cdc_acm
  cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
  usbcore: registered new interface driver usb-storage
  usbcore: registered new interface driver usbserial_generic
  usbserial: USB Serial support registered for generic
  usbcore: registered new interface driver ftdi_sio
  usbserial: USB Serial support registered for FTDI USB Serial Device
  usbcore: registered new interface driver pl2303
  usbserial: USB Serial support registered for pl2303
  atmel_usba_udc 500000.gadget: MMIO registers at [mem 0xf8030000-0xf8033fff] mapped at (ptrval)
  atmel_usba_udc 500000.gadget: FIFO at [mem 0x00500000-0x005fffff] mapped at (ptrval)
  g_serial gadget: Gadget Serial v2.4
  g_serial gadget: g_serial ready
  at91_rtc fffffeb0.rtc: registered as rtc0
  at91_rtc fffffeb0.rtc: AT91 Real Time Clock driver.
  i2c /dev entries driver
  at91-reset fffffe00.rstc: Starting after software reset
  sdhci: Secure Digital Host Controller Interface driver
  sdhci: Copyright(c) Pierre Ossman
  atmel_mci f0000000.mmc: version: 0x505
  atmel_mci f0000000.mmc: using dma0chan6 for DMA transfers
  atmel_mci f0000000.mmc: Atmel MCI controller at 0xf0000000 irq 18, 1 slots
  atmel_mci f8000000.mmc: version: 0x505
  atmel_mci f8000000.mmc: using dma1chan2 for DMA transfers
  atmel_mci f8000000.mmc: Atmel MCI controller at 0xf8000000 irq 27, 1 slots
  sdhci-pltfm: SDHCI platform and OF driver helper
  atmel_aes f8038000.aes: version: 0x135
  atmel_aes f8038000.aes: Atmel AES - Using dma1chan3, dma1chan4 for DMA transfers
  atmel_sha f8034000.sha: version: 0x410
  atmel_sha f8034000.sha: using dma1chan5 for DMA transfers
  atmel_sha f8034000.sha: Atmel SHA1/SHA256/SHA224/SHA384/SHA512
  atmel_tdes f803c000.tdes: version: 0x701
  atmel_tdes f803c000.tdes: using dma1chan6, dma1chan7 for DMA transfers
  mmc0: host does not support reading read-only switch, assuming write-enable
  mmc0: new high speed SDHC card at address b368
  mmcblk0: mmc0:b368 SD4GB 3.74 GiB 
   mmcblk0: p1 p2 p3
  atmel_tdes f803c000.tdes: Atmel DES/TDES
  usbcore: registered new interface driver usbhid
  usbhid: USB HID core driver
  nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
  nand: Micron MT29F2G08ABAEAWP
  nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
  Bad block table found at page 131008, version 0x01
  Bad block table found at page 130944, version 0x01
  nand_read_bbt: bad block at 0x000000c80000
  nand_read_bbt: bad block at 0x000000ca0000
  6 fixed-partitions partitions found on MTD device atmel_nand
  Creating 6 MTD partitions on "atmel_nand":
  0x000000000000-0x000000040000 : "at91bootstrap"
  0x000000040000-0x0000000c0000 : "bootloader"
  0x0000000c0000-0x000000180000 : "bootloader env"
  0x000000180000-0x000000200000 : "device tree"
  0x000000200000-0x000000800000 : "kernel"
  0x000000800000-0x000010000000 : "rootfs"
  iio iio:device0: Resolution used: 12 bits
  iio iio:device0: ADC Touch screen is disabled.
  NET: Registered protocol family 10
  Segment Routing with IPv6
  sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
  NET: Registered protocol family 17
  can: controller area network core (rev 20170425 abi 9)
  NET: Registered protocol family 29
  can: raw protocol (rev 20170425)
  can: broadcast manager protocol (rev 20170425 t)
  can: netlink gateway (rev 20170425) max_hops=1
  Loading compiled-in X.509 certificates
  input: gpio_keys as /devices/platform/gpio_keys/input/input0
  at91_rtc fffffeb0.rtc: setting system clock to 2007-01-01 01:05:49 UTC (1167613549)
  cfg80211: Loading compiled-in X.509 certificates for regulatory database
  cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
  ALSA device list:
    No soundcards found.
  platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
  g_serial gadget: high-speed config #2: CDC ACM config
  random: fast init done
  cfg80211: failed to load regulatory.db
  VFS: Mounted root (squashfs filesystem) readonly on device 179:2.
  devtmpfs: mounted
  Freeing unused kernel memory: 1024K
  starting pid 761, tty '': '/etc/init.d/rcS'
  EXT4-fs (mmcblk0p3): recovery complete
  EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: (null)
  starting pid 768, tty '/dev/ttyS0': '/bin/sh'
  
  
  BusyBox v1.29.3 (2018-12-15 12:27:14 CET) built-in shell (ash)
  Enter 'help' for a list of built-in commands.
  </code></pre>
  
  <p>It detects all but one partition, but I cannot access them either. When trying to attach any of them (with <code>ubiattach -m 5 /dev/ubi_ctrl</code>), I get the following error (the error stays the same for all partition numbers):</p>
  
  <pre><code>ubi0: attaching mtd5
  ubi0: scanning is finished
  ubi0 error: ubi_read_volume_table: the layout volume was not found
  ubi0 error: ubi_attach_mtd_dev: failed to attach mtd5, error -22
  ubiattach: UBI_IOCATT: Invalid argument
  </code></pre>
  
  <hr>
  
  <h3>My questions</h3>
  
  <ul>
  <li>What exactly goes wrong my setup?</li>
  <li>Should there be any preparation for the DTB and the Linux kernel before I put them in the UBI image?</li>
  </ul>
  
  <hr>
  
  <h3>Used tools and versions</h3>
  
  <ul>
  <li>U-Boot 2017.09</li>
  <li>Linux 4.18</li>
  <li>busybox 1.29.3</li>
  <li>an Xubuntu 18.04 VM for development</li>
  </ul>