pl011_init

static int __init pl011_init(void)
{
    int ret;
    printk(KERN_INFO "Serial: AMBA PL011 UART driver\n");

    ret = uart_register_driver(&amba_reg);
    if (ret == 0) {
        ret = amba_driver_register(&pl011_driver);
        if (ret)
            uart_unregister_driver(&amba_reg);
    }
    return ret;
}

static void __exit pl011_exit(void)
{
    amba_driver_unregister(&pl011_driver);
    uart_unregister_driver(&amba_reg);
}

在arch 初始化的时候,会执行pl011 的初始化。
这个函数执行了uart_register_driver,amba_driver_register,注册了uart 驱动和amba 驱动。
1.uart_driver
描述了串口驱动的设备号,操作函数等内容

static struct uart_driver amba_reg = {
    .owner          = THIS_MODULE,
    .driver_name        = "ttyAMA",
    .dev_name       = "ttyAMA",
    .major          = SERIAL_AMBA_MAJOR,
    .minor          = SERIAL_AMBA_MINOR,
    .nr         = UART_NR,
    .cons           = AMBA_CONSOLE,
};
static struct console amba_console = {
    .name       = "ttyAMA",
    .write      = pl011_console_write,
    .device     = uart_console_device,
    .setup      = pl011_console_setup,
    .flags      = CON_PRINTBUFFER,
    .index      = -1,
    .data       = &amba_reg,
};

uart_register_driver 干的事情
1.为uart_state分配空间,并配置
2.初始化tty_driver
3.注册tty 驱动。

调用了接口:alloc_tty_driver(),tty_set_operations(),tty_port_init(),tty_port_init(),tty_register_driver()。
用到的全局变量:
tty_std_termios,amba_reg,uart_ops,uart_port_ops,

tty 驱动的注册,另外在分析。注册完之后。
这里写图片描述

其中,uart_port 端口在pl011_probe()函数中调用uart_add_one_port ,给该驱动添加串口设备的端口。
2.amba_driver_register
这个函数完成pl011_driver 结构体的填充。

static struct amba_driver pl011_driver = {
    .drv = {
        .name   = "uart-pl011",
    },
    .id_table   = pl011_ids,
    .probe      = pl011_probe,
    .remove     = pl011_remove,
#ifdef CONFIG_PM
    .suspend    = pl011_suspend,
    .resume     = pl011_resume,
#endif
};
struct bus_type amba_bustype = {
    .name       = "amba",
    .dev_attrs  = amba_dev_attrs,
    .match      = amba_match,
    .uevent     = amba_uevent,
    .pm     = AMBA_PM,
};
static struct amba_id pl011_ids[] = {
    {
        .id = 0x00041011,
        .mask   = 0x000fffff,
        .data   = &vendor_arm,
    },
    {
        .id = 0x00380802,
        .mask   = 0x00ffffff,
        .data   = &vendor_st,
    },
    { 0, 0 },
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值