Armadilloフォーラム

ユーザースイッチ使用してシャットダウンする方法

tecs.heta

2025年3月31日 12時33分

Armadillo-640のユーザースイッチ(SW1)を長押して、シャットダウンと電源断をしたいのですが、どうしたらよいのか、教えていただきたいです。
データをMicroSDに保存する機能があるため、正常にシャットダウンから電源断としたい。
なお、ABOSではなく、linux10(buster)で行いたいので、よろしくお願いします。
==========
製品型番:A6400-D00Z
Debianバージョン:linux10(buster)
カーネルバージョン:Linux armadillo 4.14-at66 #3
==========

コメント

at_shota.shimoyama

2025年3月31日 16時44分

アットマークテクノの下山です。

デバイスツリーの変更でSW1をシャットダウンボタンにすることができます。
linux-v4.14-at[version]/arch/arm/boot/dts/armadillo-640.dts
の中にあるsw1ノード内を次のように変更してください。
■ 変更前

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpio_keys>;
 
		sw1 {
			label = "SW1";
			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_ENTER>;
		};
	};

■ 変更後

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpio_keys>;
 
		sw1 {
			label = "SW1";
			gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_POWER>;
			debounce-interval = <3000>; // ms
		};
	};

変更箇所は次の3つです。
gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>(ACTIVE_LOWからACTIVE_HIGHに変更)
linux,code = <KEY_POWER>とすることで、SW1を押したときにシャットダウンするようになります
debounce-interval = <3000> 長押し時間(ms)の設定なので、ここは適切な値に変更してください

dtsのビルド手順は次のとおです(Linuxカーネルのビルド↓とほぼ同じです)
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

1.ソースファイルのダウンロードと解凍

atmark@atde8:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-640/source/linux-v4.14-at66.tar.gz
atmark@atde8:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-640/source/initramfs_a600-2.1.2.cpio.gz
atmark@atde8:~$ tar xf linux-v4.14-at66.tar.gz 

2.シンボリックリンク作成とコンフィギュレーション

atmark@atde8:~$ cd linux-v4.14-at66/
atmark@atde8:~/linux-v4.14-at66$ ln -s ../initramfs_a600-2.1.2.cpio.gz initramfs_a600.cpio.gz
atmark@atde8:~/linux-v4.14-at66$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640_defconfig

3.~/linux-v4.14-at66/arch/arm/boot/dts/armadillo-640.dtsを上のとおり書き換える

4.dtsをビルド

atmark@atde8:~/linux-v4.14-at66$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

5.dtbファイル(~/linux-v4.14-at66/arch/arm/boot/dts/armadillo-640.dtb)ができあがるので、これをArmadilloの/bootにa640.dtbとしてコピーし、rebootする

root@armadillo:~# cp armadillo-640.dtb /boot/a640.dtb
root@armadillo:~# reboot

これでSW1を3秒押すとシャットダウンするようになるはずです。
念のため、編集後のdtsとビルドしたdtbファイルを添付しますので、とりあえず動作確認したい場合はお使いください。

ファイル ファイルの説明
armadillo-640.dtb
armadillo-640.dts

山下様、ご回答有り難うございました。
SW1を3秒間押し続けることで、シャットダウン電源OFFするができました。

> アットマークテクノの下山です。
>
> デバイスツリーの変更でSW1をシャットダウンボタンにすることができます。
> linux-v4.14-at[version]/arch/arm/boot/dts/armadillo-640.dts
> の中にあるsw1ノード内を次のように変更してください。
> ■ 変更前
>

> 	gpio-keys {
> 		compatible = "gpio-keys";
> 		pinctrl-names = "default";
> 		pinctrl-0 = <&pinctrl_gpio_keys>;
> 
> 		sw1 {
> 			label = "SW1";
> 			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
> 			linux,code = <KEY_ENTER>;
> 		};
> 	};
> 

>
> ■ 変更後
>
>

> 	gpio-keys {
> 		compatible = "gpio-keys";
> 		pinctrl-names = "default";
> 		pinctrl-0 = <&pinctrl_gpio_keys>;
> 
> 		sw1 {
> 			label = "SW1";
> 			gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
> 			linux,code = <KEY_POWER>;
> 			debounce-interval = <3000>; // ms
> 		};
> 	};
> 

>
> 変更箇所は次の3つです。
> ・gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>(ACTIVE_LOWからACTIVE_HIGHに変更)
> ・linux,code = <KEY_POWER>とすることで、SW1を押したときにシャットダウンするようになります
> ・debounce-interval = <3000> 長押し時間(ms)の設定なので、ここは適切な値に変更してください
>
> dtsのビルド手順は次のとおです(Linuxカーネルのビルド↓とほぼ同じです)
> https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
>
> 1.ソースファイルのダウンロードと解凍
>

> atmark@atde8:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-640/source/linux-v4.14-at66.tar.gz
> atmark@atde8:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-640/source/initramfs_a600-2.1.2.cpio.gz
> atmark@atde8:~$ tar xf linux-v4.14-at66.tar.gz 
> 

>
> 2.シンボリックリンク作成とコンフィギュレーション
>

> atmark@atde8:~$ cd linux-v4.14-at66/
> atmark@atde8:~/linux-v4.14-at66$ ln -s ../initramfs_a600-2.1.2.cpio.gz initramfs_a600.cpio.gz
> atmark@atde8:~/linux-v4.14-at66$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640_defconfig
> 

>
> 3.~/linux-v4.14-at66/arch/arm/boot/dts/armadillo-640.dtsを上のとおり書き換える
>
> 4.dtsをビルド
>

> atmark@atde8:~/linux-v4.14-at66$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
> 

>
> 5.dtbファイル(~/linux-v4.14-at66/arch/arm/boot/dts/armadillo-640.dtb)ができあがるので、これをArmadilloの/bootにa640.dtbとしてコピーし、rebootする
>

> root@armadillo:~# cp armadillo-640.dtb /boot/a640.dtb
> root@armadillo:~# reboot
> 

>
> これでSW1を3秒押すとシャットダウンするようになるはずです。
> 念のため、編集後のdtsとビルドしたdtbファイルを添付しますので、とりあえず動作確認したい場合はお使いください。