标签: kernel-module

Linux内核 - 通过模块动态添加系统调用

有没有办法添加系统调用动态,比如通过模块?我找到了可以用模块覆盖现有系统调用的地方,只需更改sys_call_table[]数组以获取我的重写函数而不是安装我的模块时的本机,但是你可以用新的系统调用和模块吗?

linux kernel kernel-module linux-kernel

16
推荐指数
2
解决办法
4906
查看次数

如何从内核模块中的文件描述符中获取文件名?

我需要从我编写的一个小型Linux内核模块中获取给定文件描述符中的文件名.我尝试了在C中从文件描述符获取文件名时给出的解决方案,但由于某种原因,它打印出垃圾值(在解决方案中提到的使用readlink/proc/self/fd/NNN).我该怎么做?

c linux kernel-module linux-kernel

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

获取Linux内核中的网络设备列表

我一直在查看net/core/dev.c和其他文件,试图找出如何获取当前配置的网络设备列表,并证明它有点难以找到.

最终目标是能够使用dev.c中的dev_get_stats获取网络设备统计信息,但我需要知道当前接口,以便我可以获取net_device结构来传入.我必须在内核中执行此操作,因为我我正在编写一个模块,它添加了一个新的/ proc /条目,它与当前网络设备的一些统计信息有关,所以我可以从内核中完成这个.

如果有人能指出我如何获得接口,那将非常感激.

linux network-programming kernel-module linux-kernel

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

remap_pfn_range如何将内核内存重新映射到用户空间?

remap_pfn_rangefunction(用于mmap调用驱动程序)可用于将内核内存映射到用户空间.怎么做?谁能解释一下精确的步骤?内核模式是特权模式(PM),而用户空间是非特权(NPM).在PM中,CPU可以访问所有内存,而在NPM中,某些内存受到限制 - CPU无法访问.当remap_pfn_range被调用时,用户空间现在可以访问仅限于PM的内存范围?

remap_pfn_range代码有pgprot_t struct.这是与保护映射相关的结构.什么是保护映射?这是上述问题的答案吗?

kernel-module linux-device-driver linux-kernel virtual-address-space

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

如何使用特定内核模块查找进程列表?

当我尝试rmmod模块时,我收到错误消息"错误:正在使用的模块",lsmod | grep <module name>显示计数.
有没有办法告诉我哪些进程正在使用这个特定的内核模块/驱动程序?

linux driver kernel-module

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

如何在内核编程中执行shell命令?

我想在我的c代码中使用system()函数stdlib.h.我实际上在研究内核编程.

每当我想在其中使用system()时,它stdlib.h说错误说没有找到这样的文件.

c ubuntu kernel-module linux-kernel

15
推荐指数
3
解决办法
9817
查看次数

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

下面是一段代码,其中包含EXPORT_SYMBOL_GPL

62 struct resource *platform_get_resource(struct platform_device *dev,
 63                                        unsigned int type, unsigned int num)
 64 {
 65         int i;
 66 
 67         for (i = 0; i < dev->num_resources; i++) {
 68                 struct resource *r = &dev->resource[i];
 69 
 70                 if (type == resource_type(r) && num-- == 0)
 71                         return r;
 72         }
 73         return NULL;
 74 }
 75 EXPORT_SYMBOL_GPL(platform_get_resource);
Run Code Online (Sandbox Code Playgroud)

该宏在内核代码中多次出现......

linux macros kernel kernel-module linux-kernel

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

如何使用ioctl()来操作我的内核模块?

所以我正在尝试编写一个使用linux/timer.h文件的内核模块.我让它在模块内部工作,现在我试图让它从用户程序开始工作.

这是我的内核模块:

//Necessary Includes For Device Drivers.
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
#include <linux/timer.h>
#include <linux/ioctl.h>

#define DEVICE_NAME "mytimer"
#define DEVICE_FILE_NAME "mytimer"
#define MAJOR_NUM 61
#define MINOR_NUM 0

MODULE_LICENSE("Dual BSD/GPL");

static struct timer_list my_timer;

struct file_operations FileOps = 
{
    //No File Operations for this timer.
};

//Function to perform when timer expires.
void TimerExpire(int data)
{
    printk("Timer Data: %d\n", data);
}

//Function to set up timers.
void TimerSetup(void)
{
    setup_timer(&my_timer, TimerExpire, …
Run Code Online (Sandbox Code Playgroud)

linux kernel kernel-module linux-kernel gumstix

14
推荐指数
3
解决办法
3万
查看次数

如何获取Linux内核模块中的电池电量?

我试图在Linux内核模块中获取电池电量(模块通过modprobe插入).理想情况下,我希望使用内核API调用来获取电池信息.我在网上搜索了解决方案,我还探索了Linux内核源代码和Michael Meskes的程序源代码"acpi"的想法.

这些是我认为我可以使用的一些技术:

  1. 阅读并解析/proc/acpi/battery/BAT0/state/proc/acpi/battery/BAT0/info
  2. 读取/sys/class/power_supply/BAT0/charge_now并且charge_full不涉及解析.
  3. 如果我能弄清楚如何公开接口,我可以尝试使用来自Linux内核源驱动程序/ acpi/battery.c的调用.我可能需要这些方法acpi_battery_get_statusacpi_battery_get_info
  4. 我也注意到在drivers/acpi/sbs.c里面有一个方法acpi_battery_read,就在它上面有一个评论说"Driver Interface".如果有人知道如何使用它,这可能是另一种方式.

我认为在内核模块中读取文件可能是一个坏主意,但我不确定这些文件如何映射到内核函数调用,所以它可能没问题.

那么,你们能给我一些建议/建议吗?

编辑:我在下面的答案中包含了我的解决方案.

kernel-module acpi linux-kernel

14
推荐指数
1
解决办法
7940
查看次数

编写Linux内核模块时获取用户进程pid

如何获取触发我的内核模块file_operation.read例程的用户进程的PID (即哪个进程正在读取/dev/mydev)?

c linux kernel-module

14
推荐指数
3
解决办法
3万
查看次数