Linux-2.6 16c550 串口驱动移植

本文介绍了Linux-2.6系统中针对16c550串口驱动的移植过程,主要涉及配置参数、结构体设置以及与8250驱动的交互。通过配置plat_serial8250_port结构体,创建platform_device对象并注册,以实现串口设备的自动化配置和初始化。
摘要由CSDN通过智能技术生成

本文中将要说道的是Linux驱动移植中最为初级最为简单的一种,就是通用性很强的UART设备驱动的移植,当然这还不能完全满足博主我这可怜的智商。

我所移植的这个驱动不是别的就是可以使用已有驱动8250.c来驱动的16c550, 千万别笑话我,谁叫这是第一次呢。

其实说到底我也没干什么,就是配置了一些参数而已,剩下的就都交给platform和8250了。

下面就是重要的结构体的配置具体情况:

static struct plat_serial8250_port sc16550_data[] = {
.mapbase = sc16550_UART_BASE, //flags使用IOREMAP,8250驱动会自动映射mapbase
.irq = sc16550_UART_IRQ,
.uartclk = sc16550_UART_BAUD * 16,
.iotype = UPIO_MEM,
.flags = UPF_BOOT_AUTOCONF | 
                          UPF_SKIP_TEST | UPF_IOREMAP,
        .regshift       = 0,
};


static struct platform_device sc16550_device = {
.name = "serial8250",
.id = PLAT8250_DEV_PLATFORM,
.dev = { .platform_data = sc16550_data, },
};

这个platform_device对象的私有数据指成员向一个plat_serial8250_port类型的数组。在这里该数组描述了一个串口接口的基本信息。当8250驱动检测到这个platform_device对象后,就分析该对象的私有数据成员指向的那个plat_serial8250_port类型的数组。然后根据该数组的每个成员描述的信息生成一个串口对象设备。

实现了这个platform_device结构体后,把这个对象注册即可。但这个对象的name必须是serial8250。否则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值