我正在尝试编写一个在嵌入式系统上与DMA接口的平台驱动程序。我们使用的是Zedboard和Xilinx的AXI DMA IP。然而,我相信我们的错误与Linux内核有关。
为了获得DMA的tx/rx通道,linux提供了dma_request_channel函数。此函数使用需要与DMA匹配的过滤器和过滤器参数。此函数获取系统中所有可用DMA的列表,并使用过滤器将其与我们想要的匹配。但是,这似乎不能获得所有可用的DMA,而只能获得一个。ARM内核自带PL330 hard IP DMA。这是它唯一能看到的。
内核代码如此复杂,以至于我被困在列表头文件中
谁能解释一下LIST_HEAD_INIT是做
我使用一个特定品牌的电视调谐器卡(TBS技术),驱动程序不包括在内核中,因此必须在每次内核更新后重建。在安装昨天的内核更新到4.4.0-143-泛型之后,TBS驱动程序无法构建,但是如果我回到4.4.0-142-泛型,它们就能工作了。当运行make时,特别是当它试图构建一个名为videobuf-dma-sg.o的文件时,会出现问题,错误输出如下所示:
CC [M] /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o
/home/backend/Drivers/linux-tbs-drivers/v4l/videobu
我一直在跟踪这个葛瑞波,在Ubuntu上手动安装Realtek驱动程序(22.04)。
到目前为止,我的理解是这个特定的卡没有被Linux正确地“识别”,所以手动驱动程序安装是一个解决办法。在过去的几个月中,在每个内核更新之后,问题都会再次出现,在dir rtl8852be上,我将重新运行以下命令:
make clean
make
sudo make install
Ubuntu会再次识别网卡,一切都会很好。今天,在Ubuntu更新之后,在系统重新启动时,我得到了预期的问题。按照通常的步骤,但继续
make
得到以下意外错误:
#rm -f .symvers.8852be
make ARCH=