分配串口寄存器时,request_region函数调用失败

时间:2011-11-24 08:36:12

标签: serial-port linux-device-driver

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

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

03f8-03ff:serial。

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

我是否需要卸载现有的串行驱动程序来测试我的驱动程序? 如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:2)

你是对的:已经有一个使用这些端口的内核驱动程序。我假设你在英特尔盒子上运行,所以最常见的是你正在使用8250驱动程序。您可以尝试通过以下方式卸载:

modprobe -vr 8250

但是如果您使用的是发行版提供的内核,那很可能会失败,因为大多数内核都有“内置”模块。您可以使用

进行检查
grep CONFIG_SERIAL_8250 /boot/config-`uname -r`

然后你得到CONFIG_SERIAL_8250=y然后你需要编译内核,其中8250驱动程序实际上是一个可加载的模块。