首页 > 系统相关 >《LINUX驱动程序设计》学习笔记 ——04

《LINUX驱动程序设计》学习笔记 ——04

时间:2023-09-18 12:33:05浏览次数:42  
标签:驱动程序 04 module 参数 param 模块 LINUX 内核

1. 模块的装载竞争(竞态)

  竞态是驱动程序设计极其重要的方面,始终要铭记:在注册完成后,内核的某些部分可能会立即使用我们刚刚注册的任何设施。换句话说,在初始化函数还在运行的时候,内核就完全可能会调用我们的模块。因此,在首次注册完成后,代码就应该准备好被内核其他部分调用;在用来支持某个设施的所有内部初始化完成之前,不要注册任何设施。

  同时可能出现初始化失败,但是内核的某些部分已经使用了模块所注册的某个设施时的情况。理论上既然已经使用了注册的某个设施,不应该出现初始化失败的情况,毕竟模块已经成功导出了可用的功能及符号。这种情况暂时按下不表,后续深入学习。

2. 模块参数

  insmod和modprobe在装载模块时可以赋值参数,并且modprobe还能从指定文件中读取参数。驱动程序中通过module_param宏来声明参数,例如:

static char *whom = "world";
static int howmany = 1;
module_param(howmany, int, S_IRUGO);
module_param(whom, charp, S_IRUGO);

/* module_param 宏的最后一个参数为成员访问许可证
* 其中S_IRUGO表示所有用户均可读取参数,但不能修改参数。
* S_IRUGO | S_IWUSR 表示允许root用户修改该参数。
* 在严谨的情况下,我们不允许参数可写,此处按住不表,因为涉及到修改sysfs而使参数被修改,并且不予通知的情况。目前内核是否对此做了修改需要查证。
*/

  当参数涉及到数组时,也有特定的宏 module_param_arry,具体不细表。

标签:驱动程序,04,module,参数,param,模块,LINUX,内核
From: https://www.cnblogs.com/hw-blog/p/17711586.html

相关文章

  • Python在Linux上执行脚本
    Linux命令行运行Python脚本1.安装Python解释器查看Python解释器安装位置:whichpython2.创建Python脚本这里说下在linux中命令行创建Python脚本##nano命令创建hello.py,里面写一个print("Hello,World!")nanohello.py更多场景是你写个python文件,上传服务器,......
  • LINUX 下 JNA 调用 so--正确版
    1.编写C++so库c++代码:注意加上extern“C”,否则无法找到c++方法。#include<stdlib.h>#include<iostream>usingnamespacestd;extern"C"{voidtest(){cout<<"TEST"<<endl;}intaddTest(inta,intb)......
  • linux设置http/https proxy及忽略proxy的方法
    msys2设置网络代理在文件.bashrc中添加exporthttp_proxy="proxyIP:port"如exporthttp_proxy="192.168.0.1:8080"exporthttps_proxy="192.168.0.1:8080" 一,场景:有些linux服务器处于内网,并且没有公网ip,故要想与外网进行http/https通信只能通过nat或者加proxy的方式......
  • win10下docker安装 ubuntu18.04.
      参考 Win10使用Docker安装Ubuntu环境-知乎(zhihu.com)旧版WSL的手动安装步骤|MicrosoftLearn......
  • Windows和Linux下通过go实现自删除
    自删除在攻防中都挺常见的,自写远控通常也有需要。可是在度娘里搜不到什么办法,于是就查查Windowsapi学习记录一回。linux先获得当前程序的文件名,再使用syscall这个包中的Unlink调用系统来删除一个目录或者文件的链接,链接没了也就删除完成了。fileName,_:=os.Executable()......
  • Linux常用快捷键
    一、最常用快捷键Tab:快速补全命令;Ctrl+l:清屏,相当于执行clear命令;二、剪切、粘贴、删除快捷键Ctrl+h:删除光标左方位置的一个字符;Ctrl+d:删除光标位置的字符;Ctrl+u:删除(剪切)光标到行首之间的字符;Ctrl+k:删除(剪切)光标到行尾之间的字符;Ctrl+w:删除(剪切)从光标位置前到当前所处......
  • 代码随想录算法训练营day11| ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复
    20.有效的括号卡哥democlassSolution{public:boolisValid(strings){if(s.size()%2!=0)returnfalse;stack<char>st;for(inti=0;i<s.size();i++){if(s[i]=='(')st.push('......
  • 每天一个linux命令(43):killall命令
    Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。1.命令格式:killall[......
  • 每天一个linux命令(44)0:top命令
    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,to......
  • 每天一个linux命令(45):free 命令
    free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。1.命令格式:free [参数]2.命令功能:free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。......