嵌入式驱动开发
嵌入式驱动开发主要就是以linux为操作系统为基础的开发,CSDN讲记录我成长的点点滴滴,我会朝着一个优秀的嵌入式开发人员去奋斗与追求。
HeroKern
欢迎关注嵌入式开发公众号,定期更新技术文章。
-
原创 Linux之同步机制(信号量,自旋锁)
在这以前字符设备的基础也就这么多了,接下来我们讲一下当我们有两个open函数同时打开的时候该怎么处理,我们肯定是不希望在同一时刻有两个应用程序都打开了这个驱动,这个时候我们可以才需一些措施。总结同一时刻只能够打开一个设备节点如何实现同一时刻只能有一个进程使用某个设备?使用linux互斥机制 Linux互斥机制有哪些?答:有很多种,如:原子变量、互斥锁、信号量、自旋锁、读写锁等等2015-09-13 17:12:213591
0
-
原创 Linux驱动之阻塞与非阻塞
阻塞和非阻塞取决与open传入的参数open("/dev/buttons", O_RDWR );阻塞 会陷入休眠open("/dev/buttons", O_RDWR | O_NONBLOCK);非阻塞(立即返回一个数)驱动openstatic DECLARE_MUTEX(button_lock); //定义互斥锁if (file->f_flags2015-09-14 12:47:033455
0
-
原创 Linux内核之定时器详解
前面我们对按键驱动的开发已经基本完成了,但是当你对按键多次按下的时候,你会发现打印的返回值是不正确的,这是什么原因呢?学过51单片机的同学你们都应该知道按键容易产生抖动,俗称“消抖”,我以前的处理办法是设置一个延时10ms,现在我们的按键也是需要延时的,当过了10ms我们在去读这个按键值。我对定时器的理解如下:static struct timer_list buttons_timer;/2015-09-14 12:49:414612
1
-
原创 Linux驱动之input输入子系统
input输入子系统在实际项目中用的也比较多,按键,触摸屏,鼠标,键盘等,用来实现内核层和应用层数据之间的传递,这里得说明不只有input,还有copy_to_user等,利用input的好处是我们用自己上传数据到应用程序, 我们直接上报这个事件发生了,input自带的机制会实现上传的功能。还有很多开源的工具也是基于input输入来制作的,像tslib触摸检测程序和提取数据。tips:2015-09-14 13:06:303992
1
-
原创 Linux驱动之usb鼠标
应用程序获取鼠标数据输入参考:http://blog.csdn.net/qq_21792169/article/details/50809605/* * 参考drivers\hid\usbhid\usbmouse.c */#include #include #include #include #include #include static stru2015-09-28 21:31:065733
0
-
原创 Linux字符设备驱动对IO操作有三种方式
在这之前我们已经把字符设备驱动框架和模型,包括一些机制我们都讲的非常清楚了,在这里我在给大家总结一下。首先大家理解几个概念,像物理地址和虚拟地址,IO映射和内存映射,操作IO我总结了有以下三种方法:第一种方法:用的时候加上 *volatile unsigned long *adccon=NULL;volatile unsigned long *adcdat=NULL;adc2015-09-28 21:37:575572
0
-
原创 Linux字符设备驱动总结程序(二)
前面我们讲解了字符设备驱动的一些写法,但是那样写出来的程序只能我们自己用或者自己公司用。因为你没有同意接口,别人不知道你的设备接口是什么,现在我们讲解几种常用的设设备模型。第一:input输入子系统(键盘,鼠标,触摸屏等等)static struct input_dev *s3c_ts_dev;//定义一个 input_dev结构体s3c_ts_dev = in2015-09-29 12:40:023337
0
-
原创 Linux块设备驱动之内存模拟块设备
今天我们开始接触块设备驱动程序了,一下程序的各个模块我讲的很详细,想头文件这些我没有加上来,因为不同 内核版本头文件有可能不一样,驱动的程序的狂街我在下面写出来了,希望给大家带来帮助。 用内存代替块设备的总结:/* 参考: * drivers\block\xd.c * drivers\block\z2ram.c */#define RAMBLOCK_SIZE (1022015-10-06 15:44:044419
3
-
原创 Linux块设备驱动之NAND FLASH
/* 参考 * drivers\mtd\nand\s3c2410.c */ struct s3c_nand_regs {//C中struct只是类型声明,没有内存空间的分配,而static变量是需要分配内存的unsigned long nfconf ;unsigned long nfcont ;unsigned long nfcmd ;unsigned2015-10-06 16:00:103520
0
-
原创 Linux块设备驱动之NOR FLASH
块设备驱动之NOR FLASH/* * 参考 drivers\mtd\maps\physmap.c */ static struct map_info *s3c_nor_map;static struct mtd_info *s3c_nor_mtd;static struct mtd_partition s3c_nor_parts[] = {[0] = {2015-10-07 11:36:454384
0
-
原创 Linux中挂接U盘
当我们做实际项目开发式,有时候我不可能把很大的数据直接放在flash上,很多时候多事放在U盘或者SD卡,这里我们讲解怎么让Linux系统支持挂机U盘。这个U盘代码Linux内核是自带的,我们直接编译,具体怎么编译请接着往下看。在内核根目录下执行make menuconfig命令,然后:方法一:直接编译进内核 Device Drivers --->2016-02-27 17:55:025324
1
-
原创 Linux驱动之RTC移植
drivers\rtc\rtc-s3c.cs3c_rtc_initplatform_driver_registers3c_rtc_probertc_device_register("s3c", &pdev->dev, &s3c_rtcops, THIS_MODULE)rtc_dev_preparecdev_init(&rtc->char_dev, &rtc_dev_2015-10-12 11:57:383746
1
-
原创 Linux驱动之DMA
不能用kmalloc,因为 kmalloc分配的物理地址有可能是不连续的,dma不能识别 DMA负责读取数据,读取的过程和CPU无关,当读取完了产生一次中断,让CPU来处理数据这样大大节省了时间,而不是让CPU去负责读取数据。 static char *src;//分配的SRC, 对应的缓冲区static u32 src_phys;//物理地址sta2015-10-14 11:25:293769
2
-
原创 Linux系统之热插拨事件uevent
文章最后面我会附上medv.conf配置文档medv.txt,是英文的,部分朋友的英语不是很好,但还是希望大家要硬着头皮去读,不要有畏惧心理,相信你读完了后会给你带来很大的帮助。你要相信外文资料讲得很地道,翻译过来没有那种感觉,以上只是个人看法。嵌入式交流群:423013478class_device_createclass_device_registerclass_device_2015-10-15 14:33:414940
2
-
原创 Linux之解析鼠标input事件数据
Linux中USB鼠标驱动:http://blog.csdn.net/qq_21792169/article/details/48790745或者直接Linux自带的USB鼠标驱动。/* * 向输入子系统汇报鼠标事件情况,以便作出反应。 * data 数组的第0个字节:bit 0、1、2、3、4分别代表左、右、中、SIDE、EXTRA键的按下情况;2016-03-05 17:03:0315655
0
-
原创 linux架构下platform总线详解
学习驱动一定要掌握驱动的模型,platform总线在内核中用的非常频繁,还有一个是Input输入子系统,platform总线的好处是,inux从2.6起就加入了一套新的驱动管理和注册的机制platform平台总线,是一条虚拟的总线,设备用platform_device表示,驱动用platform_driver进行注册。于传统的bus/device/driver机制相比,platform由内核进行统2015-09-26 12:16:419964
0
-
原创 Linux驱动之触摸屏
我开发板是FL2440,其他的开发板在以下代码中基本上是一样的,还需要注意的是,不同的内核用的头文件可能不一样。还要注意下LCD和触摸屏是两个概念,触摸屏是对ADC转换的一种应用,初学者要多看寄存器手册,上面讲得很详细,开始可以参考别人的代码,但是一定要理解过来,转换成自己的思想,废话不多说了,请看下面的代码。内核版本2.6.28.7 虚拟机ubuntu 9.1#incl2015-09-26 12:19:134412
0
-
原创 网卡驱动的流程分析
数据包的发送:void *priv; /* pointer to private data 分配结构体的时候会多分配一块内存用来存放私人数据*/int (*hard_start_xmit) (struct sk_buff *skb,struct net_device *dev);struct sk_buff *skb是网络设备驱动程序中另一个重要的数据结构,通常叫做套接字缓冲区2015-10-08 22:33:133664
1
-
原创 lcd驱动程序之显示图片
以前没有写Lcd驱动程序,现在开始做项目了,才发现Lcd驱动程序必须认真学习。还是老规矩先上代码。内核版本:linux-3.4.2 lcd:4.3lcd.c文件如下:#include #include #include #include #include #include #include #include #in2015-12-29 17:13:5617484
0
-
原创 Linux驱动静态编译和动态编译方法详解
内核源码树的目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在内核配置make menuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。在内核编译时,主Makefile调用这个.config,就知道了用户的选择。上面的内2016-01-05 21:32:5619514
2