linux - 删除静态编译的设备驱动程序模块

标签 linux linux-kernel linux-device-driver

我用串行设备驱动程序静态编译了 linux 内核,即 obj-y。

现在我正在开发一个简单的串行驱动程序,我想测试它,但是由于模块是在内核启动时加载的,IO 端口区域(0x3f8 及以后)被注册到串行模块。我需要删除(取消注册)它,以便我可以将它分配给我的驱动程序。

那么,有什么方法可以删除静态链接的设备驱动程序吗?或者我应该重新编译整个内核:/

最佳答案

你应该重新编译整个内核并使这个驱动成为一个obj-m

加载后(通过 modprobe 自动完成或使用 insmod 手动完成),您可以删除它(使用 rmmod),修改代码,再次编译并再次加载。

当然,如果在驱动程序运行过程中有一些关键错误没有得到妥善处理,整个内核将处于不稳定状态,您将不得不重新启动(直到您修复导致此问题的原因)。

关于linux - 删除静态编译的设备驱动程序模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19727266/

相关文章:

linux - pdf2swf 无法为 'SimSun' 创建字体

linux - 如何将通过 vars 和 STDIN 插值构建的字符串附加到文件中?

c - C 中的守护进程 - 有没有一种方法可以实现它们?

linux - 覆盖内核的重复设备驱动程序

c++ - 使用 glibc 和 libstdc++ 静态链接

memory - 测量某个Linux驱动模块的内存使用情况

linux - 如何在没有操作系统的PC上安装KVM(内核虚拟机)?

c - 为什么有些函数不涉及内核?

c - 自定义字符设备的读取系统调用的回调函数(scull read)在使用 $cat 读取时被无限次调用

linux - 将 skb->data 复制到多个描述符