Serial port 分配串行端口寄存器时请求\u区域函数调用失败

Serial port 分配串行端口寄存器时请求\u区域函数调用失败,serial-port,linux-device-driver,Serial Port,Linux Device Driver,我是一名专业的C程序员。我正在学习设备驱动程序,想编写(并测试)一个简单的串行端口驱动程序,以9600的波特率发送字符。我已经开始写代码了 问题是,当我尝试分配地址范围为03f8-03ff的串行端口寄存器时,函数请求_区域失败(返回NULL)。 当我发出命令“cat/proc/ioport”时,我可以看到下面一行 03f8-03ff:串行 我认为这是因为这些端口已经分配给现有的串行驱动程序 我需要卸载已经存在的串行驱动程序来测试我的驱动程序吗? 如果是这样,我该怎么做呢?你说得对:已经有一个内核

我是一名专业的C程序员。我正在学习设备驱动程序,想编写(并测试)一个简单的串行端口驱动程序,以9600的波特率发送字符。我已经开始写代码了

问题是,当我尝试分配地址范围为03f8-03ff的串行端口寄存器时,函数请求_区域失败(返回NULL)。 当我发出命令“cat/proc/ioport”时,我可以看到下面一行

03f8-03ff:串行

我认为这是因为这些端口已经分配给现有的串行驱动程序

我需要卸载已经存在的串行驱动程序来测试我的驱动程序吗?
如果是这样,我该怎么做呢?

你说得对:已经有一个内核驱动程序在使用这些端口。我假设您运行的是英特尔机箱,所以很可能您使用的是8250驱动程序。您可以尝试通过以下方式卸载:

modprobe -vr 8250
但是,如果您使用的是发行版提供的内核,这很可能会失败,因为大多数发行版都“内置”了这个模块。你可以跟我核对一下

grep CONFIG_SERIAL_8250 /boot/config-`uname -r`
然后你需要编译内核,8250驱动程序实际上是一个可加载的模块