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

正点原子RK3568学习日志6-驱动模块传参

1.基础学习1-6知识点总结

驱动模块传递参数类型:基本类型,数组,字符串

是传给驱动

2.驱动模块传参函数--module_param(name,  type, perm)基本类型

name:模块参数的名称


type: 模块参数的数据类型
基本类型:char,bool,int,long,short, byte, ushort, uint, charp,(字符指针)


perm: 模块参数的访问权限   x1 w2 r4
S_IRUSR  4用户可读
S_IRGRP  4组可读

S_IROTH   4其他人可读

S_IRUGO   444S所有可读

static int a = 0;module_param(a, int, S_IRUGO);		//传基本类型参数  444  
MODULE_PARM_DESC(a, "e.g:a=1");			//描述信息printk("a is %d\n", a);

3.驱动模块传参函数--module_param_array(name, type, nump, perm)数组

name: 要传递给驱动代码中的变量的名字

type: 模块参数的数据类型


nump: 数组长度    是个地址

perm: 模块参数的访问权限   x1 w2 r4

static int array[5] = {0};
static int array_size;    //自动判断多长,module_param_array(array, int, &array_size, S_IRUGO);  //传数组参数  444  用&符号,前面那个是数组
MODULE_PARM_DESC(array, "e.g:array=1,2,3");			//描述信息for(i = 0; i < array_size; i++){printk("array[%d] is %d\n", i, array[i]);}printk("array_size is %d\n", array_size);	

4.驱动模块传参函数--moudule_param_string(name, string, len, perm)字符串

name: 要传递给驱动代码的变量的名字

string: 驱动代码内部的变量的名字

len: 字符串大小

perm: 模块参数的访问权限   x1 w2 r4

static char str1[10] = {0};module_param_string(str, str1, sizeof(str1), S_IRUGO); //传字符串 444
MODULE_PARM_DESC(str, "e.g:str=hello");			//描述信息printk("str1 is %s\n", str1);	

5.显示函数--MODULE_PARM_DESC(_parm, desc)

用来描述模块参数的信息
_parm: 要描述的参数的名称
desc: 描述信息

6.内核模块符号表

驱动程序编译成驱动模块,ko文件,需要各个模块之间进行访问,要放在同一个目录下,进行make,符号就是内核中的函数名,全局变量名,符号表就是用来记录这些符号的文件

内核符号表导出

EXPORT_SYMBOL(sym)

EXPORT_SYMBOL_GPL(sym) 只能被 GPL 许可的模块使用


int add(int a, int b)
{return a+b;
}
EXPORT_SYMBOL(add);  

内核符号表导入
extern就行

extern  int add(int a, int b); static int helloworld_init(void)
{int a;a = add(1, 2);printk("a=%d\n", a);return 0;
}

7.实验:先编译a.c, 再编译b.c,  使用驱动模块编译方法

1.使用驱动模块方法,随便建一个目录,a.c b.c 文件,

2.再建一个Makefile文件,

ARCH := arm64
CROSS_COMPILE := aarch64-rockchip1031-linux-gnu-
export ARCH CROSS_COMPILE
KDIR := /home/alientek/rk3568_linux5.10_sdk/kernel
PWD ?= $(shell pwd)
obj-m += a.o
obj-m += b.o
all:make -C $(KDIR) M=$(PWD) modules
clean:make -C $(KDIR) M=$(PWD) clean

3.然后在上级目录make,产生ko文件,先移动到windows
make clean  清除掉make后的文件

4.使用ADB工具从windows移动到rk3568, rk3568用串口工具

win+R cmd

windows 家目录是/

 find / -name "*.ko"

 find / -name "helloworld.ko"


modinfo .ko   查看.ko文件

adb push  

adb devices


加载驱动   数组逗号分割
insmod hellworld.ko   a=1 array=1,2,3 str=helloworld                #加载驱动模块

8.问题

驱动模块编译

http://www.dtcms.com/a/491341.html

相关文章:

  • 做h5小游戏的网站有哪些梓潼 网站建设 有限公司
  • 网站备份信息wordpress高级插件
  • SYSTEM x 3650M5 IMM和UEFI微码的升级
  • VSCode插件推荐 2025 - 拥抱 Agentic Coding 时代:是时候从 PyCharm 切换到 VSCode 生态了!
  • 使用CGAL对简单多边形进行凸分解及范例展示
  • 培训网站建设课程宁波妇科中医
  • 什么网站可以做美食网站式小程序
  • 合肥建设网站查询系统游戏网络游戏
  • GraphRAG本地部署 v2.7.0
  • YOLOv1 与 YOLOv2 核心笔记:从单阶段检测开创到性能升级
  • 项目上传到GitHub流程
  • 强化学习入门-2(Dueling DQN)
  • 【第6篇】引入高配大模型
  • 嵌入式计算机AF208:自动化装配管理集成方案核心
  • 五台县建设局网站有ip地址如何做网站
  • 数码产品商城网站建设网上推广赚钱方法
  • 数智时代的软件架构峰会
  • 展板模板网站河东网站建设公司
  • 快手编程大模型真实水平,本地部署,实测
  • 如何在AutoCAD中进行GIS空间查询?
  • 旧电脑变废为宝:打造低成本网络打印机服务器全记录
  • EF Core 导航属性赋值的一种方式
  • 做实验流程图的网站必应搜索引擎入口官网
  • 做那个的网站谁有wordpress用户信息修改
  • VMware虚拟机安装文档
  • 分布式专题——46 ElasticSearch高级查询语法Query DSL实战
  • Spring Boot核心功能深度解析
  • 麒麟系统使用-使用Sublime浏览小说
  • 【2025年10月一区SCI】Experience Exchange Strategy 经验交换策略(EES),优化算法改进新方法!-附Matlab免费代码
  • 渭南建网站如何建立官方网站