当前位置: 首页 > news >正文

ARM驱动学习之7 驱动模块传参数

                              ARM驱动学习之7 驱动模块传参数

1.02_DriverModule_01例程的基础上编写简单模块module_param
Makefile 文件名字修改为module_param 
clean部分:rm -rf *.mod.c *.o *.order *.ko *.mod.o *.symvers2.修改module_param.c
(1):添加头文件
//定义module_param module_param_array的头文件
#include <linux/moduleparam.h>
//定义module_param module_param_array的参数
#include <linux/stat.h>(2)函数定义:
static int module_arg1,module_arg2;
static int int_array[50];
static int int_num;module_param(module_arg1,int,S_IRUSR);– module_arg1:模块参数的名称
– int: 模块参数的数据类型(支持int long short uint ulong ushort类
型)
– S_IRUSR: 模块参数的访问权限(S_IRUSR参数表示所有文件所有者
可读)module_param(module_arg2,int,S_IRUSR);
module_param_array(int_array,int,&int_num,S_IRUSR);– int_array:模块参数的名称//为数组类型
– int: 模块参数的数据类型(支持int long short uint ulong ushort类
型)
– int_num:保存参数个数的地址
– S_IRUSR: 模块参数的访问权限(S_IRUSR参数表示所有文件所有者
可读)(3)在hello_init中加入如下:
int i;
printk(KERN_EMERG "module_arg1 is %d,module_arg1 is %d \n",module_arg1);
printk(KERN_EMERG "module_arg2 is %d,module_arg1 is %d \n",module_arg2);for(i = 0;i < int_num;i ++){printk(KERN_EMERG "int_array[%d] is %d \n",i,int_array[i]);}4.make clean 看是否清空了其他无用文件
5.make编译文件测试模块传参数,并将传递的参数打印出来
– insmod /mnt/udisk/module_param.ko module_arg1=10 module_arg2=20 int_array=11,12,13,14,15,16,17,18
– cat /sys/module/module_param/parameters/xxx Tab显示可以查询参数

源码:

#include <linux/moduleparam.h>
/*定义module_param module_param_array中perm的头文件*/
#include <linux/stat.h>MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("JT");module_param(module_arg1,int,S_IRUSR);
module_param(module_arg2,int,S_IRUSR);
module_param_array(int_array,int,&int_num,S_IRUSR);static int hello_init(void)
{int i;static int module_arg1,module_arg2;static int int_array[50];static int int_num;printk(KERN_EMERG "module_arg1 is %d,module_arg1 is %d \n",module_arg1);printk(KERN_EMERG "module_arg2 is %d,module_arg1 is %d \n",module_arg2);for(i = 0;i < int_num;i ++){printk(KERN_EMERG "int_array[%d] is %d \n",i,int_array[i]);}printk(KERN_EMERG "HELLO JT ENTER\r\n");return 0;}static void hello_exit(void)
{printk(KERN_EMERG "HELLO JT exit\r\n");}module_init(hello_init);
module_exit(hello_exit);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS入门宝典:从零到一构建你的Linux服务器帝国
  • 64. 求 1+2+…+n
  • MOS工作的三种状态及其分析——亚阈值区(截至区),深三极管区(又叫深线性区)和饱和区
  • 基于SpringBoot+定时任务实现地图上绘制车辆实时运动轨迹图
  • 第五章 继承、多态、抽象类与接口 课后训练(3)
  • eureka.client.service-url.defaultZone的坑
  • Java是怎么处理死锁的
  • Python|OpenCV-实现识别目标图像中的圆圈(20)
  • 本地部署大模型并使用知识库Windows下Ollama+Docker+MaxKB安装的记录
  • VMware虚拟机经常性卡死,打开运行一段时间后卡死,CPU占比增至100%
  • 【STM32】DAC数字模拟转换
  • 【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9)
  • Go 并发模式:扩展与聚合的高效并行
  • GPT对话知识库——将寄存器中的一位数据读到变量中需要什么步骤?C语言中掩码的作用。
  • SpringBoot使用@Async注解,实现异步任务
  • 「译」Node.js Streams 基础
  • 30天自制操作系统-2
  • java2019面试题北京
  • Linux链接文件
  • Lucene解析 - 基本概念
  • mysql常用命令汇总
  • python学习笔记-类对象的信息
  • springboot_database项目介绍
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 包装类对象
  • 对象管理器(defineProperty)学习笔记
  • 复习Javascript专题(四):js中的深浅拷贝
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 深度学习在携程攻略社区的应用
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • MPAndroidChart 教程:Y轴 YAxis
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 数仓建模:如何构建主题宽表模型?
  • #HarmonyOS:Web组件的使用
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (7)svelte 教程: Props(属性)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • ***详解账号泄露:全球约1亿用户已泄露
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • .Net Core 中间件验签
  • .NET Core跨平台微服务学习资源
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET学习教程二——.net基础定义+VS常用设置
  • @Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ C++ ] STL---仿函数与priority_queue
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [20180224]expdp query 写法问题.txt
  • [AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口
  • [c]统计数字
  • [C++内存管理]new,delete,operator new,opreator delete