文章分类 -  Linux 内核

摘要:开发板自带的LCD驱动是基于platform总线写的,所以如果要使其它的LCD能够在自己的开发板上跑起来,那么就先了解platform驱动的架构,下面简单记录下自己看platform驱动时体会,简单的说platform是一种虚拟总线,那么它也是一条总线,所以它分为3个部分,platform_bus,platform_device,platform_driver。在platform_device向platform_bus注册设备,platform_driver向platform_bus注册驱动,注册后在platform_bus中会有一条device链表和driver链表,platform_bu. 阅读全文
posted @ 2013-04-05 22:28 lsx_007 阅读(684) 评论(0) 推荐(0)
摘要:1. 背景知识 在多媒体的推动下,彩色LCD越来越多地应用到嵌入式系统中,PDA和手机等大多都采用LCD作为显示器材,因此学习LCD的应用很有实际意义! LCD工作的硬件需求:要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。TQ2440是采用了S3C2440,S3C2410通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 ... 阅读全文
posted @ 2013-04-04 22:00 lsx_007 阅读(2254) 评论(0) 推荐(1)
摘要:前面两篇是记录linux设备模型的框架及底层实现,从整体上有了一个把握。在第二篇中记录了linux设备模型最底层实现的方法,说的简单点linux设备模型就是要把驱动和设备都串起来,对系统有一个一般性的描述,然后内核对这个统一的设备模型进行统一管理。而实现让内核获得系统整体配置信息的数据结构就是kobect和kset,所有的驱动和设备都包含kobject 和 kset,也就是kobject 和 kset 是父类。因此,内核就获得了系统所有设备和驱动的配置信息,内核在关机时就能够以正确的顺序遍历所有的设备。(在设备处于忙碌的状态时,如果突然关机会造成数据的丢失,当系统要关机时,首先遍历所有设备,. 阅读全文
posted @ 2013-03-30 22:37 lsx_007 阅读(346) 评论(0) 推荐(0)
摘要:如果将linux设备模型比喻一座大厦,那么kobject 和 kset就是构成这座大厦内部的钢筋,由若干他们构成了大厦的内在表现形式,设备驱动模型中bus,device和driver 已经是大厦想外界展示的那部分,属于外在表现形式了。在我们写驱动的时候与我们打交道的是bus,device和driver,基本上不用去管更底层的东西,那些内核都帮我们做好了。但是,如果要灵活的使用linux设备模型,应该了解内核实现设备模型的流程。在这个过程中,自己也没有细入分析各个步骤,因为在我看来linux设备模型是一个复杂的系统,设计的数据结构也不是一时能够弄懂,在学习的阶段,实在是没有必要花太多时间在这上. 阅读全文
posted @ 2013-03-28 20:45 lsx_007 阅读(224) 评论(0) 推荐(0)
摘要:随着linux系统越来越成熟,与设备驱动相关的一些新的特性需要加入,而之前独立的设备及其驱动程序能有效地沟通起来,linux2.6内核最初为了应付电源管理的需要,提出了一个设备模型来管理所有的设备。在物理上,外设之间是有一种层次的关系,例如把一个U盘插在电脑的usb接口,实际上这个U盘是挂在usb hub上,usb hub又是连接在usb2.0 Host control上,usb2.0 Host最终挂在PCI Bus总线上。这个设备的物理层次关系如下:PCI –>usb2.0 Host control –>usb hub –>usb disk 。假设,电脑一段时间没有任何操作 阅读全文
posted @ 2013-03-28 20:12 lsx_007 阅读(250) 评论(0) 推荐(0)
摘要:看一个驱动程序的时候一般是从入口函数开始看,输入子系统的核心实现函数是 input.c,入口函数是input_init(),因此要分析输入子系统那么就从input_init()函数开始,input_init()代码如下: static int __init input_init(void){ int err; //创建一个类input_class err = class_register(&input_class); if (err) { printk(KERN_ERR "input: unable to register input_dev class\n"); 阅读全文
posted @ 2013-03-22 16:38 lsx_007 阅读(310) 评论(0) 推荐(0)
摘要:1. 输入子系统数据机构分析 分析输入子系统,我是从输入子系统中的数据结构关系以及连接设备驱动层和事件处理层分析的,如果了解了输入子系统的数据结构关系和输入子系统预留给我们的编程接口,那么基本上掌握了输入子系统了。下面是输入子系统的系统数据结构图: 由上图可知,input子系统分为3层,最上一层是event handler,中间层是Input core,底层是input driver。input driver把event report到input core层,input core对event进行分发,传到 event handler,相应的event handler层把event 放到ev.. 阅读全文
posted @ 2013-03-20 21:34 lsx_007 阅读(405) 评论(0) 推荐(0)
摘要:1. 引入输入子系统的目的 输入设备的驱动程序如果按照一般字符设备驱动的写法,那么这些驱动就没办法用在别人写的应用程序上。这是因为其它人不会去打开这个设备文件也有可能不知道这个设备文件的命名,其它人有可能打开线程或者是直接使用scanf获得输入。这样驱动程序可以自己使用或者是公司内部使用,别人是无法使用,除非你告诉它怎么使用你的驱动,但是这样,那个应用程序就不是通用的,这个应用程序就没法在别的单板上运行。既然这样,那么如何写出一个通用的驱动程序,别人的应用程序可以无缝的移植到单板上呢? 这就是linux2.6 引入输入子系统的目的,我们可以使用现成的驱动(input system),然后把自己 阅读全文
posted @ 2013-03-18 21:46 lsx_007 阅读(407) 评论(0) 推荐(0)
摘要:陈工程师一直做Linux的嵌入式开发,作为在开发一线的工程师,他对很多问题的看法可能更切合实际需求,于是,通过邮件,就嵌入式开发方面的问题,请他谈了一下自己的看法: 问:关于嵌入式开发,我们准备给同学们讲解一些入门知识,从你一线开发经验来说,给我们一些建议: 陈工回答: 对于嵌入式Linux入门,如果有一定基础,可以从驱动开始;如果没有基础,我个人建议还是从应用程序开始。因为从应用程序开始是最容易的,也是 最直观的。而驱动程序运行在内核态,驱动本身的结构就比较复杂,如果要彻底弄明白驱动的运行机制,必定牵涉内核,对于高年级的学生恐怕问题会少一些,而 对于低年级的学生,问题估计较多。我曾经遇到过一 阅读全文
posted @ 2012-12-09 13:51 lsx_007 阅读(252) 评论(0) 推荐(0)