PocketBeagle禁用UART0控制台输出改为通用用途的方法咨询
如何在PocketBeagle上禁用UART0控制台并将其用于自定义用途
我之前在PocketBeagle上折腾Debian镜像的时候,也碰到过一模一样的问题——UART0被绑定成系统控制台,没法拿来做自己的项目。看你的dmesg输出,内核已经把console=ttyO0替换成ttyS0了,这说明UART0确实被系统控制台占用着,要解绑它得从启动参数和系统服务两个地方动手,亲测有效:
第一步:修改U-Boot启动参数,移除控制台绑定
PocketBeagle是用U-Boot引导系统的,所以首先得改掉它的启动参数:
- 先挂载boot分区(从你的dmesg看系统根分区是
/dev/mmcblk0p1,一般Debian镜像的boot和root是同一个分区,直接挂载就行):mount /dev/mmcblk0p1 /boot - 编辑U-Boot的配置文件
uEnv.txt:nano /boot/uEnv.txt - 在文件里找包含
console=ttyO0,115200n8的行,要么直接删掉,要么在开头加#注释掉。如果参数是写在optargs这一行里的,就把console=ttyO0,115200n8从optargs的值里移除。 - 按
Ctrl+O保存,Ctrl+X退出编辑器,然后重启系统:reboot
第二步:禁用ttyS0的getty服务
就算改了启动参数,系统可能还是会在ttyS0(也就是原来的UART0)上启动getty进程,得把它关掉:
- 先确认当前有没有运行的getty服务:
systemctl list-units | grep ttyS0 - 如果看到
serial-getty@ttyS0.service处于运行状态,直接禁用并停止它:systemctl disable --now serial-getty@ttyS0.service - 为了防止系统下次启动自动生成这个服务,还要把它mask掉:
systemctl mask serial-getty@ttyS0.service
验证效果
重启之后,再运行dmesg | grep tty,应该就看不到console=ttyS0相关的输出了。这时候/dev/ttyS0就完全属于你了,可以用它来连接传感器、串口设备,或者自己写程序读写串口数据。
内容的提问来源于stack exchange,提问作者Luis Cruz
相关产品推荐
相关产品推荐

