随笔分类 -  Z技术(Linux/Kernel/Driver)

摘要:I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线。 因此,I2C总线被非常广泛地应用在EEPROM,实时钟,小型LCD等设备与CPU的接口中。linux下的驱动思路 在linux系统下编写I2C驱动,目前主要有两种方法,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux下I2C驱动体系结构来完成。下面比较下这两种方法: 第一种方法: 优点:思路比较直接,不需要花很多时间去了解linux中复杂的I2C子系统的操作方... 阅读全文
posted @ 2013-09-03 00:05 Leo.cheng 阅读(14037) 评论(5) 推荐(5) 编辑
摘要:linux操作系统下nand flash驱动框架 当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备。 而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。 框架如下: 1.即使nand flash是一个块设备,它也能作为一个字符设备使用,因为说到底,也只是从寄存器内部读取值而已。 2.对于不同的文件系统,会有不同的文件组织形式。 3.由于块设备的硬件操作繁琐,就像nand flash的读写操作就需要发送地址跟命令... 阅读全文
posted @ 2013-09-01 16:10 Leo.cheng 阅读(1884) 评论(0) 推荐(0) 编辑
摘要:总线设备驱动框架 总线设备驱动框架是一种类似于输入子系统的框架。 总线设备驱动,顾名思义,共有三个模块负责硬件资源的设备(device)负责处理硬件事务并且连接其他功能模块的驱动(driver)连接这两者的总线(bus)。以usb为例子展示总线设备驱动其过程分为以下步骤: 1.当加入一个设备时, 如果该设备支持中断唤醒线程,那么在中断处理程序内部就获取该设备的资源信息,然后构建device结构体,加入总线的device链表, 或者我们可以自己编写模块,在模块中填写该硬件的资源,然后构建device结构体,加入device链表。 2.对于新加入的device,通过比对driv... 阅读全文
posted @ 2013-09-01 15:57 Leo.cheng 阅读(510) 评论(0) 推荐(0) 编辑
摘要:大体上跟windows的消息处理机制差不多app所要做的事情 1.绑定信号处理函数 2.通知驱动该程序的pid,好让驱动能够通过pid返回信号 3.设置异步标志位驱动程序所要做的事情 1.添加.fasync函数 2.构造fasync_struct结构体指针,该结构体用于存放pid 3.中断处理函数内部调用kill_fasync,当中断到来的时候就会发送信号流程如下 阅读全文
posted @ 2013-09-01 15:45 Leo.cheng 阅读(491) 评论(0) 推荐(0) 编辑
摘要:input输入子系统整体流程 input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层。 在开头部分会从设备驱动层做为线索,分析输入子系统和事件处理层是如何配合的,最后从用户角度出发,从“/dev/input/*”接口如何使用输入子系统提供的服务。 既然需要详细分析,有一个这样的流程图能够帮助我们在被绕进代码的过程中,找到出口,你能够知道你现在位于代码框架的什么位置,不会忘记正在分析的代码的“身份”。 设备驱动层注册到input子系统 以S3C2440触摸屏的驱动代码代例,初始化函数定义了struct input... 阅读全文
posted @ 2013-09-01 11:48 Leo.cheng 阅读(4815) 评论(0) 推荐(0) 编辑
摘要:初识linux输入子系统 linux输入子系统(linux input subsystem)从上到下由三层实现,分别为:输入子系统事件处理层(EventHandler)、输入子系统核心层(InputCore)和输入子系统设备驱动层。设备驱动层:主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层。核心层:为设备驱动层提供了规范和接口。设备驱动层只要关心如何驱动硬件并获得硬件数据(例如按下的按键数据),然后调用核心层提供的接口,核心层会自动把数据提交给事件处理层。事件处理层:则是用户编程的接口(设备节点),并处理驱动层提交的数据处理。input输入子. 阅读全文
posted @ 2013-08-31 17:15 Leo.cheng 阅读(7505) 评论(1) 推荐(5) 编辑
摘要:list_entry定义/*** list_entry - get the struct for this entry* @ptr: the &struct list_head pointer.* @type: the type of the struct this is ... 阅读全文
posted @ 2013-07-30 12:53 Leo.cheng 阅读(837) 评论(0) 推荐(0) 编辑
摘要:安装 NFS servermystery@lcw:~$ sudo apt-get install nfs-kernel-server 编辑/etc/exports,添加目标系统的根文件系统映射目录,假如目标系统的根文件系统最后映射到/home/mystery/nfs_files,则/etc/exp... 阅读全文
posted @ 2013-07-21 16:15 Leo.cheng 阅读(2519) 评论(0) 推荐(0) 编辑
摘要:一、准备工作 首先更新software sources,找到最快的源lcw@ubuntu:~$ sudo apt-get update二、安装sambalcw@ubuntu:~$ sudo apt-get install samba smbfs samba-common smbclient三、创建... 阅读全文
posted @ 2013-07-19 16:45 Leo.cheng 阅读(1114) 评论(0) 推荐(0) 编辑
摘要:一、为什么要使用库文件 我们在实际编程中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同,实现代码也相同,也是我们所说的重复代码。比如,很多项目里都有一个用户验证的功能。 代码段如下://UserLogin.h文件,提供函数声明int IsValidUser(char* username... 阅读全文
posted @ 2013-07-03 13:08 Leo.cheng 阅读(1031) 评论(0) 推荐(2) 编辑
摘要:下面一些函数已经过时,被新的更好的函数所代替了(gcc在链接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数将在前面标上“*”号以示区别。一、进程控制fork创建一个新进程clone按指定条件创建子进程execve运行可执行文件exit中止进程_exit立即中止当前进程getdtabl... 阅读全文
posted @ 2013-07-01 17:04 Leo.cheng 阅读(864) 评论(0) 推荐(1) 编辑
摘要:库的定义 库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的。它们通常由一组互相关联的用来完成某项常见工作的函数构成,从本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 无论在Windows 平台还是Linux平台下都存在大量的库,但由于Windows... 阅读全文
posted @ 2013-06-30 15:30 Leo.cheng 阅读(1076) 评论(0) 推荐(0) 编辑
摘要:Flash存储器——》Flash存储器是近几年来发展最快的存储设备,通常也称作闪存。Flash属于EEPROM(电可擦除可编程只读存储器),是一类存取速度很高的存储器。——》它既有ROM断电可保存数据的特点,又有易于擦写的特点。Flash可以在断电的情况下长期保存信息,因此被广泛的应用在PC机的BIOS和嵌入式系统的存储设备。Linux Flash驱动结构——》Linux内核对Flash存储器有很好的支持。内核设计了一个MTD结构支持Flash设备,用户只需要按照MTD的要求设置Flash设备的参数并且提供驱动就可以让Flash设备很好的工作。MTD概述——》MTD是英文Memory Tech 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(962) 评论(0) 推荐(0) 编辑
摘要:Preface USB体系支持多种类型的设备。 在 Linux内核,所有的USB设备都使用 usb_driver结构描述。 对于不同类型的 USB设备,内核使用传统的设备驱动模型建立设备驱动描述,然后映射到 USB设备驱动,最终完成特定类型的 USB设备驱动 USB驱动·入门:http://infohacker.blog.51cto.com/6751239/1226257USB串口驱动 USB串口驱动关键是向内核注册串口设备结构,并且设置串口的操作。 下面是一个典型的USB设备驱动分析。1、驱动初始化函数 usb_serial_init()函数是一个典型的 USB设备驱动初始化函.. 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(1288) 评论(0) 推荐(0) 编辑
摘要:Preface USB是目前最流行的系统总线之一。随着计算机周围硬件的不断扩展,各种设备使用不同的总线接口,导致计算机外部总线种类繁多,管理困难。USB总线正是因此而诞生的。USB总线提供了所有外部设备的统一连接方式,并且支持热插拔,方便了厂商开发设备和用户使用设备。USB遵循原则 USB的设计目标是对现有的PC机体系进行扩充,但是目前不仅是PC机,许多的嵌入式系统都开始支持USB总线和接口标准。USB设计主要遵循下面几个原则:易于扩充外部设备:USB支持一个接口最多127个设备。灵活的传输协议: 支持同步和异步数据传输。设备兼容性好: 可以兼容不同类型的设备。接口标准统一:不同的设备之间使用 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(1658) 评论(0) 推荐(1) 编辑
摘要:1.安装tftpd(tftp服务器)、tftp(tftp客户端)以及xinetd(超级服务器)1.安装tftpd(tftp服务器)、tftp(tftp客户端)以及xinetd(超级服务器)1.安装tftpd(tftp服务器)、tftp(tftp客户端)以及xinetd(超级服务器)1.安装tftpd... 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(525) 评论(0) 推荐(0) 编辑
摘要:Preface 内核源码版本:linux-2.6.18 网卡驱动·linux内核网络分层结构:http://infohacker.blog.51cto.com/6751239/1221140DM9000芯片 DM9000是一款高度集成低功耗快速以太网处理器,该芯片集成了MAC和PHY。DM9000可以和CPU直接连接,支持8位、16位和32位数据总线宽度。该芯片支持10M和100M自适应以太网接口,内部有16K的FIFO以及4K双字节SRAM,支持全双工工作。 DM9000内部还集成了接收缓冲区,可以在接收到数据的时候把数据存放到缓冲区中,链路层可以直接把数据从缓冲区取走。网卡驱动程 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(3526) 评论(2) 推荐(1) 编辑
摘要:Preface Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。内核网络结构 在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介层的分层体系设计。 网络驱动功能层主要通过网络驱动程序实现。 在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作。 net_device结构表示网络设备在内核中的情况,也就是网络设备接口。网络设备接口既包括软件虚拟的网络设备接口,如环路设备,也... 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(756) 评论(0) 推荐(0) 编辑
摘要:Preface 虽然以前在windows上远控linux都是用的FTP+CRT,不过有些时候还是不太方便,比如不能用IDE对程序进行调试,现在就来配置下VNC,过程中出了些错误,上网查询时发现很多解决方法都没用,所以留下笔记,方便以后查阅! Virtual Network Computing(VN... 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(1047) 评论(0) 推荐(0) 编辑
摘要:Preface 前面对linux设备驱动的相应知识点进行了总结,现在进入实践阶段! 《linux设备驱动入门篇》:http://infohacker.blog.51cto.com/6751239/1218461 《linux设备驱动扫盲篇》:http://infohacker.blog.51cto.com/6751239/1218747 《fedora下的字符设备驱动开发》:http://infohacker.blog.51cto.com/6751239/1155153开发一个基本的字符设备驱动 在Linux内核驱动中,字符设备是最基本的设备驱动。字符设备包括了设备最基本的操作,如打... 阅读全文
posted @ 2013-06-27 17:40 Leo.cheng 阅读(548) 评论(0) 推荐(0) 编辑