Linux系统里,串口通信是嵌入式开发里常有的需求,也是工业控制里常见的需求,还是设备调试中常见的情况。环境变量的设定直接影响了串口工具的运行权限,环境变量的处理直接影响了串口工具的默认参数,环境变量的处置直接影响了串口工具的连接行为。正确去理解这些变量,并且合理管理这些变量,能够显著提高工作效率,能够避免因为权限不合适导致的连接失败现象,能够避免因为配置不恰当导致的连接失败状况 。
linux串口环境变量是什么
于Linux环境情形下,跟串口径直关联的环境变量不像PATH那般具有普遍性,更为广泛存在的“串口环境”所指涉的是串口设备文件的权限,以及其所属的用户组,还有掌控串口终端行为的变量,举例来说,把用户添加进dialout或者tty组从而获取串口读写权限,这便是一项关键的环境配置,另外,诸如minicom这类终端软件会依靠自身的配置文件去设定波特率等参数,这些配置虽说并非严格意义上的环境变量,然而其作用与之相类似 。

相关的另一类是对终端行为产生影响的Shell环境变量中的,举个例子来说像是TERM类型的那种。当凭借串口登录至其他设备的时候,正确的TERM设置能够保证终端展示正常。尽管系统并未预先设定一个名为SERIAL_PORT的变量,不过开发者时常会自行定义如下类似的环境变量,就像export DEVICE=/dev/ttyUSB0这样,在脚本里统一去引用设备节点,以此提升代码的可维护性以及可移植性。
为什么需要修改linux串口环境变量
最为常见的场景是对权限问题予以解决,在默认情形下,串口设备文件,像/dev/ttyS0以及/dev/ttyUSB0,一般是归root用户以及dialout组所有,普通用户要是直接进行访问,就会报出“Permission denied”这样的错误提示,借助针对于用户所属组环境作出修改,也就是把用户添加到dialout组当中永久免费linux服务器,能够免除掉每次应用sudo时所带来的麻烦,使得操作安全性得以提升,防止因为操作失误而让系统受到损害 。

在自动化脚本以及持续集成环境里,对环境变量加以修改是极关键的。举例来说,于测试工装上,脚本得借助串口去和多个有待测试的板卡展开通信。要是硬编码设备路径,会致使脚本变得僵硬。像预先设置BOARD1_PORT=/dev/ttyACM0这类环境变量,脚本便能够灵活地适配不同的物理连接,达成测试流程的自动化,这属于生产环境中的典型实践 。
如何查看当前的linux串口环境变量
严格来讲,不存在那种全方位的“串口环境变量”。要去查看有关的配置,首先得去查一查用户对于串口设备具备的权限。运用ls -l /dev/ttyUSB0这个命令,去瞧瞧文件所归属的用户以及组。其次,用groups命令去查看当下用户归属的组,确认一下是不是涵盖了dialout, tty, uucp这些和串口有关联的组。这些组之间的关系隶属于用户环境的一部分linux 串口 修改环境变量,它决定了访问的能力。
在面对自定义的变量,或者是有可能对终端会话造成影响的变量时,能够运用env | grep -i term去查看终端类型的设置情况了。也或是采用echo $DEVICE来查看相关变量是否已经被定义了。而更为全面的一种方法则是借助printenv命令把所有的环境变量都列出来,接着从这些变量当中去筛选有可能用于指向串口设备的变量。知晓当下的环境状况乃是开展任何修改操作的前提条件。
如何临时修改linux串口环境变量
当前Shell会话里,临时的修改才会有效,对于自定义变量,在终端直接输入export SERIAL_BAUDRATE=115200就行,之后在当前Shell以及它启动的子进程中,都能够借由$SERIAL_BAUDRATE引用这个值,用来临时调试或者一次性任务很合适,关闭终端后设置马上就会失效。
有一种方式,是通过使用sg命令来达成临时提升权限,比如像sg dialout -c “minicom”这样的操作,这能让当下的用户在临时的状况下通过切换成dialout组的身份去执行minicom命令,这种是比直接运用sudo行径实际上还多了一份精心细致,原因在于它仅仅是改变了组执行上下文,并非整体权限都提高变更为给予象root这样的权限级别。而修改用户组关系,是要在注销之后再重新登录才能够发挥效用的,此情不能算做是“临时”范畴。

如何永久修改linux串口环境变量
要是想让自定义串口环境变量一直有效,那就得把export语句写到Shell的配置文件里头。就当前用户而言,一般是~/.bashrc(bash 的情况)或者~/.zshrc(zsh 的情况)。比如说,在文件最末尾添上一行export DEFAULT_TTY=/dev/ttyS0。存好之后,运行source ~/.bashrc或者重新开启终端,这个变量就会自动被载入了。
完全解决串口设备访问权限的最为根本的办法是把用户添加到与之对应的系统组,这是需要管理员权限的,要执行sudo usermod -a -G dialout $USER,其中-a的含义表示追加,-G的作用嘛指定组名,$USER所替代的就是当前用户名,执行了这条命令之后,用户必定得。完全注销并重新登录(或重启系统),新的组关系才会被会话识别并生效。
修改linux串口环境变量常见问题

将用户组修改之后,权限依旧没有效果,这属于极为常见的状况,缘由基本上一直都是用户未曾再次进行登录!Linux于用户登录之际判定其组身份,单是执行usermod命令并不会把已登录会话的组信息予以更新,必定要注销图形界面亦或是断开SSH连接嵌入式linux培训,接着再次登录,借助id命令能够马上验证新的组列表是不是开始起作用 。
不同的问题在于,设备节点并非固定在一处。USB转串口的设备,会因插拔顺序更替而改变,今日或许是/dev/ttyUSB0linux 串口 修改环境变量,到了明日转为/dev/ttyUSB1。依赖那个路径的环境变量,或者脚本,便会失去效用。解决办法是,运用借助设备唯一属性,像序列号、供应商ID创设的持久化符号链接。能够经由udev规则达成,比如打造一个始终指向特定设备的/dev/my_board链接,接下来于环境变量里援用这个稳定链接。
于您的Linux开发或者运维工作期间,有无碰到过因串口权限加上配置问题致使的棘手故障?您到头来是怎样排查以及解决的?欢迎在评论区去分享您的经验,要是觉得本文给您帮忙了,请点赞并且分享给更多有需要的朋友。
