标签: kernel-modules

进入内核编程的最佳方式?

不是问什么书(尽管如果您知道任何有用的指南/教程),而是开始进行内核编程的最佳方法是什么,是否有最适合学习的特定发行版?

我最感兴趣的是设备驱动程序部分,但我也想了解内核是如何设置的(模块等)我有大约 4-5 年的 C/C++ 经验,但主要是来自大学的知识(所以它是不像 4-5 年的工作经验,如果你知道我的意思)

drivers kernel kernel-modules

8
推荐指数
3
解决办法
7428
查看次数

更新时自动应用模块补丁并编译内核?

我最近应用了一个单行补丁drivers/bluetooth/btusb.c,以便与我的蓝牙设备兼容。但是,每当我进行内核升级时,补丁都会丢失,直到有人向后移植它(这不太可能)。有没有办法让我运行脚本并自动修补每个新内核升级?

DKMS 似乎是一个不错的解决方案,但我不确定如何设置。我不想每次更新时都重新编译整个 Linux 内核,但我想将该补丁应用到 btusb 模块,重新编译它,并在每次更新时将其插入我的内核中。我如何使用从 获得的来源来做到这一点apt-get source linux-source-3.2.0?我需要复制哪些文件?关键make调用是make M=drivers/bluetooth modules,但这取决于首先构建的其他内核实用程序。如何为此组装 DKMS 模块?

关于如何使用补丁的详细信息,可以发现这里的问Ubuntu Linux系统。

compiling ubuntu kernel-modules upgrade

8
推荐指数
1
解决办法
2128
查看次数

“linux-headers-3.7.5-1-ARCH”是什么包?

我正在调试一个闭源软件安装程序,它似乎对我的发行版有一些先入为主的概念。未找到 后安装中止apt-get。它尝试运行的命令是:

apt-get -y -q install linux-headers-3.7.5-1-ARCH
Run Code Online (Sandbox Code Playgroud)

我想“包名称”来自/usr/src,唯一的条目是linux-3.7.5-1-ARCH. 有没有人对我应该用 pacman 安装哪个软件包有任何有根据的猜测?

头文件可能会用于编译自定义硬件的驱动程序。

以下是安装日志中的一些相关文本:

注意:Linux 驱动程序必须针对您的 Linux 操作系统当前运行的内核的内核源构建。此脚本为您自动执行此任务。

注意:您必须安装 Linux OS 内核头源文件。如果您计划运行 Jungo 调试监视器,那么您可能还需要安装“compat-libstdc++”和“libpng3”。

您的 Linux 当前正在运行以下内核版本:
3.7.5-1-ARCH

linux compiling arch-linux kernel-modules header-file

8
推荐指数
1
解决办法
6909
查看次数

一个模块是如何被批准包含在 linux 内核中的?

我现在正在编译linux kernel 2.6,发现总共有1000多个模块。一个模块是如何被批准包含在 linux 内核中的?

kernel kernel-modules

7
推荐指数
1
解决办法
281
查看次数

在一台机器上构建内核,在另一台机器上安装

我想在我的主机上构建 Linux 内核并在我的 VWware 虚拟机中使用它。他们现在都使用相同的 Ubuntu 内核。

在我的主机上,我执行makemake configuremake modules_install那么,在执行和之前,我应该将哪些文件复制到目标计算机make install

我还需要做哪些事情?

compiling kernel kernel-modules

7
推荐指数
2
解决办法
9305
查看次数

什么决定在编译期间静态地在内核中构建哪些内核模块?

我刚刚编译了一个新内核并问自己:在编译过程中是什么决定了内核中静态构建了哪些内核模块?

然后我删除了/lib/modules,重新启动并发现我的系统工作正常,所以看起来所有基本模块都是静态构建在内核中的。

如果没有/lib/modules,内核会加载 22 个。在目录存在的情况下,它会加载 67 个模块。

linux drivers kernel kernel-modules linux-kernel

7
推荐指数
1
解决办法
4141
查看次数

modprobe 在哪里加载 udev 请求的驱动程序?

让我们假设一个 Linux 系统已启动并正常运行的场景。用户来了并热插拔了 USB 存储设备。

发生的事件顺序如下图所示:

在此处输入图片说明

modprobe 在哪里加载它的驱动程序?所请求设备的驱动程序是/sys/bus/drivers在 modprobe 加载之后还是之前找到的?

我在这里试图建立的是/sys/上图中的条目和发生的事件之间的关系。

drivers udev kernel-modules modprobe linux-kernel

7
推荐指数
1
解决办法
6037
查看次数

调试内核模块

我正在 Raspberry Pi 上为 Raspbian(内核版本 4.9.24)开发网络驱动程序,每次加载模块时它都会崩溃。

使用日志/var/log/messages我已经能够判断出哪种方法失败了,但我仍然不知道它为什么失败。

May  7 17:15:29 raspberrypi kernel: [  228.384164] CPU: 0 PID: 1163 Comm: insmod Tainted: P           O    4.9.24+ #993
May  7 17:15:29 raspberrypi kernel: [  228.388503] Hardware name: BCM2835
May  7 17:15:29 raspberrypi kernel: [  228.390701] task: d888ed00 task.stack: da696000
May  7 17:15:29 raspberrypi kernel: [  228.392901] PC is at register_netdevice+0x20/0x4cc
May  7 17:15:29 raspberrypi kernel: [  228.395064] LR is at register_netdev+0x24/0x34
May  7 17:15:29 raspberrypi kernel: [  228.397106] pc : [<c04eea38>] …
Run Code Online (Sandbox Code Playgroud)

debugging kernel-modules network-interface

7
推荐指数
1
解决办法
638
查看次数

获取内核源代码(ubuntu)

我想尝试编写一个 linux 驱动程序。我正在尝试设置我的环境。我当前的内核:

$ uname -r
4.10.0-37-generic
Run Code Online (Sandbox Code Playgroud)

然后我下载源代码:

$ apt-get source linux-image-$(uname -r)
Reading package lists... Done 
Picking 'linux' as source package instead of 'linux-image-4.10.0-37-generic'
...
Run Code Online (Sandbox Code Playgroud)

我去编译和修改我的驱动程序,它失败了。查看 dmesg,它显示:

version magic '4.10.17 SMP mod_unload ' should be '4.10.0-37-generic SMP mod_unload '
Run Code Online (Sandbox Code Playgroud)

在这一点上,我很困惑。我回到我下载的源代码树,当我运行时

$ make kernelversion
4.10.17
Run Code Online (Sandbox Code Playgroud)

好的,试试两个。下载内核 4.10.17 并安装它。

$ uname -r
4.10.17-041017-generic
Run Code Online (Sandbox Code Playgroud)

还是报错:

version magic '4.10.17 SMP mod_unload ' should be '4.10.17-041017-generic SMP mod_unload
Run Code Online (Sandbox Code Playgroud)

所以也许有人可以提供帮助:对我来说,在 ubuntu 上获得工作内核和匹配源的最佳和正确方法是什么(嗯,xubuntu,但我认为这不重要)?我是否需要从 kernel.org 获取代码并从头开始构建它?我有点想匹配随附的 Ubuntu 内核。

ubuntu kernel kernel-modules linux-kernel

7
推荐指数
1
解决办法
7686
查看次数

如何修复明显缺失的内核模块依赖声明?

我遇到了 ASIX AX88179 USB 3.0 千兆位以太网适配器的一个相对常见的问题,它根本无法工作,或者偶尔工作,并且dmesg显示如下错误

[23552.344134] ax88179_178a 2-1:2.1 eth1: Failed to read reg index 0x0000: -32
Run Code Online (Sandbox Code Playgroud)

在网上搜索时,我发现了有关此问题或类似问题的报告,但没有令人满意的解决方案或解释。

经过一番调试,发现如果cdc_mbim之前加载了模块,问题就解决了ax88179_178a。以下解决了该问题,直到下次重新启动为止:

# rmmod ax88179_178a
# modprobe cdc_mbim
# modprobe ax88179_178a  # optional
Run Code Online (Sandbox Code Playgroud)

我已经检查过没有直接或间接cdc_mbim声明为 的依赖项。ax88179_178a

我怎样才能使ax88179_178a依赖cdc_mbim,以便cdc_mbim始终自动加载ax88179_178a


更新。

我的问题似乎与Create Linux module dependency for autoloading module重复。

drivers usb configuration kernel-modules dependencies

7
推荐指数
1
解决办法
2345
查看次数