linux如何加载驱动

静态安装:获取源代码,配置内核,编译新内核并安装。
动态安装:下载模块,注册设备,用insmod安装并连接设备号。

备份重要数据,不要使用来源不明的驱动程序。
内核编译和模块安装需要root权限。

记录一个奇怪的Linux N卡驱动问题

哎呀,这个问题我已经遇到过好几次了,真是头疼。
Kubuntu2 1 .04 系统,内核5 .1 1 .0-1 7 年,使用Nvidia 9 4 0MX显卡,驱动版本为nvidia-driver-4 6 0,这个配置很老了。
结果是驱动无法安装,所以我改用了icard,并手动设置了Prime,但3 D应用程序无法运行。

当时我不太明白。
当我手动执行 modprobe 时,它​​仍然执行不支持的操作,这确实令人困惑。
后来查了一下,原来是SecureBoot命令导致的问题。
SecureBoot,这个东西是UEFI启动时的一个安全机制,防止启动时加载恶意软件。
然而,Nvidia 驱动程序可能未通过验证过程,因此被阻止。

解决办法是关闭SecureBoot。
这需要进入 BIOS 设置。
一般情况下,开机时按Del、F2 或Esc键。
具体型号取决于主板。
然后查找“SecureBoot”选项(通常位于“安全”或“启动”菜单下),将其关闭,保存设置,然后重新启动计算机。
重新启动后,您可以使用 lsmod|grepnvidia 命令验证是否出现 nvidia_drm 和 nvidia_modeset 模块。
这说明驱动加载正常。

接下来使用glxinfo|grep "OpenGLrenderer"查看是否有NVIDIA GeForce提示,则说明GPU没有问题。
最后,尝试运行 3 D 应用程序,例如游戏或基准测试工具,看看它是否正常工作。

不过,说实话,SecureBoot的功能有时还是挺烦人的,尤其是一些特殊的驱动程序,甚至可能无法通过微软的签名,这使得它们更容易出现问题。
如果您不想再次遇到此问题,您可能需要考虑系统或硬件升级。

哎,说实话,开这玩意真是让人又爱又恨。
不过这个解决方案总算靠谱了,以后遇到类似问题就知道如何处理了。

Linux下PCI设备驱动开发详解(六)

你在给我上物理课! 不过我当时确实在这方面遇到了很多坑,所以说一下。

我记得当我还在上大学的时候,我正在做一个FPGA加速器项目。
与CPU交换数据是一件很头疼的事情。
当时使用的是PCI Express总线。
那东西听起来很高级,但实际操作起来却没有那么简单。

我记得那是2 01 7 年,我们实验室使用的是Xilinx FPGA板,配备Linux操作系统。
我们只是想用PCI Express来传输数据,但是陷阱来了。

首先,你必须有一个支持PCIe的工作站。
当时我们买了一辆顶配车型,花费了我们不到2 0万元,这让我们感到非常难过。
然后,你需要有一块FPGA板,这块板并不便宜,要几万美元。

然后是驱动程序的开发。
当时我看了很多资料,比如《Linux下PCI设备驱动开发详解》系列,并按照里面的步骤一步步进行。
首先是初始化设备模块,然后是设备打开模块,然后是数据读写模块,中间还涉及到中断处理模块。

最头疼的是数据读写模块,它要通过ioctl调用相应的驱动实现。
当时我研究了好几天,但就是想不通chnl_send函数是如何将用户数据复制到内核态,然后传递给FPGA的。

然后就是中断处理,比较麻烦。
你必须使用自旋锁来避免多线程错误,这对我来说是一个全新的概念。
当时我就是看代码,看文档,然后自己写代码来测试。
我花了好几次尝试才把它做好。

记得有一次,我调试了一晚上,就是不明白为什么数据发送不出去。
最后我发现问题是我把频道号写错了。
这个陷阱现在想起来仍然让我感到后怕。

不过,经过这次经历,我已经掌握了Linux下PCI Express总线的使用和驱动开发。
现在想起来,感觉就像是摸着石头过河。

至于RIFFA框架,我也是后来才知道的。
它是一个可重用的FPGA加速器集成框架,相当有趣。
不过,当时我们只是从头开始,并没有使用它。

现在回想起来,当时的我还是经历了很多坑,但都是宝贵的经验。
如果以后再遇到类似的问题,至少不会像以前那么忙了。
哎,说了这么多,我得赶紧回去工作了。
今天我还有一个项目要交。
嘿嘿。