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 
(点灯した!)

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

0 件のコメント:

コメントを投稿