[PATCH] UBI:Force ubi driver load after mtd device drivers
Warrick
warrick.jiang at gmail.com
Thu Aug 9 01:46:50 EDT 2012
于 2012年08月09日 05:52, richard -rw- weinberger 写道:
> On Wed, Aug 8, 2012 at 4:31 AM, Jiang Lu <lu.jiang at windriver.com> wrote:
>> To implement rootfs on mtd device with UBIFS, kernel need create a
>> UBIFS device when booting:
>>
>> drivers/mtd/ubi/build.c ubi_init()
>> for (i = 0; i < mtd_devs; i++) {
>> ...
>> mtd = open_mtd_device(p->name);
>> if (IS_ERR(mtd)) {
>> err = PTR_ERR(mtd);
>> goto out_detach;
>> }
>>
>> ubi_attach_mtd_dev()
>> ...
>> }
>> module_init(ubi_init);
>>
>> Kernel can not create the UBIFS device without corresponding mtd
>> partiton.
>>
>> Some NAND device can not guarenteen the mtd patition created before
>> UBIFS deivce driver loading. Such as SPI NAND deivce, the mtd partition
>> will create after SPI bus driver loaded.
>>
>> UBI device driver must load after other mtd device drivers to make sure
>> the mtd partition already exist when creating UBI deivce.
>>
>> The patch updates the UBI device driver's initial routine to
>> late_initcall level.
>>
>> Signed-off-by: Jiang Lu <lu.jiang at windriver.com>
>> ---
>> drivers/mtd/ubi/build.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
>> index 0fde9fc..efbcaef 100644
>> --- a/drivers/mtd/ubi/build.c
>> +++ b/drivers/mtd/ubi/build.c
>> @@ -1275,7 +1275,7 @@ out:
>> ubi_err("UBI error: cannot initialize UBI, error %d", err);
>> return err;
>> }
>> -module_init(ubi_init);
>> +late_initcall(ubi_init);
> Cant we use a simple initrd in such a case?
> Within the initrd you can load the ubi module after your SPI NAND is done.
>
This could be a workround. But for the ubi device driver, kernel should
invoke ubi_init() after all mtd partition ready.
More information about the linux-mtd
mailing list