代码改变世界

SD卡中的completion实现

2012-08-21 16:17 by 至上, 1737 阅读, 0 推荐, 收藏, 编辑
摘要: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 至上, 3565 阅读, 0 推荐, 收藏, 编辑
摘要: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 至上, 2373 阅读, 1 推荐, 收藏, 编辑
摘要:SD卡是个块设备,与字符设备的不同在于访问次序可以随机。其实,这样说吧,sd卡中存放了大量的文件,有普通文件,可执行文件,sd卡上用的文件系统。所以sd卡的驱动也就会有很大的不同,比如说没有read(),write(),但是有读写的命令,通常读写函数都注册到内核空间,用户经过系统调用就可以用,但对于sd卡,则不行,必须先通过具体的文件系统,再通过驱动中的命令实现。这样说吧,sd卡驱动的核心是请求队列,对于sd卡本身最重要的却不是驱动,而是其文件系统。为什么呢?因为文件系统决定了sd卡中文件的存储方式,文件的存储信息,以及文件的操作方法。你所写的文件要保存到sd卡中,还有你要查找文件在sd卡中. 阅读全文

关于设备号的思考

2012-08-07 11:21 by 至上, 679 阅读, 0 推荐, 收藏, 编辑
摘要:这是最后的运行流程,用户open设备节点,通过主设备号找到驱动程序,根据次设备号找到对应的设备,使用驱动函数中的read(),write()等函数操作设备。为了搭建这样的运行时环境,需要做如下工作:1 驱动程序加载(申请主设备号,在/proc/devices下创建设备)2 根据具体设备创建设备节点 (查询合适的主设备号和可用的次设备号 在/dev下面创建设备节点)先说说设备号的申请吧int register_chrdev_region(dev_t first, unsigned int -count, char*name)这个是静态申请 第一个参数是自己定义的一个32位无符号整数,第二个是要申 阅读全文

中断触发流程三(中断控制器)

2012-07-24 16:52 by 至上, 1046 阅读, 0 推荐, 收藏, 编辑
摘要:这一篇主要说说中断控制器,及GPIO中断触发与中断号的识别,为什么GPIO引脚的触发最后调用特定的中断例程,这中间是怎么联系起来的。现在知道的是request_irq只是在特定的中断号链表中注册了一个中断例程,那这个中断号哪儿来的呢?其次,GPIO引脚的专用功能是特定的,当被触发后,就会通过VIC通知CPU去读取对应的中断号信息,所以要想让GPIO引脚上的触发让cpu去调用特定的中断子程序,必须把中断服务子程序放在特定的中断号下面。VIC接收来自中断源的中断信号,并判别出所有中断信号中的优先级,按优先级次序发送给CPU。CPU通过访问VIC的中断向量寄存器可以快速跳转到中断服务程序。简单说下中 阅读全文

中断触发流程二

2012-07-24 10:16 by 至上, 935 阅读, 0 推荐, 收藏, 编辑
摘要:主要讲下两个结构体及其关系和在系统中所处的位置:每一个中断线或者叫中断向量都对应一个desc结构体,系统中所有的desc组成一个结构体数组。struct irq_desc { unsigned int irq; struct timer_rand_state *timer_rand_state; unsigned int *kstat_irqs;#ifdef CONFIG_INTR_REMAP struct irq_2_iommu *irq_2_iommu;#endif ... 阅读全文

中断触发流程

2012-07-23 20:15 by 至上, 7560 阅读, 0 推荐, 收藏, 编辑
摘要:在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(interrupt service routine ,ISP).产生中断的每个设备都有一个相应的中断处理程序,中断处理程序通常不和特定的设备关联,而是和特定的中断关联的,也就是说,如果一个设备可以 产生多种不同的中断,那么该就可以对应多个中断处理程序,相应的,该设备的驱动程序也就要准备多个这样的函数。在Linux内核中处理中断是分为上半部 (top half),和下半部(bottom half)之分的。上半部只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件,这. 阅读全文

linux设备模型与sysfs

2012-07-19 17:28 by 至上, 641 阅读, 0 推荐, 收藏, 编辑
摘要:linux建立设备模型的目的:这事2.6内核版本引入的一种设备管理机制,同时出现的还有sysfs文件系统(他完全表现向用户呈现了内核中设备的层次结构,也有人说之为设备模型的副产物),具体的为什么要引入设备模型呢?为内核建立一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。好吧,这句话并不是很好懂。这样说吧,跟以前比,引入他有什么好处呢?1 电源管理,根据设备的层次关系,当系统进入睡眠的时候,不需要一个一个设备的关,只需要关一个总线设备,接在总线下的设备就都会关掉。2 sysfs 虚拟文件系统的实现与设备模型的紧密相关, 并向外界展示它所表述的结构。向用户空间提供系统信息、改变操作参数的 阅读全文

lcd驱动解析(二)

2012-07-12 16:18 by 至上, 556 阅读, 0 推荐, 收藏, 编辑
摘要:init部分主要完成的任务是:屏的初始化,显示的初始化,最后打开lcd,背光,等待图片数据输入,然后输出。(产生fbinfo结构体给fbmem.c使用)用户操作的流程包括:ioctl控制图片的显示属性(读取初始化时的配置或者使用bsp操作寄存器改变显示设置)和显示图片的数据源。(概括说就是控制和数据两条线)这一节主要分析init部分,就是属于***fb.c文件的函数。 驱动程序绑定由内核自动执行,当内核发现一个驱动程序与一个设备匹配时,将调用驱动程序的probe函数,完成对设备的探测及初始化等工作。device与driver是用名字搭配的,其实注册并部分先后,device注册时会去找drive 阅读全文

lcd驱动解析(一)

2012-07-10 13:22 by 至上, 869 阅读, 0 推荐, 收藏, 编辑
摘要:硬件执行流程1硬件执行流程2这两幅图的差别在于mix的位置,mix的功能包括alpha blending,color-key,图层处理等。流程1,这些工作是有软件完成的,流程2是由硬件完成的。这个网上找个图啊,不过lcd驱动基本都是这样的架构。fbmem.c是已经实现的,×××fb.c是需要我们自己实现的,这关系到具体的lcd屏。首先,lcd驱动的初始化分为3个部分,1 lcd设备的注册platform_add_devices(devices, ARRAY_SIZE(devices));2 lcd系统自带驱动的注册(fbmem.c)register_chrdev( 阅读全文