随笔分类 - 嵌入式
摘要:开启XY坐标转换,并上报 触摸屏驱动文件在/drivers/input/touchscreen/s3c2410_ts.c
阅读全文
摘要:触摸屏驱动分析 初始化 1.使能ADC时钟 2.将物理地址转化为虚拟地址 3.让触摸屏进入等待中断模式 4.分配输入设备结构 5.设置可能上报的事件类型和按键类型 6.为TC和ADC中断注册处理函数 7.注册输入型设备 按下处理 1.判断按下或弹起 2.如果是按下情况,那么启动XY坐标的AD转换
阅读全文
摘要:输入子系统核心架构 1.设备驱动层 2.核心层 3.事件层 4.用户空间 输入设备注册 1.拿设备ID去匹配handler的ID,找到对应的handler(事件处理者) 最常用的handler是evdev_handler,相应的匹配表在evdev_ids中。如果设备的ID在事件驱动的ID表中,那么两
阅读全文
摘要:为什么需要输入子系统 在Linux系统中按键属于输入型设备,同样的把按键换成鼠标、键盘等输入型设备,它们的注册和操作方法都是类似的,不同的是在中断处理中对硬件的操作。输入子系统就是把和输入设备有共性的部分提取出来,而把不同的部分让程序员来实现。 输入子系统模型 1.input device driv
阅读全文
摘要:DM9000数据发送 DM9000数据发送函数是在/drivers/net/dm9000.c中的dm9000_start_xmit函数 static int dm9000_start_xmit(struct sk_buff *skb, struct net_device *dev){ //发送数据长
阅读全文
摘要:网卡初始化 1.分配描述结构,alloc_etherdev 2.获取平台资源,platform_get_resource 2.1.在s3c_dm9k_resource中有相关的资源 2.2.add地址由CS4和ADD2决定,是20000000 2.3.dat地址由CS4和ADD2决定,是200000
阅读全文
摘要:网络发包模型 1.选择路由 2.交给邻居子系统(路由中紧挨着发送方的网关)。如果没有邻居信息,那么由Linux中的邻居子系统来建立邻居信息。 发送数据过程 //系统调用层和协议无关层 1.发送入口sock_aio_write 2.调用do_sock_write 3.调用__sock_sendmsg
阅读全文
摘要:回环网卡(loop) 回环网卡的Tx通道和Rx通道是直连的,所以数据直接发送到接收端口。 编写回环网卡驱动 回环网卡驱动在/driver/net/loopback.c #include <linux/kernel.h> #include <linux/jiffies.h> #include <lin
阅读全文
摘要:Linux网络子系统 1.系统调用接口:提供系统调用 2.协议无关接口:统一网络协议给系统调用接口使用 3.网络协议栈 :实现网络协议 4.设备无关接口:统一设备驱动程序给网络协议使用 5.设备驱动程序:实现网卡驱动 Linux驱动在内核中都有一个结构来描述,首先找到设备描述结构,然后找到设备如何注
阅读全文
摘要:如何开发Linux驱动程序 一般情况下都会有现成的驱动程序,不需要从零开始开发驱动程序。所以Linux驱动开发主要分为两个步骤:1.读得懂驱动程序;2.写的了核心功能。 发送中断处理程序 发送中断处理函数在/drivers/serial/samsung.c的s3c24xx_serial_tx_cha
阅读全文
摘要:tty数据接收流程 //tty子系统 1.tty_fops中的tty_read响应系统调用 2.tty_read调用tty_ldisc_N_TTY中的n_tty_read n_tty_read 1.设置app的状态 2.如果没有数据可读,让阻塞生效 3.如果有数据可读,从read_buf中读走数据
阅读全文
摘要:tty数据发送流程 //tty子系统 1.file_operation中找到tty_write 2.tty_write找到线路规程中的n_tty_write 3.n_tty_write找到uart_ops中的uart_write //串口驱动 4.uart_write找到s3c24xx_serial
阅读全文
摘要:用户程序调用open系统调用后,怎么传递到驱动程序 //tty子系统 1.tty_fops里面的tty_open是串口驱动对系统调用的响应入口 2.tty_open调用uart_ops里面的uart_open 3.uart_open找到了uart_start //串口驱动 4.uart_start找
阅读全文
摘要:串口驱动结构 1.初始化设备 2.打开设备 3.读取数据 4.写入数据 串口驱动在内核的/drivers/serial/下的samsung.c和s3c2440.c 串口驱动中重要的数据结构 file_operations tty_fops.write = tty_write tty_ldisc_op
阅读全文
摘要:tty概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1.串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串口端口都看作是一个字符设备。这些串口设备所对应的设备名称是/dev/ttySAC0,/d
阅读全文
摘要:平台总线概述 平台总线(Platform bus)是Linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。这条总线由系统创建,不需要用户再去创建平台总线。 通过平台总线机制开发设备驱动的流程如下: 1.定义platform_device
阅读全文
摘要:总线模型 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求越来越高,2.4内核已经难以满足这些需求。为了适应这种形势的需要,从Linux2.6内核开始提供了全新的设备驱动模型。 总线驱动设备模型 这个模型首先有一条总线,然后是总线上挂载有很多驱动。当有设备插到总线上的时候
阅读全文
摘要:阻塞的必要性 当一个设备无法立刻满足用户的读写请求时应当如何处理?例如,调用read时,设备没有数据提供,但以后可能会有;或者一个进程试图向设备写入数据,但是设备暂时没有准备好接收数据。当上述情况发生的时候,驱动程序应当(缺省地)阻塞进程,使它进入等待(睡眠状态),直到请求可以得到满足。 内核等待队
阅读全文
摘要:keydev.c /******************************************************************** *头文件 ******************************************************************
阅读全文
摘要:按键抖动 按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开。因而在闭合及断开的瞬间总伴随有一连串的抖动。 按键去抖动的方法主要有两种,一种是硬件电路去抖;另一种就是软件延时去抖。而延时去抖一般又分为两种,一种是for循环等待,另一种是定时器延
阅读全文