学习笔记四 :linux驱动之module_param的用法
从 main函数说起
我们在用户太写程序时都喜欢用main函数的如果参数来向程序内传递数据
#include <stlib.h>
#include <stdio.h>
int main(int argc,char **argv)
{exit(0);
}
其中argc为传入程序内参数的个数,argv为传入的参数 ,其中的第一个参数argv[0]为当前文件的含路径的名字,所以实际传入程序内的参数个数为argc-1个。
内核模块传入参数
内核模块中没有main函数,所以向模块内部传入参数可以通过module_param这个宏定义来实现:
// 原型
#define module_param(name, type, perm) \module_param_named(name, name, type, perm)
name:传入参数名称
type:传入参数类型,有byte, short, ushort, int, uint, long, ulong, charp, bool,invbool这几种类型
perm:这个为sysfs中资源的访问权限,下面再细说,主要有以下权限类型在uapi/linux/stat.h中定义
#define S_IRWXU 00700 // 用户读写可执行权限
#define S_IRUSR 00400 // 用户读权限
#define S_IWUSR 00200 // 用户写权限
#define S_IXUSR 00100 // 用户可执行权限#define S_IRWXG 00070 // 用户组读写可执行权限
#define S_IRGRP 00040 // 用户组读权限
#define S_IWGRP 00020 // 用户组写权限
#define S_IXGRP 00010 // 用户组可执行权限#define S_IRWXO 00007 // 其他人可读写执行权限
#define S_IROTH 00004 // 其他人可读权限
#define S_IWOTH 00002 // 其他人可写权限
#define S_IXOTH 00001 // 其他人可执行权限
模块 代码编写:
#include <linux/module.h>int num = 100;
module_param(num,int,S_IRUSR);static int __init param_init(void)
{printk("[%s] num = %d\r\n",__FUNCTION__,num);return 0;
}static void __exit param_exit(void)
{printk("[%s] num = %d\r\n",__FUNCTION__,num)
}module_init(param_init);
module_exit(param_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Chen");
Makefile文件:
ifneq ($(KERNELRELEASE),)obj-m:=param.o
elseKERNEL_DIR:=/lib/modules/$(shell uname -r)/buildCURRENT_DIR:=$(shell pwd)ccflags-y:=-std=gnu99 -Wno-declaration-after-statement
all:$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) modules
clean:$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) clean
endif
编译 程序,安装模块,然后dmesg
模块安装后在/sys/module文件夹下会生成 对应模块名字的文件夹,进入文件夹内
进入文件夹,文件夹内parameters文件夹内会会有之前程序中的num
从图片中可以看出内核在文件系统中会生成对应的文件让用户访问,并且模块中module_param宏定义中的perm设置了用户只读权限,所以num文件权限与其对应。
当然你也可以设置可写权限来改变输入参数 的值,改变后内核模块中的 该 参数会改变但是不会有任何信息提示。
学习笔记四 :linux驱动之module_param的用法相关推荐
- 【嵌入式Linux学习笔记】Linux驱动开发
Linux系统构建完成后,就可以基于该环境方便地进行开发了,相关的开发流程与MCU类似,但是引入了设备树的概念,编写应用代码要相对复杂一点.但是省去了很多配置工作. 学习视频地址:[正点原子]STM3 ...
- MAX6675ISA学习笔记-基于linux驱动
目录 1.MAX6675简介 2.基本参数 3.引脚配置 4.参考电路 5.引脚功能描述 6.转换公式 7.读写的格式 8.时序 9.输出的数据内容 10.模拟程序书写 10.1.引脚配置 10.2 ...
- Linux学习笔记(四)-Linux常用命令
常用命令格式 #command(指令) [-options] parameter1(参数1) parameter2(参数2)... 大小写区分,tab自动补全 Shell特殊字符 通配符 管道Pipe ...
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...
- linux系统管理学习笔记之八---linux文件与目录的管理及权限
linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...
- ROS学习笔记四:理解ROS节点
ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...
- Linux学习笔记之——Linux系统内部相关介绍
Linux学习笔记之--Linux系统内部相关介绍 摘要:主要记录一些比较有用的能够帮助理解和使用Linux的知识.比如一些相关概念.没兴趣的看看就好.知道有这么个东西.注意事项.和一些常用目录的作用 ...
- STM32F103学习笔记四 时钟系统
STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...
- MySQL高级学习笔记(四)
文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...
最新文章
- [书目20130216]深入浅出WPF
- grep查找时,去掉grep本身那一条
- 如何在NEO共识节点间分配任务
- matlab 状态估计,基于_当前_统计模型的目标状态估计MATLAB 实现
- 判断文件是否改变php,PHP判断文件是否被修改实例
- 华为商城抢购工具_华为套路太多,MATE40RS开启摇号模式,抽中资格仍需抢购
- 上周热点回顾(11.27-12.3)
- 学习参考《高性能MySQL(第3版)》中文PDF+英文PDF
- 算法解析——矩阵快速幂
- cmd命令:批量创建文件夹
- cubieboard服务器系统,CubieBoard_搭建自己的系统.pdf
- 蓝桥杯算法竞赛系列第五章——拔高篇之深度优先搜索(DFS)
- mybatis批量删除 java_Mybatis批量删除数据操作方法
- Boost(一)——Boost简介
- 回顾总结-----第九届中国云计算大会,量子计算机为最大亮点
- JavaScript点击button更改内容,清空页面
- GAZEBO 中 sdf文件详解
- pythonhiq | 计算LiH分子的哈密顿量(ongoing)
- Linux iftop 安装与参数详解 【转】
- SQL查询成绩表中的每科第三名