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