2020年11月23日月曜日

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

前回、LCDの表示、タッチパネルの有効化まではできた。
あとやりたいこととしては

  • バックライトの制御
  • 音声出力
  • バージョンアップ機能
  • ブラウザ

バックライトの制御(試行錯誤)

u-bootの設定で、LCDのバックライトは

VIDEO_LCD_BL_PWM [=PB4]

としていた。 PWMなので調光できるよねきっと。



https://licheepizero.us/downloads/lichee_zero.pdf

回路図もそうなっているし。
さらりと1kHz以下で使うと書いてある。。

dtsファイルを見てみる

u-bootのconfigでは

BR2_TARGET_UBOOT_BOARD_DEFCONFIG=“LicheePi_Zero_800x480LCD”
BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE=“board/licheepi/boot.cmd”

LicheePi_Zero_800x480LCD_defconfig

CONFIG_DEFAULT_DEVICE_TREE=“sun8i-v3s-licheepi-zero”

sun8i-v3s-licheepi-zero.dts

#include “sun8i-v3s.dtsi”
#include “sunxi-common-regulators.dtsi”
pwmの記載なし

sun8i-v3s.dtsi

pwmの記載なし

board/licheepi/boot.cmd

cat board/licheepi/boot.cmd
setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb
bootz 0x41000000 - 0x41800000

kernelの起動時にはsun8i-v3s-licheepi-zero-dock.dtbを読み込むのね。きっと

kernelのconfigでは

BR2_LINUX_KERNEL_INTREE_DTS_NAME=“sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock sun8i-v3s-licheepi-zero-with-800x480-lcd”
BR2_ROOTFS_POST_IMAGE_SCRIPT=“support/scripts/genimage.sh”
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/licheepi/genimage.cfg"

こんなに書いてあった

DTS

sun8i-v3s-licheepi-zero
sun8i-v3s-licheepi-zero-dock
sun8i-v3s-licheepi-zero-with-800x480-lcd

[]sun8i-v3s-licheepi-zero-with-800x480-lcd.dts

#include "sun8i-v3s-licheepi-zero-with-lcd.dtsi"

&panel {
	compatible = "urt,umsh-8596md-t", "simple-panel";
};

[]sun8i-v3s-licheepi-zero-with-lcd.dtsi*

backlight関係の定義があった。

#include "sun8i-v3s-licheepi-zero.dts"
/ {
	backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm 0 1000000 0>;
		brightness-levels = <0 30 40 50 60 70 100>;
		default-brightness-level = <6>;
	};

	panel: panel {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			backlight = <&backlight>;
			#address-cells = <1>;
			#size-cells = <0>;

			panel_input: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&tcon0_out_lcd>;
			};
		};
	};

これが他にのdtsファイルにも記載されているといいんだけど。

[]sun8i-v3s-licheepi-zero-dock.dts

dockのボタンとかcodec、mmc1の定義

#include "sun8i-v3s-licheepi-zero.dts"
()

support/scripts/genimage.sh

特に関連するものは無いように見える

board/licheepi/genimage.cfg

image boot.vfat {
	vfat {
		files = {
			"zImage",
			"sun8i-v3s-licheepi-zero-dock.dtb",
			"sun8i-v3s-licheepi-zero.dtb",
			"boot.scr"
		}
	}
	size = 8M
}
(略)

整理

混乱してきたので整理
[board/licheepi/boot.cmd]→[sun8i-v3s-licheepi-zero-dock.dts]→[sun8i-v3s-licheepi-zero.dts]

backlightの定義のあるのは
[sun8i-v3s-licheepi-zero-with-800x480-lcd.dts]→[sun8i-v3s-licheepi-zero-with-lcd.dtsi]→[sun8i-v3s-licheepi-zero.dts]

sun8i-v3s-licheepi-zero-dock.dtsに書き足せばいいんじゃねと思ってやってみたのだけど、dtbが更新されない。
make dtbsも無いみたい。

もうひとあがき

すでにあるsun8i-v3s-licheepi-zero-dockで全文検索していたら
Makefileに記載があった。

output/build/linux-zero-4.14.y/arch/arm/boot/dts$ cat Makefile 
(中略)
dtb-$(CONFIG_MACH_SUN8I) += \
(中略)
	sun8i-v3s-licheepi-zero.dtb \
	sun8i-v3s-licheepi-zero-dock.dtb \
	sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb \
	sun8i-v3s-licheepi-zero-with-800x480-lcd.dtb

ここに、dtbを新たに記載してみても、make時に自動生成はされないようだった。
まだちゃんとは確認できていないけど。

個別にdtbファイルを作成する

dtbが作成されないならば、作ってみよう。
https://qiita.com/ikwzm/items/b07af1a861d6f1c0fde2

上記を参考に

#!/bin/bash

LINUX_KERNEL_SRC=output/build/linux-zero-4.14.y
DTS_SRC_FILE=$1
DTB_OUT_FILE=${DTS_SRC_FILE%.*}.dtb


gcc -E -P -x assembler-with-cpp -I $LINUX_KERNEL_SRC/arch/arm/boot/dts -I $LINUX_KERNEL_SRC/include $DTS_SRC_FILE | dtc -I dts -O dtb -i $LINUX_KERNEL_SRC/arch/arm/boot/dts -o $DTB_OUT_FILE

dtbファイルは[sun8i-v3s-licheepi-zero-dock-with-lcd.dts]

#include "sun8i-v3s-licheepi-zero-dock.dts"

/ {
	backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm 0 1000000 0>;
		brightness-levels = <0 30 40 50 60 70 100>;
		default-brightness-level = <6>;
	};

};

&pwm {
	pinctrl-names = "default";
	pinctrl-0 = <&pwm0_pins>;
	status = "okay";
};

先程のスクリプトでdtbファイルが生成されるので
/output/imagesにコピーしてみる

各種ファイルの変更

生成したdtbを参照するように変更していく

BR2_LINUX_KERNEL_INTREE_DTS_NAME

BR2_LINUX_KERNEL_INTREE_DTS_NAME=sun8i-v3s-licheepi-zero-dock-with-lcd

/board/licheepi/boot.cmd

setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock-with-lcd.dtb
bootz 0x41000000 - 0x41800000

/board/licheepi/genimage.cfg

image boot.vfat {
	vfat {
		files = {
			"zImage",
			"sun8i-v3s-licheepi-zero-dock-with-lcd.dtb",
			"boot.scr"
		}
	}
	size = 8M
}
()

いざmake

makeがすんなりと終わって、書き込んでみたら

U-Boot 2017.01-rc2 (Oct 26 2020 - 05:55:22 +0900) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

Setting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
292 bytes read in 15 ms (18.6 KiB/s)
## Executing script at 41900000
reading zImage
4022144 bytes read in 204 ms (18.8 MiB/s)
reading sun8i-v3s-licheepi-zero-dock.dtb
** Unable to read file sun8i-v3s-licheepi-zero-dock.dtb **
ERROR: Did not find a cmdline Flattened Device Tree
Could not find a valid device tree
SCRIPT FAILED: continuing...

「** Unable to read file sun8i-v3s-licheepi-zero-dock.dtb **」・・・Orz

更新できていないみたい。

いったん落ち着いて・・・。

バックライトの制御

make cleanしてやりなおす

よくわからない状態になってしまったので、いったん落ち着いて・・・。

make clean
make licheepi_zero_custom_x_touch_backlight_defconfig

設定を確認していく

BR2_LINUX_KERNEL_INTREE_DTS_NAME

BR2_LINUX_KERNEL_INTREE_DTS_NAME=sun8i-v3s-licheepi-zero-dock-with-lcd

/board/licheepi/boot.cmd

setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock-with-lcd.dtb
bootz 0x41000000 - 0x41800000

/board/licheepi/genimage.cfg

image boot.vfat {
	vfat {
		files = {
			"zImage",
			"sun8i-v3s-licheepi-zero-dock-with-lcd.dtb",
			"boot.scr"
		}
	}
	size = 8M
}
()

dl/linux/git/arch/arm/boot/dts

  • sun8i-v3s-licheepi-zero-dock-with-lcd.dts の追加
  • Makefileの変更
()
	sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb \
	sun8i-v3s-licheepi-zero-with-800x480-lcd.dtb \
	sun8i-v3s-licheepi-zero-dock-with-lcd.dtb
dtb-$(CONFIG_MACH_SUN9I) += \
()

いざmake

make[2]: *** ターゲット ‘arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock-with-lcd.dtb’ を make するルールがありません. 中止.

output/build/linux-zero-4.14.y/arch/arm/boot/dts

  • sun8i-v3s-licheepi-zero-dock-with-lcd.dts の追加
  • Makefileの変更

これでOK
どうやったら、outputに生成される方にも反映できるのかな・・・

動作確認

以下を参考にあれこれ変えてみる
https://wiki.archlinux.jp/index.php/バックライト

# ls /sys/class/backlight/
backlight
# ls /sys/class/backlight/backlight/
actual_brightness  device             subsystem
bl_power           max_brightness     type
brightness         power              uevent
# cat /sys/class/backlight/backlight/max_brightness 
6
# echo -n 0 > /sys/class/backlight/backlight/brightness 
(消灯した!)
# echo -n 6 > /sys/class/backlight/backlight/brightness 
(点灯した!)

いいね!
最大輝度は結構見やすいと思う。

2020年11月16日月曜日

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

なんとなく、公式?の開発環境をさわっているうちに、buildrootに興味が湧いた。
docker内のやつは、ルートシステムを作るのみのように見えた。
u-Boot、カーネルこみこみでやる方法もあるらしいので、次は、それを試してみる。

https://hackaday.io/project/134065-funkey-zero/log/144796-linux-distribution
https://github.com/Squonk42/buildroot-licheepi-zero

Squonk42/buildroot-licheepi-zero

変更履歴もわかりやすいので、最新のbuidrootにも適用できるかもしれないね。
https://github.com/Squonk42/buildroot-licheepi-zero/commit/abe975d2dbfc331343a2c01bfc6e21ef88beac64

リポジトリ取得

まずは、このリポジトリを使わせてもらう

git clone https://github.com/Squonk42/buildroot-licheepi-zero.git
make licheepi_zero_defconfig
make menuconfig
make uboot-menuconfig
make

と特に、エラーもなく進めることができた。

LCD表示対応

以下の内容を反映する
https://licheezero.readthedocs.io/zh/latest/系统开发/uboot_conf.html#lcd

make uboot-menuconfig
Enable graphical uboot console on HDMI, LCD or VGA = y
VIDEO_LCD_MODE [=x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0]
VIDEO_LCD_BL_PWM [=PB4]
VIDEO_LCD_BL_PWM_ACTIVE_LOW [=n]
VIDEO_LCD_PANEL_PARALLEL [=y]

VIDEO_LCD_BL_PWM_ACTIVE_LOWを忘れていて、液晶バックライトが点灯しなくてかなり悩んだ。
ちゃんとドキュメントは読まないとね。

X11関係のインストール

公式パッケージのでやったようにxclockとか表示させたいので、以下を参考に必要なパッケージをインストール
https://unix.stackexchange.com/questions/70931/how-to-install-x11-on-my-own-linux-buildroot-system

make menuconfig
BR2_PACKAGE_XAPP_TWM [=y]
BR2_PACKAGE_XAPP_XCLOCK [=y]
BR2_PACKAGE_XAPP_XINIT [=y]
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV [=y]
BR2_PACKAGE_XORG7 [=y]
BR2_PACKAGE_XSERVER_XORG_SERVER [=y]

これで、起動後に

startx /usr/bin/xclock

で、いつものあいつが表示された!

簡易的なフォトフレーム

写真をパラパラ切り替えられたらフォトフレームにできるんじゃないかと思い、調べていると
「feh」というソフトが、ちょうど良さそうだった。早速インストール。

make menuconfig
BR2_PACKAGE_FEH [=y]

/root/に、何枚か写真を置いて

startx /usr/bin/feh ./ -g 800x480 -D 2

これで、2秒周期に写真が切り替わるフォトフレームの完成だ!
と思ったら、10分で消灯してしまった。

10分消灯の対策 - consoleblank

このあたりを参考に、修正してみる
http://lists.busybox.net/pipermail/buildroot/2015-October/142796.html
https://www.olimex.com/forum/index.php?topic=7147.0

board/licheepi/boot.cmd
setenv bootargs console=ttyS0,115200 panic=5 console=tty0 consoleblank=0 rootwait root=/dev/mmcblk0p2 earlyprintk rw

consoleのあとに「consoleblank=0」を追加

消灯後にfeh終了させたら表示が戻った。・・・こっちじゃなかった。
X起動中のみぽいので、xorgのblanktime?なのか。

10分消灯の対策 - xrogの設定

xsetコマンドを使うと設定を切り替えられるらしいので、導入してみる

BR2_PACKAGE_XAPP_XSET=y

その後、

export DISPLAY=:0.0
xset q
Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000000
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
    03: Shift Lock:  off    04: Group 2:     off    05: Mouse Keys:  off
  auto repeat delay:  660    repeat rate:  25
  auto repeating keys:  00feffffdffffbbf
                        fadfffffffdfe5ef
                        ffffffffffffffff
                        ffffffffffffffff
  bell percent:  50    bell pitch:  400    bell duration:  100
Pointer Control:
  acceleration:  2/1    threshold:  4
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  600    cycle:  600
Colors:
  default colormap:  0x20    BlackPixel:  0x0    WhitePixel:  0xffffff
Font Path:
  /usr/share/fonts/X11//misc/,built-ins
DPMS (Energy Star):
  Standby: 600    Suspend: 600    Off: 600
  DPMS is Enabled
  Monitor is Off

「Screen Saver」と「DPMS」ねー

xset s off -dpms

これで、消灯していたLCDが点灯になった。おかえりなさい!
この設定を永続化するにはどうすればいいのか
https://wiki.archlinux.jp/index.php/Display_Power_Management_Signaling#DPMS_.E3.82.92.E3.82.AA.E3.83.95.E3.81.AB.E3.81.99.E3.82.8B

x起動時のログを見ていたら

Using system config directory "/usr/share/X11/xorg.conf.d"

というのがあった。
ここに15-monitor.confを作成してみる

Section "ServerFlags"
  Option "BlankTime" "0"
  Option "StandbyTime" "0"
  Option "SuspendTime" "0"
  Option "OffTime" "0"
EndSection

https://qiita.com/eagletmt/items/a9f804b7b5a5f5040ad0

フォトフレーム用画像の永続化

rootfs_overlayというしくみを使うといいらしい
https://qiita.com/pu_ri/items/8cdef8f7bb79a2ea0863
https://buildroot.org/downloads/manual/manual.html

make menuconfig
BR2_ROOTFS_OVERLAY [=board/licheepi/rootfs-overlay]

「board/licheepi/rootfs-overlay」にファイルを置くと、ルート直下「/」に配置されるみたい

この仕組みを使えば、設定ファイルも保存できるのか?

xorg設定ファイルを組み込む

overlayの仕組みを使って
"/usr/share/X11/xorg.conf.d/15-monitor.conf"を保存する

せっかくなので自動起動させる

overlayの仕組みを使って
"/etc/init.d/S99photoframe.app"を保存する

#!/bin/sh
startx /usr/bin/feh /root/photo/ -D 5 -g 800x480 &

実行権限を付与しておしまい

Buildroot-2020.08.01でやってみる

いろいろとわかってきたような気がしてきたので、最新のbuildroot-2020.08.01でやってみたいと思う。

入手

https://buildroot.org/download.html
ここからbuildroot-2020.08.1を選択してローカルに保存。

configファイルの用意

他と被らないように、とりあえず[licheepi_zero_custom_defconfig]という名前で

BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_FPU_VFPV4=y
BR2_CCACHE=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM=y
BR2_TARGET_GENERIC_HOSTNAME="licheepi-zero"
BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the LicheePi Zero"
BR2_TARGET_GENERIC_ROOT_PASSWD="licheepi"
BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/licheepi/genimage.cfg"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_GIT=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/Lichee-Pi/linux"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="zero-4.14.y"
BR2_LINUX_KERNEL_DEFCONFIG="licheepi_zero"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock"
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_GIT=y
BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/Lichee-Pi/u-boot"
BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="v3s-current"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="LicheePi_Zero_800x480LCD"
BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin"
BR2_TARGET_UBOOT_BOOT_SCRIPT=y
BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="board/licheepi/boot.cmd"
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_DTC=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y

make開始

make licheepi_zero_custom_defconfig
make

これでおしまい

簡易フォトフレーム化

defconfigファイル

増分は

11a12
> BR2_ROOTFS_OVERLAY="rootfs-overlay"
20a22,26
> BR2_PACKAGE_XORG7=y
> BR2_PACKAGE_XSERVER_XORG_SERVER=y
> BR2_PACKAGE_XAPP_XINIT=y
> BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
> BR2_PACKAGE_FEH=y

overlay

こんな感じ

rootfs-overlay/
├── etc
│   └── init.d
│       └── S99photoframe.app
├── root
│   └── photo
│       ├── chihiro001.jpg
((省略))
│       └── chihiro050.jpg
└── usr
    └── share
        └── X11
            └── xorg.conf.d
                └── 15-monitor.conf

画像はこれを使用させてもらった!
http://www.ghibli.jp/info/013344/
すてき!



 

タッチスクリーンを有効にする

せっかくタッチスクリーン搭載の液晶を入手しているので、使えるようにしたい。

LicheepiZeroにはタッチスクリーンICが実装されているみたい。
I2Cバス<0x48>にNS2009というチップ


https://licheepizero.us/downloads/lichee_zero.pdf


DTSファイル確認

U-boot

別にU-boot起動時に使えなくてもいいけど、一応見てみる
defconfigで[LicheePi_Zero_800x480LCD]を指定している

cat LicheePi_Zero_800x480LCD_defconfig
(中略)
CONFIG_DEFAULT_DEVICE_TREE="sun8i-v3s-licheepi-zero"

u-bootにあるsun8i-v3s-licheepi-zero.dtsにはそれらしい記載は無い。

カーネル

こちらが本命。
defconfigで
BR2_LINUX_KERNEL_DEFCONFIG=“licheepi_zero”
BR2_LINUX_KERNEL_INTREE_DTS_NAME=“sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock”
としているので

cat sun8i-v3s-licheepi-zero.dts
(中略)
&i2c0 {
	status = "okay";

	ns2009: ns2009@48 {
		compatible = "nsiway,ns2009";
		reg = <0x48>;
	};
};

っぽいのがあった。

カーネルコンフィング

カーネルの設定で使用するようになっているかは

make linux-menuconfig



これも大丈夫そう。


i2c-toolsでみてみる

# i2cdetect -r -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --      

たしかに、0x48にデバイスを認識していて、ドライバで使用中(UU)になっている。
先にこっちを見るべきかもしれないけど、ブートログでも大丈夫そう

# dmesg
(中略)
[    1.012054] i2c /dev entries driver
[    1.016959] input: ns2009_ts as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0048/input/input1

ということで、ドライバまでは大丈夫そう。

X11側を調べる

https://wiki.archlinux.jp/index.php/タッチスクリーン

汎用ドライバーっぽい「xf86-input-evdev」を入れてみる

*** xf86-input-evdev requires udev to be enabled ***

とあるので、udevも有効にする。

BR2_PACKAGE_EUDEV [=n]
Depends on: BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV [=n] && BR2_USE_MMU [=y] && BR2_USE_WCHAR [=y] && !BR2_STATIC_LIBS [=n]

ついでに[xinput]と[xinput-calibrator]も選択しておく

make
(中略)
checking for library containing clock_gettime... none required
checking for cos in -lm... yes
checking pkg-config is at least version 0.9.0... yes
checking for gobject-introspection... no (disabled, use --enable-introspection to enable)
checking for blkid >= 2.20... no
configure: error: *** blkid support requested but not found

やれやれ。。。 一度[make clean]してから再度やってみると、出来た!

defconfigファイル

増分はこんな感じ

8a9
> BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
21c22
< BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock"
---
> BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock sun8i-v3s-licheepi-zero-with-800x480-lcd"
23a25,26
> BR2_PACKAGE_XAPP_XCALC=y
> BR2_PACKAGE_XAPP_XEYES=y
24a28,32
> BR2_PACKAGE_XAPP_XINPUT=y
> BR2_PACKAGE_XAPP_XINPUT_CALIBRATOR=y
> BR2_PACKAGE_XDRIVER_XF86_INPUT_EVDEV=y
> BR2_PACKAGE_XDRIVER_XF86_INPUT_KEYBOARD=y
> BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y

タッチスクリーンのキャリブレーション

ズレが気になる。。。


 

https://wiki.archlinux.jp/index.php/タッチスクリーン
https://sites.google.com/site/memomuteki/tinylinux/xinputcalibratorniyorukyaribureshon

xinput_calibratorを使うのが簡単らしい。

### xinput_calibratorの実行

早速実行してみると、LCD上にキャリブレーションの画面が表示される
4点をタッチして完了。
コンソールの方には、以下の表示があり、99-calibration.confみたいな感じで記載するよと。

# startx /usr/bin/xinput_calibrator
xauth:  file /root/.serverauth.428 does not exist


X.Org X Server 1.20.9
X Protocol Version 11, Revision 0
Build Operating System: Linux 5.4.0-42-generic x86_64 
Current Operating System: Linux licheepi-zero 4.14.14-licheepi-zero #1 SMP Wed Oct 21 05:21:56 JST 2020 armv7l
Kernel command line: console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
Build Date: 21 October 2020  05:19:59AM
 
Current version of pixman: 0.40.0
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.2.log", Time: Thu Jan  1 00:20:16 1970
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
Calibrating EVDEV driver for "ns2009_ts" id=7
	current calibration values (from XInput): min_x=0, max_x=4095 and min_y=0, max_y=4095

Doing dynamic recalibration:
	Setting new calibration data: 142, 3919, 312, 3952


--> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf'
Section "InputClass"
	Identifier	"calibration"
	MatchProduct	"ns2009_ts"
	Option	"Calibration"	"142 3919 312 3952"
EndSection
xinit: connection to X server lost

waiting for X server to shut down (II) Server terminated successfully (0). Closing log file.

99-calibration.conf

xinput_calibratorの出力に従って、記載をして、xの再起動。

# cat /usr/share/X11/xorg.conf.d/99-calibration.conf
Section "InputClass"
	Identifier	"calibration"
	MatchProduct	"ns2009_ts"
	Option	"Calibration"	"142 3919 312 3952"
EndSection

ズレが改善した!!


 

99-calibration.confに書いておけば、永続化されるみたい。
他の個体でも試してみて、補正値が同じような値ならば、まずはこれを標準の設定にしようかな。。

2020年10月21日水曜日

Lichee Zero-Dockを使ってみる

LCDが使用できて、安価なSBCを探していたら、見つけた。
https://akizukidenshi.com/catalog/g/gM-15544/
https://akizukidenshi.com/catalog/g/gM-14787/
https://akizukidenshi.com/catalog/g/gM-14873/

日本語の情報があまりないように思えるので、ちょっと気が重いがとりあえず購入。

情報源

公式はこのあたりなのかな
http://zero.lichee.pro/
http://nano.lichee.pro/
https://licheepizero.us/
https://licheepizero.us/downloads/readme_en.txt
https://dl.sipeed.com/LICHEE/Zero

中国語読めないよー

翻訳版

https://translate.google.co.jp/translate?hl=ja&sl=auto&tl=ja&u=http%3A%2F%2Fzero.lichee.pro%2F

作成済みイメージで動作確認

作成済みイメージをダウンロード

情報源や、貴重な日本語ページを参考にさせていただいてイメージをダウンロードする
https://qiita.com/17_kitano/items/8f8add216affa81ad321
https://dl.sipeed.com/LICHEE/Zero/Images/dd_img

minX_dd.tar.bz2
にしてみた。

適当なmicroSDカードに書き込んでみる

udo dd bs=4M if=minX_dd/lichee_zero-mindX_alpha.dd of=/dev/sdd conv=fsync

そして、Licheeに装着、シリアルコンソールも接続
TX,RXの表示は基板シルクが正しいみたい(webのは間違っている?)

起動してみる

シリアルコンソールの設定は、115200-8-N-1

Linux LicheePi 4.10.2-licheepi-zero+ #15 SMP Sat Apr 15 21:38:23 CST 2017 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@LicheePi:~#

初期パスワードはroot/licheepiだった。

液晶パネルを接続してみる

40pinのRGB液晶が対応しているというざっくりとした情報しかなくて
かなり不安だったが、とりあえずつなげてみた


 

接続したのは、同じところが出しているこれ
https://akizukidenshi.com/catalog/g/gM-14873/

u-Bootの表示がされたみたい。

調子に乗って、startxしてみたけどウィンドウマネージャ的なものが無いのか起動はしなかった。
でもXサーバーは起動しているようだ。一歩づついこう。

xアプリケーションを起動してみる

なんて呼んだらいいかわからないけど、xclockとかxcalc、xeyesなんかのx系のアプリケーションが入っているみたい。

root@LicheePi:~# ls /usr/bin/x*
/usr/bin/x-terminal-emulator  /usr/bin/xgamma	   /usr/bin/xmore
/usr/bin/x11perf	      /usr/bin/xgc	   /usr/bin/xprop
/usr/bin/x11perfcomp	      /usr/bin/xhost	   /usr/bin/xrandr
/usr/bin/xargs		      /usr/bin/xinit	   /usr/bin/xrdb
/usr/bin/xauth		      /usr/bin/xkbbell	   /usr/bin/xrefresh
/usr/bin/xbiff		      /usr/bin/xkbcomp	   /usr/bin/xset
/usr/bin/xcalc		      /usr/bin/xkbevd	   /usr/bin/xsetmode
/usr/bin/xclipboard	      /usr/bin/xkbprint    /usr/bin/xsetpointer
/usr/bin/xclock		      /usr/bin/xkbvleds    /usr/bin/xsetroot
/usr/bin/xcmsdb		      /usr/bin/xkbwatch    /usr/bin/xsm
/usr/bin/xconsole	      /usr/bin/xkeystone   /usr/bin/xstdcmap
/usr/bin/xcursorgen	      /usr/bin/xkill	   /usr/bin/xsubpp
/usr/bin/xcutsel	      /usr/bin/xload	   /usr/bin/xterm
/usr/bin/xditview	      /usr/bin/xlogo	   /usr/bin/xvidtune
/usr/bin/xdpyinfo	      /usr/bin/xlsatoms    /usr/bin/xvinfo
/usr/bin/xdriinfo	      /usr/bin/xlsclients  /usr/bin/xwd
/usr/bin/xedit		      /usr/bin/xlsfonts    /usr/bin/xwininfo
/usr/bin/xev		      /usr/bin/xmag	   /usr/bin/xwud
/usr/bin/xeyes		      /usr/bin/xman	   /usr/bin/xxd
/usr/bin/xfd		      /usr/bin/xmessage
/usr/bin/xfontsel	      /usr/bin/xmodmap

実行してみよう

startx /usr/bin/xclock -- :0


 

うぉー懐かしい。久しぶりに見たなこれー

開発環境を導入する

このままでは何ができるのかとか手探りになってしまうので
思い切って開発環境を導入してみようと思う
作成済みのイメージでは、以下のやり方がわからなかった。

  • 有線LANが使えない
  • タッチパネルのキャリブレーションができない
  • ウィンドウマネージャが開かない

公式の方法 Dockerで環境構築

http://zero.lichee.pro/入门/docker_index.html
の手順でやってみる。

adeno@drakorange:~/develop$ docker pull zepan/licheepi
Using default tag: latest
latest: Pulling from zepan/licheepi
9fb6c798fa41: Pull complete 
3b61febd4aef: Pull complete 
9d99b9777eb0: Pull complete 
d010c8cf75d7: Pull complete 
7fac07fb303e: Pull complete 
4a3e8d4abe49: Pull complete 
4e7cdc979849: Pull complete 
68de60586b36: Pull complete 
Digest: sha256:da6824787eb6b2e8b2556be6863b4dbfbe1683a1c834f257f9f8f5d993224bae
Status: Downloaded newer image for zepan/licheepi:latest
docker.io/zepan/licheepi:latest

取得できた

adeno@drakorange:~/develop$ docker run -d -p 6666:22 zepan/licheepi /usr/sbin/sshd -D
<略>
adeno@drakorange:~/develop$ ssh root@localhost -p 6666
The authenticity of host '[localhost]:6666 ([127.0.0.1]:6666)' can't be established.
ECDSA key fingerprint is <略>
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:6666' (ECDSA) to the list of known hosts.
root@localhost's password: 
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 5.4.0-42-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Thu Oct  5 09:15:27 2017 from 192.168.242.1
root@50959d444d56:~# cat README.txt 
u-boot	is mainline uboot, support tf or spi nor boot.
linux is mainline linux, 4.13 branch.
lichee is BSP linux, 3.4 kernel.
camdroid is BSP camdroid.

every dir have rebuild.sh to rebuild the source code.

sshでコンテナ内に入れた

U-bootのコンパイル

http://zero.lichee.pro/系统开发/uboot_index.html

コンフィングファイルは

root@50959d444d56:~/u-boot# ls configs/Lichee*
configs/LicheePi_Zero_480x272LCD_defconfig  configs/LicheePi_Zero_defconfig
configs/LicheePi_Zero_800x480LCD_defconfig

繋いでいるLCDは800x480だったような気がするので

make LicheePi_Zero_800x480LCD_defconfig

とりあえず、何か変えてU-bootが更新できることを確認する。

サンプルとして紹介されている、起動時の「バージョン情報の非表示」をやってみる
http://zero.lichee.pro/系统开发/uboot_logo.html

#define CONFIG_HIDE_LOGO_VERSION

/* Locals */
static GraphicDevice *pGD;      /* Pointer to Graphic array */

249行目辺りに #define CONFIG_HIDE_LOGO_VERSION を追記した。
コンパイルは

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
または
./rebuild.sh

で行う。
すると
u-boot-sunxi-with-spl.bin
が生成される

U-bootの更新

早速、更新してみる。
http://zero.lichee.pro/系统开发/uboot_build.html
には、
「コンパイル後、u-boot-sunxi-with-spl.binが現在のディレクトリに生成されます。これを8Kオフセットに書き込んで開始できます。」 by Google翻訳
とある。
8Kオフセットとは?なので、他の情報源にて探してみる。
https://linux-sunxi.org/Mainline_U-Boot#Compile_U-Boot
ここによると

dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8

sdXの部分を自分の環境に合わせる。
ハマったのはデバイス全体?を指定すること。sdd1にしていたら、起動できなくて。。。

8Kオフセットの説明は、ここにあった。
https://linux-sunxi.org/Bootable_SD_card#SD_Card_Layout

このSDカードを刺して起動してみると、ちゃんと?バージョン情報が非表示になった。

USB OTGで仮想イーサーネットを使用する

U-bootやカーネル更新毎にSDカード挿抜するのは大変だし、耐久性が心配。
挿抜が面倒。挿抜が面倒。

USB-OTG

仮想イーサーネットが使用できるらしいので使ってみる
http://zero.lichee.pro/应用/otg2PC.html

Lichee Zero側

インターフェースを作成する

root@LicheePi:~# ifconfig usb0 192.168.10.100
root@LicheePi:~# ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

usb0      Link encap:Ethernet  HWaddr 4e:40:46:**:**:**  
          inet addr:192.168.10.100  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4 errors:0 dropped:3 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:592 (592.0 B)  TX bytes:0 (0.0 B)

PC側

特に複雑な手順はなし。

adeno@drakorange:~/develop/licheepizoro$ lsusb
Bus 001 Device 009: ID 0525:a4aa Netchip Technology, Inc. Linux-USB CDC Composite Gadge (Ethernet and ACM)

adeno@drakorange:~/develop/licheepizoro$ ifconfig

enp1s0f0u3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 ****::****:****:****:****  prefixlen 64  scopeid 0x20<link>
        ether 6a:91:64:**:**:**  txqueuelen 1000  (イーサネット)
        RX packets 6  bytes 392 (392.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 143  bytes 24341 (24.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

やってみる

u-Bootイメージファイルをscpで、Licheeに転送。
そして、自身でdd使って書き換える。

root@LicheePi:~# fdisk -l                           

Disk /dev/mmcblk0: 3.7 GiB, 3980394496 bytes, 7774208 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x33f10fcb

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1       2048   34815   32768   16M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      34816 1419263 1384448  676M 83 Linux

root@LicheePi:~# dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

できた!

でも、でも、接続のたびにMACアドレスが変わってしまい、インターフェース設定をやり直す必要があるみたい。

イーサーネットを使用する

せっかくLANコネクタのあるDockを入手したので、LANを有用化したい。
http://zero.lichee.pro/驱动/Ethernet.html

Linuxカーネルコンパイル

root@50959d444d56:~# cat README.txt 
u-boot	is mainline uboot, support tf or spi nor boot.
linux is mainline linux, 4.13 branch.
lichee is BSP linux, 3.4 kernel.
camdroid is BSP camdroid.

every dir have rebuild.sh to rebuild the source code.

linuxディレクトリの中に入り
手順通り、dts、dtsiファイルを修正して

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

arch/arm/boot/zImage
arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb
をSDカードにコピーして、再起動

eth0の有効化

無事に起動したら

root@LicheePi:~# ifup eth0
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

[  374.205155] Generic PHY stmmac-0:01: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-0:01, irq=-1)
[  374.217488] dwmac-sun8i 1c30000.ethernet eth0: No MAC Management Counters available
[  374.225386] dwmac-sun8i 1c30000.ethernet eth0: PTP not supported by HW
Listening on LPF/eth0/02:0f:e2:**:**:**
Sending on   LPF/eth0/02:0f:e2:**:**:**
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
[  381.526816] dwmac-sun8i 1c30000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1
bound to 192.168.1.121 -- renewal in 83698 seconds.
root@LicheePi:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:0f:e2:**:**:**
          inet addr:192.168.1.121  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:45 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4536 (4.4 KiB)  TX bytes:4124 (4.0 KiB)
          Interrupt:35 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:112 (112.0 B)  TX bytes:112 (112.0 B)

root@LicheePi:~# 

いけた!

LAN未接続で、待たされる件

喜んでいたのだが
LAN未接続時に

a start job is running for raise network interfaces

で20秒くらい待たされてしまう。なんとかしたい。
https://askubuntu.com/questions/862176/how-to-fix-a-start-job-is-running-for-the-raise-network-in-ubuntu-server-16

mkdir -p /etc/systemd/system/networking.service.d/
bash -c 'echo -e "[Service]\nTimeoutStartSec=5sec" > /etc/systemd/system/networking.service.d/timeout.conf'
systemctl daemon-reload

いいね!

U-Bootの自己書き換え

といっても、sshできているので、PCから/boot/あたりにイメージデータを保存して
以下を実行するだけ、/dev/以降が変わるくらいで、他に気にするところはなかった。

dd if=/boot/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

状況の整理

いろいろやりながらで、時間も経ってきたのでよくわからなくなってきた。
今一度整理。

分類 方法 状況 ソース
U-boot docker内の u-boot 出来た。ブート時のLCD表示もOK http://zero.lichee.pro/系统开发/uboot_build.html おそらく [git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current]
Linuxカーネル docker内の linux 出来た。 eth0の有効化もOK http://zero.lichee.pro/驱动/Ethernet.html
ルートシステム docker内の emdebian emdebianの開発終了のため試していない https://en.wikipedia.org/wiki/Emdebian_Grip
ルートシステム docker内の buildroot ルートシステムを作るのみ?
統合 buildroot 最新のやつはlicheepi対応しているみたいだが、LCDの確認はまだ
統合 OpenWrt 不明 https://qinfengling.pro/build_openwrt_image_for_licheepi_nano.html

docker内にいろいろサンプルがあるのがありがたい。

buildrootのあれこれ

buildrootって敷居が高かったのだけど、調べてみたらちょっとやってみたくなってきた。
docker内のやつは、ルートシステムを作るのみのように見えた。
u-Boot、カーネルこみこみでやる方法もあるらしいので、次は、それを試してみる。

https://qiita.com/aselectroworks/items/550370b4129c0afdda68
https://github.com/unframework/licheepi-nano-buildroot
https://github.com/Squonk42/buildroot-licheepi-zero
https://hackaday.io/project/134065-funkey-zero/log/144796-linux-distribution