随笔分类 -  linux驱动

驱动程序分层分离概念--总线驱动设备模型
摘要:一、示意图 App-------------------------------------------------- input.c-------------------------------------------------- / \ / \ / 分离 \button.c evdev.c硬件相关 纯软件(稳定)-----------------------------------------------bus_drv_dev模型 bus drv链表 1.把device放入bus的dev链表 device_add... 阅读全文

posted @ 2013-10-27 21:59 屁屁侠 阅读(1713) 评论(0) 推荐(2)

USB设备驱动程序学习笔记(二)
摘要:一、usbmouse_as_key.c/** drivers\hid\usbhid\usbmouse.c*/#include #include #include #include #include #include static struct input_dev *uk_dev;static char *usb_buf;static dma_addr_t usb_buf_phys;static int len;static struct urb *uk_urb;static struct usb_device_id usbmouse_as_key_id_table [] = { { USB_I 阅读全文

posted @ 2013-10-27 12:07 屁屁侠 阅读(825) 评论(0) 推荐(0)

USB设备驱动程序学习笔记(一)
摘要:现象:把USB设备接到PC1. 右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序问1. 既然还没有"驱动程序",为何能知道是"android phone"答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone" 提示你安装的是"设备驱动程序" USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序问2. USB设备种类非常多,为什么一接入电脑,就能识别 阅读全文

posted @ 2013-10-26 17:58 屁屁侠 阅读(3114) 评论(0) 推荐(0)

网卡驱动程序之编写虚拟网卡(二)
摘要:一、virt_net.c/* * 参考 drivers\net\cs89x0.c */#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static struct net_device *vnet_dev;static void emulator_rx_packet(st 阅读全文

posted @ 2013-10-20 10:20 屁屁侠 阅读(1365) 评论(0) 推荐(0)

网卡驱动程序之框架(一)
摘要:一、网卡驱动程序框架:app: socket-------------------------------------------------- --------------- --------------- 若干层网络协议--纯软件 --------------- ---------------hard_start_xmit|| /\ \/ || netif_rx sk_buff --------------- 硬件相关的驱动程序(要提供hard_start_xmit, 有数据时要用netif_rx上报) ------------------------------------------. 阅读全文

posted @ 2013-10-19 12:25 屁屁侠 阅读(946) 评论(0) 推荐(0)

NOR FLASH驱动程序
摘要:NOR NAND接口: RAM-Like,引脚多 引脚少,复用容量: 小 1M 2M 3M 大:128M 256M G读: 简单 复杂写: 发出特定命令 慢 发出特定命令 快价格: 贵 便宜特点: 无位反转、坏块 位反转、坏块 关键重要的程序 大数据、容忍可以出错的程序xip 可以 不可以(execute in place)-----------------------------------------------------------(555... 阅读全文

posted @ 2013-10-19 11:07 屁屁侠 阅读(2021) 评论(0) 推荐(0)

NAND FLASH驱动程序
摘要:NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址,问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令 怎么传入命令?答2.在DATA0~DATA7上既传输数据,又传输地址,也传输命令 当ALE为高电平时传输的是地址, 当CLE为高电平时传输的是命令 当ALE和CLE都为低电平时传输的是数据问3. 数据线既接到NAND FLAS 阅读全文

posted @ 2013-10-17 09:13 屁屁侠 阅读(1009) 评论(0) 推荐(0)

块设备驱动程序
摘要:1.字符设备驱动程序App : open read write驱动:drv_open drv_read drv_write硬件:0>确定主设备号1>file_operations .open .read .write2>register_chrdev(主,name, 主设备号)3>入口:4>出口:1>查询方式2>休眠-唤醒 app:read -------- 驱动:drv_read if(nodata) sleeppoll机制4>异步通知:发信号5>输入子系统,融入别人写的代码2.块设备驱动程序App : open read write块驱 阅读全文

posted @ 2013-10-14 21:30 屁屁侠 阅读(821) 评论(0) 推荐(0)

输入子系统架构分析
摘要:内 核的输入子系统是对分散的,多种不同类别的输入设备(如键盘,鼠标,跟踪球,操纵杆,触摸屏,加速计和手写板)等字符设备进行统一处理的一层抽象,就是在 字符设备驱动上抽象出的一层。输入子系统包括两类驱动程序:事件驱动程序和设备驱动程序。事件驱动程序负责和应用程序的接口,而设备驱动程序负责和底层输 入设备的通信。鼠标事件生成文件mousedev属于事件驱动程序,而PS/2鼠标驱动程序是设备驱动程序。事件驱动程序是标准的,对所有的输入类都是可 用的,所以要实现的是设备驱动程序而不是事件驱动程序。设备驱动程序可以利用一个已经存在的,合适的事件驱动程序通过输入核心和用户应用程序接口。输入子系统带来了如下 阅读全文

posted @ 2013-09-29 18:06 屁屁侠 阅读(727) 评论(0) 推荐(0)

字符设备驱动笔记——定时器防抖动(十)
摘要:1.定时器:1).超时时间2).处理函数#include #include #include #include #include #include #include #include #include #include #include #include static struct class *sixthdrv_class;static struct class_device *sixthdrv_class_dev;volatile unsigned long *gpfcon;volatile unsigned long *gpfdat;volatile unsigned ... 阅读全文

posted @ 2013-09-24 22:51 屁屁侠 阅读(385) 评论(0) 推荐(0)

内核线程、用户进程、用户线程
摘要:内核线程、用户进程、用户线程从kernel创建init 进程之后,内核就不再主动占有cpu了。只有当进程主动要求和中断到来时,内核才动一动,很快又把cpu还给合适的进程。Linux上进程分3种,内核线程、用户进程、用户线程。内核线程内核线程拥有进程描述符、PID、进程正文段、核心堆栈;因为内核线程不访问用户空间,只操作内核空间内存,而所有内核线程的内核空间都是一样的。这样就省下了一个mm域的内存。用户进程拥有进程描述符、PID、进程正文段、核心堆栈 、用户空间的数据段和堆栈用户线程拥有进程描述符、PID、进程正文段、核心堆栈,同父进程共享用户空间的数据段和堆栈;用户线程也可以通过exec函数族 阅读全文

posted @ 2013-09-24 11:11 屁屁侠 阅读(287) 评论(0) 推荐(0)

字符设备驱动笔记——同步互斥阻塞(九)
摘要:一、同步互斥阻塞1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v); //原子变量增加1void atomic_dec(atomic_t *v); //原子变量减少1int atomic_dec_and_test(atomic_t *v); //自减操作后测试其是否为0,为0则返回true,否则返回false。2. 信号量信号量(sema 阅读全文

posted @ 2013-09-23 19:01 屁屁侠 阅读(752) 评论(0) 推荐(0)

字符设备驱动笔记——异步通知(八)
摘要:一、信号处理函数的要点:1.注册一个信号处理函数2.发信号,谁发3.发给谁4.怎么发#include #include void my_signal_fun(int signum){ static int cnt = 0; printf("signal = %d, %d times\n", signum, ++cnt);}int main(int argc, char **argv){ signal(SIGUSR1, my_signal_fun); while (1) { sleep(1000); } return 0;}二、执行... 阅读全文

posted @ 2013-09-23 17:09 屁屁侠 阅读(513) 评论(0) 推荐(1)

字符设备驱动笔记——poll机制分析(七)
摘要:poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解poll机制。1. sys_poll函数位于fs/select.c文件中,代码如下:asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nf... 阅读全文

posted @ 2013-09-22 15:53 屁屁侠 阅读(429) 评论(0) 推荐(1)

字符设备驱动笔记——中断方式按键驱动之代码(六)
摘要://驱动程序#include #include #include #include #include #include #include #include #include #include #include static struct class *thirddrv_class;static struct class_device *thirddrv_class_dev;volatile unsigned long *gpfcon;volatile unsigned long *gpfdat;volatile unsigned long *gpgcon;volatile unsigne... 阅读全文

posted @ 2013-09-21 23:03 屁屁侠 阅读(466) 评论(0) 推荐(0)

字符设备驱动笔记——中断方式按键驱动之linux中断处理结构(五)
摘要:一、单片机下的中断处理 1)分辨是哪一个中断 2)调用处理函数 3)清中断二、linux下的中断处理1)/arch/arm/kernel/irq.casmlinkage void __exception asm_do_IRQ(unsigned int irq, struct pt_regs *regs){ struct pt_regs *old_regs = set_irq_regs(regs); struct irq_desc *desc = irq_desc + irq; /* * Some hardware gives randomly wrong int... 阅读全文

posted @ 2013-09-21 13:11 屁屁侠 阅读(1310) 评论(0) 推荐(0)

字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)
摘要:1.中断方式获取按键值单片机:1)按键按下2)cup发生中断,跳转到异常向量入口执行3)b 函数 a.保存被中断的现场 b.执行中断处理函数 c.恢复linux:1)trap_init()函数构造异常向量2)vector_irq + stubs_offset 跳转,vector_irq用宏来实现 a.保存寄存器的值 b.asm_do_IRQ c.恢复2.linux异常处理结构分析---------------------------------------------trap_init()函数构造了异常向量把__vectors_start代码复制到vecto... 阅读全文

posted @ 2013-09-20 22:40 屁屁侠 阅读(864) 评论(0) 推荐(0)

字符设备驱动笔记——查询方式按键驱动(三)
摘要:second_drv.c#include #include #include #include #include #include #include #include #include #include static struct class *seconddrv_class;static struct class_device *seconddrv_class_dev;volatile unsigned long *gpfcon;volatile unsigned long *gpfdat;volatile unsigned long *gpgcon;volatile unsigned... 阅读全文

posted @ 2013-09-20 15:22 屁屁侠 阅读(477) 评论(0) 推荐(0)

字符设备驱动笔记(二)
摘要:怎么写LED驱动:①写框架②完善硬件的操作1>看原理图2>看2440手册3>单片机:直接操作物理地址 驱动程序:操作虚拟地址,物理地址用iorremap映射为虚拟地址myleds.c#include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME "leds" /* 加载模式后,执行”cat /proc/devices”命令看到的设备名称 */#define LED_MAJOR 231 /* 主设备号 * 阅读全文

posted @ 2013-09-20 11:28 屁屁侠 阅读(672) 评论(0) 推荐(0)

字符设备驱动笔记(一)
摘要:1.调用关系 应用程序:open read write 应用层 ----------------------------------------- c库 (swi val)================================================= 内核: system call interface (在异常处理函数里面,根据发生中断的原因,调用 不同的处理函数) ----------------------------------------- sys_open sys_read sys_write (VFS Virtua... 阅读全文

posted @ 2013-09-19 23:21 屁屁侠 阅读(474) 评论(0) 推荐(0)

导航