Hi all,

I've been trying to develop a device simulator for the NAND flash (in the
sim).

A short note on what this does is create a virtual NAND flash (from RAM)
and provide a driver, as well as a wrapper around the upper half (which for
now, does nothing extra). This helps in creating records of
reads/writes/erases (in a separate file) for testing and statistics
purposes.

Since littlefs is one of the supported filesystems on MTD devices, I tried
to use it to test mount but it tries to use an ioctl with BIOC_FLUSH in the
format process, which is not supported as far as code in
drivers/mtd/mtd_nand.c go.

*Should that be something that the NAND driver should support?*

Here are the logs of that process, the first ioctl is for MTDIOC_GEOMETRY
(which is supported), and second for BIOC_FLUSH (in *bold*):

nuttx ➤ make && ./nuttx
LD:  nuttx
login: admin
password:
User Logged-in!
nsh> ls /dev
/dev:
 console
 gpio0
 gpio1
 gpio2
 gpio3
 loop
 null
 oneshot
 ram0
 ram1
 ram2
 zero
nsh> mtddev
Size:   2097152 B

Pages:    4096
Blocks:     33
Writing...Done
Driver running
nsh> ls /dev
/dev:
 console
 gpio0
 gpio1
 gpio2
 gpio3
 loop
 mtd
 null
 oneshot
 ram0
 ram1
 ram2
 zero
nsh> mount -t littlefs -o forceformat /dev/mtd /hi
Upper! ioctl
Command: 1537 | BIOC_FLUSH: 1293
Upper! bread
Page 128
Lower! rawread : Page 128
Lower! rawread : Page 129
Lower! rawread : Page 130
Lower! rawread : Page 131
Upper! erase
Lower! eraseblock : Block 0
Upper! bread
Page 0
Lower! rawread : Page 0
Lower! rawread : Page 1
Lower! rawread : Page 2
Lower! rawread : Page 3
Upper! bread
Page 4
Lower! rawread : Page 4
Lower! rawread : Page 5
Lower! rawread : Page 6
Lower! rawread : Page 7
Upper! bwrite
Lower! rawwrite : Page 0
Lower! rawwrite : Page 1
Lower! rawwrite : Page 2
Lower! rawwrite : Page 3
Upper! ioctl
*Command: 1293 | BIOC_FLUSH: 1293*
Error Upper! ioctl | -25
Upper! bread
Page 0
Lower! rawread : Page 0
Lower! rawread : Page 1
Lower! rawread : Page 2
Lower! rawread : Page 3
nx_mount: ERROR: Bind method failed: -28
nsh: mount: mount failed: 28
nsh>

The logs with "Upper!" refer to the upper half of the driver being
executed, and same for the lower, and the pages are numbered from the start
of the device (ie. (block << LOG_N_BLOCKS_PER_PAGE) + page_in_block)).

Regards,
SP

Reply via email to