树莓派4b安装ubuntu server18后如何开启串口?

树莓派4b的引脚图如下:

r730 bios 串口 bios开启串口_串口

r730 bios 串口 bios开启串口_经验分享_02

其中GPIO14和GPIO15是硬件串口。

因为我安装的不是Raspian系统,因此无法用raspi-config打开该串口。

ubuntu server raspi系统的/boot/firmware/config.txt里也说明了,enable_uart=1默认启用这个串口,linux里面名字叫 /ttyAMA0,但是默认是当串口控制台使用了(/boot/firmware/nobtcmd.txt里也写了console = /ttyAMA 921600)

而且这个硬件串口也和蓝牙连接在一起。想要用这个串口给另外的外设使用,必须禁用掉串口控制台和蓝牙。

方法:

1、/boot/firmware/nobtcmd.txt里删除console = /ttyAMA 921600从而禁用串口控制台。这个txt文件也可以用读卡器把sd卡插到windows系统里在system-boot里找到。

2、/boot/firmware/config.txt 里设置enable_uart=1(默认就是)。如果=0表示启用minicom串口,而不是这个硬件串口。

3、/boot/firmware/config.txt 里加入一行dtoverlay=disable-bt从而禁用蓝牙。

4、sudo systemctl disable bluetooth…… 禁用掉和蓝牙有关的开机启动项。直到桌面不再显示蓝牙标志,但是还有/ttyAMA0存在。

这样,开机后连接串口外设,使用/ttyAMA0就能正常串口通信了。

建议阅读树莓派官方文档:

https://www.raspberrypi.org/documentation/configuration/uart.md

还有linux的文档:

https://elinux.org/RPi_Serial_Connection

 

但现在还有个问题,如果在开机前就连接外设,那么串口外设发送的串口数据会干扰ubuntu开机,因为ubuntu开机时u-boot(类似bootloader)会默认等待串口数据2s再进入autoboot打开系统,这期间一旦有串口数据就会进入u-boot(类似电脑开机按F2会进入BIOS)。这会导致系统无法打开,屏幕一直显示串口设备发来的乱码。

解决办法是取消这个u-boot的2s等待时间,直接进入系统(但这样也会导致以后再也进不了u-boot了)

主要参考这篇用bing搜到的解答,askubuntu.com真的是个不错的网站:

https://askubuntu.com/questions/1215848/how-to-disable-ttyama0-console-on-boot-raspberry-pi

里面提到了两种取消等待时间的方法:

方法一:在自己电脑上重新编译修改过的u-boot,再把.bin文件替代原来的rasp4.bin(/boot/firmware里面)

方法二:开机利用串口进入u-boot,键入命令取消开机等待

我两种方法都试过,但是方法一好像不起作用,可能是raspi4还不成熟,不能这么替换自己编译的.bin文件。

方法二成功了。具体如下:

r730 bios 串口 bios开启串口_ubuntu_03

u-boot环境变量的说明可以看https://www.denx.de/wiki/view/DULG/UBootEnvVariables

这里提一下怎么通过串口进入u-boot。用一个串口转usb连接树莓派和自己电脑,然后用自己电脑上的串口调试助手发送指令。

r730 bios 串口 bios开启串口_ubuntu_04

开机按任意键进入u-boot,然后输入

setenv bootdelay -2
saveenv

从而设置环境变量取消等待时间并保存。

注意每行输入后都要加回车。

树莓派的屏幕上显示如下:

r730 bios 串口 bios开启串口_串口_05

搞定!