struct uart_omap_port *up = (struct uart_omap_port *)port
的含义是什么?。
它与container_of宏类似吗?
答案 0 :(得分:1)
struct uart_omap_port *up = (struct uart_omap_port *)port;
这意味着你的“port”指针变量应该是类型为“struct uart_omap_port”的类型转换。这在C中不是必需的,因为它会隐式地进行类型转换(如果你的端口是void *)。这不是宏它只是(类型转换)具有不同类型的指针。
修改强>
Linux / drivers / tty / serial / omap-serial.c
中的代码片段static void serial_omap_enable_ms(struct uart_port *port) {
.....
struct uart_omap_port *up = to_uart_omap_port(port);
}
#define to_uart_omap_port(p) ((container_of((p), struct uart_omap_port, port)))
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member)*__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
这是您提到的代码。是的,'to_uart_omap_port'是MACRO 内部使用'container_of'和'offsetof'MACRO。
这是为了使指针'up'而编写的,类型为'struct uart_omap_port' 来自'struct uart_port'类型的指针'port'。这有点复杂,你 需要检查'struct uart_port'和'struct uart_omap_port'是如何声明的。