标签: kernel-module

"Linux内核模块程序员指南"中的chardev.c示例问题

我编译和运行的chardev.c从例子中lkmpg和写入设备时,收到了意想不到的错误:

anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied
Run Code Online (Sandbox Code Playgroud)

模块写入功能如下所示:

/*  
 * Called when a process writes to dev file: echo "hi" > /dev/chardev 
 */
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
    printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
    return -EINVAL;
}
Run Code Online (Sandbox Code Playgroud)

我没有收到无效操作的预期错误,并且错误打印到/ var/log/messages.

我可以从设备上读取没有问题,收到预期的结果:

anon@anon:~/lkmpg$ cat /dev/chardev 
I already told you 6 times Hello world!
Run Code Online (Sandbox Code Playgroud)

使用以下命令手动创建设备/ dev/chardev:

sudo mknod /dev/chardev c 252 0
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

- 编辑 - …

linux kernel kernel-module linux-device-driver

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

Linux内核模块检查内存完整性

我正在编写一个内核模块,通过控制校验和来检查代码段的完整性以便运行任务.我遇到了几个障碍:

  1. module_list如果变量没有被内核导出(如果没有这样的符号ksyms),我如何获取变量?我可以看到调用lsmod命令的所有模块,所以如何在模块中获取它?
  2. 在我的模块运行时,它显示某些代码段已更改.它总是发生在某些库中.为什么会这样?我认为代码段是不变的.
  3. 是否可以从内核模块控制进程数据的内存访问以及如何进行?

linux memory kernel integrity kernel-module

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

Zlib内核模块

我正在尝试实现一个使用zlib的内核模块,那么有没有可用于linux-2.6.17.8的Zlib模块?

如果我需要将zlib的源文件转换为内核空间,我需要替换malloc,函数调用,断言等?

c kernel zlib kernel-module linux-kernel

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

内核模块一直卡住了吗?

每次指针指向空值或其他东西时,模块都会卡住并拒绝被删除或卸载.摆脱它的唯一方法是重新启动机器.无论如何不必经常重启?我已经尝试通过使用rmmod -f但不使用来强制删除它.我正在运行kernel v 2.6.35

linux kernel-module

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

从内核获取当前驱动器路径

我正在编写一个需要在当前运行的内核的驱动器上读取MBR的模块.但是,如果我硬编码/ dev/sda,如果我在/ dev/sdb中安装模块,它将读取错误的MBR.

有没有办法获取当前运行的内核的当前驱动器路径?

(我会使用filp_open(),vfs_read()和filp_close()来读取前512个字节.)

c linux kernel kernel-module linux-kernel

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

找不到模块:modprobe

我编写了一个简单的hello world内核模块,编译并安装在/lib/modules/kernel_version/extra/路径中.

随着insmod它正确加载,但modprobe我得到一个错误

modprobe: FATAL: Module hello_world.ko not found.
Run Code Online (Sandbox Code Playgroud)

我已经安装了所有必需品.

这是Makefile的编译和安装:

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

请告诉我如何完成.

提前致谢.

c linux kernel-module linux-device-driver linux-kernel

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

Linux内核模块 - 打开创建的char设备会导致错误

我刚刚开始阅读Ldd3并尝试实现一个简单的模块,或多或少遵循本书中的示例.模块将带有自定义fops(空函数)的char设备添加到内核.模块加载没有问题,但是当我尝试打开设备时,进程被杀死,dmesg打印出调试信息.我的内核是4.8.0.X86-64.这是我的代码

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

#include <linux/types.h> // for dev_t
#include <linux/kdev_t.h> // for MAJOR, MINOR macros etc..
#include <linux/fs.h> // for alloc_chrdev_region etc ..
#include <linux/cdev.h> // to register char devic

MODULE_LICENSE("Dual BSD/GPL");

dev_t hello_num;    
struct cdev *my_cdev;

loff_t hello_llseek(struct file *filepo, loff_t offset, int a){
    return 0;
}

int hello_open(struct inode *inode, struct file *flip){
    printk(KERN_ALERT "you opened this device");
    return 0;
}

ssize_t hello_read(struct file *filep, char __user *ptr, size_t sizee, loff_t *gela){
    return 0;
}

ssize_t …
Run Code Online (Sandbox Code Playgroud)

c linux kernel-module linux-device-driver linux-kernel

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

为什么call_usermodehelper在大多数情况下会失败?

从内核模块,我试图使用call_usermodehelper函数来执行可执行文件sha1,该文件将文件作为参数并将文件的SHA1哈希值写入另一个文件(命名为output)。可执行文件完美运行。

int result=-1;
name = "/home/file"
char *hargv[] = {"/home/sha1", name,NULL };
char *henvp[] = {"HOME=/", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
result = call_usermodehelper("/home/sha1", hargv, henvp, 1);
Run Code Online (Sandbox Code Playgroud)

但是大多数情况下,call_usermodehelper返回-14并无法执行可执行文件。可能是什么原因?

有时它可以工作,但是随后创建的输出文件被锁定(与直接运行sha1时不同),我必须先运行chown才能正确使用它。如何预防?

无论如何,没有call_usermodehelper可以执行此操作吗?

linux kernel-module linux-kernel user-mode-linux kernel-mode

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

声音驱动程序 - 使用AWS EC2 ubuntu 16.04实例的snd-aloop内核模块设置问题

无法在AWS EC2 ubuntu 16.04实例中使用snd-aloop音频驱动程序

在snd-aloop上运行modprobe

$modprobe snd-aloop
modprobe: FATAL: Module snd-aloop not found in directory /lib/modules/4.4.0-1052-aws
Run Code Online (Sandbox Code Playgroud)

AWS matchine中的内核是 -

/lib/modules/4.4.0-1049-aws  
/lib/modules/4.4.0-1052-aws  
/lib/modules/4.4.0-116-generic
Run Code Online (Sandbox Code Playgroud)

当前内核已加载

$uname -r
4.4.0-1052-aws
Run Code Online (Sandbox Code Playgroud)
  1. 在经过大量搜索之后,确认snd-aloop预装在ubuntu 16.04中.(https://askubuntu.com/questions/891445/alsa-snd-aloop-kernel-module-for-16-04-or- 14-04-服务器)
  2. 所以我验证并发现模块出现在

"/lib/modules/4.4.0-116-generic"内核.location - /lib/modules/4.4.0-116-generic/kernel/sound/drivers/snd-aloop.ko

  1. 经过深思熟虑后,使用snd-aloop音频驱动程序的一种可能方法是使用4.4.0.116-通用内核.
    • 所以要做同样的事情我修改了/boot/grub/menu.lst并编辑了内核列表.(注释掉除了4.4.0.116-generic之外的所有其他内核)然后做了update-grub但是什么都没发生,内核加载的是/ lib /modules/4.4.0-1052-aws.
    • 然后我修改了/ etc/default/grub文件并将GRUB_DEFAULT = 0更改为内核标题为 GRUB_DEFAULT ="gnulinux-4.4.0-116-generic-advanced-b6adc449-5e3d-4331-ba6b-6e99a75fa48e> gnulinux-4.4.0 -116-generic-recovery-b6adc449-5e3d-4331-ba6b-6e99a75fa48e" 并再次进行了grub更新,但没有发生任何事情.

我已经阅读了以下文档

1. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html - 用于更改内核的Aws文档指南.

我不记得其他链接,但我搜索了很多.

请指出我正确的方向.如何在AWS EC2 Ubuntu 16.04实例中使用音频驱动程序sdn-aloop?

audio ubuntu kernel amazon-ec2 kernel-module

2
推荐指数
3
解决办法
1138
查看次数

获得内核模块的正常运行时间?

我有这个代码,我正在尝试使内核模块打印系统的正常运行时间,完全在simple_init上.

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

/* This function is called when the module is loaded. */

int simple_init(void)
{
    struct sysinfo info;
    sysinfo(&info);
    printk("This pc has been on for %ld seconds\n", info.uptime);;
    printk(KERN_INFO "Loading Module\n");
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

这就是我要做的,如果这不是一个内核模块,我发现有一个类似于sysinfo的linux库,它是linux/sysinfo,但即使我使用那个,它只有一个struct sysinfo而不是一个函数我可以调用sysinfo(),当我尝试这样做时,我得到了

error: implicit declaration of function ‘sysinfo’ [-Werror=implicit-function-declaration]
     sysinfo(&info);
Run Code Online (Sandbox Code Playgroud)

有谁知道其他任何有效的方法?

谢谢

c linux kernel kernel-module linux-kernel

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