Linux内核移植 part3:串口驱动

每日一乐:小美在作文簿里写上长大后的愿望:一、我希望能有一个可爱的孩子;二、我还希望能有一个爱我的丈夫。结果,发现老师写了一句评语:“请注意先后顺序。”

介绍Linux kernel 4.1对exynos 4412串口的支持。
其实这部分工作已经过去很久了,因为以后的重心不在这方面了,今天为了帮一个童鞋解决个问题,正好又看到这个,索性就写篇文章记录一下吧,说不定哪天有人因为看到了这篇文章,能够在工作上节省一点时间,多享受点生活。

串口配置

  • dts
    这一版的硬件配置基本以dts的形式提供,譬如我的是在arch/arm/boot/dts/exynos4412-landrover.dts中。
serial@13800000 {
        status = "diable";
    };

    serial@13810000 {
        status = "disable";
    };

    serial@13820000 {
        status = "okay";
    };

    serial@13830000 {
        status = "disable";
    };
  • menuconfig

配置

源代码

位于/drivers/tty/serial/samsung.c,已经兼容的很好了,配置一下就可以。

#ifdef CONFIG_OF
static const struct of_device_id s3c24xx_uart_dt_match[] = {
    { .compatible = "samsung,s3c2410-uart",
        .data = (void *)S3C2410_SERIAL_DRV_DATA },
    { .compatible = "samsung,s3c2412-uart",
        .data = (void *)S3C2412_SERIAL_DRV_DATA },
    { .compatible = "samsung,s3c2440-uart",
        .data = (void *)S3C2440_SERIAL_DRV_DATA },
    { .compatible = "samsung,s3c6400-uart",
        .data = (void *)S3C6400_SERIAL_DRV_DATA },
    { .compatible = "samsung,s5pv210-uart",
        .data = (void *)S5PV210_SERIAL_DRV_DATA },
    { .compatible = "samsung,exynos4210-uart",
        .data = (void *)EXYNOS4210_SERIAL_DRV_DATA },
    { .compatible = "samsung,exynos5433-uart",
        .data = (void *)EXYNOS5433_SERIAL_DRV_DATA },
    {},
};
MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
#endif

static struct platform_driver samsung_serial_driver = {
    .probe      = s3c24xx_serial_probe,
    .remove     = s3c24xx_serial_remove,
    .id_table   = s3c24xx_serial_driver_ids,
    .driver     = {
        .name   = "samsung-uart",
        .pm = SERIAL_SAMSUNG_PM_OPS,
        .of_match_table = of_match_ptr(s3c24xx_uart_dt_match),
    },
};

module_platform_driver(samsung_serial_driver);

console和串口的关系

Linux内核中的console是虚拟的,它依赖于串口设备;在系统启动的时候,首先会有个earlyconsole用来打印log,这个时候内核中的串口设备还没有probe,通过printascii工作;等到串口初始化结束之后就通过串口设备打印,这个时候prink这类接口也可以用了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶玄青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值