gpt4 book ai didi

linux-kernel - 如何将串行端口设备驱动程序从 Linux 2.6.21 移植到 2.6.36?

转载 作者:行者123 更新时间:2023-12-02 02:13:39 25 4
gpt4 key购买 nike

似乎在这两个内核之间的某个时间,很多数据结构发生了变化,它在几个地方破坏了我的驱动程序。

首先,在 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(),因为我直接与硬件对话,但其他一些驱动程序似乎这样做,但我不知道为什么会这样。

最佳答案

查看使用相同功能的树内驱动程序在两个版本之间如何变化通常是最好的方法。例如,ioc4_serial 驱动程序使用 kernel 2.6.21struct uart_portinfo 成员, 但已切换到使用 struct uart_state *state 成员 kernel 2.6.36 .

该驱动程序通过以下方式获取 tty_struct:

state = the_port->state;
tty = state->port.tty;

关于linux-kernel - 如何将串行端口设备驱动程序从 Linux 2.6.21 移植到 2.6.36?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11636860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com