【发布时间】:2012-07-24 18:15:01
【问题描述】:
这两个内核之间似乎有一段时间改变了很多数据结构,并且在几个地方破坏了我的驱动程序。
首先,在 2.6.21 中,struct uart_port 有一个字段“struct uart_info *info”,我在几个地方都依赖它。我测试了几个地方以确保它是非空的,如果非空,我另外测试它的子字段(struct tty_struct *tty)是否非空,我使用这些来检查是否启用了流控制以及是否我们已停止传输。
在 2.6.36 中,信息返回指针已被删除,我不确定如何处理它,或者我尝试做的语义是否仍然有效,因为它是唯一的串行驱动程序,甚至使用它似乎已经 ifdef'ed 了处理它的代码,并且另外将所有这些数据保存在它自己的结构中(它是如何工作的,甚至可以正确地维护内核的状态)???
此外,缺少 save_and_cli() 和 restore_flags()。我看到了新的函数 local_irq_save() 和 local_irq_restore(),我可以切换到使用它们吗,还是有什么陷阱?
最后,__ioremap 不见了。看起来可能 ioremap_noncache 是替代品,但我再次不确定是否存在任何语义差异或陷阱。我假设我不想要 ioremap(),因为我直接与硬件对话,但其他一些驱动程序似乎这样做,我不知道为什么会这样。
【问题讨论】:
标签: linux-kernel serial-port device-driver