![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动开发
文章平均质量分 78
高级凡尔赛
这个作者很懒,什么都没留下…
展开
-
驱动学习-日常笔记day10
【1】块设备块设备的特点:按照扇区来访问,访问的单位512字节它可以顺序访问,也可以无序访问。块设备的硬件知识:比如一个移动硬盘:磁头:有多少个盘面磁道:一个面内有多少环扇区:一个环内有多少个扇区,一个扇区512字节磁盘的数据的读取:磁盘数据的读取不会按照存储顺序来读取,因为磁头它是机械结构,通过旋转来访问数据,如果按照数据来访问,需要反复的切换这个物理结构,比较浪费时间。所以磁盘在访问的时候采用电梯优化的算法来完成。即一次将一个盘面上的数据全部读取到,然后切换物理结构,在读取原创 2020-09-19 15:22:54 · 254 阅读 · 0 评论 -
驱动学习-日常笔记day9
【1】复习platform总线设备端 设备信息结构体: struct resource res[] = { [0] = { .start = 0xc0053000, .end = 0xc0053000 + 24 -1, .flags = IORESOURCE_MEM, }, [1] = { .start = 73, .end = 73, .flags = IORESOURCE_IRQ, } }; struct platform_devi原创 2020-09-19 15:21:56 · 266 阅读 · 0 评论 -
驱动学习-日常笔记day8
【1】复习1.中断request_irq(irqno,中断处理函数,中断触发方式,名字,传递的参数);free_irq(irqno,传递的参数);2.内核定时 struct timer_list mytimer; mytimer.expires = jiffies + HZ; (1s) //# define HZ CONFIG_HZ mytimer.function = timer_function; //当定时时间到了会执行 mytimer.data = 0; //一般用于传递下一次原创 2020-09-18 19:44:12 · 136 阅读 · 0 评论 -
驱动学习-日常笔记day7
【1】Linux内核中的中断linux内核中的中断和ARM课程中学习的裸机中的的原理是一样的,都需要遵从四大步三小步骤。在linux内核中注册中断处理函数int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)功能:在linux内核中注册中断处理函数参数: @irq :软中断号:根据gpio号通过映射得到软中断号 A B原创 2020-09-18 19:43:37 · 185 阅读 · 0 评论 -
驱动学习-日常笔记day6
【1】IO多路复用IO多路复用:在同一app应用程序中想同时监听多个文件描述符,使用select、poll、epoll在监听,如果数据都没有准备好,selectpoll、epoll就会阻塞。当硬件的数据准备好的时候就会产生中断,在驱动的中断处理函数中唤醒select、poll、epoll即可。当他们被唤醒之后,然后判断文件描述符的集合中哪个文件描述的数据准备好了,如果数据准备好了,就从硬件将将数据读取到用户空间即可。fd1 = open("mma",权限);fd2 = open("mpu",原创 2020-09-18 19:42:55 · 117 阅读 · 0 评论 -
驱动学习-日常笔记day5
【1】复习1.字符设备驱动的框架inode结构体:只要一个文件在linux系统中存在就会有一个inode结构体和这个文件对应。这个inode结构体时描述这个文件的各种属性信息,驱动 ,设备号等file结构体:只要通过open函数打开文件就会产生file,这个file结构体就会保存在fd_array数组中,这个数组下标就是fd,file结构体是用来描述打开文件时候的各种信息。2.字符设备驱动实现1.分配cdev的对象struct cdev*cdev = cdev_alloc();2.原创 2020-09-18 19:42:20 · 147 阅读 · 0 评论 -
驱动学习-日常笔记day4
【1】复习1.ioctl函数的使用ioctl(fd,100,100)---------------------unlocked_ioctl(file,cmd,args){printk(“cmd = %d,args = %d\n”,cmd,args);//cmd=100 args=100;}命令码通过 ===>_IO _IOR _IOW _IORW封装2.自动创建设备节点class_createdevice_createclass_destroydevice_destroy原创 2020-09-18 19:41:46 · 177 阅读 · 0 评论 -
驱动学习-日常笔记day3
【1】复习1.内核模块入口 出口 许可证2.内核中打印函数printk(打印级别 “想要打印的内容”);printk(“想要打印的内容”);3.模块传参sudo insmod demo.ko a=100/sys/module/驱动名/module_param(变量名,类型,权限);module_param_array(变量名,类型,长度,权限);MODULE_PARM_DESC(变量,“字符串”);4.模块导出符号表 EXPORT_SYMBOL_GPL(变量名/函数名);5.原创 2020-09-18 19:41:09 · 129 阅读 · 0 评论 -
驱动学习-日常笔记day2
【1】复习1.驱动的种类字符设备驱动:按照字节流来访的,并且顺序访问。90%设备都对应字符设备驱动。帧缓存设备驱动:LCD块设备驱动:按照block来访问,访问的单位512字节它可以顺序访问,也可以无序访问。网卡设备驱动:和网络通讯相关的设备2.内核模块 入口 static int __init demo_init(void) { //在安装驱动的时候执行 //资源分配 return 0; } module_init(demo_init); 出口 static原创 2020-09-18 19:40:06 · 167 阅读 · 0 评论 -
驱动学习-日常笔记day1
【1】课程大纲1.Linux内核模块2.字符设备驱动3.并发和竞态的解决方法4.IO模型5.linux内核中断6.Platform总线驱动7.i2c总线驱动8.spi总线驱动9.块设备驱动10.网卡设备驱动【2】工作岗位Linux设备驱动开发Android设备驱动开发【3】什么是驱动?arm裸机驱动和Linux设备驱动有什么区别?驱动:通过软件驱动硬件工作的代码共同点:都可以驱动硬件工作不同点:arm裸机驱动:只能执行一份代码,在main中按照先后顺序来执行,这份代码原创 2020-09-18 19:39:00 · 255 阅读 · 0 评论 -
驱动开发中常用的函数2
I/O模型 阻塞态部分: wait_queue_head_t wq; //定义等待队列头 init_waitqueue_head(&wq); //初始化等待队列头<1> wait_event(wq, condition) //不可中断的等待态 wait_event_interruptible(wq, condition) //可中断的等待态 功能:让当前的进程休眠 参数: @wq :等待队列头 (休眠的进程在内核中会被放到一个 队列中,这里的wq就是队原创 2020-09-18 17:24:04 · 205 阅读 · 0 评论 -
驱动开发中常用的函数
驱动开发中常用的函数: module_param(name, type, perm) 功能:接收命令行传的参数 参数: @name:变量名 @type: 变量的类型 @perm: 权限 0664 0775 例:char a;module_param(a, byte, 0664)MODULE_PARM_DESC(_parm, desc)功能:对命令行传递的参数进行描述参数: @_parm:变量 @desc:描述的字符串例: a.安装驱动的时候传参原创 2020-08-01 14:37:35 · 642 阅读 · 0 评论