linux-device-driver 相关问题

设备驱动程序在Linux内核中扮演着特殊的角色。它们是以编程方式抽象的“黑盒子”,使特定的硬件响应明确定义的内部编程接口;他们完全隐藏了设备如何工作的细节。

dma_set_mask_and_coherent(),具有适用于 arm64 上 PCIe 的 24 位 DMA 掩码

我正在编写 PCIe 驱动程序,但在设置 DMA 掩码时遇到问题。 主机是带有四核 ARM-Cortex A53 的 zcu102。 PCIe 设备是自定义设备。 内核是v5.15.0-1023-xilinx-zyn...

回答 1 投票 0

dma_set_mask_and_coherent 具有 24 位 DMA 掩码,适用于 ARM64 上的 PCIe

我正在编写 PCIe 驱动程序,但在设置 DMA 掩码时遇到问题。 主机是带有四核 ARM-Cortex A53 的 zcu102。 PCIe 设备是自定义设备。 内核是 5.15.0-1023-xilinx-zynqmp

回答 1 投票 0

__init 函数中的局部静态标识符会发生什么?

在应用程序编程中,静态变量存储在.BSS段中。与局部变量不同,它们不会在函数返回或类似于全局变量的情况下被取消分配。 在 Linux 中...

回答 1 投票 0

Linux 设备驱动程序中的静态函数?

Linux代码中设备驱动程序中的大多数函数定义都定义为静态,这是否有原因?是否有一个原因? 有人告诉我这是为了确定范围并防止名称空间污染,...

回答 3 投票 0

内核模块中初始化程序周围缺少大括号

我正在尝试为内核驱动程序中的用例编写以下驱动程序。为了简单起见,我在这里硬编码了几个值,并减少了 1 个元素的数组,驱动程序代码如下, #包括 我正在尝试为内核驱动程序中的用例编写以下驱动程序。为了简单起见,我在这里硬编码了几个值,并减少了 1 个元素的数组,驱动程序代码如下, #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> #define MODULE_NAME ("test-module") #define BOARD_VER 3 #define BOARD_SAM 2 struct foo { int variant; char *str[3]; }; struct bar { int sample; struct foo fooarr[3]; }; static int __init dtcprop_init(void) { unsigned int board_sample, board_variant; int i = 0; board_sample = BOARD_SAM; board_variant= BOARD_VER; struct bar bar_array[6] = { -1, { 0, NULL,NULL,NULL }, }; if (bar_array[board_sample].sample != -1 && bar_array[board_sample].fooarr[board_variant].variant != -1) { while (bar_array[board_sample].fooarr[board_variant].str[i] != NULL) { pr_info("%s: %s\n", MODULE_NAME, bar_array[board_sample].fooarr[board_variant].str[i++]); } } else { pr_info("%s: unsupported board\n", MODULE_NAME); } return 0; } arch_initcall(dtcprop_init); 但是我收到这些被视为错误的警告, 41:35: warning: missing braces around initializer [-Wmissing-braces] 41:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] 41 | struct bar bar_array[6] = { | ^~~~~~ 我尝试了几次右大括号,但这个警告并没有消失。 在内核模块中写入结构体数组是否合法, 如何纠正上述驱动程序? C90 不允许在任何地方进行声明,除了周围函数体的顶部(紧接在 { 之后)。所以 C90 中的修复是这样的: static int __init dtcprop_init(void) { unsigned int board_sample, board_variant; int i = 0; struct bar bar_array[6] = { -1, { 0, NULL,NULL,NULL }, }; board_sample = BOARD_SAM; board_variant= BOARD_VER; 但是,最好解决问题的根源,即您使用的是 34 年历史的编译器。这与在 34 年旧计算机上运行 Linux 一样明智:) 因此,请删除任何选项 -std=gnu89/-std=c89/-std=gnu90/-std=c90/-ansi。这些都不应该被使用。同时更新到 gcc 版本 5.0.0 或更高版本,它不默认为 C90。

回答 1 投票 0

类和类设备的目的是什么?

我遵循了一些解释如何编写 Linux 内核模块的教程,但我有点困惑。即使阅读了官方“文档”后,我对这个概念的理解也很差......

回答 1 投票 0

Linux-文件权限

我正在学习Linux文件权限。我知道任何文件或目录都有所有者、组和其他用户的权限。我的问题是:目录的权限是否受到影响...

回答 1 投票 0

Linux GPIO 驱动程序探测失败

我正在尝试编写一个小型内核模块,可以控制连接到 RaspberryPi 4 Model B 上的 GPIO 引脚的一些 LED。我的 Pi 运行的是 Raspbian GNU/Linux 11(牛眼)和 Linux 内核 v6.1...

回答 1 投票 0

linux 字符设备创建失败

我编写了一个演示设备驱动程序,如下所示: #包括 #包括 #包括 #包括 #包括 #包括...

回答 1 投票 0

将非连续物理内存映射到用户空间

我最近正在阅读 Linux 设备驱动程序第 3 版,并已阅读第 15 章:内存映射和 DMA。 我还遇到过 linux-kernel-labs,特别是他们在 Memory 中的练习

回答 1 投票 0

Linux 中的 down_interruptible

我在理解 LDD3 的以下声明时遇到一些困难。 “down_interruptible - 它允许正在等待信号量的用户空间进程被用户中断”。 一个

回答 1 投票 0

如何学习Linux无线驱动(mac80211)的结构?

Linux无线驱动mac80211中有这么多结构。例如 struct net_device、struct ieee80211_hw、struct ieee80211_vif 和 struct ieee80211_local 等。这么多的结构...

回答 1 投票 0

如何在mac80211中编写定时器

如何在mac80211中编写定时器来定期发送帧? 那么如何通过传递相应的参数来调用其他函数呢?

回答 1 投票 0

kmalloc 分配实际上不是连续的吗?

我发现 kmalloc 返回物理上和虚拟上连续的内存。 我编写了一些代码来观察行为,但只有物理内存似乎是连续的,而不是虚拟内存。我是不是……

回答 1 投票 0

regmap_read val 指针的类型应该是什么

我正在尝试使用 regmap api 来访问 I2C 设备,但完全不清楚 val 指针的预期类型是什么。 Cfr : int regmap_read(struct regmap *map, unsigned int reg, un...

回答 1 投票 0

如何找到导致加载内核模块88XXau.ko的udev规则? [已关闭]

在我的 Linux 发行版中,我使用 Edimax EW-7811UTC Wi-Fi USB 适配器。 安装rtl8812au驱动 我通过以下步骤从源代码安装了驱动程序 rtl8812au: 建设科...

回答 1 投票 0

使用 yocto 添加第三方 Linux 内核模块

我找不到如何使用 Yocto 将第 3 方 .ko 文件添加到 /lib/modules/.../extra 目录中。我可以找到大量有关如何从源代码构建树外模块的文档。但我只

回答 2 投票 0

在Linux设备驱动程序中读写设备寄存器?

首先:这是我第一次尝试为Linux内核做驱动程序,所以如果我在这里完全错了,请告诉我。 在我当前的项目中,我们在板上添加了一个新设备(FPGA),并且我...

回答 1 投票 0

Linux中结构体iov_iter的用途是什么?

struct iov_iter 的用途是什么? Linux 内核中使用该结构代替 struct iovec。 iter 接口没有任何好的文档。我在 L 上找到了一份文件...

回答 1 投票 0

如何发送数据/触发以太网网络设备驱动的ndo_start_xmit?

我正在开发以太网网络设备驱动程序,我遵循的步骤将设备注册为eth1并为其分配MAC地址(a0:b0,c0,d0,e0,f0),IPV4地址(192.168.10.127),甚至可以可以...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.