wax5798 2021-06-09 09:09 采纳率: 90.9%
浏览 66
已采纳

编译内核模块时,怎么传递 ld 链接脚本参数

最近需要写一个内核模块,其中的函数分成三类: 普通函数 .text 段、特殊的函数 .text.code1 段、特殊的函数 .text.code2 段。当然还有其他一些默认的代码段

现在要求 .text.code2 要在 .text.code1 前面且紧挨着

打算写一个 ld 链接脚本来实现如上功能。但是怎么把这个脚本传递给链接器呢?应该怎么写对应的 Makefile

  • 写回答

2条回答 默认 最新

  • 王大师王文峰 企业官方账号 2021-06-09 16:49
    关注
    模块安装时候可以给模块中的变量传递数值,安装后,模块中变量的值就是安装时所传入的值 ,没有传递的变量,则使用代码中默认值。
    
    带参数的模块安装后会生成目录:
    /sys/module/模块名/parameters/
    示例:如果安装 了名字为  hello_model_param 的模块,则会生成
    /sys/module/hello_model_param/parameters/
    
    这个文件夹下会生成以参数为名字文件,其内容就是参数的值。可以使用cat 或echo操作这个文件,修改变量的值,但是一般情况下都不建议修改,所以这个权限的值一般设置只读的。
    
    模块中如果变量要通过安装时传参数覆盖默认值,则需要使用以下宏修饰:
    module_param,module_param_array
    
    说明:
    对于非数组类型变量使用module_param,语法:
    module_param(变量名,变量类型,变量的访问权限)  //变量的访问权限:变量会文件系统以一个文件形式呈现,这个文件权限属性就是“变量的访问权限”
    变量传递参数:insmod xx.ko 变量名=值
    
    对于数组类型变量使用 module_param_array , 语法:
    module_param_array(数组名,数组元素类型,&num,变量的访问权限) //num 是一个 char ,int,long 或uchar,uint,ulong类型的变量,用于保存传递给数组的元素个数。
    
    数组传递参数: insmod xx.ko 数组名=元素0,元素1,元素2,  ……
    
    
    基本类型有:
    bool   :布尔类型
    invbool:颠倒了值的bool类型;
    charp  :字符指针类型,内存为用户提供的字符串分配;(char *)
    int    :整型
    long   :长整型
    short  :短整型
    uint   :无符号整型(unsigned int)
    ulong  :无符号长整型(unsigned long)
    ushort :无符号短整型(unsigned short)
    
    指针类只能char*,对应名字 charp .
    
    访问权限:
    modlue_param 和 module_param_array 中的 perm 用于设定该参数的访问权限;
    perm 表示该参数在 sysfs 文件系统中所对应的文件节点的属性;你用该使用<linux/stat.h>中定义的权限值;这
    个值控制谁可以存取这些模块参数在 sysfs 文件系统中的表示;当 perm 为 0 时,表示此参数不存在 sysfs 文件
    系统下对应的文件节点;否则,模块被加载后,会出现 /sys/module/模块名/parameters/参数名 这类文件 ,带
    有给定的权限;
    比如:
    #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
    注意:如果一个参数被 sysfs 修改了,那么你的模块看到的参数值也被修改了,但是你的模块不会收到任何通知;
    你应当不要使模块参数可写,除非你准备好检测这个改变并因而作出反应;
    

    望采纳,谢谢,看看博主这个文章,希望可以帮助到你

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改