linux内核驱动
Cyj0622
热衷于学习嵌入式linux的小伙伴
展开
-
驱动开发之PWM输出控制(设备树详解版)
reg属性就是寄存器的其实地址,加上所有寄存器的长度0x24就是36个字节也就是9个寄存器 clocks属性是PWM要用到的时钟编号就是336,具体可以在linux源码目录下的Documentation/devicetree/bindings/clock/exynos4-clock.txt可以找到(接下来就是compatible属性,这个是在写驱动代码的时候匹配要用到的,到时候看下面的驱动代码就会知道。pinctrl-0的属性定义后就可以在驱动代码中使用pinctrl子系统的API(原创 2024-02-07 01:37:18 · 513 阅读 · 2 评论 -
多路复用的底层实现
当第一个if条件成立时,即有可读事件就会给mask赋值。当第二个if条件成立时,即有可写事件成立就会给mask赋值。函数通常被用于为实现基于事件驱动 I/O 复用的系统调用提供支持,比如。那select函数怎么知道所监测的文件描述符可读或则可写了呢?当文件描述符上发生了对应的事件时(根据返回值mask),),从而实现了对文件描述符事件状态的监听和通知。函数可以唤醒在该文件描述符上等待的进程(并且将对应的读文件描述符集合中对应的位置一。当没有事件时就会休眠,放入等待队列中。函数,将相应的进程唤醒。原创 2023-12-14 16:47:58 · 342 阅读 · 1 评论 -
关于文件描述符的解释
大家都知道呢,文件描述符就是 int fd 这样在应用程序定义的,当它作为write的参数时,它就会被内核当做成描述符数组的下标,从而找到对应的file对象。这里前面已经说过file对象也就是文件引擎,内核会再通过*f_op这个成员找到函数操作集里的对应驱动程序进行执行(如果是设备文件的话,否则就在系统调用函数里面执行相关操作)。这个结构体中的 *f_op成员指向的是函数操作集(这里不必深究这个函数操作集从哪里来,因为涉及到内核很多的东西)。他是怎么让内核的read、write函数执行起来的?原创 2023-12-12 11:14:28 · 327 阅读 · 0 评论 -
内核模块编程之不同目录下的依赖和传参
EXPORT_SYMBOL的作用是将指定的符号(函数或变量)的名称和信息添加到内核的全局符号表中,以便其他模块可以访问和使用这些符号,从而实现模块之间的符号共享。但是这里值得注意的是这里在内核源码的目录下会对该模块目录的makefile进行第二次解释,这样就可以用内核源码的Makefile的变量来编译该目录下的模块代码。1.首先想要在和linux源码不同级的目录下编写动态加载方式的模块代码,需要在模块代码的同级目录下写上这个Makefile,这个Makefile会经过2次解释。原创 2023-12-10 15:31:24 · 362 阅读 · 1 评论