注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

嵌入式开发实战4——内核的编译之十三USB设置及SD卡的驱动  

2012-07-02 22:04:06|  分类: ARM开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

嵌入式开发实战4——内核的编译之十三USB设置及SD卡的驱动

 

USB的设置没有什么可讲的,比较简单,只要注意两点即可:

1、  在选择SCSI的支持的时候儿,只能选择M,即模块加载,后来点了其它的一些配置选项,或者跳开到后面的USB设置MASS支持后,这里才出现了*,不知道什么原因。

2、  在摄像头的选项中,一定要先*选中当前选项,才会出现后面的配置选项。

主要讲一下SD卡,虽然SD卡比较复杂,但好在LINUX提供了这个SD的驱动,只需要简单的改一下内核的配置就可以了,仍然到前面的平台文件下:

  Arch/arm/mach-s3c2440/mach-mini2440.c

增加红色部分:

#include <linux/mmc/host.h>

#include <plat/mci.h>

 

static struct platform_device mini2440_device_eth = {

        .name           = "dm9000",

        .id             = -1,

        .num_resources  = ARRAY_SIZE(mini2440_dm9k_resource),

        .resource       = mini2440_dm9k_resource,

        .dev            = {

                .platform_data  = &mini2440_dm9k_pdata,

        },

};

 

/* MMC/SD  */

 

static struct s3c24xx_mci_pdata mini2440_mmc_cfg = {

   .gpio_detect   = S3C2410_GPG(8),

   .gpio_wprotect = S3C2410_GPH(8),

   .set_power     = NULL,

   .ocr_avail     =  MMC_VDD_32_33|MMC_VDD_33_34,

}; 

 

 

并把SD卡结构设备添加到目标平台设备集中,如图:

static struct platform_device *mini2440_devices[] __initdata = {

        &s3c_device_usb,

        &s3c_device_rtc,

        &s3c_device_lcd,

        &s3c_device_wdt,

        &s3c_device_i2c0,

        &s3c_device_iis,

        &mini2440_device_eth,

        &s3c24xx_uda134x,

        &s3c_device_nand,

         &s3c_device_sdi,

}; 

 

再到linux-2.6.32.2/drivers/mmc/host/s3cmci.c 下修改:

#include <linux/delay.h>

static void pio_tasklet(unsigned long data)

{

                struct s3cmci_host *host = (struct s3cmci_host *) data;

 

        s3cmci_disable_irq(host, true);

         udelay(50);  // 在此处添加了延时函数

 

        if (host->pio_active == XFER_WRITE)

                do_pio_write(host);

增加延时的主要原因是为了程序的稳定,如果不增加,则不太稳定。

这里也遇到一个小麻烦,再打开mach-mini2440.c这个文件后,发现文件中有很多^M,这是因为DOS与UNIX的回车换行的区别造成的,麻烦的是用命令解决不了,也不知道为啥:

:%s/^M//g          或者        :%s^M$//g

后来用:%s/\r/ 倒是成功了,再编译,发现报错,是这个文件最后的MACHINE_START和MACHINE_END这两个宏的第一个M也给替换了,晕死。

改回这两行代码,再编译成功。

一定要小心啊。

  评论这张
 
阅读(660)| 评论(5)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017