完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform: ROCKCHIP
OS: Android 6.0 Kernel: 3.10.92 RK的调试串口使用的是另外一套方法(后面再提), 这里的流程针对普通的串口. 相关文件: rk_serial.c: rk uart驱动文件. serial_core.c: 核心层文件, 通过它调用到具体的设备驱动文件. tty_io.c: 字符设备操作相关,上层和它打交道. tty_port.c: 每个串口设备用 proc_tty.c: proc文件系统下创建tty相关文件. n_tty.c: 上层read/write需要经过line discipline, 通俗理解就是读写要经过解析,比如n,r,t这些特殊字符. 借用别人画的图,方便理解串口驱动的框架: 初始化: serial_rk_init -> uart_register_driver -> serial_core.c //注册uart driver到系统中,参数是serial_rk_reg alloc_tty_driver tty_driver.h //分配一个tty driver tty_set_operations tty_io.c //设置tyy driver的ops为struct tty_operations uart_ops 后面在使用的时候会看到. tty_port_init //一个串口端口对应一个port,这里总共UART_NR,即8. tty_register_driver -> tty_io.c //注册uart驱动为一个标准字符设备,设备名字serial_rk_reg中定义,即ttySx, x根据 alloc_chrdev_region tty_cdev_add -> cdev_init //说了这么多主要是看这里的字符设备对应的struct file_operations, 即tty_fops,后面操作会用到. cdev_add proc_tty_register_driver //proc文件系统下也注册相应文件,比如可以通过/proc/tty/driver查看driver信息. platform_driver_register -> //根据驱动到设备模型中, platform driver是serial_rk_driver. serial_rk_probe -> //获取io相关资源,irq信息,解析dts等. of_rk_serial_parse_dt //解析dts中uart配置 uart_add_one_port 上层调用, 举例write() write -> 用户空间发送字符串 SyS_write -> vfs_write -> tty_write -> tty_io.c do_tty_write -> write -> ld->ops->write -> n_tty_write -> n_tty.c process_output -> do_output_char -> tty->ops->write -> uart_write -> serial_core.c uart_start -> __uart_start -> port->ops->start_tx //串口设备用端口表示,调用对应具体的驱动发送函数. serial_rk_start_tx -> serial_rk_enable_ier_thri -> serial_out //最终输出到硬件串口. |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
569 浏览 0 评论
839 浏览 1 评论
737 浏览 1 评论
1957 浏览 1 评论
3204 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:31 , Processed in 0.894794 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号