免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2485 | 回复: 0
打印 上一主题 下一主题

SD/MMC驱动在FL2440的移植(2.6.33.7内核) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览

一、移植环境
    主  机:Fedora 14 (kernel-2.6.33.7)
    开发板:FL2440(nandflash:K9F1G08 128MB)
    编译器:arm-linux-gcc-4.3.2
 
二、移植步骤
  1. 添加SD卡设备到系统设备初始化列表中。2.6.30.4内核对MMC/SD卡的支持已经非常完善了,而且支持超大容量32GB,所以这里我们只需把s3c_device_sdi添加到列表中即可。

  1. #vim arch/arm/mach-s3c2410/mach-smdk2410.c
  2. static struct platform_device *smdk2410_devices[] __initdata = {
  3.         &s3c_device_usb,
  4.         &s3c_device_sdi, //SD/MMC
  5.         &s3c_device_lcd,
  6.         &s3c_device_wdt,
  7.         &s3c_device_i2c0,
  8.         &s3c_device_iis,
  9.         &s3c_device_rtc,
  10.         &s3c24xx_uda134x, //uda
  11.         &s3c_device_dm9000,
  12. };

2. 修改MMC/SD驱动源码。主要是添加SD卡的中断处理,去掉驱动的Bug和一些多余的调试信息

  1. vim drivers/mmc/host/s3cmci.c

  2. static struct s3c24xx_mci_pdata s3cmci_def_pdata = {
  3.  .gpio_detect = S3C2410_GPG(8),
  4.  .gpio_wprotect = S3C2410_GPH(8),
  5.  .set_power = NULL,
  6.  .ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34,
  7. };


  8. static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
  9. {
  10.     ....

  11.         /* Set CLOCK_ENABLE */
  12.         if (ios->clock)
  13.                 mci_con |= S3C2410_SDICON_CLOCKTYPE;
  14.         else
  15.                 mci_con &= ~S3C2410_SDICON_CLOCKTYPE;

  16.         writel(mci_con, host->base + S3C2410_SDICON);

  17.         if ((ios->power_mode == MMC_POWER_ON) ||
  18.             (ios->power_mode == MMC_POWER_UP)) {
  19.                 //dbg(host, dbg_conf, "running at %lukHz (requested: %ukHz).\n",
  20.                 // host->real_rate/1000, ios->clock/1000);
  21.         } else {
  22.                 dbg(host, dbg_conf, "powered down.\n");
  23.         }

  24.         host->bus_width = ios->bus_width;
  25.     ....
  26. }
3. 修改内核配置选项。完成后重新编译内核下载到开发板上

  1. Device Drivers --->
  2.     <*> MMC/SD/SDIO card support --->
  3.         --- MMC/SD/SDIO card support
  4.         [ ] MMC debugging
  5.         [ ] Allow unsafe resume (DANGEROUS)
  6.         *** MMC/SD/SDIO Card Drivers ***
  7.         <*> MMC block device driver
  8.         [*] Use bounce buffer for simple hosts
  9.         < > SDIO UART/GPS class support
  10.         < > MMC host test driver
  11.         *** MMC/SD/SDIO Host Controller Drivers ***
  12.         < > Secure Digital Host Controller Interface support
  13.         < > MMC/SD/SDIO over SPI
  14.         <*> Samsung S3C SD/MMC Card Interface support
4. 插入SD卡。当开机之后系统启动后插入SD卡就会出现一些信息,还可以看到mmcblk0就是SD设备了。

  1. s3c2410 TouchScreen successfully loaded
  2. input: s3c2410 TouchScreen as /class/input/input0
  3. S3C24XX RTC, (c) 2004,2006 Simtec Electronics
  4. s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
  5. s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
  6. S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
  7. s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
  8. s3c-sdi s3c2440-sdi: powered down.
  9. s3c-sdi s3c2440-sdi: mmc0 - using pio, sw SDIO IRQ
5. 重新插入SD卡,开发板已经识别出了SD卡

  1. [root@yyq2440 /]# mmc0: card b368 removed
  2. s3c-sdi s3c2440-sdi: powered down.
  3. mmc0: new SD card at address b368
  4. mmcblk0: mmc0:b368 SD 1.90 GiB
  5.  mmcblk0: p1
6. 挂载SD卡。执行mount命令将SD卡挂载到/mnt/mmc/目录下,但是没成功,出错了。首先查看/dev/目录下并没有mmcblk0p1节点所以出错,我们查看/proc/partitions/目录发现SD卡的主设备号是179,次设备号是1,那么我们就创建这个设备的节点,b代表块设备,最后再执行mount命令,没有出错。最后可以成功看到SD卡里面的内容。过程如下。

  1. [root@yyq2440 /]# mkdir mnt/mmc
  2. [root@yyq2440 /]# mount /dev/mmcblk0p1 /mnt/mmc
  3. mount: mounting /dev/mmcblk0p1 on /mnt/mmc failed: No such file or directory
  4. [root@yyq2440 /]# ls /dev    
  5. console null
  6. [root@yyq2440 /]# cat /proc/partitions
  7. major minor #blocks name

  8.   31 0 128 mtdblock0
  9.   31 1 384 mtdblock1
  10.   31 2 3072 mtdblock2
  11.   31 3 61440 mtdblock3
  12.   31 4 512 mtdblock4
  13.   31 5 60928 mtdblock5
  14.  179 0 1997312 mmcblk0
  15.  179 1 1997188 mmcblk0p1
  16. [root@yyq2440 /]# mknod /dev/blk0p1 b 179 1
  17. [root@yyq2440 /]# rm /dev/blk0p1
  18. [root@yyq2440 /]# mknod /dev/mmcblk0p1 b 179 1
  19. [root@yyq2440 /]# mount /dev/mmcblk0p1 /mnt/mmc
  20. [root@yyq2440 /]# ls /mnt/mmc
  21. ???? htmlhelp.exe st-ndt test.wav
  22. [root@yyq2440 /]#


2011-03-01




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP