标签: kernel-module

使用模块读取内核内存

作为我项目的一部分,我需要读取内核以获取系统调用表和系统调用地址的内存地址.或者实际上我需要提取系统调用表的内容和所有系统调用.

直到现在我才将GDB用于此目的.有没有办法让我可以使用内核模块.我是新的内核模块编程.在这里寻求专家的建议.

linux kernel-module linux-kernel

4
推荐指数
1
解决办法
3139
查看次数

将参数传递给内核模块

我有一些使用名为foo.ko. 这必须insmod来自Linux内核。

有没有办法在 insmod 期间将参数传递给内核模块,例如:

insmod foo.ko <parameter>
Run Code Online (Sandbox Code Playgroud)

?

linux parameter-passing kernel-module linux-kernel

4
推荐指数
2
解决办法
2万
查看次数

从内核模块中的 proc 文件访问数据

我需要访问 Android 内核模块中的一些 proc 文件。基本上我需要 cat 命令中显示的信息,例如cat /proc/uptime. 但是我需要以编程方式进行。

我尝试使用proc_fs函数,但对我来说有点模糊,通常示例是创建一个 proc 文件然后读取它,就是这样。我需要实际使用 proc 文件中的数据。

我也尝试过fopen,但它似乎不适用于模块。

我怎样才能做到这一点?我真的是新手。我正在研究金鱼 Android 内核。

谢谢。

android kernel kernel-module linux-kernel procfile

4
推荐指数
1
解决办法
2258
查看次数

您编写内核模块的目的是什么?

更多的是概述问题而不是技术问题。我可以看到周围的 Linux 内核开发人员职位,我想知道您希望成为什么内核模块?与使用系统调用和执行其他操作相比,哪些类型的任务最适合作为内核模块完成?

less /proc/modules在我的系统上显示 dm_log,设备映射器的记录器。为什么日志记录是从内核完成的,而不是在用户空间完成的?

linux kernel-module linux-kernel

4
推荐指数
1
解决办法
1382
查看次数

内核模块如何卸载自身而不在内核日志中生成错误?

我制作了一个简单的模块,可以在加载时打印 GDT 和 IDT。当它完成工作后,就不再需要它并且可以卸载。但如果它返回负数以停止加载,insmod则会抱怨,并且错误消息将记录在内核日志中。

内核模块如何优雅地卸载自身?

linux kernel-module linux-kernel

4
推荐指数
1
解决办法
3850
查看次数

内核参数更改信号

我想在内核 (3.x) 模块中使用参数:

static char param = 0xff;
module_param(param, ushort, S_IRUGO | S_IWUGO);
MODULE_PARM_DESC(param, "a parameter");
Run Code Online (Sandbox Code Playgroud)

有没有可能检测到这个参数的变化?是否有可用于调用服务例程的信号?

最好的问候亚历克斯


附加信息module_param(name,type,perm)

的可能值type

  • bool
  • invbool
  • charp
  • int
  • long
  • short
  • uint
  • ulong
  • ushort

permlinux/stat.h 中定义

#define S_IRWXUGO   (S_IRWXU|S_IRWXG|S_IRWXO)
#define S_IALLUGO   (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
#define S_IRUGO     (S_IRUSR|S_IRGRP|S_IROTH)
#define S_IWUGO     (S_IWUSR|S_IWGRP|S_IWOTH)
#define S_IXUGO     (S_IXUSR|S_IXGRP|S_IXOTH)
Run Code Online (Sandbox Code Playgroud)

这是一个完整的代码示例:

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

MODULE_LICENSE("GPL");     
MODULE_AUTHOR("Alex"); 
MODULE_DESCRIPTION("test module."); 
MODULE_VERSION("0.1");             

static int param = 1;
module_param(param, int, S_IRUGO|S_IWUGO);

static int __init mod_init(void){
   printk(KERN_INFO "param %d\n", …
Run Code Online (Sandbox Code Playgroud)

c kernel kernel-module linux-kernel

4
推荐指数
1
解决办法
3479
查看次数

Yocto:将内核模块配方添加到映像,但它不会在启动时加载

出于测试目的,我使用yocto提供的示例配方来演示如何构建内核模块.

SUMMARY = "Example of how to build an external Linux kernel module"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"

inherit module

PR = "r0"
PV = "0.1"

SRC_URI = "file://Makefile \
           file://hello.c \
           file://COPYING \
          "

S = "${WORKDIR}"

# The inherit of module.bbclass will automatically name module packages with
# "kernel-module-" prefix as required by the oe-core build environment.
Run Code Online (Sandbox Code Playgroud)

hello.c文件非常简单.

#include <linux/module.h>

int init_module(void)
{
    printk("Hello World!\n");
    return 0;
}

void cleanup_module(void)
{
    printk("Goodbye Cruel World!\n");
} …
Run Code Online (Sandbox Code Playgroud)

kernel-module yocto

4
推荐指数
1
解决办法
1万
查看次数

systemd 如何自动插入内核模块?

我试图找出内核模块是如何自动插入的。我正在使用 Arch Linux,所以基本上我正在使用systemd.

经过一番研究,我知道至少有两种方法可以插入内核模块:

  1. systemd有一个名为 的单元systemd-modules-load.service,它读取/etc/modules-load.d/*.conf(以及 和 中的/run内核模块名称/usr/lib)(systemd 文档)。

  2. udev当检测到设备时可以自动处理内核模块(Arch Linux wiki 页面)。

但是,我没能看到它们是如何工作的:

  1. /etc/modules-load.d/*.conf我的系统上(或 或/run)中没有配置文件/usr/lib。因此它没有什么可加载的systemd-modules-load.service

  2. 中有一些modprobe命令/usr/lib/udev/rules.d,但不是我在 中看到的所有内核模块lsmod

例如,我xfs在 的输出中有一个内核模块lsmod,但我找不到插入它的触发点。我的文件系统都没有安装xfscat /proc/mounts | grep xfs什么也不显示)。

有没有关于这一切如何运作的介绍或教程?

udev kernel-module archlinux systemd

4
推荐指数
1
解决办法
6405
查看次数

Linux 内核构建:以非交互方式执行“make localmodconfig”

我想以非交互式方式运行“make localmodconfig”。在尝试的同时

是的 " " | 进行本地修改配置

给出了以下错误:

Console input/output is redirected. Run 'make oldconfig' to update configuration.

make[1]: *** [scripts/kconfig/Makefile:45: localmodconfig] Error 1
make: *** [Makefile:547: localmodconfig] Error 2
Run Code Online (Sandbox Code Playgroud)

我更喜欢 localmodconfig 而不是 olddefconfig 因为旧内核有 3000 多个模块并且只使用其中的 30 个。关于如何实现这一目标的任何想法?

linux build kernel-module linux-kernel embedded-linux

4
推荐指数
1
解决办法
3349
查看次数

Linux 内核模块开发“模块:x86/modules:跳过无效的重定位目标,类型 1 的现有值非零”

我目前正在尝试开发一个简单的Linux内核模块。它应该只记录一些东西,它是从互联网上一比一复制的。

我有以下文件:lkm_example.c

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

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Robert W. Oliver II");
MODULE_DESCRIPTION("A simple example Linux module.");
MODULE_VERSION("0.01");

static int __init lkm_example_init(void) {
 printk(KERN_INFO "Hello, World!\n");
 return 0;
}

static void __exit lkm_example_exit(void) {
 printk(KERN_INFO "Goodbye, World!\n");
}

module_init(lkm_example_init);
module_exit(lkm_example_exit);
Run Code Online (Sandbox Code Playgroud)

生成文件:

obj-m += lkm_example.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
Run Code Online (Sandbox Code Playgroud)

我还做了以下工作:

sudo apt-get install build-essential linux-headers-`uname -r`
Run Code Online (Sandbox Code Playgroud)

对于编译我使用:

stbau@kernel-dev-vm:~/src/lkm_example$ sudo make
make -C /lib/modules/5.13.0-39-generic/build M=/home/stbau/src/lkm_example modules
make[1]: …
Run Code Online (Sandbox Code Playgroud)

c linux kernel kernel-module linux-kernel

4
推荐指数
1
解决办法
8421
查看次数