11 2012 档案
摘要:首先来了解新的字符设备驱动注册方式。 对于Linux字符设备驱动注册方式 2.4及其之前的内核: register_chrdev(0,"hello",hello_fops); 该函数所注册的字符设备是以主设备号为单位的,一个主设备号只能对应一个fops,只能支持256个驱动 2.4以后的内核 : a
阅读全文
摘要:本驱动基于linux2.6.32.2 i2c遵循的也是总线设备驱动框架,具体流程如下: 当加入驱动(driver)时: i2c_add_driver //进行驱动注册 i2c_register_driver(THIS_MODULE, driver); driver_register(&driver-
阅读全文
摘要:IIC 即 inter-integrated-circuit,又称 I2C 一种总线结构,具体接受请度娘。 I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。 以下为m
阅读全文
摘要:说到网络,对于学过计算机网络的人来说,大概会先想到网络5层协议,但是由于一般的操作系统都集成了网络协议模块,所以网卡驱动模块跟协议模块的关系其实是微乎其微的,硬要说是在协议中的哪一部分的话,应该是在物理层,网卡驱动就是连接物理层跟其它上层协议的模块。 网卡驱动的主要功能有: 1.接收硬件传来的数据,
阅读全文
摘要:首先,nor flash驱动作为块设备驱动,大部分的流程跟nand flash一样,只是最底层的硬件操作层跟协议层有区别, 代码如下 不过Linux的nor驱动一般使用总线设备驱动框架,在probe函数内部进行芯片识别(do_map_probe)跟分区(add_mtd_partitions). 最后
阅读全文
摘要:当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备。 而我们写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。 框架如下: 1.即使
阅读全文
摘要:总线设备驱动框架是一种类似于输入子系统的框架。 总线设备驱动,顾名思义,共有三个模块,负责硬件资源的设备(device),负责处理硬件事务并且连接其他功能模块的驱动(driver),还有就是连接这两者的总线(bus)。 上图以usb为例子展示了总线设备驱动,其过程分为以下步骤: 1.当加入一个设备时
阅读全文
摘要:平台:S3C2440 触摸屏的硬件相关模块其实有两个: 一个是触摸屏本身,当然就是用于触摸响应。当被触摸屏被按下的时候产生电信号,当按下被松开的时候又产生电信号。 另外一个就是adc,也就是模数转换模块。当触摸屏被按下的时候会产生电信号(电压)而我们需要通过该电压得到触摸屏按下的位置,因此需要利用a
阅读全文
摘要:今天发现了个问题 写驱动的时候写错了个驱动出口(module_exit给拼错了),结果导致加载驱动成功,确无法卸载: rmmod的时候显示can't unload 'xxx': Device or resource busy 然后用lsmod查看了下,发现驱动多了个属性: xxx 1816 0 [p
阅读全文
摘要:Linux输入子系统源文件入口在drivers/input/input.c目录下 输入子系统分为两层: 1.核心层: 主要功能 注册主设备号 对于swi进入的open函数进行第一层处理,并通过次设备号选择handler进入第二层open,也就是真正的open所在的file_operation,并返回
阅读全文
摘要:大体上跟windows的消息处理机制差不多 app所要做的事情 1.绑定信号处理函数 2.通知驱动该程序的pid,好让驱动能够通过pid返回信号 3.设置异步标志位 驱动程序所要做的事情: 1.添加.fasync函数 2.构造fasync_struct结构体指针,该结构体用于存放pid 3.中断处理
阅读全文
摘要:分析转自韦东山: 所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。 一、内核框架: 对于系统调用poll或se
阅读全文
摘要:驱动代码: 测试代码: 流程如下:
阅读全文
摘要:内核版本:2.6.32.2 错误: error:implicit declaration of function 'request_irq' error:implicit declaration of function 'free_irq' 解决方法: #include <linux/interru
阅读全文
摘要:加载完内核后开始加载文件系统 结果出现以下错误 Root-NFS: Server returned error -13 while mounting 解决方法是添加可被外界挂载的目录,如:/nfs 先进虚拟机的Linux /etc文件夹内 修改exports文件: 在结尾添加 /nfs *(rw,s
阅读全文