动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 操作系统 > Linux教程
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Linux教程 ]的信息



本月文章推荐
.RedHat 6.2 中文 TrueType 字体的.
.SUSE Linux Desktop Gnome桌面快.
.Linux 网管 123 --- 第6章. 一般.
.Linux + NT OS Loader mini-HOWTO.
.学习园地:了解Linux下Fdisk的基.
.Linux 指令篇:日期时间排程--at.
.认识Linux操作系统下三大便利开源.
.设置和修改X-Window的显示模式.
.微软和Novell公司携手研发Linux管.
.一个Linux爱好者的2.6.11内核编译.
.Linux系统日志记录到远程服务器简.
.Linux系统下的PDF好帮手 LinuxPD.
.Linux操作系统下文件系统的比较和.
.Linux系统下Wine成功运行Bitcome.
.Linux系统中找出并解决程序错误方.
.Linux系统开防火墙时自动开启相对.
.可以实现故障预防 探测和恢复的M.
.新手学堂:sys-unconfig命令的执.
.BrainShare 2008 全球技术大会登.
.新手看招:RHEL5系统下配置YUM源.

实用技巧:Linux2.6.18 SD卡驱动的修正

发表日期:2008-3-10 |


 

platform: s3c2440 + linux 2.6.18

在linux2.6.18 中,sd卡的驱动有不少的bug.例如,没有写保护的功能.

在驱动的模块中预留了写保护的函数,但是没有实现,代码也只有几行,只要加上去编译一下就OK了.

static struct mmc_host_ops s3c2410sdi_ops = {
.request = s3c2410sdi_request,
.set_ios = s3c2410sdi_set_ios,
.get_ro = s3c2440_get_ro, //sd card ReadOnly Flag.

};

实现函数如下:

static int s3c2440_get_ro(struct mmc_host *mmc)
{
struct s3c2410sdi_host *host = mmc_priv(mmc);

unsigned long flags;
int present;

spin_lock_irqsave(&host->complete_lock, flags);

present = read_gpio_bit(S3C2410_GPB0); 
present &= 0x01;
spin_unlock_irqrestore(&host->complete_lock, flags);

return present;
}

还有一些就是热插拔的和中断检测口,只要设置一下就可以用了.

比较麻烦的是对SD卡写操作,只要写稍微大点的文件到SD卡就会出错,打印出如下信息:

[IRQ] csta=00000a19 dsta=00000002 fsta=00002200 dcnt=00008000

[IRQ] csta=00000a19 dsta=00000002 fsta=00002200 dcnt=00007000

[IRQ] csta=00000a19 dsta=00000002 fsta=00002200 dcnt=00007000

[IRQ] csta=00000a19 dsta=00000002 fsta=00002200 dcnt=00007000

对比正常传送打印出来的信息,很明显程序是在这里挂掉了.

后来跟踪代码发现,当写一个 4096(512*8)的数据时,只写了第一个512byte就不往下写了,所以dcnt一直为 7000,出现这个现象的原因是因为程序对 host->pio_words 这个变量赋的值为128,通过 host->pio_words-- 递减到0时就不进入

while(sdi_fsta & S3C2410_SDIFSTA_TFDET && host->pio_words)这个循环了,

所以 host->pio_words=sdi_bsize>>2; 这一行应改为

host->pio_words = mrq->data->blocks * (sdi_bsize>>2);

这样对SD卡的写操作就解决了.但写的速度不是很快.

还有一个问题,比如 cp 一个文件到SD卡上,是不是首先先将这个文件写到SDRAM上,然后umount的时候再将SDRAM中的内容真正写SD卡上??我umount的时候会过多一会才出现终端的提示符,根据写入文件的大小确定 umount的时间?

后来查了一下资料,Linux文件系统更新是一个复杂的过程,当用户程序对文件系统进行修改以后,例如进行了写操作,文件数据把修改记录在内核缓冲中,在数据没有写到磁盘的时候,依然能够执行用户进程,所有数据的改变都在inode的内容中得到反映。磁盘的数据更新实际上是异步进行的,很有可能在写操作已经完成很长时间以后才真正对磁盘的数据进行更新。sync命令强制把磁盘缓冲的所有数据写入磁盘,如果在没有把磁盘缓冲区的信息写入磁盘之前终止系统,则磁盘的文件系统就会处在一个不稳定的状态。而在正常模式下即使没有对分区进行umount的操作,在重启之前系统会调用sync命令强制把磁盘缓冲的所有数据写入磁盘,而在急救模式下必须对所挂的分区进行umount的操作,系统才会调用sync命令强制把磁盘缓冲的所有数据写入磁盘,请在急救模式下的朋友注意这个问题。其实“reboot -n(Don’t sync before reboot or halt)”在重启之前不用sync命令强制把磁盘缓冲的所有数据写入磁盘,就很能说明问题。

所以要 cp 完之后要执行 sync 命令将缓冲区的内容写到磁盘中,然后再umount 就不会出现延时了.

s3c2440 SD卡(for LINUX)驱动代码下载地址:

http://handhelds.org/cgi-bin/cvsweb.cgi/linux/kernel26/drivers/mmc/s3c2440mci.c

上一篇:Linux configure关于交叉编译的参数设置 人气:618
下一篇:学习园地:Linux操作系统的内存管理指南 人气:760
浏览全部Linux的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-25 WikyBlog v1.7.0.1 多国语言版
2008-7-25 乐彼网上开店系统(56770 Eshop)
2008-7-25 赛特网站管理系统sitecms v3.6.0
2008-7-25 Modoer多功能点评系统 v1.0.1 Bu
2008-7-25 Shangducms Teamsuit! v1.1.0 开
2008-7-25 幻影动漫网视频系统(Ppdong) v1.
2008-7-25 acteecompany企业网站建设系统 v
2008-7-25 恒浪整合管理系统 ims v4.1 ACCE
2008-7-25 艺术图库系统 v1.0 beta
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵