linux-2.6.35内核移植—SD卡驱动的添加

时间:2021-02-02 12:26:22
 

【实验目的】

       SD卡是嵌入式系统中最常用到的外部存储单元,现在的手机,相机等等消费电子及其它设备都在使用SD卡来弥补系统本身存储较小的缺点.这里我们在我们的系统中也添加SD卡的功能.

【实验环境】

1、  Ubuntu 10.10发行版

2、  u-boot-2010.03

3、  FS2410平台

4、  交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2

【实验步骤】

1、 配置内核

Device Drivers  --->

                    <*> MMC/SD/SDIO card support  --->

                      <*>   MMC block device Drivers

                      <*>   Samsung S3C SD/MMC Card Interface support

2、 修改平台代码

       修改arch/arm/mach-s3c2410/mach-smdk2410.c  添加如下内容:

       static struct platform_device *smdk2410_devices[] __initdata = {

              &s3c_device_ohci,

              &s3c_device_lcd,

              &s3c_device_wdt,

              &s3c_device_i2c0,

              &s3c_device_iis,

              &s3c_device_sdi, //添加内容

              &s3c_device_adc,

              &s3c_device_ts,

       };

3、 添加SD卡热插拔功能

       按照上面两个步骤就能够是我们的SD卡正常工作了,只是不能实现热插拔的功能,必须在系统启动的时候就把卡插上,这样才能是SD卡正常的工作,否则就无法识别SD卡.

       查看FS2410原理图,发现SD卡的nCS_SD脚接在GPG10上,这个管脚用来监测SD卡插拔,于是我们添加如下代码

       修改arch/arm/mach-s3c2410/mach-smdk2410.c  添加如下内容:

       #include <mach/gpio.h>

       #include <linux/mmc/host.h>

       #include <plat/mci.h>

 

       /*SDI Support*/

static struct s3c24xx_mci_pdata smdk2410_mmc_cfg __initdata = {

              .gpio_detect    = S3C2410_GPG(10),

              .set_power             = NULL,

.ocr_avail              = MMC_VDD_32_33,

};

 

在smdk2410_init中添加

s3c24xx_mci_set_platdata(&smdk2410_mmc_cfg);

4、 重新编译内核

       $ make  zImage

5、 拷贝内核到tftpboot目录下

       $ cp  arch/arm/boot/zImage /tftpboot

6、 启动系统后插上SD卡

s3c-sdi s3c2410-sdi: running at 0kHz (requested: 0kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 396kHz (requested: 400kHz).

s3c-sdi s3c2410-sdi: running at 12675kHz (requested: 25000kHz).

s3c-sdi s3c2410-sdi: running at 12675kHz (requested: 25000kHz).

mmc0: new SDHC card at address aaaa

mmcblk0: mmc0:aaaa SD04G 3.69 GiB

      mmcblk0: p1

       这说明我们有一个4G的SD卡被发现了,它有一个分区

7、 创建设备节点

       # mknod mmcblk0p1  b  179  1

8、 挂载SD卡

       # mount -t vfat /dev/mmcblkp1  /mnt

9、 查看SD卡内容

       # ls  /mnt