I.MX6ULL内核开发2:内核模块实验2

news2024/12/27 13:08:57

目录

一、模块参数

二、符号共享

三、模块自动卸载

四、关于Makefile的说明


一、模块参数

根据不同应用场合给内核模块传递不同的参数,提高内核模块灵活性

  • 定义一个常见变量
  • 使用module_param宏把传参值赋给变量

module_param(name,type,perm)

  • name: 参数名
  • type:   参数类型,如int、byte、bool、charp..
  • perm:  读写权限
    • 不允许设置可执行权限
    • 在“/sys/module/模块名/parameters”目录下,会生成该参数对应的文件

module_para.c

static int itype=0;
module_param(itype,int,0);

static bool btype=0;
module_param(btype,bool,0644);

static char ctype=0;
module_param(ctype,byte,0);

static char  *stype=0;
module_param(stype,charp,0644);

static int __init param_init(void)
 {
 printk(KERN_ALERT "param init!\n");
 printk(KERN_ALERT "itype=%d\n",itype);
 printk(KERN_ALERT "btype=%d\n",btype);
 printk(KERN_ALERT "ctype=%d\n",ctype);
 printk(KERN_ALERT "stype=%s\n",stype);
 return 0;
}

注意:

  • 定义变量类型和声明变量类型的时候使用的宏不一定相同
  • 权限如果是0,表示不会在“/sys/module/模块名/parameters”目录下生成相应的文件,比如用char来定义字符型变量,但是在声明的时候确实用的byte来声明的

Makefile

KERNEL_DIR=/home/geralt/linux_driver/kernel/ebf_linux_kernel_6ull_depth1/build_image/build

ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf-
export  ARCH  CROSS_COMPILE

#calculation.o 
obj-m := module_param.o 

all:
	$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) modules

.PHONE:clean copy 

clean:
	$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean	
	sudo rm /home/embedfire/workdir/*.ko

copy:
	sudo  cp  *.ko  /home/geralt/my_dir

编译过程:

(1)执行make命令

 (2)执行make copy命令将生成的ko文件放到共享文件夹里面去

(3)将共享文件夹里的ko文件通过mobaxterm工具拖到板子里面

(4)执行模块加载命令

sudo insmod /home/ubuntu/MyWork/module_param.ko itype=123 btype=1 ctype=200 stype="abc"

(5)demesg命令查看打印信息

二、符号共享

内核模块可以共享导出的符号表

  • 变量共享
  • 函数共享

EXPORT_SYMBOL(sym)

  • sym:变量名

module_param.c

EXPORT_SYMBOL(itype);

 int my_add(int a, int b)
  {
    return a+b;
 }

EXPORT_SYMBOL(my_add);

int my_sub(int a, int b)
 {
    return a-b;
 }

EXPORT_SYMBOL(my_sub);

可以看出EXPORT_SYMBOL函数导出了一个变量,两个函数。

calculation.c

static int __init calculation_init(void)
 {
    printk(KERN_ALERT "calculation  init!\n");
    printk(KERN_ALERT "itype+1 = %d, itype-1 = %d\n", my_add(itype,1), my_sub(itype,1));    
    return 0;
 }

编译过程:

(1)make

(2)make copy移动到共享文件夹

(3)从共享文件夹拉到板子里

(4)卸载之前加载过的module_para模块

sudo rmmod module_para.ko

(5)重新加载module_para模块

sudo insmod /home/ubuntu/

(6)查看符号表

cat /proc/kallsyms | grep xxx

这样就可以在calculation.c中使用这些符号了

(7)加载calculaion模块

(8)dmesg打印日志

 

可以看出模块的日志都被打印出来了

关于卸载模块的说明:

        现在是加载了两个相关联的模块,卸载的时候只有先卸载上层模块,及calculation模块,再卸载module_para模块,顺序不对会报error!!

 也有一种办法可以让linux模块自动卸载!

三、模块自动卸载

  • 所有内核模块统一放到“/lib/modules/内核版本”目录下

cp *.ko /lib/modules/内核版本

  • 查看内核版本

uname -r

  • 建立模块依赖关系

demod -a

  • 查看模块依赖关系

cat /lib/modules/内核版本/modules.dep

  • 加载模块及其依赖模块(这里只有calculation模块)

modprobe xxx

  • 卸载模块及其依赖模块

modprobe -r xxx

四、关于Makefile的说明

  • 有依赖关系的模块,放在一起进行编译
  • clean伪目标增加清除共享文件夹指令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp弹幕

效果图 barrage.vue <template><view class"l-barrage"><block v-for"(item,index) in items" :key"index"><view v-if"item.display" class"aon" :style"{top: ${item.top}rpx}"><…

数据库丨记录一次TiDB v5.2.3迁移到v6.1.0的实操过程

文章目录前言一、环境简介二、迁移前提条件三、迁移方案四、迁移过程总结前言 TiDB 是一款结合了传统的关系型数据库和 NoSQL 数据库特性的新型分布式数据库。是第一个把数据分布在全球范围内的系统&#xff0c;并且支持外部一致性的分布式事务。 TiDB 具备强一致性和高可用性…

Struts2之注解

Struts2之注解1、引入依赖2、注解结构3、注解的使用1、引入依赖 Struts2中可以使用注解来代表struts.xml中的某些配置&#xff0c;可以简化配置。要使用注解&#xff0c;必须引入额外的依赖&#xff0c;如下&#xff1a; <!-- struts2注解依赖 --><dependency><…

未经风雨,怎见彩虹!回首2022,你好2023,新的一年,点面科技与您一起大展宏“兔”,扬眉“兔”气!

时光飞逝&#xff0c;转眼间2022虎年即将变成昨天的记忆。2022年&#xff0c;对于整个行业而言都是不寻常的一年&#xff0c;我们砥砺艰辛&#xff0c;着实经历着一场“寒冬”。但是&#xff0c;2022年注定也是不平凡的一年&#xff0c;在这个变中有定、变中求新的市场格局下&a…

【Rust】11. 泛型、Trait 和生命周期

11.1 泛型数据类型 11.1.1 函数的泛型 注意&#xff1a;泛型的比较适用于实现了 std::cmp::PartialOrd trait 的数据类型 11.1.2 结构体的泛型 结构体的泛型可以使用多个泛型类型参数 11.1.3 枚举的泛型 类似于结构体&#xff0c;枚举的泛型也可以使用多个泛型类型参数 11.…

Android 动画

在App中合理地使用动画能够获得友好愉悦的用户体验&#xff0c;Android中的动画有View动画、属性动画、帧动画、布局动画、转场动画等&#xff0c;在5.x以后有又新增了矢量动画&#xff0c;这些动画在平常开发中使用较为普遍&#xff0c;所以有必要做一次完整的总结。一、View动…

130道python练习题 完整版PDF

今天跟大家分享一些干货&#xff0c;在学python的朋友可以动起来了&#xff01; python基础知识练习题&#xff0c;常见常用的&#xff0c;可以作为参考&#xff0c;挺不错的&#xff0c;也有许许多多的讲解&#xff0c;适合python巩固基础知识和入门 130道练习题&#xff0c…

电脑网速慢怎么解决?提升网速真的很容易!

我们经常会使用电脑&#xff0c;如果加载网页的时间过长&#xff0c;或者是出现未响应的提示等问题&#xff0c;会非常影响我们使用电脑的观感。 针对这种问题&#xff0c;电脑网速慢怎么解决&#xff1f;来看看下面造成电脑网速慢的主要原因&#xff0c;以及我们该怎么提升电…

Python父类方法重写

在 Python 中&#xff0c;子类继承了父类&#xff0c;那么子类就拥有了父类所有的类属性和类方法。通常情况下&#xff0c;子类会在此基础上&#xff0c;扩展一些新的类属性和类方法。但凡事都有例外&#xff0c;我们可能会遇到这样一种情况&#xff0c;即子类从父类继承得来的…

vue前框框架课程笔记(六)

目录单文件组件.vue文件单文件组件常用结构App.vueStudent.vueSchool.vuemain.jsindex.html运行结果vue脚手架具体步骤项目架构其他配置项props配置项mixin混入插件scoped属性本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目…

zookeeper源码分享四 ---- RequestProcessor 处理链路

单机zookeeper RequestProcessor 处理链路 将请求放入LinkedBlockingQueue队列中&#xff0c;通过一个队列中。启动一个线程去消费这个队列&#xff0c;避免了阻塞。 zookeeper的处理是实现RequestProcessor接口的processRequest(Request request) 方法。 PrepRequestProcesso…

exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法

说明 我这exsi版本为5.5 今天在回收虚拟机的时候有些虚拟机无法删除&#xff0c;提示下面内容。 解决方法 方法1 直接给删除失败的虚拟机开机&#xff0c;开机完毕以后再关机就能直接删除了。 方法2 删除失败的虚拟机&#xff0c;也无法开机的情况下&#xff0c;实用该方…

春节档的观影“热”,拯救不了影视圈的“冷”?

配图来自Canva可画 疫情三年&#xff0c;影视业也随着“冬眠”了三年。 先是疫情爆发影响影视业上下游的正常生产&#xff0c;而后国家加速规范影视行业税收秩序&#xff0c;资本相继撤离&#xff0c;再后来影视企业入不敷出业绩巨亏&#xff0c;影视寒冬来临成为行业共识。在…

MMCV - dataset_analysis.py 可视化检测和跟踪任务自定义数据集神器

做视觉检测跟踪任务时,我们需要在论文插图中体现出我们数据集的信息,这个时候就有一个非常好用的神器:dataset_analysis.py的文件。该文件能够帮助用户直接可视化custom数据集的bbox实例信息,如上图所示,包括:显示类别和 bbox 实例个数的分布图;显示类别和 bbox 实例宽/…

中科院和人社部职称评审所需材料内容对比

目录1.前言2.中科院所需材料2.1 基本情况2.2 工作经历2.3 主要专业技术工作业绩2.4 重要著&#xff08;译&#xff09;作、论文及技术工作报告2.5 继 续 教 育 情 况2.6 考试、考核情况2.7 单位推荐意见2.8 材料审核意见2.9 个人技术报告2.10 未来工作展望3.人社部所需材料3.1 …

三十八、Kubernetes1.25中数据存储第二篇

1、概述在前面已经提到&#xff0c;容器的生命周期可能很短&#xff0c;会被频繁地创建和销毁。那么容器在销毁时&#xff0c;保存在容器中的数据也会被清除。这种结果对用户来说&#xff0c;在某些情况下是不乐意看到的。为了持久化保存容器的数据&#xff0c;kubernetes引入了…

行为型模式 - 状态模式State

状态模式的定义与特点 状态&#xff08;State&#xff09;模式的定义&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式&#xff0c;其主要优点…

Oracle用户权限管理

一、运行企业管理器 管理员身份运行客户端的企业管理器 首次打开需要添加数据库信息&#xff0c;这里使用已经存在的数据库orcl 使用系统用户登录 用户名&#xff1a;system&#xff0c;口令orcl 或者不输入使用SYSDBA登录 可以查看所有用户的详细信息: 用户名, 账户状态,…

union和union all 的区别

1&#xff1a;union用于合并两个或多个select 语句的结果集。 注意&#xff1a; 1&#xff1a;union内部的select 语句必需拥有相同数量的列&#xff0c;列也夜必须拥有相似的数据类型&#xff0c;同时每条select 语句中的列的顺序必须相同。 2&#xff1a;union结果集中的列…