短い一般的な質問
私はカーネル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を自動的に有効にできます。 Debian 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があらかじめ焼き付けられたDebian 8イメージから起動し、私のUARTチャネルが初期化されないことです。初期化後、SDカード画像に切り替わります。デバッグポートを介してバージョンを確認すると、Debian 9と表示され、デバッグポートを介してSDカードPythonスクリプトを実行することもできるため、切り替えられるようです。
ブートローダがeMMCをスキップしてSDカードから直接起動できるように、eMMCパーティションの最初のメガバイトを削除(Debian 8を効果的に削除)してこの問題を解決しました。これにより、すべてのチャンネルの初期化が正しいDebian 9イメージで行われます。