问题标签 [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.
linux - 学习内核编程
我想学习lLinux内核编程。
这样做的出发点是什么?可以针对哪些更简单的问题?
c++ - 如何移植 USB RNDIS 设备驱动程序?
首先:我完全是这种工作的新手。
我有一个USB rndis设备驱动程序,适用于某些只能在 XP/2000/Vista 中工作的硬件。但是我想把它移植到 CE 或 Linux 上,供应商也说开发人员应该这样做。
总之,我有 XP 驱动程序和驱动程序具有的接口/端点配置。我有两个相关的问题:
为什么我需要编写驱动程序来使用 IP 号与设备通信?Windows 默认不支持吗?
如果是这样,我需要知道什么才能将驱动程序移植到另一个操作系统?我使用了windriver,它得到了配置,但接下来我该怎么办?关于该设备,我还应该了解什么?
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
是加载固件的方式。从udev
93 开始,这个程序被一个名为 firmware.sh 的脚本取代,据我所知,它提供了相同的功能。这两个都将固件路径硬编码为/lib/firmware
. Ubuntu 似乎仍在使用/lib/udev/firmware_helper
二进制文件。
固件文件的名称firmware_helper
在环境变量$FIRMWARE
中传递给连接到路径/lib/firmware
并用于加载固件的环境变量。
加载固件的实际请求是由驱动程序(在我的例子中为 ipw2200)通过系统调用发出的:
现在在驱动程序调用request_firmware
和firmware_helper
查看$FIRMWARE
环境变量之间的某个地方,内核包名称被添加到固件名称之前。
那么谁在做呢?
c - 如何编写驱动程序?
我想在 linux os 中用 C 编写驱动程序,尽管我认为它非常困难。我可以得到一些关于如何开始或要遵循的书籍的提示吗?驱动可以从我的USB口到显卡!!
我知道我可以在哪里搜索书籍,我想知道我应该从哪些基础知识开始。我是否需要具备硬件知识以及哪些特定书籍适合像我这样的新手?
c - Linux:用C直接访问硬盘
如何获得对 HD 的原始访问权限并知道该位置是否已使用或是否为可用空间?举个例子,我可以简单地通过打开和读取磁盘设备来获得直接访问,目标是知道是否使用了例如 10.000 字节。
c - Linux 操作系统类的内容
在即将到来的学期,我将成为操作系统课程的助教。这些实验室将专门处理 Linux 内核。
- 你认为 Linux 内核的哪些概念/组件在课堂上最重要?
- 你希望在你的学习中被忽略的内容是什么?
任何有关 Linux 内核或整体操作系统设计的建议都将不胜感激。
linux - 通过 VMware 交叉编译 Linux 内核和调试
我正在考虑在 vmware VM 下进行一些 Linux 内核和设备驱动程序开发以进行测试(Ubuntu 9.04 作为 vmware server 2.0 下的来宾),同时在 Ubuntu 8.04 主机上进行编译。
我不想承受在 VM 下进行编译的性能损失。
我知道内核显然没有链接到它自身之外的任何东西,所以在这方面不应该有任何问题,但是
- 这样做时我需要注意什么特别的问题吗?
- 除了在内核崩溃时仍然有一台正在运行的计算机之外,此设置还有其他好处吗?
- 是否有使用这种设置的指南?
编辑
我已经看到很多关于在 VMware 中通过 Workstation 6.0 在主机上使用 GDB 进行远程调试的参考资料。有谁知道这是否适用于任何免费版本的 VMWare,例如 Server 2.0。
linux-kernel - 多个网卡的相同驱动程序——性能瓶颈?
我正在为多个英特尔网卡(英特尔 EXPI9402PT,基于 82571EB 芯片)使用驱动程序 e1000e。问题是当我尝试在多个接口上使用最大速度(1GB)时,每个接口的速度开始下降。
我在内核空间中有自己的驱动程序,旨在仅发送给定的数据包。它只是通过以下方式分配数据包:
他们通过以下方式发送它们:
每个接口都有自己的驱动程序实例。
对于一个接口,我得到:120435948 字节/秒。
对于两个接口,我得到:61080233 字节/秒和 60515294 字节/秒。
对于三个接口,我得到:28564020 字节/秒、27111184 字节/秒、27118907 字节/秒。
可能是什么原因?hard_start_xmit 函数是可重入的吗?
linux-kernel - kvm vs. vmware 用于内核调试/USB驱动开发
我目前正在设置 vmware Server 2.0 以使用 gdb 进行内核调试(请参阅此设置指南),有人问我为什么不使用 kvm?
所以我问:内核调试/USB驱动开发的kvm vs. vmware
各自的优缺点是什么?
linux - 将自定义硬件与一个输入接口以在 /proc 中的某个位置进行切换的最简单方法是什么?
我有一个设备,它需要低电流 3-12v 输入信号来实现它的魔力,我想将它连接到我的 linux 盒子。我对此有哪些选择?拥有一些可能的低成本用户空间解决方案会很棒。