百问网韦东山的UART学习笔记 0. 说明 1. 从哪里入手? 思路是怎样的? 2. TTY/Terminal/UART/Console等概念 3....说明 有些同学想知道我是怎么分析驱动的,我正要研究UART子系统,所以写了这个笔记。 笔记并不是完整的教程,前后可能也没有关联,只是笔记,不要期望太多。 1. 从哪里入手? 思路是怎样的?...我们录制的驱动大全,进入到UART子系统了。我们基于IMX6ULL的内核进行分析,从\Linux-4.9.88\drivers\tty\serial\imx.c开始阅读代码。...,在uart_driver中有一个uart_state数组,每个数组项对应一个port: /* * Initialise the UART state(s). */ for (i = 0;...rx, flg) // 只是存入tty_port->buf.tail里 tty_flip_buffer_push(port); // 通知ldisc处理 // include\linux
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 UART子系统视频介绍 1....UART的作用 UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),简称串口。...预计录制的内容 本教程听取了学员的建议,增加了很多功能: UART协议 UART应用程序编程 TTY驱动程序体系 /dev/tty、/dev/tty0、/dev/tty1、/dev.../console的关系 UART驱动程序分析 实现一个虚拟的UART驱动程序 内核printk打印系统分析 early print printk 实现一个虚拟的printk功能
Linux 内核中 UART 驱动的接口及使用方法,为 UART 设备的使用者提供参考。...1.2 适用范围 表 1-1: 适用产品列表 内核版本 驱动文件 Linux-4.9 及以上 sunxi-uart.c 1.3 相关人员 UART 驱动、及应用层的开发/维护人员。...2 模块介绍 2.1 模块功能介绍 Linux 内核中,UART 驱动的结构图 1 所示, 可以分为三个层次: 图 2-1: Linux UART 体系结构图 Sunxi UART Driver...|------sun*-clk.dtsi linux-5.4 board.dts |-------sun*.dtsi 3.2.1 device tree 对 uart 控制器的通用配置 linux...4 接口描述 UART 驱动会注册生成串口设备/dev/ttySx,应用层的使用只需遵循 Linux 系统中的标准串口编程方法即可。
一文搞懂 | Linux 时钟子系统 Clock 时钟就是 SoC 中的脉搏,由它来控制各个部件按各自的节奏跳动。比如,CPU主频设置,串口的波特率设置,I2S的采样率设置,I2C的速率设置等等。
Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统,我们学习如何使用 IIO 子系统来编写 ADC 类传感器驱动。...1、IIO 子系统简介 IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到“工业”两个字就觉得 IIO 是只用于工业领域的。...大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。...1、iio_dev 结构体 IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中 2、iio_dev 申请与释放...Linux 内核使用 iio_chan_spec 结构体来描述通道,定义在 include/linux/iio/iio.h 文件中。
这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。...Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器,SPI 接口的话使用 spi_write/spi_read等。...I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_transfer 这类的冗余代码,再者,代码的复用性也会降低。...regmap 是 Linux 内核为了减少慢速 I/O 在驱动上的冗余开销,提供了一种通用的接口来操作硬件寄存器。...Linux 内核提供了针对不同接口的 regmap 初始化函数。
rtc 一般负责系统关机后计时、闹钟等,Linux 内核提供了一个 rtc 子系统,来支持所有的 rtc 设备。...rtc 设备本质上是一个字符设备,rtc 子系统在字符设备的基础上抽象与硬件无关的部分,并在这个基础上拓展 sysfs 和 proc 文件系统下的访问。...rx8010_set_alarm rx8010_set_time 软件逻辑就不在这里赘述了,大家可以参考下面链接 https://jasper1024.com/jasper/c089e4b/ 大家多看几个 Linux...子系统就会发现,基本上每个子系统都差不多,Linux 都会封装上中下 3 层,然后给你一些数据结构让你填充,就可以将这个子系统用起来了。
2、概述 led 子系统驱动框架: 所有 led 共性: 有和用户通信的设备节点 亮和灭 不同点: 有的 led 可能是接在 gpio 管脚上,不同的 led 有不同的 gpio 来控制 有的 led...可能由其他的芯片来控制(节约 cpu 的 pin,或者为了控制 led 的电流等) 可以设置亮度 可以闪烁 所以 Linux led 子系统把所有 led 的共性给实现了,把不同的地方留给驱动工程师去做...led 子系统核心文件: driver/leds/led-class.c driver/leds/led-core.c driver/leds/led-triggers.c include/linux/...led 子系统是一个简单的 Linux 子系统 ,在目录 /sys/class/leds 下展示该子系统设备,每个设备都有自己的属性: brightness:设置 LED 亮度,范围 0 ~ max_brightness...触发方式,如 heartbeat、mmc0、backlight、gpio delay_off、delay_on:trigger为timer时,LED亮灭的时间,单位ms kernel/include/linux
chips/t113/configs/evb1/sys_config.fex 中的 uart_debug_port 修改前: [uart_para] uart_debug_port = 0 uart_debug_tx...= port:PF02 uart_debug_rx = port:PF04 修改后 [uart_para...] uart_debug_port = 0 uart_debug_tx = port:PE02 uart_debug_rx = port:PE03...> ^ ^ PE2脚 引脚功能6(查阅datasheet得知) 修改设备树(Linux使用的串口输出) 路径:device/config/chips.../t113/configs/evb1/board.dts 修改前 uart0_pins_a: uart0_pins@0 { /* For EVB1 board */ pins = "PF2", "PF4
场景二:使用UART3,需要从UART0改为UART3(PB6,PB7) 修改sys_config.fex(BOOT0与Uboot的串口) sys_config.fex 的路径是 device/config.../chips/t113/configs/evb1/sys_config.fex 中的 uart_debug_port 修改前: [uart_para] uart_debug_port = 0 uart_debug_tx...] uart_debug_port = 3 uart_debug_tx = port:PB06 uart_debug_rx = port:PB07... 修改设备树(Linux使用的串口输出) 路径:device/config/chips/t113/configs/evb1/board.dts 修改前 uart3..."; }; &uart0 { pinctrl-names = "default", "sleep"; pinctrl-0 = ; pinctrl-1 = <&uart0
8)底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到。...1、CPUFreq 驱动 CPUFreq 子系统位于 drivers/cpufreq 目录下,负责进行运行过程中 CPU 频率和电压的动态调整,即 DVFS(Dynamic Voltage Frequency...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...Linux的Regulator子系统提供如下API以用于注册/注销一个稳压器: structregulator_dev * regulator_register(conststructregulator_desc...Linux运行时PM最早是在Linux2.6.32内核中被合并的。
今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异...目录 Linux网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API...中TCP,UDP协议包在网络子系统中的实现流程。...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API 需要屏蔽协议
前言: 上一篇文章我们简单了解了一些关于时间的概念,以及Linux内核中的关于时间的基本理解。而本篇则会简单说明时钟硬件,以及Linux时间子系统相关的一些数据结构。...计算机里的时钟硬件 前文曾经提到过,内核时间子系统的实现也需要有硬件的支持。...由于这些时钟都和时间子系统关系不大,所以本文中就不讨论它们了。...Linux时间子系统的文件汇总 Linux kernel 时间子系统的源文件位于linux/kernel/time/目录下,基本包含如下: 这里面也包含几个重要的数据结构,接下来会分开说说: Clocksource...显然关于Linux时间子系统的内容,还有很多可以深入挖掘,在此篇幅有限,就不做过多赘述了,也希望同样对操作系统感兴趣的小伙伴与我们一起交流。
中断是大家用的最多的功能,不管是单片机还是 Linux 系统,都需要用到中断,对它的深入理解是非常必要的。 为什么需要中断?...中断子系统硬件架构 一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器和CPU本身。...中断子系统架构 整个中断子系统的架构分为 4 层,最底层(第四层)为硬件,包括 CPU、中断控制器。第三层是 CPU 的驱动和中断控制器的驱动,由芯片原厂负责。...第二层是 Linux 内核提供的通用中断处理模块,这一层存在的意义在于,希望用户在第一层写的驱动在移植的时候更方便,保持接口不变,不让用户直接使用芯片原厂的 API,而是 Linux 的 API。...关于中断子系统,我写了八篇文章,从头到尾讲了一遍,大家可以去我的blog查看: http://www.linuxer.vip/linux-interrupt1/
写这篇文章的原因:因为在linux开发串口应用的时候,遇到了问题,让遇到相同问题的人少走点弯路: ①读串口数据的时,需要接受换行符才能返回。...Linux 没有实现这一位,总是将它视为已设置。 ②c_oflag: OPOST:启用具体实现自行定义的输出处理。...FLUSHO:(不属于 POSIX; Linux 下不被支持) 输出被刷新。这个标志可以通过键入字符 DISCARD 来开关。...main( int argc, char *argv[]) { int fd; int ret; char buff[1024]; char senddata[] = "uart...fd= open("/dev/ttyS2", O_RDWR | O_NOCTTY | O_NONBLOCK); if(fd <= 0) { printf("uart
浅谈 Linux 内核无线子系统 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢?...1 全局概览 在开始探索 Linux 无线具体细节之前,让我们先来把握一下 Linux 无线子系统整体结构。如图1,展示了 Linux 无线子系统各个模块之间的抽象关系。 ?...通常我们把 Linux 内核无线子系统看成两大块: cfg80211 和 mac80211 ,它们连通内核其他模块和用户空间的应用程序。...Linux 内核无线子系统统一各种 WiFi 设备,并处理 OSI 模型中最底层的 MAC 、 PHY 两层。 若进一步划分, MAC 层可以分为 MAC 高层和 MAC 底层。...Linux 子系统实现大部分的 MAC 高层回调函数。 2 模块间接口 从图一中我们可以看出,各个模块之间分界线很清晰,并且模块间相互透明不可见。模块之间一般不会相互影响。
1.启用子系统功能 需要win系统支持子系统 进入控制面板 -> 程序和功能 -> 启用或关闭windows功能: 勾选适用于Linux的windows子系统,确定,等待后,确认重启设备 2.下载子系统...TLS1.1TLS1.2TLS1.3都勾选上 6.保存 再打开微软商店 [/acc] 搜索ubuntu 进入需要的版本,点击获取 默认安装到C盘(若不想安装到C盘,看本篇最后),点击安装 等待下载完成后,启动即可, 3.子系统相关配置...会提示创建用户和设置密码,根据提示操作即可 [card title="修改root密码" color="info"] 直接输入sudo passwd root修改 [/card] [card title="修改Linux...Esc,再按shift+zz(按住shift再按两下z)保存 更新源sudo apt-get update & apt-get upgrade & apt-get clean [/card] 4.修改子系统位置
Linux input子系统,分为三篇文章,第一篇:Linux input子系统的概念,第二篇:Linux input子系统的代码分析(input core),第三篇:Linux input子系统的驱动程序编写...linux系统输入设备繁多,例如按键、键盘、触摸屏、鼠标。这些输入设备都属于字符设备。不过这些输入设备不同类型,不同原理,不同的输入输出信息。那么是如何统一这些输入设备的呢?...答案:linux中将所有的输入设备抽象出input子系统这套软件体系,提供了统一的接口函数,实现了大统一。 input子系统分为三层: 1.输入子系统设备驱动层。...综上所述:在linux中,输入子系统作为一个内核模块存在,向上为用户层提供接口函数,向下为驱动程序提供统一的接口函数。...这样就能够将输入设备的事件通过输入子系统发送给应用层的应用程序,应用程序也可以通过输入子系统通知驱动程序完成某些任务。 下一篇:Linux input子系统的代码分析(input core)
大家常说的serial、UART、RS232、串口等概念究竟是怎么回事?它们之间有何联系?有何区别?下面小编会与大家一起来学习。...UARTRS232 RS485 RS422区别RS232物理接口RS485物理接口RS422物理接口UART通信协议UART设计波特率产生模块发送模块接收模块顶层模块串口驱动下载 UART 通用异步收发传输器...(Universal Asynchronous Receiver/Transmitter),通常称作UART。...RS232、RS422、RS485等都属于UART,只是它们的接口协议、电气特性、传输速率和机械结构不同而已。...通信协议 UART通信的一帧一般由11到12位数据组成。
领取专属 10元无门槛券
手把手带您无忧上云