我是一个专业的C程序员。我正在学习设备驱动程序,并想编写(和测试)一个简单的串口驱动程序,以便以9600的波特率发送字符。我已经开始写代码了。
问题是,当我尝试分配地址范围为03f8-03ff的串行端口寄存器时,函数request_region失败(返回NULL)。当我发出命令"cat /proc/ioports“时,我可以看到下面的代码行
03f8-03ff :串行。
我认为这是因为这些端口已经分配给已经存在的串行驱动程序
我是否需要卸载已经存在的串行驱动程序来测试我的驱动程序?如果是这样,我如何做到这一点?
发布于 2011-11-28 21:33:45
您是对的:已经有一个内核驱动程序在使用这些端口。我假设你是在Intel机器上运行的,所以大多数probaby你使用的是8250驱动程序。您可以尝试通过以下方式卸载:
modprobe -vr 8250但如果你使用的是发行版提供的内核,这很可能会失败,因为大多数发行版都有这个“内置”模块。您可以使用以下命令进行检查
grep CONFIG_SERIAL_8250 /boot/config-`uname -r`你得到了CONFIG_SERIAL_8250=y,然后你需要编译你的内核,8250驱动程序实际上是一个可加载的模块。
https://stackoverflow.com/questions/8254131
复制相似问题