随笔分类 -  linux驱动

17、网卡驱动程序-DM9000举例
摘要:(参考:cs89x0.c可以参考) DM9000 芯片实现网络功能的基础,在接收数据时采用中断方式,即当有数据到来并在 DM9000 内部 CRC 校验通过后会产生一个接收中断; 网卡驱动程序框架: app: socket 若干层网络协议--纯软件 hard_start_xmit(解析sk_buff 阅读全文

posted @ 2018-03-21 21:45 拉风摊主 阅读(505) 评论(0) 推荐(0)

16、NOR FLASH驱动框架
摘要:mtdram.c是内核自带用内存模拟nor flash程序 physmap.c是内核自带nor flash驱动程序最底层硬件相关层代码 其关键代码是:1、分配一个map_info结构体 2、设置map_info结构体物理地址、size、位宽、虚拟地址 3、调用内核提供的do_map_probe函数, 阅读全文

posted @ 2018-03-20 21:53 拉风摊主 阅读(267) 评论(0) 推荐(0)

15.1 linux操作系统下nand flash驱动框架2
摘要:当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备。 而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。 框架如下: 1.即使na 阅读全文

posted @ 2018-03-20 17:40 拉风摊主 阅读(235) 评论(0) 推荐(0)

15、NAND FLASH驱动程序框架
摘要:驱动可以参考At91_nand.c,这个比S3c2410.c (drivers\mtd\nand)简单多了 NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地址?答1.在D 阅读全文

posted @ 2018-03-18 23:37 拉风摊主 阅读(316) 评论(0) 推荐(0)

14、块设备驱动程序框架分析
摘要:(对于需要使用块设备驱动程序框架的设备,比如磁盘,假如一个操作需要读写读三个不同扇区,这个时候如果采用字符驱动程序来读写,对于机械磁盘的磁头需要跳来跳去执行,这样时间会花费很长) (比如nand flash产品,在写多个字节的时候,先读整块到buffer,修改buffer中的扇区(即页),在擦除整块 阅读全文

posted @ 2018-03-18 18:32 拉风摊主 阅读(510) 评论(0) 推荐(0)

12.2 linux USB框架分析(详细注册match匹配过程)
摘要:首先我们先来简单说一说USB的框架,之后在来具体分析源码,以便加深理解!其实USB的框架比较像“平台总线、设备、驱动”的框架,也分为总线、设备、驱动三大块。其中总线驱动是已经由内核完成的,一旦接入usb设备,总线驱动程序就会找到能处理该设备的驱动进行处理!我们进入文件系统的/sys/bus目录下可以 阅读全文

posted @ 2018-03-18 13:58 拉风摊主 阅读(1935) 评论(0) 推荐(0)

12、USB设备驱动程序
摘要:linux-3.4.2\driver\hid\usbhid\usbmouse.c 内核只带USB驱动程序 (hub和usb是两个不同的设备,hub在内核上电的过程中在usb_hub_init函数中调用usb_register来注册,usb驱动才是我们自己写的驱动,也是用usb_register来注册 阅读全文

posted @ 2018-03-17 12:12 拉风摊主 阅读(541) 评论(0) 推荐(1)

12.1、USB驱动——描述符、URB、管道
摘要:大家常说,一个设备通常有多个配置,配置通常有多个接口,接口通常有多个端点。接口代表逻辑上的设备,比如声卡分为 录音和播放。访问设备时,访问的是某个接口(逻辑设备)。除了端点0之外,每个端点只支持一个传输方向,一种性质的传输传输数据时,读写某个端点,端点是数据通道。 有一个设备,如支持视频和音频的一个 阅读全文

posted @ 2018-03-17 11:09 拉风摊主 阅读(1153) 评论(0) 推荐(0)

13、触摸屏驱动程序
摘要:linux-3.4.2\drivers\input\touchscreen\s3c2410_ts.c(内核只带驱动) 触摸屏是有2440芯片中ADC控制器控制的,ADC有四种工作模式: 1、普通转换模式用于ADC转换; 2和3、用于触摸屏测试模式; 4、等待触摸笔按下模式 测试2th~7th:1. 阅读全文

posted @ 2018-03-15 23:11 拉风摊主 阅读(383) 评论(0) 推荐(0)

0、驱动及应用小技巧、uboot指令及环境变量配置、linux常用命令
摘要:(内核make menuconfig之后,通过insmod安装的驱动都应该重新make,可能会出现一些莫名的问题) (nor flash/SDRAM/DM9000都受内存控制器控制,需要配置内存控制器对应的位宽,表示一次能取得多少字节数据;norflash在接开发板时,地址线错开一位的原因就是因为当 阅读全文

posted @ 2018-03-14 23:08 拉风摊主 阅读(185) 评论(0) 推荐(0)

11、DMA操作说明
摘要:先理解cache的作用CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容;否则,就 称为“ 不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由 阅读全文

posted @ 2018-03-14 22:40 拉风摊主 阅读(755) 评论(0) 推荐(0)

10、分离分层
摘要:1、bus虚拟总线 2440中在mach_smdk2440.c中,通过smdk2440_machine_init会把很多device都注册了,这样driver层在注册的时候就可以调用probe函数了 2、在mach_xxxxx.c这个架构相关函数中,在他的init函数中会通过platform_add 阅读全文

posted @ 2018-03-14 21:43 拉风摊主 阅读(182) 评论(0) 推荐(0)

9、LCD驱动程序框架
摘要:linux-3.4.2\drivers\video\S3C2410fb.c(内核自带驱动程序) fbmem.c是LCD驱动程序顶层框架文件,是一个通用的文件,在初始化init函数中会注册一个字符设备,并创建一个类,在注册字符设备的时候提供的file_operations是一个中间件,根据次设备号在r 阅读全文

posted @ 2018-03-14 19:50 拉风摊主 阅读(356) 评论(0) 推荐(0)

8、linux下输入子系统
摘要:input_sync(button_dev); /*通知接收者,一个报告发送完毕*/ 参考:http://www.51hei.com/bbs/dpj-27652-1.html 很详细说明 input.c是输入子系统驱动程序顶层框架文件,是一个通用的文件 在connect函数中 for (minor 阅读全文

posted @ 2018-03-12 23:03 拉风摊主 阅读(206) 评论(0) 推荐(0)

7、linux系统2440开发板域名解析问题
摘要:如果在linux系统中ping某一台电脑的ip地址可以ping 通: ~ >: ping 192.168.1.3PING 192.168.1.3 (192.168.1.3): 56 data bytes64 bytes from 192.168.1.3: seq=0 ttl=64 time=2.51 阅读全文

posted @ 2018-03-11 22:20 拉风摊主 阅读(278) 评论(0) 推荐(0)

6、linux中同步、互斥、阻塞(原子操作、信号量、阻塞)
摘要:1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_ 阅读全文

posted @ 2018-03-11 18:53 拉风摊主 阅读(185) 评论(0) 推荐(0)

5、异步通知机制
摘要:异步通知,的确是一种很好处理机制,熟练掌握这种手段,对我们写高质量的应用程序很有帮助。下面说说对它的理解: 异步通知,就是让驱动去告诉应用,底层硬件发生了什么事,而不是应用主动地去查询驱动,这对系统的性能有一个很大的提升。 首先,在驱动中 内核首先定义一个结构体struct fasync_struc 阅读全文

posted @ 2018-03-11 16:51 拉风摊主 阅读(348) 评论(0) 推荐(0)

1、第一课 register_chrdev和register_chrdev_region 创建知识
摘要:1. register_chrdev注册字符设备后,有0-256个子设备可用,若major==0,则内核动态申请主设备号。static inline int register_chrdev(unsigned int major, const char *name, const struct file 阅读全文

posted @ 2018-03-11 16:48 拉风摊主 阅读(315) 评论(0) 推荐(1)

4、linux开发中常用指令
摘要:1、cat /proc/device 可以查看各个全部字符设备和块设备,在register_chrdev中设置的名字在打印出来的信息中可以看到;2、top 可以看各个应用程序占用CPU量及PID等信息3、kill PID 杀死进程4、./应用程序名字 & 后台运行 5、cat /proc/inter 阅读全文

posted @ 2018-03-11 15:48 拉风摊主 阅读(153) 评论(0) 推荐(0)

3、应用层常用lib函数使用说明
摘要:1、mmap函数 void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset); start:映射区的开始地址,设置为0时表示由系统决定映射区的起始地址。 length:映射区的长度。//长度单位是 以字节为 阅读全文

posted @ 2018-03-11 15:43 拉风摊主 阅读(243) 评论(0) 推荐(0)

导航