内置内核模块的module_init宏vs init_module函数

问题描述

我一直在尝试在Android上进行一些轻量级的内核开发。

我对使用内置的方式感到困惑

let pass = '11223322345666600222222';
function CompressPass (string) {
  string += '-';
  let str = '';
  for (let i = 1; i < string.length; i++) {
    const nextItem = string[i];
    const item = string[i - 1];
     if (item != nextItem){
      str += item;
     }
  };
  return str;
}
console.log(CompressPass(pass))

内核模块使用obj-y += module_name.o 宏而不是module_init()函数。

我有以下两个简单的模块,第一个一个:

init_module()

第二一个

#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void){
    printk(KERN_ALERT "This is our first program.");
    return 0;
}
void cleanup_module(void){
    printk(KERN_ALERT "End of our first program.");
}

当我用两个内置模块编译内核时,第二个模块就是在#include <linux/init.h> #include <linux/module.h> #include <linux/printk.h> static int __init test_module_init(void) { pr_warn("Hello,world\n"); return 0; } module_init(test_module_init); static void __exit test_module_exit(void) { pr_warn("Goodbye\n"); } module_exit(test_module_exit); 中显示一条消息的模块。但是,第一个模块没有。

但是,如果单独编译第一个模块并使用dmesg加载 *。ko 文件,则第一个模块会将消息打印到insmod ./module_name.ko

这是因为在启动时需要dmesg宏来加载内核模块的ELF吗?尽管module_init()是从 *。ko 文件中动态加载ELF的,所以我们不需要使用insmod宏对其进行“注册”吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...