2024年3月9日发(作者:)

linux设备驱动之8250串口驱动

一:前言

前一段时间自己实践了一下8250芯片串口驱动的编写。今天就在此基础上分析一下

linux kernel自带的串口驱动。毕竟只有对比专业的驱动代码才能更好的进步,同以往一样,

基于linix kernel2.6.25.相应驱动代码位于:linux-2.6.25/drivers/serial/8250.c。

二:8250串口驱动初始化

相应的初始化函数为serial8250_init().代码如下:

static int __init serial8250_init(void)

{

int ret, i;

if (nr_uarts > UART_NR)

nr_uarts = UART_NR;

printk(KERN_INFO "Serial: 8250/16550 driver $Revision: 1.90 $ "

"%d ports, IRQ sharing %sabledn", nr_uarts,

share_irqs ? "en" : "dis");

for (i = 0; i < NR_IRQS; i++)

spin_lock_init(&irq_lists[i].lock);

ret = uart_register_driver(&serial8250_reg);

if (ret)

goto out;

serial8250_isa_devs = platform_device_alloc("serial8250",

PLAT8250_DEV_LEGACY);

if (!serial8250_isa_devs) {

ret = -ENOMEM;

goto unreg_uart_drv;

}

ret = platform_device_add(serial8250_isa_devs);