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