我最近在看linux串口驱动,对于其中的有几点疑惑的地方,在drivers/serial/8250.c这个驱动程序是支持8250/16550系列芯片的。
在serial8250_isa_init_ports函数中会使用一个old_serial_port结构体来初始化serial8250_ports。old_serial_port使用是一个宏SERIAL_PORT_DFNS来初始化。这个宏在x86平台是定义在arch/x86/include/asm/serial.h中,现在对于我的mpc8313erdb的开发板自带的uart控制器是兼容pc16552D。在powerpc平台使用的驱动应该也是这个8250.c但是为什么powerpc平台却没有SERIAL_PORT_DFNS这样的宏。
谢谢大家!
_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.org
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区: http://zh-kernel.org
查看 of_serial.c 文件。
> 2011/1/6 张扬 <w90...@gmail.com>:
> > hi
> > 大家好:
> >
> >
> 我最近在看linux串口驱动,对于其中的有几点疑惑的地方,在drivers/serial/8250.c这个驱动程序是支持8250/16550系列芯片的。
> >
> 在serial8250_isa_init_ports函数中会使用一个old_serial_port结构体来初始化serial8250_ports。old_serial_port使用是一个宏SERIAL_PORT_DFNS来初始化。这个宏在x86平台是定义在arch/x86/include/asm/serial.h中,现在对于我的mpc8313erdb的开发板自带的uart控制器是兼容pc16552D。在powerpc平台使用的驱动应该也是这个8250.c但是为什么powerpc平台却没有SERIAL_PORT_DFNS这样的宏。
>
> 查看 of_serial.c 文件。
>
hi Gao Ya'nan
>
> 谢谢你的回答,昨天有看了下代码,在配置的时候,并没有选上CONFIG_SERIAL_OF_PLATFORM,所以of_serial.c这个并没有被使用,最后我查看发现应该是在arch/powerpc/kernel/legacy_serial.c里注册了下面这个平台设备。
>
static struct platform_device serial_device = {
.name = "serial8250",
| .id = PLAT8250_DEV_PLATFORM,
|- .dev = {
|| .platform_data = legacy_serial_ports,
|| },
| };
在8250.c中注册驱动的时候会使用到这个设备中的legacy_serial_ports,来注册串口端口。
对于你说的of_serial.c这个文件,看文件头注释说Serial Port driver for Open Firmware platform
devices。代码中使用的是of_platform的总线。在mpc83xx貌似没有用到这个总线,但是在其他板子里面有用到过。对于是否使用这个of_platform是什么标准来判断?即是否配置CONFIG_SERIAL_OF_PLATFORM。看注释没太明白,
open firmware platform devices,因为mpc83xx上也应该是 open firmware platform
devices呀。