any problem with changing mtdparts to a sysfs parameter?
I'm trying to modify the firmware update scripts on a board I'm working on to allow updates to change the partition layout. One thing that would be extremely useful is a way to change the partition layout at runtime, so that I can read the existing partition data into RAM, change the layout, then write the data back to the rearranged partitions.
I've been experimenting with this by converting mtdparts to a sysfs parameter:
static char mtdparts[COMMAND_LINE_SIZE]; module_param_string(mtdparts, mtdparts, sizeof(mtdparts), S_IRUGO |S_IWUSR);
MODULE_PARM_DESC(mtdparts, "MTD partitions");
After some other modifications to allow mtdpart_setup_real to be called more than once, things seem to be working well. I can unbind the physmap_of driver, define a new layout in the mtdparts sysfs file, then rebind the physmap_of driver and see the new partition layout.
One point of concern I had - mtdpart_setup_real was protected so that it only runs once, but I don't really understand why. It allocates an array of mtd_partition structures, but it looks like the caller is responsible for freeing this array. Is there any problem with letting parse_cmdline_partitions call mtdpart_setup_real every time?
Thanks,
Ken