ฉันใช้รุ่น Raspberry Pi 4 (8G) ใช้งานได้ดีเมื่อสื่อสารกับ Pixhawk ผ่าน serial0 ก่อนหน้านี้ แต่เมื่อหลายเดือนก่อน ฉันเปลี่ยนระบบปฏิบัติการจาก Ubuntu 16 Ubiquity เป็น Ubuntu Mate 20 ฟังก์ชันอื่นๆ ทำงานได้ดี แต่เมื่อฉันพยายามใช้ serial0 เพื่อเชื่อมต่อกับ Pixhawk ฉันพบว่าไม่มี serial0 อยู่
ฉันทำการค้นคว้าทางออนไลน์และพบว่าผู้ใช้บางคนมีปัญหาที่คล้ายกันในการปิดใช้งาน serial0 เมื่อใช้ RPi3 และ 4 ฉันได้ลองใช้สคริปต์บางตัวที่พวกเขากล่าวถึงและบางขั้นตอนในการเปลี่ยนแปลงไฟล์ที่เกี่ยวข้องกับ config.txt แต่ไม่มีสคริปต์ใดที่เหมาะกับฉัน ขั้นตอนหลักที่ฉันทำตามอยู่ใน
เปิดใช้งานการสื่อสาร UART บน Pi4 Ubuntu 20.04
ฉันสังเกตเห็นว่าข้อมูล dmesg มีความแตกต่างบางประการ:
ควรมีสามบรรทัด:
$dmesg | เกรป tty
[ 0.001061] printk: เปิดใช้งานคอนโซล [tty0]
[ 1.919367] fe201000.serial: ttyAMA0 ที่ MMIO 0xfe201000 (irq = 29, base_baud = 0) เป็น PL011 rev2
[ 1.924677] fe215040.serial: ttyS0 ที่ MMIO 0x0 (irq = 31, base_baud = 62500000) คือ 16550
แต่ RPi ของฉันมีเพียงสองบรรทัด:
ubuntu@ubuntu-desktop:~$ dmesg | เกรป tty
[ 0.000245] printk: เปิดใช้งานคอนโซล [tty0]
[ 1.412273] fe201000.serial: ttyAMA0 ที่ MMIO 0xfe201000 (irq = 14, base_baud = 0) เป็น PL011 rev2
ubuntu@ubuntu-desktop:~$ mavproxy.py --master=/dev/ttyS0,921600
เชื่อมต่อ /dev/ttyS0,921600 source_system=255
ไม่สามารถเชื่อมต่อกับ /dev/ttyS0,921600 : [Errno 2] ไม่สามารถเปิดพอร์ต /dev/ttyS0: [Errno 2] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว: '/dev/ttyS0'
ดังนั้นดูเหมือนว่า ttyS0 ถูกปิดใช้งาน
คุณคิดว่ามันมีความสัมพันธ์บางอย่างกับบรรทัดคำสั่งเคอร์เนล "8250.nr_uarts = 0" หรือไม่
ubuntu@ubuntu-desktop:~$ dmesg | เกรป ยูอาร์
[ 0.000000] บรรทัดคำสั่งเคอร์เนล: coherent_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 vc_mem0_mesize40 net.ifnames=0 dwc_otg.lpm_enable=0 root=LABEL=rootfstype ที่เขียนได้=ext4 ลิฟต์=กำหนดส่ง rootwait fixrtc สาดเงียบ สาดเงียบ
นี่คือไฟล์ที่เกี่ยวข้อง:
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/config.txt
# โปรดอย่าแก้ไขไฟล์นี้ หากคุณต้องการแก้ไขการกำหนดค่าการบู๊ต
# ไฟล์ "usercfg.txt" เป็นที่รวมการเปลี่ยนแปลงของผู้ใช้ โปรดดูที่
# ไฟล์ README สำหรับคำอธิบายของไฟล์คอนฟิกูเรชันต่างๆ บน
#พาร์ติชันสำหรับบูต
# การสั่งซื้อที่ผิดปกติด้านล่างนี้เป็นการจงใจ; เฟิร์มแวร์รุ่นเก่ากว่า (โดยเฉพาะ
# เวอร์ชันแรกจัดส่งด้วยไบโอนิค) ไม่เข้าใจเงื่อนไข
# [ส่วน] ด้านล่างและไม่ต้องสนใจ Pi4 ไม่บูตเลยด้วย
# เฟิร์มแวร์เก่านี้จึงปลอดภัยที่จะวางที่ด้านบน ของ Pi2 และ Pi3, the
# Pi3 uboot ทำงานได้อย่างมีความสุขบน Pi2 ดังนั้นจึงต้องไปที่ด้านล่างสุด
# เพื่อรองรับเฟิร์มแวร์เก่า
[pi4]
เคอร์เนล=uboot_rpi_4.bin
max_framebuffers=2
[pi2]
เคอร์เนล=uboot_rpi_2.bin
[pi3]
เคอร์เนล=uboot_rpi_3.bin
[ทั้งหมด]
arm_64bit=1
device_tree_address=0x03000000
# การตั้งค่าต่อไปนี้เป็น "ค่าเริ่มต้น" ที่คาดว่าจะถูกแทนที่โดย
# รวมการกำหนดค่า เหตุผลเดียวที่รวมไว้คืออีกครั้งเพื่อ
# รองรับเฟิร์มแวร์เก่าที่ไม่เข้าใจคำสั่ง "รวม"
# enable_uart=1
cmdline=cmdline.txt
รวม syscfg.txt
รวม usercfg.txt
# เปิดใช้งานการซ้อนทับกราฟิก FKMS ("ปลอม" KMS) เปิดใช้งานเฟิร์มแวร์ของกล้อง
# และจัดสรร 128Mb ให้กับหน่วยความจำ GPU
dtoverlay=vc4-fkms-v3d
GPU_mem=128
start_x=1
# แสดงความคิดเห็นในบรรทัดต่อไปนี้หากขอบของเดสก์ท็อปปรากฏอยู่ด้านนอก
# ขอบจอแสดงผลของคุณ
ปิดการใช้งาน_overscan=1
# หากคุณมีปัญหาเกี่ยวกับเสียง คุณอาจลองไม่แสดงความคิดเห็นในบรรทัดต่อไปนี้
# ซึ่งบังคับให้เอาต์พุต HDMI เข้าสู่โหมด HDMI แทน DVI (ซึ่งไม่ใช่
# รองรับเอาต์พุตเสียง)
#hdmi_drive=2
# หากคุณมี CM4 ให้ยกเลิกการแสดงความคิดเห็นในบรรทัดต่อไปนี้เพื่อเปิดใช้งานเอาต์พุต USB2
# บนบอร์ด IO (สมมติว่าคุณเสียบ CM4 เข้ากับบอร์ดดังกล่าว)
#dtoverlay=dwc2,dr_mode=โฮสต์
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/usercfg.txt
# วางการเปลี่ยนแปลง "config.txt" (dtparam, dtoverlay, enable_overscan ฯลฯ) ใน
#ไฟล์นี้. โปรดดูที่ไฟล์ README สำหรับคำอธิบายต่างๆ
# ไฟล์คอนฟิกูเรชันบนพาร์ติชันสำหรับเริ่มระบบ
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/README
ภาพรวมของไฟล์บนพาร์ติชัน /boot/firmware (พาร์ติชันที่ 1
บนการ์ด SD) ที่ใช้โดยกระบวนการบูต Ubuntu (ตามลำดับโดยประมาณ) เป็นดังนี้
ดังนี้
* bootcode.bin - นี่คือ bootloader ขั้นที่สองที่โหลดโดย pis ทั้งหมดด้วย
ข้อยกเว้นของ pi4 (ซึ่งถูกแทนที่ด้วยแฟลช
หน่วยความจำ)
* config.txt - ไฟล์การกำหนดค่าแรกที่อ่านโดยกระบวนการบูต
* syscfg.txt - ไฟล์ที่ระบบจะแก้ไขการกำหนดค่า
วางรวมโดย config.txt
* usercfg.txt - ไฟล์ที่ผู้ใช้แก้ไขการกำหนดค่าควรเป็น
วางรวมโดย config.txt
* start*.elf - bootloader ขั้นที่สามซึ่งจัดการแผนผังอุปกรณ์
การปรับเปลี่ยนและที่โหลด ...
* uboot*.bin - ไบนารี u-boot ต่างๆ สำหรับแพลตฟอร์ม pi ที่แตกต่างกัน เหล่านี้
เปิดใช้งานเป็น "เคอร์เนล" โดย config.txt
* boot.scr - สคริปต์การบู๊ตที่ดำเนินการโดย uboot*.bin ซึ่งในทางกลับกัน
โหลด...
* vmlinuz - เคอร์เนล Linux ดำเนินการโดย boot.scr
* initrd.img - initramfs ดำเนินการโดย boot.scr
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/syscfg.txt
# ไฟล์นี้มีวัตถุประสงค์เพื่อแก้ไขโดยยูทิลิตี้ pibootctl ผู้ใช้
# การเปลี่ยนแปลงการกำหนดค่าควรอยู่ใน "usercfg.txt" โปรดดูที่
# ไฟล์ README สำหรับคำอธิบายของไฟล์คอนฟิกูเรชันต่างๆ ในการบู๊ต
#พาร์ทิชั่น.
enable_uart=0
dtparam=เสียง=เปิด
dtparam=i2c_arm=เปิด
dtparam=spi=เปิด
cmdline=cmdline.txt
ฉันพยายามเปลี่ยน enable_uart=0 เป็น 1 ใน /boot/firmware/syscfg.txt
หลังจากนั้น ระบบจะไม่สามารถบู๊ตได้ ซึ่งแสดงว่าไฟล์นั้นมีอิทธิพลต่อระบบ จากนั้นฉันเปลี่ยนไฟล์กลับและบูตระบบตามปกติ
ubuntu@ubuntu-desktop:~$ cat /boot/firmware/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 root=LABEL=rootfstype ที่เขียนได้=ext4 ลิฟต์=กำหนดส่ง rootwait fixrtc สาดเงียบ
ubuntu@ubuntu-desktop:~$ sudo systemctl สถานะ [email protected]
â [email protected]
โหลดแล้ว: ปิดบัง (เหตุผล: หน่วย [email protected] ถูกปิดบัง)
ใช้งาน: ไม่ใช้งาน (ตาย)
ubuntu@ubuntu-desktop:~$ กลุ่ม
ubuntu adm tty โทรออก cdrom sudo dip วิดีโอ อินพุต plugdev lxd lpadmin sambashare spi i2c gpio