Armadilloフォーラム

A6EでコンソールをUART1に変更しUART3は通常のシリアル通信で使用したい

gugen-kuroyanagi

2024年8月13日 11時59分

お世話になっております。
A6EのUART1をコンソールとして使用し、UART3は通常のシリアル通信に使用する方法はありますでしょうか?
A6の手順などを参考にしてu-bootソースビルド、カーネルソースのbootないのuart部分の変更を
実施してみたのですが期待する動作を得ることができませんでした。

手順、参考URLなどありましたらご教授いただけると助かります。

どうぞよろしくお願いいたします。

コメント

at_dominique.m…

2024年8月13日 13時25分

gugen-kuroyanagiさん

お世話になっています、
マルティネです。

> A6EのUART1をコンソールとして使用し、UART3は通常のシリアル通信に使用する方法はありますでしょうか?
> A6の手順などを参考にしてu-bootソースビルド、カーネルソースのbootないのuart部分の変更を
> 実施してみたのですが期待する動作を得ることができませんでした。
>
> 手順、参考URLなどありましたらご教授いただけると助かります。

申し訳ございません、私が把握している限りでは Armadillo IoT A6E での実例を公開していません。

先週は弊社の営業担当者から話を伺って、金曜日に新しい情報を伝えていただいたはずですが、そちらの手順でどういう動作になっているか、また何かのエラーになったの化を教えていただけますでしょうか?

念のため、手順を以下に改めてまとめてみました。

1/ u-boot の出力を無効化する
1.a/ 「make ARCH=arm armadillo-iotg-a6e_defconfig」でデフォルトのコンフィグを適用した後に menuconfig で CONFIG_SILENT_CONSOLE を設定する
1.b/ マニュアルどおりにビルドして配置する
こちらに関しては問題ないと考えています。

2/ linux の dtb に UART1 を設定する
arch/arm/boot/dts/armadillo-iotg-a6e.dts に変更を直接に加えても問題ありませんが、今後の更新を顧慮すると dtbo (overlay) の形がいいと思いますので、dtbo で案内させていただきます。
2.a/ arch/arm/boot/dts/armadillo-600-customize.dts に以下の内容を記載します

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Copyright (C) 2023 Atmark Techno, Inc. All Rights Reserved.
 */
 
/dts-v1/;
/plugin/;
 
#include <dt-bindings/clock/imx6ul-clock.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
 
#include "imx6ul-pinfunc.h"
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
 
&uart1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart1>;
        status = "okay";
};
 
&iomuxc {
        pinctrl_uart1: uart1grp {
                // MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX は gpio1_io17 (TX gpio1_io16)
                // CON8のGPIO1_IO02,GPIO1_IO03をUART1_TX/RXとして使用したい場合は以下のとおり
                fsl,pins = <
                        MX6UL_PAD_GPIO1_IO02__UART1_DCE_TX 0x00008
                        MX6UL_PAD_GPIO1_IO03__UART1_DCE_RX 0x1b0b1
                >;
        };
};

2.b/ dtbo のビルド

$ make armadillo-600-customize.dtbo
  DTC     arch/arm/boot/dts/armadillo-600-customize.dtbo

2.c/ このファイルを armadillo に転送して、/boot/overlays.txt に追加します。例えば、fdt_overlays=armadillo-iotg-a6e-ems31.dtbo が記載していた場合は以下の様になります

armadillo:~# cat /boot/overlays.txt 
fdt_overlays=armadillo-iotg-a6e-ems31.dtbo armadillo-600-customize.dtbo

3/ u-boot の「console」環境変数の変更
u-boot のソースに変更しても swupdate でアップデートをインストールすると Armadillo の /boot/uboot_env.d にある変数が設定されますので、
/boot/uboot_env.d/20_console 等に変数を設定します。

console=ttymxc0,115200

4/ /etc/inittab にシェルを開くコンソールの変更
armadillo にあるファイルの ttymxc2 を ttymxc0 に変更した物です。
こちらの設定は8月待つのアップデートで Armadillo 640 と同じ仕組みに変更しようと考えていますので、最後に swupdate_preserve_files に追加しませんが、必要でしたら追加してください。

# /etc/inittab
 
::sysinit:/sbin/openrc sysinit
::sysinit:/sbin/openrc boot
::wait:/sbin/openrc default
 
# Set up a couple of getty's
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5
tty6::respawn:/sbin/getty 38400 tty6
 
# Put a getty on the serial port
::respawn:/sbin/getty -L 115200 ttymxc0 vt102
 
# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot
 
# Stuff to do before rebooting
::shutdown:/sbin/openrc shutdown

ファイルを swu で転送しない場合にいくつかの注意点があります。
* 各ファイルを persist_file [file] で永続化してください。/boot/armadillo-600-customize-uart.dtbo はデフォルトの /etc/swupdate_preserve_files のリストに載っていないため persist_file -p が必要です。
* u-boot の環境変数は swu インストール時に適用されますので、使ってない場合は「fw_setenv -s /boot/uboot_env.d/20_console」で適用してください。「fw_printenv console」で内容を確認できます。

swu を使う場合は以下の mkswu用の desc ファイルを使えるかと思います。ついでに dtbo の名前を分かりやすくリネームしました。

$ mkdir mkswu/a6e_uart
$ cd mkswu/a6e_uart
$ cp ~/linux../arch/arm/boot/dts/armadillo-600-customize.dtbo armadillo-600-customize-uart.dtbo
$ echo 'console=ttymxc0,115200' > 20_console
$ vi inittab
$ cat update_uart.desc
swdesc_option component=extra_os.uart
swdesc_option version=1
 
swdesc_files --dest /boot armadillo-600-customize-uart.dtbo
swdesc_files --dest /boot/uboot_env.d 20_console
swdesc_files --dest /etc inittab
swdesc_script "$SCRIPT_DIR/examples/update_overlays.sh" -- "armadillo-600-customize-uart.dtbo"
swdesc_script "$SCRIPT_DIR/examples/update_preserve_files.sh" -- "/boot/armadillo-600-customize-uart.dtbo"
$ mkswu update_uart.desc
update_uart.swu を作成しました。

この手順で何かのエラーがあった場合、また期待どおりの動作にならなかった場合に聞いてください。

よろしくお願いします。

gugen-kuroyanagi

2024年8月15日 7時05分

ご回答ありがとうございます。

すみません、別で頂いた回答の確認と行き違いになってしまいました。

頂いた内容で動作の確認をしてみたいと思います。

ありがとうございます。

gugen-kuroyanagi

2024年8月19日 9時29分

マルティネ 様

お世話になっています
gugen-kuroyanagiです

ご教示いただいた内容を実施して、期待する動作を得ることができました。

ご丁寧にサンプルコードなども添えていただきありがとうございました。

どうぞよろしくお願いいたします。

at_dominique.m…

2024年8月19日 9時37分

gugen-kuroyanagiさん

お世話になっています、
マルティネです。

> ご教示いただいた内容を実施して、期待する動作を得ることができました。

ご確認ありがとうございます、無事にできてよかったです。
今更ですが、時間を少し見つかった時に howto にコピーして公開します。

また何かあったらご連絡ください

よろしくお願いします