uart

1、串口驱动的模型可以依照tty驱动模型来分析:首先Uart驱动也有一个driver结构体(Uart_driver)我们也要对这个结构体进行注册:

tty_driver{
    struct module* owner;
    const char* driver_name;
    const char* dev_name;
    int major;
    int minor;
    int nr;
    struct console* cons;

    struct uart_state* state;
    struct tty_driver* tty_driver;//对tty_driver进行封装
}
//int uart_register_driver(struct uart_driver* drv);函数主要是对Uart驱动的注册,在这个注册中tty终端的设备驱动也会被注册。在这个过程中还应该注意两个操作:normal->driver_stat=drv和tty_set_operations(normal , &uart_ops);这两个操作将tty_operation的操作统一为了对Uart_ops的操作。


//[注]:uart_register_driver()和uart_open()的关系:
首先在uart_register_driver()中我们会将整个uart_driver结构体放在tty_driver结构体的void* driver_stat成员中。在uart_open(struct tty_struct* tty ,struct file* file)时,我们又会把这个uart_driver从tty_driver中拿出来!!!

2、从platform_device和plantform_driver来看Linux2-6 内核中的uart驱动模型:在plantform设备模型中
a、当设备挂到总线上时,总线中的匹配函数会将总线上的所有驱动与连接进来的设备进行匹配,匹配成功则bus_type.probe()函数被调用。如果匹配不成功则只将该设备挂接到总线上。
b、当驱动挂接到总线上时,总线中的匹配函数会将总线上的设备与连接进来的驱动进行匹配,匹配成功则bus_type.probe()函数被调用。如果匹配不成功则只将该驱动挂接到总线上。
plantform_device和plantform_driver是在plantform_device或者plantform_driver的register里实现的,这样就可以将平台总线、平台设备、平台驱动关联起来了
3、当驱动和设备匹配了之后调用probe函数有什么用呢?其实驱动和设备相匹配内核是费了不少功夫的,毕竟是逐个遍历的过程。所以当驱动和设备匹配之后,我们应该在probi(struct plantform_device* dev)函数中注册和初始化设备。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值