我在 RPI4 (4GB) 上安装了 Ubuntu 20.04 (32 位)。我在引脚 8、10 上安装了环回线。
我需要使用蓝牙以及通过 Pin 8,10 的基本串行通信与 Roboclaw 电机控制器进行通信。
是否使用脚本在 Ubuntu 上安装了 RASPI-CONFIGhttps://github.com/EmilGus/install_raspi-config但即使安装成功,加载时也会出现不正确的启动配置错误。这让我找到/boot/firmware
了目录config.txt
,cmdline.txt
等等。我删除了console=...
$ dmesg | grep tty
[ 0.001061] printk: console [tty0] enabled
[ 1.919367] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 29, base_baud = 0) is a PL011 rev2
[ 1.924677] fe215040.serial: ttyS0 at MMIO 0x0 (irq = 31, base_baud = 62500000) is a 16550
看起来我并没有禁用控制台。我该怎么做?
$ ls -l /dev/ttyS[0123]
crw-rw---- 1 root dialout 4, 64 Jun 27 12:32 /dev/ttyS0
$ ls -l /dev/serial
lrwxrwxrwx 1 root root 7 Apr 1 11:23 /dev/serial1 -> ttyAMA0
第二次当我运行时sudo minicom -b 115200 -o -D /dev/ttyS0
(使用环回 - 已验证正确安装)
我看不到任何字符。没有验证与串行通信。
尝试更改波特率、奇偶校验、流量控制设置,但没有效果。
/dev/ttyS0
还有一个简单的串行测试 python,无论我是否运行,它都无法通过串行发送/接收sudo
。
更新我得到了一个更新的安装脚本(与上面相同的 github 链接),现在已经成功安装了 RASPI-CONFIG,但是虽然我可以运行它,但 RPi4 上的目录结构与 Ubuntu 20.04 有很大不同,以至于它无法找到它试图更改的配置文件。
$ sudo raspi-config
grep: /boot/cmdline.txt: No such file or directory
sed: can't read /boot/cmdline.txt: No such file or directory
sed: can't read /boot/cmdline.txt: No such file or directory
我推测其他 Raspberry Pi 4 用户也打算使用串行端口,而且一定有办法完成 RASPI-CONFIG 在 Ubuntu 上尝试做的事情。
我发现文件位于/boot/firmware
我应该手动更改哪些内容以便 RASPI-CONFIG 通过脚本进行操作?
答案1
在 Ubuntu 20.04(64 位)下,我在与 rpi4(型号 B)上的 roboclaw 电机通信时遇到了很多麻烦。我能够解决这个问题,尽管我必须禁用蓝牙才能实现这一点。不幸的是,我目前不确定如何在不禁用蓝牙的情况下实现这一点。读者请注意。
确认这可与同一串行总线上的 5 个 roboclaw 电机控制器配合使用。
话虽如此,下面是我的做法(请注意,这是 Cliffsnotes of此程序):
- 禁用[电子邮件保护]
sudo systemctl stop [email protected] sudo systemctl disable [email protected] sudo systemctl mask [email protected]
- 设置 udev 规则
- 将以下内容放入新文件中
/etc/udev/rules.d/10-local.rules
KERNEL=="ttyS0", SYMLINK+="serial0" GROUP="tty" MODE="0660" KERNEL=="ttyAMA0", SYMLINK+="serial1" GROUP="tty" MODE="0660"
- 重新加载 udev 规则:
sudo udevadm control --reload-rules && sudo udevadm trigger
- 将以下内容放入新文件中
- 添加用户到
tty
组:sudo adduser ubuntu tty
- 删除子
console=serial0,115200
字符串/boot/firmware/cmdline.txt
dtoverlay=disable-bt
添加换行符/boot/firmware/config.txt
(我将其放在行的正下方cmdline=cmdline.txt
)- 重新开始
- (可选)请随意使用此脚本进行测试:https://github.com/nasa-jpl/osr-rover-code/blob/foxy-devel/scripts/roboclawtest.py
请注意,完成此设置后,您需要使用ttyAMA0
(或别名serial1
),而不是ttyS0
。第一个使用完整的硬件 UART,第二个使用“mini-UART”实现,该实现似乎在 Ubuntu 20.04 下运行得不太好(至少在我的硬件设置中,使用 roboclaw 时是这样。YMMV。)。更多讨论在 GitHub 上。
答案2
Bluetooth/hci0
我有一个同时使用和 的设置,miniUART/ttyS0
并且Ubuntu 20.04 (Ubuntu 5.4.0-1034.37-raspi 5.4.101) 64bit
开启了Raspberry Pi 4 Model B Rev 1.1
(4G 内存)。以下是我所做的:
备份原件
config.txt
和cmdline.txt
文件sudo cp -pr /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt-orig sudo cp -pr /boot/firmware/config.txt /boot/firmware/config.txt-orig
编辑
/boot/firmware/config.txt
注释掉enable_uart=1
下面的内容,#enable_uart=1 cmdline=cmdline.txt
console=serial0,115200
从中删除控制台设置/boot/firmware/cmdline.txt
禁用使用 miniUART 的串行服务
sudo systemctl stop [email protected] sudo systemctl disable [email protected] sudo systemctl mask [email protected]
将使用 miniUART 的用户添加
tty
到dialout
组sudo adduser ${USER} tty sudo adduser ${USER} dialout
最后,重新启动 Ubuntu 20.04,然后两者
hci0
就/dev/ttyS0
可以同时工作了。
有关 UART 的详细文档可参见https://www.raspberrypi.org/documentation/configuration/uart.md
答案3
一个简单的解决方案是使用 USB 转 TTL 适配器将 roboclaw 连接到 pi 上的 USB,而不是 UART GPIO 引脚。这将开箱即用,无需在 pi 上进行配置更改,只需在 roboclaw 驱动程序代码中指定 USB 端口即可。根据我的经验,最好使用基于 SiLabs CP2012 的 USB 转 TTL 适配器(例如由 adafruit 销售或在 amazon 上提供),因为该芯片组在 linux 和其他操作系统上得到广泛支持,当然在 Ubuntu 上不需要自定义驱动程序。
答案4
我也遇到了同样的问题。解决 raspi-config 脚本错误路径的办法可能是使用类似
ln -s /boot/firmware/cmdline.txt /boot/cmdline.txt
但这并不能解决起源问题。很抱歉。