嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十八)串口编程(中)

简介: 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十八)串口编程

四. TTY驱动程序框架


参考资料

解密TTY :https://www.cnblogs.com/liqiuhao/p/9031803.html

彻底理解Linux的各种终端类型以及概念:https://blog.csdn.net/dog250/article/details/78766716

Linux终端和Line discipline图解:https://blog.csdn.net/dog250/article/details/78818612

What Are Teletypes, and Why Were They Used with Computers?:https://www.howtogeek.com/727213/what-are-teletypes-and-why-were-they-used-with-computers/


1. 行规程的引入

1670926663275.jpg

以下文字引用自参考资料解密TTY:

大多数用户都会在输入时犯错,所以退格键会很有用。这当然可以由应用程序本身来实现,但是根据

UNIX设计“哲学”,应用程序应尽可能保持简单。为了方便起见,操作系统提供了一个编辑缓冲区和一些

基本的编辑命令(退格,清除单个单词,清除行,重新打印),这些命令在行规范(line discipline)内

默认启用。高级应用程序可以通过将行规范设置为原始模式(raw mode)而不是默认的成熟或准则模

式(cooked and canonical)来禁用这些功能。大多数交互程序(编辑器,邮件客户端,shell,及所有

依赖curses或readline的程序)均以原始模式运行,并自行处理所有的行编辑命令。行规范还包含字符

回显和回车换行(译者注:\r\n 和 \n)间自动转换的选项。如果你喜欢,可以把它看作是一个原始的内

核级sed(1)。

另外,内核提供了几种不同的行规范。一次只能将其中一个连接到给定的串行设备。行规范的默认规则

称为N_TTY(drivers/char/n_tty.c,如果你想继续探索的话)。其他的规则被用于其他目的,例如管理

数据包交换(ppp,IrDA,串行鼠标),但这不在本文的讨论范围之内。


2. TTY驱动程序框架


1670926675600.jpg

五. 在STM32MP157上做串口实验的准备工作(imux6ull不用操作,了解一下修改驱动程序)


本节课程源码在GIT仓库里

01_all_series_quickstart\04_嵌入式Linux应用开发基础知识\source\14_UART\
00_stm32mp157_devicetree_for_uart8


1. 出厂系统不支持扩展板上的UART


1670926689887.jpg

2. 只关注APP开发的话


把GIT仓库中这个dtb文件复制到开发板上去就可以:

doc_and_source_for_drivers\STM32MP157\source\A7\09_UART\00_stm32mp157_devicetree
_for_uart8\dtb
stm32mp157c-100ask-512d-lcd-v1.dtb


操作方法:

Ubuntu上:复制dtb文件到NFS目录:

$ cp stm32mp157c-100ask-512d-lcd-v1.dtb ~/nfs_rootfs/


开发板上挂载NFS文件系统

vmware使用NAT(假设windowsIP为193.168.1.100)

[root@100ask:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999
193.168.1.100:/home/book/nfs_rootfs /mnt


vmware使用桥接,或者不使用vmware而是直接使用服务器:假设Ubuntu IP为

193.168.1.137

[root@100ask:~]# mount -t nfs -o nolock,vers=3
193.168.1.137:/home/book/nfs_rootfs /mnt


更新设备树

[root@100ask:~]# mount /dev/mmcblk2p2 /boot
[root@100ask:~]# cp /mnt/stm32mp157c-100ask-512d-lcd-v1.dtb /boot
[root@100ask:~]# sync


重启开发板

在串口可以看到以下设备节点

ls /dev/ttySTM*
/dev/ttySTM0
/dev/ttySTM1
/dev/ttySTM3


3. 从头修改设备树文件


3.1 确定硬件资源

1670926759052.jpg

打开STM32MP157底板原理图,可知UART8_TX、UART8_RX使用引脚PE1、PE0,如下图:

1670926768159.jpg


3.2 使能设备树节点


在STM32MP157的内核设备树文件 arch/arm/boot/dts/stm32mp151.dtsi 中,已经设置了uart8节点:

1670926911448.jpg

我们需要使能这个节点(改为okay),往下看。


3.3 通过Pinctrl指定引脚


光使能UART8还不行,还需要为它选择引脚。

修改 arch/arm/boot/dts/stm32mp15xx-100ask.dtsi ,如下:

&uart8 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&uart8_pins_mx>;
pinctrl-1 = <&uart8_sleep_pins_mx>;
status = "okay";
};


这些Pinctrl信息已经在 arm/boot/dts/stm32mp157-100ask-pinctrl.dtsi 中有了,无需我们添加:

1670926937571.jpg


3.4 指定设备别名


UART8对应的设备节点是哪个?它的驱动程序需要从"别名"里确定编号。

修改 arch/arm/boot/dts/stm32mp157c-100ask-512d-v1.dts ,如下:

aliases {
ethernet0 = &ethernet0;
serial0 = &uart4; //debug
serial1 = &usart6; //rs485
serial2 = &usart1; //bluetooth
serial3 = &uart8; // extend board uart, /dev/ttySTM3
};


3.5 编译、使用


设置工具链

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihfexport PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/armbuildroot-linux-gnueabihf_sdk-b


编译设备树:

在Ubuntu的STM32MP157内核目录下执行如下命令,

得到设备树文件: arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dtb

make dtbs


复制到NFS目录:

$ cp arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dtb ~/nfs_rootfs/


开发板上挂载NFS文件系统

vmware使用NAT(假设windowsIP为193.168.1.100)

[root@100ask:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999
193.168.1.100:/home/book/nfs_rootfs /mnt


vmware使用桥接,或者不使用vmware而是直接使用服务器:假设Ubuntu IP为

193.168.1.137

[root@100ask:~]# mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

更新设备树

[root@100ask:~]# mount /dev/mmcblk2p2 /boot
[root@100ask:~]# cp /mnt/stm32mp157c-100ask-512d-lcd-v1.dtb /boot
[root@100ask:~]# sync


重启开发板

在串口可以看到以下设备节点

ls /dev/ttySTM*
/dev/ttySTM0
/dev/ttySTM1
/dev/ttySTM3
相关文章
|
11月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1888 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1211 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1269 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
483 1
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
1029 1
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
11月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
510 0
|
12月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
1284 0
|
12月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1087 1
二、Linux文本处理与文件操作核心命令
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
796 137
|
12月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1736 58