
linux驱动程序
ghostyu
这个作者很懒,什么都没留下…
展开
-
linux驱动学习(四) linux字符设备驱动 cdev
下面开始学习linux字符设备驱动,也是linux驱动中最简单的驱动模块。在内存中虚拟出一段空间作为字符设备,并为之编写些列的驱动程序。字符设备驱动cdev中用到的两个重要的结构体如下,现补充下基本知识一、cdev/**内核源码位置*linux2.6.38/include/linux/cdev.h*/struct cdev { struct kobject原创 2011-10-15 20:35:16 · 9649 阅读 · 0 评论 -
linux驱动学习(三) helloword 和 驱动Makefile
先看一个最简单的驱动程序://hello.c#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "hello module!\n"); return 0;}static void hello_exit(void)原创 2011-10-13 11:38:38 · 16034 阅读 · 1 评论 -
linux驱动学习(二) Makefile高级
在我前一篇写的【 linux驱动学习(一)Makefile基础】中,Makefile写的中规中矩,其实Makefile写法很灵活,可以写得很简洁,而且减少出错的可能,现在就把之前写的Makefile改进一下。main: main.o hello.o word.o gcc main.o hello.o word.o -o mainmain.o:main.h hello.h word原创 2011-10-12 17:17:24 · 5725 阅读 · 0 评论 -
linux驱动学习(一) Makefile基础
“大计划”需要,现要全面学习linux驱动。记录下完整的学习过程,方便日后需要。 linux与windows 的C编程差异之一就是Makefile,对于学习C语言来说,起初最好是在linux环境下。一般的程序都是由多个源文件编译链接而成,除了极其简单的hello word,这些源文件的处理步骤通常用Makefile来管理。Makefile有什么作用呢,先编写一个简单的程序。程序有三原创 2011-10-12 14:18:59 · 5566 阅读 · 2 评论 -
linux驱动学习(九) usb设备驱动的初步认知
小小的概述和i2c驱动类似,usb驱动架构中也有usb-core这样的框架,为上层设备驱动程序提供封装后的方便使用的api函数,为底层与硬件相关的代码封装提供总线接入功能。撇开复杂的usb协议,我们先认知linux驱动中的usb框架,至于细节的实现,需要漫长的代码。在我们还不知道它长什么样的时候就去讨论内部的实现机制就毫无意义的。usb驱动架构图1准确的说,图1是不完整原创 2012-10-26 15:10:57 · 4678 阅读 · 0 评论 -
linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析
预备知识在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-davinci.c)。标题党请见谅!其实i2c接口非常的简单,即使用51单片的gpio来模拟i2c,编写一个e2prom或者其他i2c接口的驱动程序,也不是什么难事,几百行代码就能搞定。但是Linux的i2c驱动体系结构却有相当的复杂度,不管是叫linux原创 2012-10-22 15:47:48 · 27438 阅读 · 11 评论 -
/proc/devices awk
/proc/devices/中的设备是通过insmod加载到内核的,它可产生一个major供mknod作为 参数。 /dev/* 是通过mknod加上去的,格式:mknod device1 c/b major minor 如:mknod /dev/ttyS0 c 4 64,用户通过此设备名来访问你的驱动。那如何在shell中自动创建设备节点呢使用linux的awk命令首先我们查看一原创 2012-10-18 13:41:35 · 4765 阅读 · 0 评论 -
《Linux内核修炼之道》 之 高效学习Linux驱动开发
转载文章,来自:http://blog.youkuaiyun.com/fudan_abc/article/details/5756323这本《Linux内核修炼之道》已经开卖(网上的链接为: 卓越、当当、china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很转载 2011-12-24 09:06:12 · 2517 阅读 · 0 评论 -
linux驱动学习(六) 应用中的linux驱动 platform_device
一个现实的linux设备和驱动通常要挂接在一种总线上,像pci,usb,iic,spi等都是总线结构,这当然不是问题,但是嵌入式系统中,Soc系统集成的独立外设控制器,挂接在soc内存空间的外设等却不依附于此类总线。基于这个背景,linux发明了一种虚拟总线:platform总线,相应的设备称为platform_device,而驱动成为platform_driver。注意,platfo原创 2011-10-26 22:13:54 · 14907 阅读 · 2 评论 -
linux驱动学习(五) char dev总结
回顾装载模块到正运行的内核和移除模块#includemodule_init();module_exit();用于指定模块的初始化和清除函数的宏__init__exit__initdata__exitdata#include最重要的头文件之一,该文件包含驱动程序使用的大部分内核api函数的定义,包含睡眠函数以及各种变量声明。st原创 2011-10-24 22:57:43 · 4245 阅读 · 0 评论 -
linux驱动学习(七) ioctl中的cmd和_IO() , _IOR() , IOW() ,_IOWR() 以及_IOC_NR()的关系
以下部分内容来自互联网在驱动程序里, ioctl() 函数传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。ioctl()的cmd可以通过使用宏_IO()得到,那么cmd到底是怎么组成的呢?cmd的大小为 32位,共分 4 个域:bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命原创 2012-10-18 15:03:12 · 17341 阅读 · 2 评论