Tôi đang sử dụng phiên bản Raspberry Pi 4 (8G). Nó hoạt động tốt khi giao tiếp với Pixhawk qua serial0 trước đó. Nhưng vài tháng trước, tôi đã thay đổi HĐH từ Ubuntu 16 Ubiquity sang Ubuntu Mate 20. Các chức năng khác hoạt động tốt, nhưng khi tôi thử sử dụng serial0 để kết nối với Pixhawk, tôi thấy serial0 không tồn tại.
Tôi đã thực hiện một số nghiên cứu trực tuyến và nhận thấy một số người dùng gặp vấn đề tương tự về việc vô hiệu hóa serial0 khi sử dụng RPi3 và 4. Tôi đã thử sử dụng một số tập lệnh mà họ đã đề cập và một số bước để thay đổi các tệp liên quan đến config.txt, nhưng không có tập lệnh nào phù hợp với tôi. Các bước chính tôi làm theo là trong
Kích hoạt giao tiếp UART trên Pi4 Ubuntu 20.04
Tôi nhận thấy rằng thông tin dmesg có một số khác biệt:
Nó nên có ba dòng:
$dmesg | xin lỗi
[ 0,001061] printk: đã bật bảng điều khiển [tty0]
[ 1.919367] fe201000.serial: ttyAMA0 tại MMIO 0xfe201000 (irq = 29, base_baud = 0) là PL011 rev2
[ 1.924677] fe215040.serial: ttyS0 tại MMIO 0x0 (irq = 31, base_baud = 62500000) là 16550
Nhưng RPi của tôi chỉ có hai dòng:
ubuntu@ubuntu-desktop:~$ dmesg | xin lỗi
[ 0,000245] printk: đã bật bảng điều khiển [tty0]
[ 1.412273] fe201000.serial: ttyAMA0 tại MMIO 0xfe201000 (irq = 14, base_baud = 0) là PL011 rev2
ubuntu@ubuntu-desktop:~$ mavproxy.py --master=/dev/ttyS0,921600
Kết nối /dev/ttyS0,921600 source_system=255
Không thể kết nối với /dev/ttyS0,921600 : [Errno 2] không thể mở cổng /dev/ttyS0: [Errno 2] Không có tệp hoặc thư mục như vậy: '/dev/ttyS0'
Vì vậy, có vẻ như ttyS0 đã bị tắt.
Bạn có nghĩ rằng nó có mối quan hệ nào đó với dòng lệnh Kernel "8250.nr_uarts = 0"?
ubuntu@ubuntu-desktop:~$ dmesg | grep uart
[ 0,000000] Dòng lệnh hạt nhân: carved_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 smsc95xx.macaddr=DC:A6:32:B2:AD:BF vc_mem.mem_base=0x3ec00000 vc0_mize0. net.ifnames=0 dwc_otg.lpm_enable=0 root=LABEL=rootfstype có thể ghi=ext4 lift=hạn chót rootwait fixrtc giật gân yên tĩnh giật gân yên tĩnh
Đây là các tập tin liên quan:
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/config.txt
# Vui lòng KHÔNG sửa đổi tệp này; nếu bạn cần sửa đổi cấu hình khởi động,
# Tệp "usercfg.txt" là nơi chứa các thay đổi của người dùng. Vui lòng tham khảo trước
# tệp README để biết mô tả về các tệp cấu hình khác nhau trên
# phân vùng khởi động.
# Thứ tự bất thường dưới đây là có chủ ý; firmware cũ hơn (đặc biệt là
# phiên bản ban đầu được vận chuyển với bionic) không hiểu điều kiện
# [phần] bên dưới và chỉ cần bỏ qua chúng. Pi4 hoàn toàn không khởi động với
# firmwares cũ thế này nên đặt ở trên cùng là an toàn. Trong số Pi2 và Pi3,
# Pi3 uboot tình cờ hoạt động tốt trên Pi2, vì vậy nó cần phải đi xuống phía dưới
# để hỗ trợ phần sụn cũ.
[pi4]
kernel=uboot_rpi_4.bin
max_framebuffers=2
[pi2]
kernel=uboot_rpi_2.bin
[pi3]
kernel=uboot_rpi_3.bin
[tất cả các]
cánh tay_64bit=1
device_tree_address=0x03000000
# Các cài đặt sau là "mặc định" dự kiến sẽ bị ghi đè bởi
# bao gồm cấu hình. Lý do duy nhất mà chúng được đưa vào, một lần nữa, là để
# hỗ trợ các chương trình cơ sở cũ không hiểu lệnh "bao gồm".
# enable_uart=1
cmdline=cmdline.txt
bao gồm syscfg.txt
bao gồm usercfg.txt
# Bật lớp phủ đồ họa FKMS ("Fake" KMS), bật chương trình cơ sở của máy ảnh
# và phân bổ 128Mb cho bộ nhớ GPU
dtoverlay=vc4-fkms-v3d
gpu_mem=128
start_x=1
# Nhận xét dòng sau nếu các cạnh của màn hình xuất hiện bên ngoài
# các cạnh của màn hình của bạn
vô hiệu hóa_overscan=1
# Nếu bạn gặp sự cố với âm thanh, bạn có thể thử bỏ ghi chú dòng sau
# buộc đầu ra HDMI ở chế độ HDMI thay vì DVI (không
# hỗ trợ đầu ra âm thanh)
#hdmi_drive=2
# Nếu bạn có CM4, hãy bỏ ghi chú dòng sau để bật đầu ra USB2
# trên bảng IO (giả sử CM4 của bạn được cắm vào bảng như vậy)
#dtoverlay=dwc2,dr_mode=host
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/usercfg.txt
# Đặt các thay đổi "config.txt" (dtparam, dtoverlay, disable_overscan, v.v.) vào
# tập tin này. Vui lòng tham khảo tệp README để biết mô tả về các
# tệp cấu hình trên phân vùng khởi động.
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/README
Tổng quan về các tệp trên phân vùng /boot/firmware (phân vùng thứ nhất
trên thẻ SD) được sử dụng bởi quá trình khởi động Ubuntu (đại khái theo thứ tự) như sau
sau:
* bootcode.bin - đây là bộ tải khởi động giai đoạn thứ hai được tải bởi tất cả pis với
ngoại lệ của pi4 (trong đó điều này được thay thế bằng flash
kỉ niệm)
* config.txt - tệp cấu hình đầu tiên được đọc bởi quá trình khởi động
* syscfg.txt - tệp trong đó cấu hình sửa đổi hệ thống sẽ được
được đặt, bao gồm bởi config.txt
* usercfg.txt - tệp trong đó cấu hình người dùng đã sửa đổi phải là
được đặt, bao gồm bởi config.txt
* start*.elf - bộ tải khởi động giai đoạn ba, xử lý cây thiết bị
sửa đổi và cái nào tải...
* uboot*.bin - các tệp nhị phân u-boot khác nhau cho các nền tảng pi khác nhau; này
được khởi chạy dưới dạng "kernel" bởi config.txt
* boot.scr - tập lệnh khởi động được thực thi bởi uboot*.bin, đến lượt nó
tải...
* vmlinuz - nhân Linux, được thực thi bởi boot.scr
* initrd.img - initramfs, được thực thi bởi boot.scr
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/syscfg.txt
# Tệp này dự định sẽ được sửa đổi bởi tiện ích pibootctl. Người dùng
# thay đổi cấu hình nên được đặt trong "usercfg.txt". Vui lòng tham khảo
# Tệp README để biết mô tả về các tệp cấu hình khác nhau khi khởi động
# vách ngăn.
enable_uart=0
dtparam=âm thanh=bật
dtparam=i2c_arm=on
dtparam=spi=on
cmdline=cmdline.txt
Tôi cũng đã thử thay đổi enable_uart=0 thành 1 trong /boot/firmware/syscfg.txt.
Sau đó, hệ thống không thể khởi động, điều này cho thấy tệp đó có ảnh hưởng đến hệ thống. Sau đó, tôi đã thay đổi lại tệp và hệ thống khởi động bình thường.
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 root=LABEL=rootfstype có thể ghi=ext4 thang máy=thời hạn rootwait fixrtc giật gân yên tĩnh
ubuntu@ubuntu-desktop:~$ sudo systemctl status [email protected]
â [email protected]
Đã tải: bị che (Lý do: Đơn vị [email protected] bị che.)
Đang hoạt động: không hoạt động (đã chết)
ubuntu@ubuntu-desktop:~$ nhóm
ubuntu adm tty dialout cdrom sudo dip video plugdev input lxd lpadmin sambashare spi i2c gpio