なんとなく、公式?の開発環境をさわっているうちに、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に書いておけば、永続化されるみたい。
他の個体でも試してみて、補正値が同じような値ならば、まずはこれを標準の設定にしようかな。。
0 件のコメント:
コメントを投稿