ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

内核模块实验2

2022-08-25 00:31:31  阅读:179  来源: 互联网

标签:实验 param ALERT 参数 module static printk 内核模块


修改驱动模块代码位置及路径

  • 之前实验编译的lx_hello.ko是在内核源码目录文件夹中直接添加的,不方便查看阅读,因此将代码移出。
    -修改Makefile 如下
KERNELDIR := ~/project/lx/android11_v2/RK3568_Android11/kernel
CURRENT_PATH := $(shell pwd)
obj-m := lx_hello.o
build: kernel_modules

kernel_modules:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

  • 编译的时候需要使用make ARCH=arm64来进行编译。

内核模块传递参数

模块参数简介

根据不同应用场合给内核模块传递不同参数,提高内核模块灵活性,比如设置串口驱动波特率等参数。运行时可以类似普通命令一样进行参数的传递,内核提供了一种形式支持这种行为,就做模块参数。

模块参数的使用

  • 定义一个常见变量,内核支持的参数类型有:bool、invbool(bool取反)、charp(字符串指针)、short、int、long、ushort、uint、ulong。
  • 使用module_param,或者module_param_array宏把传参值赋给变量
module_param(name, type, perm)
module_param_array(name, type,nump, perm)
  • name:参数名

  • type:参数类型,如int、byte、bool、
    charp...

  • nump: 数组元素个数的指针

  • perm:读写权限

    • 不允许设置可执行权限
    • 在“/sys/module/模块名/parameters”目录下,会生成该参数对应的文件名
  • 函数源码如下

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int itype;

module_param(itype,int,0644);

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 module_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;
}

static void __exit module_param_exit(void)
{
    printk(KERN_ALERT "param exit!\n");

}


module_init(module_param_init);

module_exit(module_param_exit);

MODULE_AUTHOR("lx");
MODULE_DESCRIPTION("功能描述");

MODULE_VERSION("1.0");
MODULE_LICENSE("GPL v2");////告诉内核该模块具有GNU公共许可证

符号共享

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

  • 变量共享
  • 函数共享
EXPORT_SYMBOL(sym)
  • sym:变量名或者函数名
查看符号表
cat /proc/kallsyms | grep xxx

标签:实验,param,ALERT,参数,module,static,printk,内核模块
来源: https://www.cnblogs.com/lx--/p/16622805.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有