标签: kernel-modules

我怎么知道哪个内核配置选项启用了我的驱动程序?

TL;DR:
当我试图为 USB DAQ 设备编译驱动程序时,我已经重新配置了内核。驱动程序拒绝在默认发行版的内核下编译,但一切都适用于我调整后的内核。

该驱动程序由 2 个内核模块组成。我知道我更改了哪些选项,但我想知道哪个特定配置选项启用了我的驱动程序。有没有办法在不尝试(配置和编译内核)选项的所有可能组合的情况下弄清楚它?

长话短说:
我有一台 Advantech USB-4702 DAQ 设备,它带有适用于各种发行版的驱动程序,例如 openSUSE 11.4。它必须从源代码编译,并且在支持的发行版上编译良好(我尝试了 openSUSE 11.4 32 位和内核 2.6.37.6-24-desktop)。

当我试图让它在 SLES 11 SP 3(64 位,内核 3.0.76-0.11-default)下运行时,我遇到了编译错误。其中之一是由源代码中的这个片段引起的:

#ifndef CONFIG_USB
#  error "This driver needs to have USB support."
#endif
Run Code Online (Sandbox Code Playgroud)

所以我查看了正在运行的内核的配置选项(来自 /proc/config.gz),发现启用了 CONFIG_USB(我想如果它被禁用,我将无法使用我的 USB 键盘和鼠标)。然后我开始使用内核配置并启用(一些作为模块)其中一些。我编译内核,安装它,重新启动。然后驱动程序编译没有任何错误或警告,我现在可以使用该设备。

问题是,如何找出驱动程序的哪个特定选项“启用”编译?我知道更改了哪些选项,但我不想启用驱动程序不需要的任何内容。而且我不想用所有可能的选项组合来配置和编译内核。

configuration kernel-modules linux-kernel

5
推荐指数
2
解决办法
4627
查看次数

内核模块参数 vs /sys/class/... 解释

我正在制作(我的第一个)内核模块来使用我的熊猫板的 gpio 引脚和中断。

已经“内置”了,我注意到你可以做(​​简要)

cd /sys/class/gpio
echo 138 > export  # a file gpio138 appears    
echo out > gpio138/direction
echo 1 > gpio138/value
Run Code Online (Sandbox Code Playgroud)

将连接器引脚上的一些电压调高或调低。

类似地,在内核模块上,您有模块参数,您可以执行echo 3 > /sys/module/my_module/parameters/delay_seconds例如

我的问题:

  1. 什么处理 /sys/class/gpio ?内核模块 ? 一个司机 ?

  2. 无论 1. 是什么,内核模块中是否有可能有更复杂的模块参数,以及一些目录结构?就像包含延迟参数的“延迟”目录一样,....../sys/module/my_module/parameters/delays/delay_led1_seconds

  3. 您可以在路径 /sys/module/my_module/parameters/... 之外的其他地方设置参数吗?(/sys/class/a_name/... 例如)

  4. 当您写入时,gpio 如何在 /sys/class/gpio 中创建新/删除文件[un]export

drivers kernel-modules sysfs

5
推荐指数
1
解决办法
4019
查看次数

usb 内核模块不会按需加载,但可以与 shell 中的 insmod 和 modprobe 一起正常工作

我有一个可以编译和构建的 USB Linux 内核模块。运行insmod负荷我的模块dmseg,并tail -f /var/log/debug表明我它按预期工作。

depmod -a然后modprobe从终端运行加载模块并modprobe -r卸载,我看到 -tail -f /var/log/debug按预期输出。

当我插入我的 USB 键盘时,虽然它没有按预期触发和加载。

我已经调查/etc/udev/rules.d过没有成功。任何解决方法或指导都是最受欢迎的。正在Ubuntu 12.04.4 LTS使用自定义 Linux 内核运行3.14.0

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <linux/hid.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Aruna Hewapathirane");
MODULE_DESCRIPTION("A USB Keyboard Driver Kernel Module");

static struct usb_device_id usb_kbd_id_table[] = {
    { USB_INTERFACE_INFO(
        USB_INTERFACE_CLASS_HID,
        USB_INTERFACE_SUBCLASS_BOOT,
        USB_INTERFACE_PROTOCOL_KEYBOARD) },
    { } /* Terminating entry */
};

MODULE_DEVICE_TABLE(usb, usb_kbd_id_table);

static int …
Run Code Online (Sandbox Code Playgroud)

linux kernel usb kernel-modules

5
推荐指数
1
解决办法
5543
查看次数

当特定设备启动并加载内核模块时触发 init 脚本

在我的 Ubuntu 12.04 服务器上,我需要编写一个init.d脚本,等待infiniband接口(设备:mlx4_0,接口:ib0)完全启动,直到加载knem内核模块。

我有一个init.d脚本,如果我等到系统启动并手动运行service myscript start,它就可以工作,但如果我在启动时正常加载它,它就不起作用。我正在使用引导顺序99,但它无法正确启动,因为我需要等待这些功能运行。

init.d实现这一目标的正确语法是什么(一个内核模块和)?我想一定有一些关键字 like# Required-Start: $remote_fs $syslog $network但我找不到特定接口和内核模块的正确关键字。

背景:初始化脚本与SLURM的openmpiInfiniBand的相互作用。我已经编译了支持Mellanox infiniband驱动程序的SLURM,并且openMPI链接到这个版本的 SLURM。结果就是openMPI直接使用了mellanox infiniband驱动,比ipob(ip over inifiniband)强大很多。为此,它需要使用系统的注册内存,该内存必须设置为无限

所以:

loggerinit.d脚本中添加了一些输出。我注意到实际上这些模块已经启动并正在运行。所以我不完全理解这个问题。很奇怪,可能与一些需要的环境变量有关,这些变量仅在完整的用户空间中设置,而不是在初始化时设置。

问题涉及/etc/security/limits.conf 中设置的 memlock 限制。为了使它工作,我必须设置

*             -   memlock       unlimited
root          -   memlock       unlimited
Run Code Online (Sandbox Code Playgroud)

这样,当我使用ssh连接启动 slurm守护进程时,一切正常,并且当它是启动守护进程的 init 进程时,它就像不考虑 …

startup ubuntu kernel-modules upstart sysvinit

5
推荐指数
1
解决办法
1456
查看次数

如何查看驱动参数?

驱动程序通常支持各种参数。例如 NIC 驱动程序e1000支持流量控制 ( FlowControl) 或自动协商 ( AutoNeg) 参数。有没有办法查看加载过程中传递给驱动程序的参数?modinfo只显示驱动程序的所有可能参数,但我想看看哪些参数(以及这些参数的值)被传递给模块。dmesg似乎也没有提供这些信息。

一个地方,我也找了一些资料是根据/sys/module/,但例如在以下情况下e1000,只有copybreak参数上市/sys/module/e1000/parameters,而根据modinfoe1000模块支持超过十几个参数。

linux drivers kernel-modules

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

rtl8723be Realtek Wifi 卡驱动程序无法在 Ubuntu 14.04 上运行

我在我的新联想 G50-70 上安装了 Ubuntu 14.04。wifi 在 Windows 中运行良好,但在 Ubuntu 上表现很奇怪。它很慢,根本不加载较重的站点,一段时间后,完全下降。

经过一番研究,我发现:https : //bugs.launchpad.net/ubuntu/+source/linux/+bug/1320070

sudo rmmod rtl8723be && sudo modprobe rtl8723be 没有改变任何东西,wifi 仍然消失了。

我尝试的第一件事是sudo make install来自这个 repo 的驱动程序:https : //github.com/lwfinger/rtlwifi_new。不幸的是什么都没有改变。

接下来我尝试禁用睡眠功能: echo "options rtl8723be fwlps=0" | sudo tee /etc/modprobe.d/rtl8723be.conf,但没有任何运气。

然后我尝试: sudo rmmod -v ideapad_laptop 但删除该模块也无济于事。

以下是一些环境信息:

uname -a
Linux zirconcode 3.13.0-40-generic #69-Ubuntu SMP Thu Nov 13 17:53:56 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

lsusb | grep Rea
Bus 002 Device 006: ID 0bda:b728 Realtek Semiconductor …
Run Code Online (Sandbox Code Playgroud)

wifi drivers ubuntu kernel-modules realtek

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

如何为内核模块添加别名?

我想为内核模块添加一个别名,例如在带有 Linux 3.18.1 的 Ubuntu 14.10 上nvidia-343可用nvidia,以便它可以在别名下加载,并且别名出现在modinfo.

一个什么样的内核模块别名的解释目前的水平是在联机帮助页modprobemodinfomodinfo,等是相当可笑的,因为它是零(见https://bugs.launchpad.net/ubuntu/+source/kmod/+bug/ 1405669也是如此)。

http://www.tldp.org/LDP/lkmpg/2.6/html/x44.html所述,alias <name> <alias>以 to的形式添加一行不起作用(输出中未列出别名)(我猜(!)这些无论如何都是 2.6.x 的文档)。/etc/modprobe.confmodinfo

linux kernel-modules

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

EDID - 检测适当的 DPI 和刷新率值

我只是尝试使用 read-edid util 提取 EDID 文件数据;事情是输出显示:

$sudo get-edid | decode-edid

...
Manufacturer: AUO Model 20ec Serial Number 0
Made week 0 of 2013
EDID version: 1.4
Digital display
6 bits per primary color channel
Digital interface is not defined
Maximum image size: 34 cm x 19 cm
Gamma: 2.20
Supported color formats: RGB 4:4:4
First detailed timing is preferred timing
Established timings supported:
Standard timings supported:
Detailed mode: Clock 77.000 MHz, 344 mm x 193 mm
               1366 1382 1398 1628 …
Run Code Online (Sandbox Code Playgroud)

linux xorg kernel-modules x11 edid

5
推荐指数
1
解决办法
1902
查看次数

是否在 /sys/module 下列出了所有加载的模块?

我想知道是否可以使用/sys/modulelsmod的目录列表来获取当前加载的模块列表。

那只是加载模块的列表吗?或者也许与/sys/module/*/initstate?

linux kernel-modules sysfs

5
推荐指数
1
解决办法
6824
查看次数

如何启用内核pstore?

我正在尝试启用内核持久存储 (pstore) 以帮助调试一个模块,该模块在挂起时出现故障并冻结我的笔记本电脑,但我在这样做时遇到了困难。我的内核(4.1.20)配置相关参数是

# gunzip -c /proc/config.gz | grep PSTORE
CONFIG_CHROMEOS_PSTORE=m
CONFIG_PSTORE=y
CONFIG_PSTORE_CONSOLE=y
# CONFIG_PSTORE_PMSG is not set
# CONFIG_PSTORE_FTRACE is not set
CONFIG_PSTORE_RAM=m
Run Code Online (Sandbox Code Playgroud)

我也试过加载ramoops模块,但是当我这样做时

# cat /sys/module/pstore/parameters/backend
(null)
Run Code Online (Sandbox Code Playgroud)

它似乎没有启用任何东西。/sys/fs/pstore 也是空的,虽然 mount 说它已安装。我试图恐慌我的内核使用这个,但没有露面。

我究竟做错了什么?它甚至应该在普通笔记本电脑上工作,还是我完全在黑暗中?在寻找此功能时,我找不到太多东西。

debugging kernel-modules

5
推荐指数
1
解决办法
5090
查看次数