问题标签 [linux-device-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
21713 浏览

linux - 学习内核编程

我想学习lLinux内核编程。

这样做的出发点是什么?可以针对哪些更简单的问题?

0 投票
1 回答
2187 浏览

c++ - 如何移植 USB RNDIS 设备驱动程序?

首先:我完全是这种工作的新手。

我有一个USB rndis设备驱动程序,适用于某些只能在 XP/2000/Vista 中工作的硬件。但是我想把它移植到 CE 或 Linux 上,供应商也说开发人员应该这样做。

总之,我有 XP 驱动程序和驱动程序具有的接口/端点配置。我有两个相关的问题:

  1. 为什么我需要编写驱动程序来使用 IP 号与设备通信?Windows 默认不支持吗?

  2. 如果是这样,我需要知道什么才能将驱动程序移植到另一个操作系统?我使用了windriver,它得到了配置,但接下来我该怎么办?关于该设备,我还应该了解什么?

0 投票
4 回答
75915 浏览

linux-kernel - Linux 内核如何知道在哪里寻找驱动程序固件?

我正在 Ubuntu 下编译一个自定义内核,我遇到了我的内核似乎不知道在哪里寻找固件的问题。在 Ubuntu 8.04 下,固件与内核版本的绑定方式与驱动程序模块的绑定方式相同。例如,内核 2.6.24-24-generic 将其内核模块存储在:

及其固件:

当我根据“ Alternate Build Method: The Old-Fashioned Debian Way ”编译 2.6.24-24-generic Ubuntu 内核时,我得到了适当的模块目录,我的所有设备都可以工作,除了那些需要固件的设备,比如我的英特尔无线网卡(ipw2200模块)。

例如,内核日志显示,当 ipw2200 尝试加载固件时,控制固件加载的内核子系统无法找到它:

errno-base.h 将其定义为:

(返回 ENOENT 的函数在它前面加上一个减号。)

我尝试在 /lib/firmware 中创建一个符号链接,其中我的内核名称指向 2.6.24-24-generic 目录,但是这导致了同样的错误。该固件是非 GPL,由 Intel 提供并由 Ubuntu 打包。我不相信它与特定的内核版本有任何实际联系。cmp表明各个目录中的版本是相同的。

那么内核如何知道去哪里寻找固件呢?

更新

我找到了解决我遇到的确切问题的方法,但是它不再适用,因为 Ubuntu 已经消除/etc/hotplug.d并且不再将其固件存储在/usr/lib/hotplug/firmware.

更新2

更多的研究发现了更多的答案。在 92 版之前udev,该程序firmware_helper是加载固件的方式。从udev93 开始,这个程序被一个名为 firmware.sh 的脚本取代,据我所知,它提供了相同的功能。这两个都将固件路径硬编码为/lib/firmware. Ubuntu 似乎仍在使用/lib/udev/firmware_helper二进制文件。

固件文件的名称firmware_helper在环境变量$FIRMWARE中传递给连接到路径/lib/firmware并用于加载固件的环境变量。

加载固件的实际请求是由驱动程序(在我的例子中为 ipw2200)通过系统调用发出的:

现在在驱动程序调用request_firmwarefirmware_helper查看$FIRMWARE环境变量之间的某个地方,内核包名称被添加到固件名称之前。

那么谁在做呢?

0 投票
8 回答
13301 浏览

c - 如何编写驱动程序?

我想在 linux os 中用 C 编写驱动程序,尽管我认为它非常困难。我可以得到一些关于如何开始或要遵循的书籍的提示吗?驱动可以从我的USB口到显卡!!

我知道我可以在哪里搜索书籍,我想知道我应该从哪些基础知识开始。我是否需要具备硬件知识以及哪些特定书籍适合像我这样的新手?

0 投票
7 回答
11587 浏览

c - Linux:用C直接访问硬盘

如何获得对 HD 的原始访问权限并知道该位置是否已使用或是否为可用空间?举个例子,我可以简单地通过打开和读取磁盘设备来获得直接访问,目标是知道是否使用了例如 10.000 字节。

0 投票
9 回答
1145 浏览

c - Linux 操作系统类的内容

在即将到来的学期,我将成为操作系统课程的助教。这些实验室将专门处理 Linux 内核。

  1. 你认为 Linux 内核的哪些概念/组件在课堂上最重要?
  2. 你希望在你的学习中被忽略的内容是什么?

任何有关 Linux 内核或整体操作系统设计的建议都将不胜感激。

0 投票
2 回答
1310 浏览

linux - 通过 VMware 交叉编译 Linux 内核和调试

我正在考虑在 vmware VM 下进行一些 Linux 内核和设备驱动程序开发以进行测试(Ubuntu 9.04 作为 vmware server 2.0 下的来宾),同时在 Ubuntu 8.04 主机上进行编译。

我不想承受在 VM 下进行编译的性能损失。

我知道内核显然没有链接到它自身之外的任何东西,所以在这方面不应该有任何问题,但是

  1. 这样做时我需要注意什么特别的问题吗?
  2. 除了在内核崩溃时仍然有一台正在运行的计算机之外,此设置还有其他好处吗?
  3. 是否有使用这种设置的指南?

编辑

我已经看到很多关于在 VMware 中通过 Workstation 6.0 在主机上使用 GDB 进行远程调试的参考资料。有谁知道这是否适用于任何免费版本的 VMWare,例如 Server 2.0。

0 投票
2 回答
743 浏览

linux-kernel - 多个网卡的相同驱动程序——性能瓶颈?

我正在为多个英特尔网卡(英特尔 EXPI9402PT,基于 82571EB 芯片)使用驱动程序 e1000e。问题是当我尝试在多个接口上使用最大速度(1GB)时,每个接口的速度开始下降。

我在内核空间中有自己的驱动程序,旨在仅发送给定的数据包。它只是通过以下方式分配数据包:

他们通过以下方式发送它们:

每个接口都有自己的驱动程序实例。

对于一个接口,我得到:120435948 字节/秒。

对于两个接口,我得到:61080233 字节/秒和 60515294 字节/秒。

对于三个接口,我得到:28564020 字节/秒、27111184 字节/秒、27118907 字节/秒。

可能是什么原因?hard_start_xmit 函数是可重入的吗?

0 投票
4 回答
1878 浏览

linux-kernel - kvm vs. vmware 用于内核调试/USB驱动开发

我目前正在设置 vmware Server 2.0 以使用 gdb 进行内核调试(请参阅此设置指南),有人问我为什么不使用 kvm?

所以我问:内核调试/USB驱动开发的kvm vs. vmware

各自的优缺点是什么?

0 投票
1 回答
205 浏览

linux - 将自定义硬件与一个输入接口以在 /proc 中的某个位置进行切换的最简单方法是什么?

我有一个设备,它需要低电流 3-12v 输入信号来实现它的魔力,我想将它连接到我的 linux 盒子。我对此有哪些选择?拥有一些可能的低成本用户空间解决方案会很棒。