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 键盘和鼠标)。然后我开始使用内核配置并启用(一些作为模块)其中一些。我编译内核,安装它,重新启动。然后驱动程序编译没有任何错误或警告,我现在可以使用该设备。
问题是,如何找出驱动程序的哪个特定选项“启用”编译?我知道更改了哪些选项,但我不想启用驱动程序不需要的任何内容。而且我不想用所有可能的选项组合来配置和编译内核。
我正在制作(我的第一个)内核模块来使用我的熊猫板的 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例如
我的问题:
什么处理 /sys/class/gpio ?内核模块 ? 一个司机 ?
无论 1. 是什么,内核模块中是否有可能有更复杂的模块参数,以及一些目录结构?就像包含延迟参数的“延迟”目录一样,....../sys/module/my_module/parameters/delays/delay_led1_seconds
您可以在路径 /sys/module/my_module/parameters/... 之外的其他地方设置参数吗?(/sys/class/a_name/... 例如)
当您写入时,gpio 如何在 /sys/class/gpio 中创建新/删除文件[un]export?
我有一个可以编译和构建的 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) 在我的 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,的openmpi和InfiniBand的相互作用。我已经编译了支持Mellanox infiniband驱动程序的SLURM,并且openMPI链接到这个版本的 SLURM。结果就是openMPI直接使用了mellanox infiniband驱动,比ipob(ip over inifiniband)强大很多。为此,它需要使用系统的注册内存,该内存必须设置为无限。
所以:
我logger在init.d脚本中添加了一些输出。我注意到实际上这些模块已经启动并正在运行。所以我不完全理解这个问题。很奇怪,可能与一些需要的环境变量有关,这些变量仅在完整的用户空间中设置,而不是在初始化时设置。
问题涉及/etc/security/limits.conf 中设置的 memlock 限制。为了使它工作,我必须设置
* - memlock unlimited
root - memlock unlimited
Run Code Online (Sandbox Code Playgroud)
这样,当我使用ssh连接启动 slurm守护进程时,一切正常,并且当它是启动守护进程的 init 进程时,它就像不考虑 …
驱动程序通常支持各种参数。例如 NIC 驱动程序e1000支持流量控制 ( FlowControl) 或自动协商 ( AutoNeg) 参数。有没有办法查看加载过程中传递给驱动程序的参数?modinfo只显示驱动程序的所有可能参数,但我想看看哪些参数(以及这些参数的值)被传递给模块。dmesg似乎也没有提供这些信息。
一个地方,我也找了一些资料是根据/sys/module/,但例如在以下情况下e1000,只有copybreak参数上市/sys/module/e1000/parameters,而根据modinfo该e1000模块支持超过十几个参数。
我在我的新联想 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) 我想为内核模块添加一个别名,例如在带有 Linux 3.18.1 的 Ubuntu 14.10 上nvidia-343可用nvidia,以便它可以在别名下加载,并且别名出现在modinfo.
一个什么样的内核模块别名的解释目前的水平是在联机帮助页modprobe,modinfo,modinfo,等是相当可笑的,因为它是零(见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
我只是尝试使用 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) 我想知道是否可以使用/sys/modulelsmod的目录列表来获取当前加载的模块列表。
那只是加载模块的列表吗?或者也许与/sys/module/*/initstate?
我正在尝试启用内核持久存储 (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 说它已安装。我试图恐慌我的内核使用这个,但没有露面。
我究竟做错了什么?它甚至应该在普通笔记本电脑上工作,还是我完全在黑暗中?在寻找此功能时,我找不到太多东西。