LINUX驱动开发
ShawnWang1994
用心,慢慢来!
展开
-
Linux驱动开发 ---- 内核模块开发(上)
对驱动的基本认识:1、驱动是C语言实现的面向对象2、驱动提供了上层并发机制的底层实现3、驱动向上层去提供接口,同时向下层去管理硬件4、内核是大牛写的,是一个好的学习对象。5、linux下一切皆文件内核是什么?内核负责底层文件系统,调动,设备驱动等的管理。驱动由什么组成?----由模块组成模块三要素:模块的加载函数模块的卸载函数模块的GPL协议【1】搭建ubuntu和win...原创 2019-03-04 21:32:57 · 886 阅读 · 4 评论 -
Linux驱动开发 ---- 内核模块开发(下)
【4】模块扩展部分—模块依赖-导出符号表当模块之间存在依赖关系需注意的问题,举例说明:模块1:#include <linux/module.h>static int __init demo_init(void){printk("module init\n");printk("add(6,4)=%d\n",myadd(6,4));return 0;}stati...原创 2019-03-05 15:23:48 · 374 阅读 · 2 评论 -
Linux驱动开发 -----互斥和同步(下)
4、信号量:semaphore 睡眠锁,不占CPU,可以进行调度或休眠等操作,也可以通过设置信号的初值来设置对同一设备的访问次数或权限本质:struct semaphore {raw_spinlock_t lock; //基于自旋锁来实现的unsigned int count; //信号量的个数struct list_head wait_list; //等待的链表};1、...原创 2019-03-13 22:08:34 · 847 阅读 · 4 评论 -
Linux驱动开发 -----字符设备驱动结构(上)
【1】驱动整体架构 图形化操作 === scratch ======================================================= 提供接口 === 加图形界面 ======================================================= 封装:===&amp;gt; 函数 ---- SDK做开发 ...原创 2019-03-06 19:48:49 · 609 阅读 · 1 评论 -
Linux驱动开发 -----字符设备驱动结构(下)
【1】register_chrdev函数使用register_chrdev注册字符设备int register_chrdev(unsignedintmajor,constcharname,structfile_operationsfops);其中参数major如果等于0,则表示采用系统动态分配的主设备号;不为0,则表示静态注册。注销字符设备可以使用unregister_chrdev函数。...原创 2019-03-07 19:51:53 · 259 阅读 · 1 评论 -
Linux驱动开发 -----高级I/O操作(ioctl设备操作)
一个设备除了能通过读写操作来收发数据或返回、保存数据,还与许多操作。这些操作内核委派给ioctl。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。两个函数:ioctl :#include <sys/ioctl.h>int ioctl(int d, int request,...原创 2019-03-11 21:48:38 · 812 阅读 · 0 评论 -
Linux驱动开发 -----互斥和同步(上)
并发与并行并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。所以无论...原创 2019-03-12 19:17:39 · 520 阅读 · 0 评论 -
如何在Linux应用层和内核层获取时间
【1】应用层gettimeofday函数头文件:#include <sys/time.h>int gettimeofday(struct timeval*tv, struct timezone *tz);其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:struct timezone{int tz_minuteswest;/格林威治时间往西方的时差/int...原创 2019-05-05 10:41:56 · 1485 阅读 · 1 评论 -
Linux应用层与内核层交互的几种方式
1)用户程序通过调用KERNEL系统接口, 即通过系统调用的方式,触发与内核的通信。Linux系统下,设备即文件,也因此大部分设备驱动程序都实现了标准的系统接口,如open(),read,write, ioctl(), mmap()等等。(2)通过proc文件系统进行通信。很多内核程序细节,如中断等,都在proc/目录下有所体现。proc存在提供了一种便捷的用户空间和内核空间的交互方式;(3)...转载 2019-08-27 11:25:17 · 5764 阅读 · 0 评论