摘要:
写这篇博客呢,分析下字符设备与块设备open read的相同点和不同点。 大家都知道在linux系统中设备都是按照文件来管理的,用户需要操作也是使用操作文件的思想。这里的文件是普通文件,就是存储在块设备中的普通文件(.c .txt),所以他们的第一个不同点就是,对于块设备没有read或者write的操作,原因是你需要操作的知识块设备中的一个文件,比如说sd卡中存放了n多的文件,你一次只会操作一个文件,所以你应该读你想要的文件而不是整个块设备,所以在块设备驱动中没有read函数实现,你需要使用的read函数都在块设备文件系统中实现了,比如ext2,fat32等。虽然最终向块设备发送命令是由驱动完 阅读全文
随笔档案-2012年08月
SD卡中的completion实现
2012-08-21 16:17 by 至上, 1765 阅读, 收藏,
摘要:
Linux系统提供了一种比信号量更好的同步机制,即completion,它用于一个执行单元等待另一个执行单元执行完某事。 Linux系统中与completion相关的操作主要有以下4种: (1) 定义completion struct completion my_completion; (2) 初始化completion init_completion(&my_completion); 对my_completion的定义和初始化可以通过如下快捷方式实现 DECLEARE_COMPLETION(my_co... 阅读全文
SD卡驱动分析(二)
2012-08-20 16:35 by 至上, 3606 阅读, 收藏,
摘要:
card是驱动层 core是核心层 host是主控制器层硬件初始化及注册是从host开始的:系统启动的时候就会在平台总线上注册设备与驱动,但这不是sd卡的,只是其主控制器的:static struct resource sep0611_mmc_resources[] = { [0] = { .start = SDIO1_BASE_V, .end = SDIO1_BASE_V + 0xFFF, .flags = IORESOURCE_MEM, }, [1]... 阅读全文
SD卡驱动分析(一)
2012-08-16 16:07 by 至上, 2458 阅读, 收藏,
摘要:
SD卡是个块设备,与字符设备的不同在于访问次序可以随机。其实,这样说吧,sd卡中存放了大量的文件,有普通文件,可执行文件,sd卡上用的文件系统。所以sd卡的驱动也就会有很大的不同,比如说没有read(),write(),但是有读写的命令,通常读写函数都注册到内核空间,用户经过系统调用就可以用,但对于sd卡,则不行,必须先通过具体的文件系统,再通过驱动中的命令实现。这样说吧,sd卡驱动的核心是请求队列,对于sd卡本身最重要的却不是驱动,而是其文件系统。为什么呢?因为文件系统决定了sd卡中文件的存储方式,文件的存储信息,以及文件的操作方法。你所写的文件要保存到sd卡中,还有你要查找文件在sd卡中. 阅读全文
关于设备号的思考
2012-08-07 11:21 by 至上, 697 阅读, 收藏,
摘要:
这是最后的运行流程,用户open设备节点,通过主设备号找到驱动程序,根据次设备号找到对应的设备,使用驱动函数中的read(),write()等函数操作设备。为了搭建这样的运行时环境,需要做如下工作:1 驱动程序加载(申请主设备号,在/proc/devices下创建设备)2 根据具体设备创建设备节点 (查询合适的主设备号和可用的次设备号 在/dev下面创建设备节点)先说说设备号的申请吧int register_chrdev_region(dev_t first, unsigned int -count, char*name)这个是静态申请 第一个参数是自己定义的一个32位无符号整数,第二个是要申 阅读全文
浙公网安备 33010602011771号