linux mmc分区_【经验记录】如何给嵌入式Linux的SD/MMC卡驱动中添加多个分区

How to add multi partition for SD/MMC card in Linux Driver

之所以写这个,是因为,在这个过程中,自己明显感觉到了,做事情一定要有一定的方法,方法对了,

事情做的才有效率,否则就是事倍功半。

【过程】

当前,Linux下sd/mmc卡的驱动已经实现。需要在此基础上实现,给这个mmc/sd块设备加多个分区。

有人会问,那等系统启动后,通过fdisk工具去分区不也可以吗?回答是,除了我对此fdisk工具不熟悉之外,本身sd/mmc驱动加载后,只有一个区,而我tootfs就是放在sd卡中,然后kernel 通过sd挂载rootfs的,所以,系统启动后,sd卡处于使用中,好像fdisk对于已经使用的sd卡进行分区,估计也会有些问题的。

所以,就需要在驱动加载过程中,加入多个分区。然后我后期向卡的不同的分区去写东西,就很方便了。

言归正传。此处,如果通过NFS启动kernel和rootfs,然后启动后,插入卡,可以显示类似如下信息(4GB的SD卡):

mmc0: new SDHC card at address d555

mmcblk0: mmc0:d555 SD04G 3.79 GiB

mmcblk0: p1

如果里面的分区被破坏,就会这样(这个是1G的SD卡):

mmc0: new high speed SD card at address b368

mmcblk0: mmc0:b368 UD    952 MiB

mmcblk0: unknown partition table

现在要做的,就是对其支持多分区,但是,关于如何对于sd卡里面加多分区,去百度google了,结果是除了这个帖子里:

“Check Setup

After rebooting and inserting a SD card you should have a device file like:

/dev/mmcblk0

And a partition on it:

/dev/mmcblk0p1 ”

让人明白,mmcblk0就是mmc block 0和mmcblk0p1就是mmc block 0 partition 1之外,其他的可以说是一无所获,所以,只能去通过上面的信息,搞清楚到底何时去加的/dev/mmcblk0p1,然后在对应的地方

加上自己要的多分区。

不过,具体是什么地方输出这些信息的,自己去mmc驱动里面,一直无法找到。而且mmc驱动只是针对host controller而言的,而这些信息输出是在卡插上的时候,识别了卡的之后,才能显示具体信息的。

不过,在mmc驱动至少能知道,大概信息,就是在这些函数里面:

mmc_rescan -> mmc_attach_sd - -> mmc_add_card() ->device_add() ->

然后在device_add里面,太多相关的系统函数kobject_add,blocking_notifier_call_chain,device_create_file,device_create_file,device_create_sys_dev_entry,device_add_class_symlinks,device_add_attrs,bus_add_device,device_pm_add,bus_attach_device,。。。。。

所以,实现没法搞清楚,具体是哪个函数具体去实现的底层加了/dev/mmcblk0p1这个节点的。

继续debug,加打印信息,在插入卡后,出现:

# mmc0: new SDHC card at address d555

--SD-- 1

--SD-- 2

--SD-- 3

--SD-- 4

--SD-- 6

--SD-- 7

--SD-- 8

--SD-- 1

--SD-- 9

--SD-- 1

--SD-- 10

mmcblk0: mmc0:d555 SD04G 3.79 GiB

--SD-- 1

--SD-- 2

--SD-- 3

--SD-- 4

--SD-- 5

--SD-- 6

--SD-- 7

--SD-- 8

--SD-- 1

--SD-- 9

--SD-- 1

--SD-- 10

--SD-- 11

--SD-- 12

mmcblk0: p1

--SD-- 1

--SD-- 2

--SD-- 3

--SD-- 4

--SD-- 5

--SD-- 6

--SD-- 7

--SD-- 8

--SD-- 1

--SD-- 9

--SD-- 1

--SD-- 10

--SD-- 11

--SD-- 12

--SD-- 1

--SD-- 2

--SD-- 3

--SD-- 4

--SD-- 6

--SD-- 7

--SD-- 8

--SD-- 1

--SD-- 9

--SD-- 1

--SD-- 10

--SD-- 11

--SD-- 12

--SD-- 11

--SD-- 12

所以,由:

--SD-- 10

mmcblk0: mmc0:d555 SD04G 3.79 GiB

判断是

bus_attach_device(dev);

if (paren

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值