编译我的视频驱动程序会产生以下错误:
xilinx-dma.h:51:返回container_of(e->pipe,struct xvip_pipeline,pipe);
发现在./media/media-entity.h中定义的struct media_entity {}中删除了以下行
int stream_count; struct media_pipeline *pipe; In kernel version 6.1.55 (Build in ARM64 architecture)
视频驱动程序在内核版本 5.15.0-131 下编译成功。(基于 x86_64 架构构建)
我想知道删除*pipe的原因,以及如何解决它?
谢谢你,老虎
这是核心政策,已在此处记录。
长话短说:您可能知道内核非常非常小心,绝不会破坏用户空间 API。基本上,就内核而言,您可以获得在 1995 年构建的应用程序,它仍可在今天的内核上正常运行。
嗯,内核内部的情况就不同了。内核到现在已经约 34 年了,它之所以仍然发展得很好,没有被遗留问题淹没,是因为内核内部在不断重构。为了促进这种长寿,内核规定,任何想编写驱动程序的人都应该将其贡献给内核,这样内核开发人员才能确保它始终有效。从技术上讲,编写驱动程序而不贡献它是可能的,但那样你就得靠自己了。
话虽如此……
…您显然正在编译一个第三方驱动程序,而该驱动程序并非贡献给内核。如上所述,要确保它正常工作,需要维护驱动程序的人更新每个主要内核版本的接口。我猜想驱动程序作者只是懒得将其发送给上游,后来他们完全停止了对驱动程序的维护(因为您编译的 6.1 此时已经有 3 年的历史了——我的意思是,不是次要版本,而是主要版本),因此如果您希望它为较新的内核编译,则需要自己更新驱动程序。
附言:如果您要更新驱动程序,为了避免研究,您可以下载 NVidia 专有 Linux 驱动程序并查看其 DKMS 代码。我非常确定
#ifdef
您需要为驱动程序添加的所有 s 都会在那里,因此您只需复制他们所做的操作即可。当然,让司机逆流而上是最好的做法😊