《第14章 SD卡驱动参数的配置与编译.ppt》由会员分享,可在线阅读,更多相关《第14章 SD卡驱动参数的配置与编译.ppt(35页珍藏版)》请在第壹文秘上搜索。
1、第14章 SD卡驱动参数的配置与编译本章重点 SD卡的基本概念 简单块设备驱动框架 块设备驱动程序设计流程本章内容14.1 SD概述 14.2 内核SD卡驱动参数的配置14.3 制作与生成cramfs文件系统 14.1 SD概述 14.1.1 SD卡应用 SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备。SD卡体积小巧,广泛应用在数码相机上,是由日本的松下公司、东芝公司和美国SanDisk公司于1999年8月共同开发研制。最大的特点就是通过加密功能,保证数据资料的安全保密,有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到
2、SD卡中,因此SD卡已广泛地应用于嵌入式设备的存储系统,如数码相机等。SD卡在外形上同MultiMedia Card卡保持一致,并且兼容MMC卡接口规范,其投影面积与MMC卡相同,只是略微厚一点,但是SD卡的容量大得多,且读、写速度也比MMC卡快4倍。同时,SD卡的接口与MMC卡是兼容的,支持SD卡的接口大多支持MMC卡。14.1 SD概述 14.1.2 SD卡的辨别 目前市场上SD卡的品牌很多,诸如Sandisk、Kingmax、松下和Kingston。1)SanDisk产的SD卡是市面上最常见的,分为高速和低速SD卡。2)Kingmax的SD卡,采用了独特的一体化封装技术(PIP),最高传
3、输速率10MB/s,具有防水、防震、防压的三防设计,它可以满足野外拍摄的各种要求。3)松下SD卡,其技术可以说是市面上最好的SD卡之一了。4)Kingston SD卡,在众多的闪存类产品中,它是体积最小的一种,提供了长达5年的质保时间。随着SD卡存储技术的发展,逐渐出现了Mini SD和Micro SD卡,如图14.1所示。14.1 SD概述 14.1.3 SD卡的接口定义及管脚功能 SD卡通过9针的接口与专门的驱动器相连接,不需要通过额外的电源来保持SD卡上存储的信息,图14.2所示是卡引脚功能示意图,SD卡的管脚分配以及在MMC/SPI模式下的功能描述如表14.1所示。14.1 SD概述1
4、SD卡总路接口模式及功能按照SD卡的协议描述可分为两种总线的接口。(1)SD BUS 模式物理层定义:D0D3数据传送CMD 进行CMD 和Response CLK 大家最熟悉的HOST时钟信号线VDD VSS 电源和地(2)SPI BUS 模式物理层定义:CLK HOST时钟信号线DATAIN HOSTSD Card数据信号线DATAOUT SD CardHOST数据信号线除了上述数据线外在SPI BUS 模式下还需CS片选。14.1 SD概述2SD总线的访问状态SD总线的访问状态有3种。1)COMMOND:启动操作的会话,由Host从CMD连线传送到卡类设备。2)Response:响应CM
5、D的会话,由卡类设备CMD连线传送至Host。3)Data:在Host与卡设备间传送数据的双向数据流,物理链路为Data0Data3。注意:每一个完整的操作都需要一个CMD来启动,根据不同的CMD有相应的Data和Response。14.1 SD概述 14.1.4 SD的寄存器 关于寄存器的部分可以在S3C2410的datasheet中得到,如表14.2所示。14.1 SD概述 14.1.5 S3C2410与SD的连接S3C2410与SD的连接如图14.3所示,从图中可以清楚地看到SD管脚与S3C2410的连接情况。各个管脚的说明如下:SDDATA0SDDATA3数据传送线SDCMD 命令线和
6、Response线 SDCLK SD时钟信号线EINT7 写保护线14.2 SD卡驱动参数的配置 14.2.1 SD卡驱动参数的配置SD卡驱动参数配置流程如下:14.2 SD卡驱动参数的配置注意:注意:本节以内核2.6.24为例,使用的交叉编译为3.4.1版本,更新bootloader是为了支持2.6内核。步骤1.利用锐极提供的ppcboot,通过网络下载文件ppcboot.bin到目标板30008000地址上。SMDK2410 tftp 30008000 ppcboot.bin SMDK2410 protect off all然后进行烧写:SMDK2410 fl 0 30008000 200
7、00 注意:注意:上述命令的含义是把目标板上地址为0 x30008000的内容传送到flash 的0 地址,也就是ppcboot 的起始地址,20000表示是要烧写的ppcboot的大小,单位为字节。步骤2.下载Linux内核2.6.24.http:/www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.4.tar.bz214.2 SD卡驱动参数的配置下载后解压内核rootlocalhost#tar-xjvf linux-2.6.24.4.tar.bz2rootlocalhost#cd linux-2.6.24.4 步骤3.修改Makefile修改
8、内核目录树根下的的Makefile,指明交叉编译器rootlocalhost linux-2.6.24.4#vi Makefile第193行改找到ARCH和CROSS_COMPILE,修改为ARCH?=armCROSS_COMPILE?=arm-linux-然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链rootlocalhost linux-2.6.24.4#echo$PATH/usr/local/arm/3.4.1/bin:/usr/local/arm/3.4.1/bin:步骤4.复制编译配置文件到linux-2.6.24.4下面rootlocalhost linux-2.6.
9、24.4#cp arch/arm/configs/s3c2410_defconfig.config 14.2 SD卡驱动参数的配置步骤5.修改flash分区rootlocalhost linux-2.6.24.4#cd drivers/mtd/maps/rootlocalhost maps#cp cfi_flagadm.c s3c2410.crootlocalhost maps#vi s3c2410.c将FLASH_PHYS_ADDR和FLASH_SIZE这两个宏分别修改成自己板子的flash起始地址和大小。然后修改结构体数组flagadm_parts添加自己的分区信息,修改以后如下:#def
10、ine FLASH_PHYS_ADDR 0 x01000000#define FLASH_SIZE 0 x01600000 struct map_info flagadm_map=.name=NOR flash on S3C2410,.size=FLASH_SIZE,.bankwidth=2,;14.2 SD卡驱动参数的配置struct mtd_partition flagadm_parts=.name=bootloader,.size=0 x040000,.offset=0 x0 ,.name=kernel,.size=0 x0200000,.offset=0 x040000 ,.name=
11、cramfs,.size=0 x300000,.offset=0 x240000 ,14.2 SD卡驱动参数的配置 .name=ramdisk,.size=0 x2c0000,.offset=0 x540000 ,.name=jffs2,.size=0 x700000,.offset=0 x800000 ;接下来告诉内核使用该驱动程序。修改maps目录下的Kconfig文件,该文件决定出现在menuconfig中的项目,在configMTD_CDB89712之后添加config MTD_S3C2410 tristate RJ 2410 board14.2 SD卡驱动参数的配置修改该目录下的Ma
12、kefile,添加如下内容:obj-$(CONFIG_MTD_S3C2410)+=s3c2410.o(这样make menuconfig时,在MTD项目中将出现”RJ 2410 board”board选项,选中它并重新编译内核就完成了分区工作,启动时将看到分区信息)步骤6.支持启动时挂载 devfs为了使内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件rootlocalhost linux-2.6.24.4#vi fs/Kconfig找到menu Pseudo filesystems添加如下语句:config D
13、EVFS_FSbool/dev file system support(OBSOLETE)“default yconfig DEVFS_MOUNT14.2 SD卡驱动参数的配置bool Automatically mount at bootdefault ydepends on DEVFS_FS步骤7.为了方便直接在内存中调试内核,将arch/arm/kernel/setup.c文件中的parse_tag_cmdline()函数中的strlcpy()函数注释掉,这样就可以使用默认的CONFIG_CMDLINE了,在.config文件中它被定义为:“root=/dev/mtdblock/2 ro
14、 init=/bin/sh console=ttySAC0,115200”。步骤8.配置内核上面已经复制了一个编译配置文件到linux-2.6.24.4下面(cp arch/arm/configs/s3c2410_defconfig.config)以这个为模板增删一些配置即可:14.2 SD卡驱动参数的配置rootlocalhost linux-2.6.24.4#make menuconfigLoadable module support*Enable loadable module support*Automatic kernel module loadingSystem Type*S3C2
15、410 DMA supportBoot options Default kernel command string:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200#说明:mtdblock2代表我的第3个flash分区#console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上.#2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。#用户空间的串口编程针对的仍是/dev/ttyS0等 14.2 SD卡驱动参数的配置Floating point emulatio
16、n*NWFPE math emulationThis is necessary to run most binaries!#接下来要做的是对内核MTD子系统的设置Device Drivers Memory Technology Devices(MTD)*MTD partitioning support#支持MTD分区,这样我们在前面设置的分区才有意义*Command line partition table parsing#支持从命令行设置flash分区信息,灵活RAM/ROM/Flash chip drivers Detect flash chips by Common FlashInterface(CFI)probe Detect nonCFI AMD/JEDECcompatible14.2 SD卡驱动参数的配置flash chips Support for Intel/Sharp flash chips Support for AMD/Fujitsu flash chips Support for ROM chips in bus mappingMapping drivers f