第14章 SD卡驱动参数的配置与编译.ppt

上传人:夺命阿水 文档编号:726568 上传时间:2023-10-31 格式:PPT 页数:35 大小:493.50KB
返回 下载 相关 举报
第14章 SD卡驱动参数的配置与编译.ppt_第1页
第1页 / 共35页
第14章 SD卡驱动参数的配置与编译.ppt_第2页
第2页 / 共35页
第14章 SD卡驱动参数的配置与编译.ppt_第3页
第3页 / 共35页
第14章 SD卡驱动参数的配置与编译.ppt_第4页
第4页 / 共35页
第14章 SD卡驱动参数的配置与编译.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《第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概

4、述,1SD卡总路接口模式及功能按照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

5、:响应CMD的会话,由卡类设备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数据传送线SDC

6、MD 命令线和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 30008

7、000 20000 注意:上述命令的含义是把目标板上地址为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.bz2,14.2 SD卡驱动参数的配置,下载后解压内核rootlocalhost#tar-xjvf linux-2.6.24.4.tar.bz2rootlocalhost#cd linux-2.6.24.4 步骤3.修改Make

8、file修改内核目录树根下的的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 linu

9、x-2.6.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添加自己的分区信息,修改以后

10、如下:#define 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

11、,.name=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 board,14.2 SD卡驱动参数的配置,修改该

12、目录下的Makefile,添加如下内容: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添加如下语句:co

13、nfig DEVFS_FSbool/dev file system support(OBSOLETE)“default yconfig DEVFS_MOUNT,14.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/mtdbl

14、ock/2 ro 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

15、 Type*S3C2410 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 poi

16、nt emulation*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

17、 FlashInterface(CFI)probe Detect nonCFI AMD/JEDECcompatible,14.2 SD卡驱动参数的配置,flash chips Support for Intel/Sharp flash chips Support for AMD/Fujitsu flash chips Support for ROM chips in bus mappingMapping drivers for chip access#RJ 2410 boardCharacter devices*Nonstandard serial port support*S3C2410 R

18、TC Driver#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是cramfs,故做如下配置File systems Second extended fs support#去除对ext2的支持,14.2 SD卡驱动参数的配置,Pseudo filesystems*/proc file system support*Virtual memory file system support(former shm fs)*/dev file system support(OBSOLETE)*Automatically mount at boot(NEW)#这里会看到我们前先修改fs/

19、Kconfig的成果,devfs已经被支持上了Miscellaneous filesystems Compressed ROM file system support(cramfs)#支持cramfsNetwork File Systems NFS file system support,14.2 SD卡驱动参数的配置,步骤10.SD卡驱动移植S3c2410的SD卡驱动可以在网上下载然后修改即可,具体步骤如下:在网上找到一个补丁,下下来就好用:http:/svnweb.openmoko.org/*checkout*/branches/src/target/kernel/2.6.24.x/pat

20、ches/s3c_mci.patch?rev=4096把该文件放到linux-2.6.24.4目录下,然后使用命令:patch-p1 s3c_mci.patchpatch完成以后,在arch/arm/mach-s3c2410/mach-smdk2410.c的smdk2410_devices 数组中加入&s3c_device_sdi,不然的话启动的时候看不到probe函数的内容,即内核不会加载对应的驱动。然后,在driver/mmc/host/s3cmci.c中的s3cmci_def_pdata结构中的gpio_detect需要设置,板子上用的是EINT8,故应该是S3C2410_GPG0。到这

21、里需要修改的地方基本上就没有了。需要注意的是,make menuconfig的时候,尽量把MMC/SD Card Support下的选项全选上,不然在/dev目录下不会看到设备信息。config文件如下:,14.2 SD卡驱动参数的配置,Device Drivers-MMC/SD card support MMC debugging Allow unsafe resume(DANGEROUS)*MMC/SD Card Drivers*MMC block device driver Use bounce buffer for simple hosts SDIO UART/GPS class su

22、pport*MMC/SD Host Controller Drivers*MMC/SD over SPI(EXPERIMENTAL)Samsung S3C24xx SD/MMC Card Interface support 步骤11.编译内核rootlocalhost linux-2.6.24.4#make zImage编译完成后在arch/arm/boot下会有一个zImage,拷贝到tftpboot目录下rootlocalhost linux-2.6.24.4#cp arch/arm/boot/zImage/tftpboot/,14.2 SD卡驱动参数的配置,步骤12.制作一个文件系统去配

23、合内核2.6.24运行(1)下载busybox1.1.3软件(2)执行make menuconfig(3)在General Configuration中,选择“Support for devfs”选项,14.2 SD卡驱动参数的配置,(4)在Build Options选项中,选择使用“静态库”以及设置交叉编译工具的PREFIX。,14.2 SD卡驱动参数的配置,(5)在Linux System Utilities选项中,“Support loopback mounts”和“Support for the old/etc/mtab file”mount”umount”4个选项应该选中,14.2

24、SD卡驱动参数的配置,(6)在Init Utilities选项中,“Support reading an inittab file”应该选中,这样可以根据自己编写的inittab文件初始化;“Support running commands with a controlling-tty”应该选中,否则会提示非常困扰的“/bin/sh:cant access tty;job control turned off”的提示,尽管可以进入控制台命令行。,14.2 SD卡驱动参数的配置,(7)在Shell选项中,应该选中默认shell:ash,否则不会生成sh,导致不能解释脚本文件。,Coreutils

25、 里面的把常用的命令选上即可,14.3 制作与生成cramfs文件系统,(1)创建一个文件夹,比如rootfs,转到rootfs,执行命令mkdir bin dev etc home lib mnt proc sbin sys tmp var us建立相应的文件夹,再建立etc下的init.d文件夹。(2)准备启动所需的文件:linuxrc、rcS、inittab、fstab四个文件;linuxrc文件:#!/bin/shecho mount/etc as ramfs/bin/mount-f-t cramfs-o remount,ro/dev/bon/2/bin/mount-t ramfs r

26、amfs/var/bin/mkdir-p/var/tmp/bin/mkdir-p/var/run/bin/mkdir-p/var/log/bin/mkdir-p/var/lock,14.3 制作与生成cramfs文件系统,/bin/mkdir-p/var/empty#/bin/mount-t usbdevfs none/proc/bus/usbexec/sbin/initrcS文件:#!/bin/sh/bin/mount a这两个文件生成后,应该使其具有执行的权限,可使用chmod 775 linuxrc rcS来修改,linuxrc应该放在rootfs根目录,rcS应该放在rootfs/et

27、c/init.d/目录。inittab文件:#This is run first except when booting:sysinit:/etc/init.d/rcS,14.3 制作与生成cramfs文件系统,#Start an askfirst shell on the console#:askfirst:-/bin/bash:askfirst:-/bin/sh#Stuff to do when restarting the init process:restart:/sbin/init#Stuff to do before rebooting:ctrlaltdel:/sbin/reboo

28、t:shutdown:/bin/umount-a-rfstab文件:none/proc proc defaults 0 0none/dev/pts devpts mode=0622 0 0tmpfs/dev/shm tmpfs defaults 0 0sd/dev/sdsddefaults1791这两个文件应该放在rootfs/etc/目录,应该注意其权限问题。,14.3 制作与生成cramfs文件系统,(3)如果使用linux 2.6.xx内核,应该实现创建节点console、null。转到rootfs/dev/目录来创建:sudo mknod console c 5 1sudo mknod

29、 null c 1 3否则就会提示“Warning:unable to open an initial console.Kernel panic-not syncing:Attempted to kill init!”的类似错误(4)为了支持后面需要移植的SD卡需要建立SD卡节点:sudo mknod mmc b 179 1(5)也可以将一些常用的lib文件复制到rootfs/lib/目录下,比如:ld-2.5.so libc-2.5.so libcrypt.so.1 libgcc_s.so.1 libm.so.6 ld-linux.so.3 libcrypt-2.5.so libc.so.6

30、 libm-2.5.so等文件或符号连接,在复制时应该注意采用图形化的界面复制活打包后解包方式复制。(此步可以不做,不会影响内核的移植),14.3 制作与生成cramfs文件系统,rootlocalhost busybox-1.1.3#make TARGET_ARCH=arm CROSS=arm-linux-PREFIX=/rootfs/all install(rootfs目录要根据自己具体所建立的目录的路径而定)PREFIX指明安装路径:就是我们根文件系统所在路径。这里需要注意一点的是,只要install busybox,根文件系统下先前建好的linuxrc就会被覆盖为一同名二进制文件。所以

31、要事先备份自己的linuxrc,在安装完busybox后,将linuxrc复制回去就好。,14.3 制作与生成cramfs文件系统,转到rootfs的上一级目录,使用mkcramfs制作文件系统:mkcramfs rootfs rootfs.cramfs,SD卡实验操作把SD卡插入开发板后,在开发板中使用mount命令,具体如下:#mount/dev/mmc/mnt最后对编译好的内核文件和根文件系统进行烧写、启动SMDK2410#tftp 30008000 zImageSMDK2410#fl 40000 30008000 200000SMDK2410#tftp 30008000 rootfs.cramfsSMDK2410#fl 240000 30008000 300000如果成功的话如下所示:rootlocalhost root#minicom Please press Enter to activate this console.Starting pid 774,console/dev/console:/bin/sh,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号