Linux驱动之挂在SD卡

      讲解之前我得说一下,现在有一个新的技术在公司已经在用了,远远比你在学校学的东西要先进一点,我们烧写u-boot程序一般是在flash上,然后由flash中的程序来引导linux内核,但是flash成本远远比SD卡要高,现在公司很多都用SD卡来代替flash,这个具体怎么实现,还得自己去学习,我目前也不是很熟悉这个新的技术,就不写出来了,等我熟悉以后再写出来分享吧。


Linux中对S3C2440 SD驱动已经支持的非常好。为了让FL2440支持2G以上的SD卡,只需要完成几个步骤即可。

Linux2.6.30.9内核源码中S3C2440 CPU的SD卡控制器驱动对应的源码文件为 s3cmci.c 存放在\drivers\mmc\host目录下。 SD驱动的源码在平台设备驱动架构,移植步骤如下:


这里我得强调一下这个内核版本更新是很快的,所以些地方有可能是不一样的,但是思路是不变得。


1.     在内核中注册SD卡平台设备。通过修改mach-smdk2440.c 文件来实现。在mach-smdk2440.c文件的smdk2440_devices数组中增加s3c_device_sdi 平台设备成员,如下所示:

static struct platform_device *smdk2440_devices[] __initdata = {

    &s3c_device_usb,

    &s3c_device_lcd,

    ......

   &lys3c2440_device_st16c554,

    &s3c_device_sdi,  //增加SD卡平台设备结构体,也就是硬件部分相关的代码,如果你学过platform总线框架,这里就非常好理解了。

};

s3c_device_sdi平台设备定义在devs.c文件中,如下所示:/* 这里已经定义好了,就不需要我们在去定义了 */

struct platform_device s3c_device_sdi = {

       .name              = "s3c2410-sdi",

       .id            = -1,

       .num_resources      = ARRAY_SIZE(s3c_sdi_resource),

       .resource         = s3c_sdi_resource,

};

 

 /* 第二部很重要了,这里就得去分析你的SD卡函数接口,如果你用的内核默认的接口就不用修改了,一般也是默认的接口,只有极个别的开发板是用的其他接口,这个可以参考芯片手册 */

 2.     修改s3cmci.c, 设置检测SD卡插入的中断号,及配置响应的引脚为中断功能。如下所示:修改s3cmci_probe函数,将

    host->irq_cd = s3c2410_gpio_getirq(host->pdata->gpio_detect);

修改为:

    host->irq_cd = IRQ_EINT18;

    s3c2410_gpio_cfgpin(S3C2410_GPG10,S3C2410_GPG10_EINT18);

设置检测SD插入的中断号为外部中断18,这时是根据FL2440的原理图来确定的。FL2440 SD卡接口的原理图如下所示:


NCD PIN脚是用于检测SD卡插入的引脚,由图可以看出 NCD接的是 EINT18 号外部中断。

3.     添加MMC内核配置选项

在内核的MMC配置选项中添加对S3C SD/MMC的支持,如下图所示:



4.     在内核中取消所有分区类型

取消内核中的所有分区,如下所示:




进行以上修改后,重新编译zImage ,这样这个zImage就支持 SD卡驱动了。  /* zImage很少使用了,一般都用u Image,这里还是可以实现动态加载驱动,不编译进内核,这就根据自己的项目来确定了,为了节省成本,获得高效率,没用到的程序坚决不编译进内核*/

 

 /* 新内核版本已经不需要了 */

5.     创建 SD卡分区设备文件节点,如下所示:

mknod  /dev/mmcblk0p1 b 179 1      /* 手动创建设备节点,也可以在程序写给类,利用mdev机制自动创建设备节点 */

 

6 挂载文件系统,命令如下:

 

mount  /dev/mmcblk0p1 /mnt

 

这样我们就可以使用SD卡了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值