




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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月共同开发研制。最大的特点就是通过加密功能,保证数据资料的安全保密,有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到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),最高传输速率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概述,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:响应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 数据传送线 sdcmd 命令线和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 20000 注意:上述命令的含义是把目标板上地址为0x30008000的内容传送到flash 的0 地址,也就是ppcboot 的起始地址, 20000表示是要烧写的ppcboot的大小,单位为字节。 步骤2.下载linux内核2.6.24. /pub/linux/kernel/v2.6/linux-.tar.bz2,14.2 sd卡驱动参数的配置,下载后解压内核 rootlocalhost # tar -xjvf linux-.tar.bz2 rootlocalhost #cd linux- 步骤3. 修改makefile 修改内核目录树根下的的makefile,指明交叉编译器 rootlocalhost linux-# vi makefile 第193行改找到arch和cross_compile,修改为 arch ?= arm cross_compile ?= arm-linux- 然后设置你的path环境变量,使其可以找到你的交叉编译工具链 rootlocalhost linux-# echo $path /usr/local/arm/3.4.1/bin:/usr/local/arm/3.4.1/bin: 步骤4. 复制编译配置文件到linux-下面 rootlocalhost linux-#cp arch/arm/configs/s3c2410_defconfig .config,14.2 sd卡驱动参数的配置,步骤5. 修改flash分区 rootlocalhost linux-# cd drivers/mtd/maps/ rootlocalhost maps# cp cfi_flagadm.c s3c2410.c rootlocalhost maps# vi s3c2410.c 将flash_phys_addr和flash_size这两个宏分别修改成自己板子的flash起始地址和大小。然后修改结构体数组flagadm_parts添加自己的分区信息,修改以后如下: #define flash_phys_addr 0x01000000 #define flash_size 0x01600000 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 = 0x040000, .offset = 0x0 , .name = “kernel“, .size = 0x0200000, .offset = 0x040000 , .name = “cramfs“, .size = 0x300000, .offset = 0x240000 ,14.2 sd卡驱动参数的配置, .name = “ramdisk“, .size = 0x2c0000, .offset = 0x540000 , .name = “jffs2“, .size = 0x700000, .offset = 0x800000 ; 接下来告诉内核使用该驱动程序。修改maps目录下的kconfig文 件,该文件决定出现在menuconfig中的项目,在config mtd_cdb89712之后添加 config mtd_s3c2410 tristate “rj 2410 board“,14.2 sd卡驱动参数的配置,修改该目录下的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-#vi fs/kconfig 找到menu “pseudo filesystems“ 添加如下语句: config devfs_fs bool “/dev file system support (obsolete)“ default y config devfs_mount,14.2 sd卡驱动参数的配置,bool “automatically mount at boot“ default y depends on devfs_fs 步骤7. 为了方便直接在内存中调试内核,将arch/arm/kernel/setup.c文件中的parse_tag_cmdline()函数中的strlcpy()函数注释掉,这样就可以使用默认的config_cmdline了,在.config文件中它被定义为: “root=/dev/mtdblock/2 ro init=/bin/sh console=ttysac0,115200”。 步骤8. 配置内核 上面已经复制了一个编译配置文件到linux-下面 (cp arch/arm/configs/s3c2410_defconfig .config)以这个为模板增删一些配置即可:,14.2 sd卡驱动参数的配置,rootlocalhost linux-#make menuconfig loadable module support * enable loadable module support * automatic kernel module loading system type * s3c2410 dma support boot 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 emulation * nwfpe math emulation this 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 flash interface (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 mapping mapping drivers for chip access # rj 2410 board character devices * nonstandard serial port support * s3c2410 rtc 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/kconfig的成果,devfs已经被支持上了 miscellaneous filesystems compressed rom file system support (cramfs) #支持cramfs network file systems nfs file system support,14.2 sd卡驱动参数的配置,步骤10. sd卡驱动移植 s3c2410的sd卡驱动可以在网上下载然后修改即可,具体步骤如下: 在网上找到一个补丁,下下来就好用: /*checkout*/branches/src/target/kernel/2.6.24.x/patches/s3c_mci.patch?rev=4096 把该文件放到linux-目录下,然后使用命令: patch -p1 s3c_mci.patch patch完成以后,在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。到这里需要修改的地方基本上就没有了。 需要注意的是,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 support * mmc/sd host controller drivers * mmc/sd over spi (experimental) samsung s3c24xx sd/mmc card interface support 步骤11.编译内核 rootlocalhost linux-# make zimage 编译完成后在arch/arm/boot下会有一个zimage,拷贝到tftpboot目录下 rootlocalhost linux-#cp arch/arm/boot/zimage /tftpboot/,14.2 sd卡驱动参数的配置,步骤12.制作一个文件系统去配合内核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 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 里面的把常用的命令选上即可,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/sh echo “mount /etc as ramfs“ /bin/mount -f -t cramfs -o remount,ro /dev/bon/2 / /bin/mount -t ramfs ramfs /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/usb exec /sbin/init rcs文件: #!/bin/sh /bin/mount a 这两个文件生成后,应该使其具有执行的权限,可使用chmod 775 linuxrc rcs来修改,linuxrc应该放在rootfs根目录,rcs应该放在rootfs/etc/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/reboot :shutdown:/bin/umount -a -r fstab文件: none /proc proc defaults 0 0 none /dev/pts devpts mode=0622 0 0 tmpfs /dev/shm tmpfs defaults 0 0 sd /dev/sd sd defaults 179 1 这两个文件应该放在rootfs/etc/目录,应该注意其权限问题。,14.3 制作与生成cramfs文件系统,(3)如果使用linux 2.6.xx内核,应该实现创建节点console、null。转到rootfs/dev/目录来创建: sudo mknod console c 5 1 sudo mknod null c 1 3 否则就会提示“warning: unable to open an initial console. kernel panic - not syncing: attempted to kill init!”的类似错误 (4)为了支持后面需要移植的sd卡需要建立sd卡节点: sudo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论