qemu: arm: mounting ubifs using nandsim on busybox


Pintu Agarwal <pintu.ping@...>
 

On Thu, 10 Jun 2021 at 19:22, Richard Weinberger <richard@nod.at> wrote:

Pintu,

----- Urspr√ľngliche Mail -----
Von: "Pintu Agarwal" <pintu.ping@gmail.com>
nandsim works as expected. It creates a new and *erased* NAND for you.
So you have no UBI volumes. Therfore UBIFS cannot be mounted.
I suggest creating a tiny initramfs that creates UBI volumes before mounting
UBIFS on
one of the freshly created (and empty) volumes.
oh sorry I forgot to mention this.
I am able to create and update volumes manually after booting the
system with initramfs.
{{{
Creating rootfs volume:
mknod /dev/ubi0 c 250 0
mknod /dev/ubi0_0 c 250 1
ubiattach /dev/ubi_ctrl -m 2
ubimkvol /dev/ubi0 -N rootfs -m
ubiupdatevol /dev/ubi0_0 ubifs-rootfs.img
mount -t ubifs ubi0:rootfs ubi-root/
}}}

But I wanted to do all these automatically during boot time itself.
Also I wanted to use ubinize.cfg as is from the original system and
simulate everything using qemu and nadsim (if possible)
So I thought it must be possible by setting some parameters in qemu such as:
mtdparts=nand:,
-device nand,chip_id=0x39,drive=mtd0,
-drive if=mtd,file=./ubi-boot.img,id=mtd0,
anything else ?
Well, this has nothing to do with nandsim.
If qemu can emulate a NAND chip (plus a controller) all you need is a driver on the Linux side.
Okay let me add qemu guys here.
I am not sure which driver is required from Linux side. I thought it
is nandsim only.
Is it some existing driver, or we need to develop a new driver on our own ?
I think it is not able to find the required driver..
I see in the boot log that it is detecting Toshiba nand driver:
===> nand: Toshiba NAND 128MiB 1,8V 8-bit

Also the root volume seems empty.
===> ubi0: empty MTD device detected
How to fill the root volume at boot time ?


These are the commands I am using:
$ mkfs.ubifs -r _install -m 512 -e 15872 -c 5000 -o ubifs-rootfs.img
$ ubinize -o ubi-boot.img -m 512 -p 16KiB -s 256 ubiconfig.cfg
$ qemu-system-arm -M vexpress-a9 -m 512M -kernel
linux/arch/arm/boot/zImage -dtb
linux/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -append
"console=ttyAMA0,115200 ubi.mtd=2 root=/dev/mtdblock2 rootfstype=ubifs
mtdparts=nand:-(rootfs)" -device nand,chip_id=0x39,drive=mtd0 -drive
if=mtd,file=./ubi-boot.img,id=mtd0 -nographic -smp 4

Any corrections here ?

$ cat ubiconfig.cfg
[rootfs]
mode=ubi
image=./ubifs-rootfs.img
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_alignment=1
vol_flags=autoresize


But I am still getting this error:
{{{
List of all partitions:
1f00 131072 mtdblock0
(driver?)
1f01 32768 mtdblock1
(driver?)
1f02 131072 mtdblock2
(driver?)
No filesystem could mount root, tried:
ubifs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
[...]
}}}

Some log references below:
[....]
Using buffer write method
Concatenating MTD devices:
(0): "40000000.flash"
(1): "40000000.flash"
into device "40000000.flash"
physmap-flash 48000000.psram: physmap platform flash device: [mem
0x48000000-0x49ffffff]
[nandsim] warning: read_byte: unexpected data output cycle, state is
STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is
STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is
STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is
STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is
STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is
STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x98, Chip ID: 0x39
nand: Toshiba NAND 128MiB 1,8V 8-bit
nand: 128 MiB, SLC, erase size: 16 KiB, page size: 512, OOB size: 16
flash size: 128 MiB
page size: 512 bytes
OOB area size: 16 bytes
sector size: 16 KiB
pages number: 262144
pages per sector: 32
bus width: 8
bits in sector size: 14
bits in page size: 9
bits in OOB size: 4
flash size with OOB: 135168 KiB
page address bytes: 4
sector address bytes: 3
options: 0x42
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 128MiB 1,8V 8-bit":
0x000000000000-0x000008000000 : "NAND simulator partition 0"
[nandsim] warning: CONFIG_MTD_PARTITIONED_MASTER must be enabled to
expose debugfs stuff
[....]
ubi0: attaching mtd2
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd2 (name "NAND simulator partition 0", size 128 MiB)
ubi0: PEB size: 16384 bytes (16 KiB), LEB size: 15872 bytes
ubi0: min./max. I/O unit sizes: 512/512, sub-page size 256
ubi0: VID header offset: 256 (aligned 256), data offset: 512
ubi0: good PEBs: 8192, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 92
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence
number: 2149713893
ubi0: available PEBs: 8028, total reserved PEBs: 164, PEBs reserved
for bad PEB handling: 160
[...]

Thanks,
Pintu