짧은 일반적인 질문
저는 커널 4.9가 설치된 Beaglebone Black에서 Debian 9(Stretch)를 실행하고 있습니다. 온라인에서 찾은 지침을 따르려고 했지만 지금까지 UART 장치를 구성할 수 없는 것 같습니다. 내 장치를 어떻게 구성하나요? 구성 문제를 디버깅/문제 해결하려면 어떻게 해야 합니까? 내 구성이 올바른지 어떻게 확인합니까?
길고 자세한 질문
저는 일반적으로 임베디드 Linux, 특히 Beaglebone을 처음 접했습니다. 나는 여기에 제공된 지침을 따랐습니다.
최신 "MicroSD 카드를 통해 BeagleBone 및 PocketBeagle용 Stretch IoT(그래픽 데스크톱 없음)" 이미지를 다운로드했습니다(구체적으로는뼈-debian-9.3-iot-armhf-2018-03-05-4gb.img) 에서최신 사진 페이지SD 카드에서 Beagleboard를 플래시하세요. 설치한 후에는 직렬-USB 케이블을 통해 Linux 데스크탑에서 Beaglebone에 액세스할 수 있었습니다. 이는 다음 문서에 설명된 방식과 유사합니다.
screen
다음 명령을 성공적으로 사용할 수 있습니다 .
screen /dev/ttyUSB0 115200
Micro-USB-USB 케이블을 사용하여 SSH를 통해 연결할 수도 있습니다.
ssh [email protected]
Beaglebone에 연결한 후 내 커널 버전이 임을 확인한 Linux beaglebone 4.9.82-ti-r102
후 다음을 포함하여 Beaglebone UART 구성에 대한 여러 기사를 읽었습니다.
내 결론은 (일반적으로) OS 및 커널 버전에 따라 확인해야 할 여러 가지 구성 파일이 있다는 것입니다. 여기에는 다음이 포함됩니다.
/boot/uEnv.txt
/boot/uboot/uEnv.txt
/etc/default/capemgr
/media/BEAGLEBONE/uEnv.txt
다음과 같은 여러 장치 파일도 언급됩니다.
- /sys/devices/bone_capemgr.*/slots
각 파일에 다음 줄을 추가해 보았습니다 uEnv.txt
.
cape_enable=capemgr.enable_partno=BB-UART1,BB-UART2,BB-UART4,BB-UART5
optargs=capemgr.enable_partno=BB-UART1,BB-UART2,BB-UART3,BB-UART5
또한 다음 줄을 추가해 보았습니다 /etc/default/capemgr
.
CAPE=BB-SPI-01,BB-UART1,BB-UART2,BB-UART4
재부팅 후 다음을 사용하여 UART 장치가 나타나는지 확인했습니다.
ls -l /dev/ttyO*
불행하게도 나는 다음과 같은 결과를 얻었습니다(예상치 못한 결과):
debian@beaglebone:~$ ls -l /dev/ttyO*
lrwxrwxrwx 1 root root 5 Jan 1 00:00 /dev/ttyO0 -> ttyS0
참고: 상관없어요 ttyO0
. 상관없어요 ttyO1, ..., ttyO5
.
또한 몇 가지 다른 시도도 시도했지만 (시간과 공간을 절약하기 위해) 요청하지 않는 한 모든 시도를 설명하지는 않겠습니다.
내가 여기서 뭘 잘못하고 있는 걸까? UART 장치를 활성화하는 올바른 방법은 무엇입니까?
답변1
다음은 커널 4.14가 포함된 Debian 9.9에 적용됩니다(Debian 9.3이 아닌 Debian 8.3에도 적용됨).
부팅 후 /dev/ttyO1,O2,O4 파일이 표시되지만 핀을 올바른 pinmux로 설정할 때까지는 작동하지 않습니다.
#ttyO1:
config-pin P9_24 uart
config-pin P9_26 uart
#ttyO2:
config-pin P9_21 uart
config-pin P9_22 uart
#ttyO4:
config-pin P9_11 uart
config-pin P9_13 uart
이 단계는 재부팅할 때마다 수행해야 합니다. 일종의 시작 스크립트에 속합니다.
UART4와 같은 간단한 루프백 테스트를 통해 UART가 제대로 작동하는지 확인할 수 있습니다.
P9_11과 P9_13 사이에 와이어 배치
화면/개발자/ttyO4
창에 입력한 텍스트가 나타나야 하며, 와이어를 분리하면 더 이상 입력이 나타나지 않습니다. UART가 작동 중입니다.
답변2
다음을 사용하여 Debian 10을 보증할 수 있습니다:
부팅 시 모든 4.5 UART를 자동으로 활성화할 수 있습니다. 데비안 9 이전 버전과 uEnv.txt
달리 /boot/
.
이 파일을 백업하세요.
다음 권한으로 이 파일을 편집하세요
sudo
.
$ sudo nano uEnv.txt
4.5 UART가 모두 활성화된 최종 버전은 다음과 같습니다.
#Docs: http://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0
uname_r=4.19.94-ti-r42
#uuid=
#dtb=
###U-Boot Overlays###
###Documentation: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays
###Master Enable
enable_uboot_overlays=1
# UART 1
uboot_overlay_addr0=/lib/firmware/BB-UART1-00A0.dtbo
# UART 2
uboot_overlay_addr1=/lib/firmware/BB-UART2-00A0.dtbo
# UART 4
uboot_overlay_addr2=/lib/firmware/BB-UART4-00A0.dtbo
# UART 5
uboot_overlay_addr3=/lib/firmware/BB-UART5-00A0.dtbo
# UART 3 (only TX). Note that in "uboot_overlay_addrX", the X need not be = UART id
uboot_overlay_addr4=/lib/firmware/BB-UART3-00A0.dtbo
###
###Overide capes with eeprom
#uboot_overlay_addr0=/lib/firmware/<file0>.dtbo
#uboot_overlay_addr1=/lib/firmware/<file1>.dtbo
#uboot_overlay_addr2=/lib/firmware/<file2>.dtbo
#uboot_overlay_addr3=/lib/firmware/<file3>.dtbo
###
###Additional custom capes
#uboot_overlay_addr4=/lib/firmware/<file4>.dtbo
#uboot_overlay_addr5=/lib/firmware/<file5>.dtbo
#uboot_overlay_addr6=/lib/firmware/<file6>.dtbo
#uboot_overlay_addr7=/lib/firmware/<file7>.dtbo
###
###Custom Cape
#dtb_overlay=/lib/firmware/<file8>.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
#disable_uboot_overlay_emmc=1
#disable_uboot_overlay_video=1
#disable_uboot_overlay_audio=1
#disable_uboot_overlay_wireless=1
#disable_uboot_overlay_adc=1
###
###PRUSS OPTIONS
###pru_rproc (4.14.x-ti kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo
###pru_rproc (4.19.x-ti kernel)
uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-19-TI-00A0.dtbo
###pru_uio (4.14.x-ti, 4.19.x-ti & mainline/bone kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
###
###Debug: disable uboot autoload of Cape
#disable_uboot_overlay_addr0=1
#disable_uboot_overlay_addr1=1
#disable_uboot_overlay_addr2=1
#disable_uboot_overlay_addr3=1
###
###U-Boot fdt tweaks... (60000 = 384KB)
#uboot_fdt_buffer=0x60000
###U-Boot Overlays###
cmdline=coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 quiet
#In the event of edid real failures, uncomment this next line:
#cmdline=coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 quiet video=HDMI-A-1:1024x768@60e
##enable Generic eMMC Flasher:
##make sure, these tools are installed: dosfstools rsync
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
#cape_enable=capemgr.enable_partno=BB-UART1,BB-UART2,BB-UART4,BB-UART5
- 저장하고 다시 시작하세요. 즐기다!
답변3
"길고 자세한 질문"에 나열된 모든 항목을 시도한 후에도 여전히 UART 포트를 초기화할 수 없습니다. 문제는 외부 SD 카드에서 Debian 9 이미지를 실행할 때 BeagleBone Black(BBB)에 Debian 8이 사전 설치되어 있다는 것이었습니다. 저는 부팅 프로세스나 BeagleBones에 대한 전문가는 아니지만 제가 발견한 바에 따르면 BeagleBone은 SD 카드에서 부팅하는 것보다 내부 eMMMC에서 부팅하는 것을 우선시합니다. 그래서 내 문제는 내 BBB가 미리 구운 데비안 8 이미지에서 부팅되어 내 UART 채널이 초기화되지 않는다는 것입니다. 초기화 후 SD 카드 이미지로 전환됩니다. 디버그 포트를 통해 버전을 확인하면 Debian 9라고 표시되고 디버그 포트를 통해 SD 카드 Python 스크립트를 실행할 수도 있기 때문에 전환되는 것 같습니다.
부트로더가 eMMC를 건너뛰고 SD 카드에서 직접 부팅할 수 있도록 eMMC 파티션의 첫 번째 메가바이트를 삭제(Debian 8을 효과적으로 삭제)하여 이 문제를 해결했습니다. 이를 통해 모든 채널 초기화가 올바른 Debian 9 이미지에서 이루어질 수 있습니다.