2021年3月21日日曜日

Lichee Pi Zeroのソフト開発環境構築6

ようやくバージョンアップの手段を準備できたので、「ソフト開発環境」の準備の入り口を作りたい。

プログラム作成→実行までを考える

簡単なものとして、シェルスクリプトを作成して、LicheePi側で実行したい場合

VScode

とりあえずこれがPC側に
あとは拡張機能をいくつか

SFTP
SSH FS

LicheePi側

sshサーバー

これが無いと始まらないかな。
軽微な修正時に、シリアルコンソールの出番を減らせるし!

BR2_PACKAGE_DROPBEAR

sftpサーバー

これも、入れておくと、VSCodeから更新が簡単にできる!

BR2_PACKAGE_GESFTPSERVER

これで、プログラム作成からファイル転送、実行までVSCode内で完結できる!素敵!


 

ちょっとしたGUIインターフェースにTck/Tk

なつかしー

BR2_PACKAGE_TK
BR2_PACKAGE_TCL

ちょっとしたGUIが簡単に?できるのは素晴らしいと思う。


 

今は、環境構築すすめているので、詳細は別途まとめる

これで、シェルスクリプトの環境がなんとなく整った。
あとは、必要に応じて入れていこうかな、pythonやc/c++が候補。

Python

Lichee Piのスペックで動くか知らないけど、とりあえず入れてみる。

BR2_PACKAGE_PYTHON3

TKINTERは・・・?
https://sourceforge.net/p/armadeus/code/ci/master/tree/patches/buildroot/2017.02/012-armadeus-add-tkinter-support-to-python.patch
を参考に、書き換えてみた。

patch ../../../package/python3/Config.in < 0001-add-tkinter-support-to-python3_Config.in.patch 
patch ../../../package/python3/python3.mk < 0002-add-tkinter-support-to-python3_python3.mk.patch 
--- Config.in	2020-10-12 21:55:06.000000000 +0900
+++ Config.in	2020-12-28 19:28:44.925240000 +0900
@@ -82,6 +82,18 @@
 	help
 	  _ssl module for Python3 (required for https in urllib etc).
 
+config BR2_PACKAGE_PYTHON3_TKINTER
+	depends on BR2_PACKAGE_XORG7
+	depends on BR2_PACKAGE_TCL
+	select BR2_PACKAGE_TK
+	bool "tkinter"
+	help
+	  Tkinter module for Python3.
+
+comment "tkinter needs a X server and tcl"
+	depends on !BR2_PACKAGE_XORG7
+	depends on !BR2_PACKAGE_TCL
+
 config BR2_PACKAGE_PYTHON3_UNICODEDATA
 	bool "unicodedata module"
 	default y
--- python3.mk	2020-12-28 19:29:41.261031000 +0900
+++ python3.mk	2020-12-28 19:30:25.632867000 +0900
@@ -124,6 +124,12 @@
 PYTHON3_CONF_OPTS += --disable-ossaudiodev
 endif
 
+ifeq ($(BR2_PACKAGE_PYTHON3_TKINTER),y)
+PYTHON_DEPENDENCIES += tk
+else
+PYTHON_CONF_OPTS += --disable-tk
+endif
+
 # Make python believe we don't have 'hg', so that it doesn't try to
 # communicate over the network during the build.
 PYTHON3_CONF_ENV += \
@@ -157,7 +163,6 @@
 	--disable-pydoc \
 	--disable-test-modules \
 	--disable-lib2to3 \
-	--disable-tk \
 	--disable-nis \
 	--disable-idle3 \
 	--disable-pyc-build

これで、menuconfigに

BR2_PACKAGE_PYTHON3_TKINTER
が表示される

buildrootのconfig.inやmkファイルにパッチをあてる方法がよくわからない。
なので、手動でパッチをあてた。

#!/bin/bash


apply(){
    patch ../../../package/python3/Config.in < 0001-add-tkinter-support-to-python3_Config.in.patch 
    patch ../../../package/python3/python3.mk < 0002-add-tkinter-support-to-python3_python3.mk.patch
}

redo(){
    patch -R ../../../package/python3/Config.in < 0001-add-tkinter-support-to-python3_Config.in.patch 
    patch -R ../../../package/python3/python3.mk < 0002-add-tkinter-support-to-python3_python3.mk.patch
}

echo "----------------------------------------"
echo " add tkinter support to python3."
echo "----------------------------------------"
case "$1" in
    apply|redo)
		"$1";;
    *)
		echo "Usage: $0 {apply|redo}"
		exit 1
esac

2021年3月15日月曜日

Lichee Pi Zeroのソフト開発環境構築5

SWupdateを使ってみる(整理2)

結局まだ試行錯誤になっているが、段々と形になってきた。気がする。

ルートパーティションの拡張

ルートパーティションの拡張を、raspiなどを参考にして、初回起動時にいい感じに実施するようにしたい。
https://github.com/Squonk42/buildroot-licheepi-zero-old/wiki/Fresh-image-–-Expand-the-root-partition-and-filesystem
http://nahitafu.cocolog-nifty.com/nahitafu/2019/08/post-2df6c8.html

cat S01resize2fs_once
#!/bin/sh

function get_current_root_device
{
	for i in `cat /proc/cmdline`; do
		if [ ${i:0:5} = "root=" ]; then
			CURRENT_ROOT="${i:5}"
            # /dev/mmcblk0p3
		fi
	done
}

case "$1" in
    start)
        echo "Starting resize2fs_once"
        get_current_root_device
        resize2fs $CURRENT_ROOT &&
        rm /etc/init.d/S01resize2fs_once
        ;;
    *)
        echo "Usage: $0 start" >&2
        exit 3
        ;;
esac

これをex_licheepizerodock/board/rootfs-overlay/etc/init.d/に保存した

usb0のネットワークインターフェースを起動時に有効にする

起動時に固定IPでusb0を有効にしておきたい

cat interfaces
auto lo
iface lo inet loopback

auto usb0
iface usb0 inet static
    address 192.168.100.1
    netmask 255.255.255.0

これをex_licheepizerodock/board/rootfs-overlay/etc/network/に保存した

dhcpサーバーを有効にする

どうしようか悩んだけど、usb刺すたびにPC側でIPアドレスの設定をするのも大変だし
なぜか、毎回違うインターフェースとして認識されるみたいだし。
MACアドレスが毎回ランダムで生成されているみたいだからか。。
このあたりは、まだ興味の対象外なので、hdcpサーバーを入れてしまって楽をしようと思う。

BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
BR2_PACKAGE_DHCP
BR2_PACKAGE_DHCP_SERVER

また、設定ファイルとして

cat dhcpd.conf
option subnet-mask 255.255.255.0;
option routers 192.168.100.1;
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.10 192.168.100.250;
}

をex_licheepizerodock/board/rootfs-overlay/etc/dhcp/に保存した

これで、PCとusbつなぐとネットワークが有効化されるようになった

$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.246 ms

avahi

まだ、ちゃんと試していないけど、avahiを入れると、host名でアクセスできたり
はたまた、dhcpサーバー建てなくてもローカルリンクアドレスで通信できるようになるみたい。

avahi
IPv4LL network address configuration daemon
mDNS/DNS-SD daemon
libdns_sd compatibility (Bonjour)

IPv4LLがローカルリンクアドレス
mDNSが「host名.local」でのアクセスを可能にする
うーん。どうしようかな。
今は、こういう仕組みがあるという理解だけしておこう。

swupdateのwebサーバーを自動起動させる

init.dにスタートアップはすでにあったので、それを参考に修正する。

/etc/init.d/S80swupdate

にて

/usr/lib/swupdate/swupdate.sh

が呼び出されて、その中で

/etc/swupdate/conf.d and /usr/lib/swupdate/conf.d/

内のファイルを読み込んでいる
なので、/etc/swupdate/conf.d/swupdate.confみたいなファイルを用意しておく

mkdir /swutmp
export TMPDIR=/swutmp
SWUPDATE_ARGS="-p 'reboot'"
SWUPDATE_WEBSERVER_ARGS="--document-root /var/www/swupdate"

これで、起動時からswupdateのwebサービスが動いている
もしも、自動起動させたくないときは、S80swupdateを削除or空ファイルで上書いてしまおうかな。