Tanix Tx3 Max TV Box

WIP: novembre 2018.

Introduction

Ce document rassemble quelques notes sur l'installation d'une carte TV BOX Tanix Tx3 Max avec U-Boot et Linux à partir des branches principales de U-Boot et du kernel Linux.

Pour préparer puis démarrrer une machine Linux, on a besoin de:

On peut aussi prendre une image toute prête préparée par quelqu'un qui fait ce travail à votre place.

Caractéristiques principales de Tanix Tx3 Max

Voici les caractéristiques principales de la box Tanix Tx3 Max:

Photo de la boite
photo de la box Tanix Tx3 Max

Afficheur LED en face avant

La box dispose d'un afficheur LED en face avant, piloté par un controleur AiP1628 voir le lien pour la datasheet en chinois), ou encore TM1628, (alias PT6964 voir le lien), appelé aussi FD628 par certains fabricants, appelé VFD (Vacuum Fluorescent Displays) dans la littérature, parce que, sans doute, créé sur le même modèle.

Photo du circuit interne

Pour y accéder, il faut ouvrir la boite. Pour cela il faut enlever les 4 patins collés sur le dessous. Après avoir dévissé les 4 vis, on peut enlever le fond:

Photo du circuit imprimé coté circuit
photo du circuit imprimé coté circuit

Noter les 4 pads sur le coté droit de l'image. Il s'agit des points de connection de l'uart.

Photo du circuit imprimé coté composant
photo du circuit imprimé coté composant

Le marquage concernant la prise uart est caché. Il faut lire, de bas vers le haut: GND TX RX VCC.

Mise à jour LibreElec

La box arrive installée avec Android, mais il existe une version Andoid + LibreElec (linux) en dual boot que l'on va installer:

Le dtb pour Android est gxl-p281-2g.dtb.

Installation d'une distribution Linux

LibreElec existe aussi en distribution autonome. On peut donc l'installer sur une carte SD sans toucher à l'installation Android sur la mémoire flash. Il s'agit d'une image compressée à télécharger Voir le lien ref6, à décompresser, puis à copier sur une carte SD avec dd

gunzip LibreELEC-S905.arm-8.2-8.2.3.1.img.gz
dd if=LibreELEC-S905.arm-8.2-8.2.3.1.img of=/dev/sdb bs=1M

On peut faire la même chose avec Ubuntu Voir le lien ref7

xz Armbian_5.67_Aml-s9xxx_Ubuntu_bionic_default_4.19.0-rc7_desktop_20181117.img.xz
dd if=Armbian_5.67_Aml-s9xxx_Ubuntu_bionic_default_4.19.0-rc7_desktop_20181117.img of=/dev/sdb bs=1M

La difficulté alors, c'est de trouver le DTB corrrespondant à votre machine et d'y faire référence dans le fichier /boot/uEnv.ini en montant, au préalable, le répertoire /boot de la clé sur sa machine de développement. Pour ma carte et pour LibreElec le dtb est mgxl_p212_2g_tx3mini.dtb et pour Ubuntu, meson-gxl-s905x-khadas-vim.dtb. Attention, les DTB sont associés à une version du noyau, ne pas les mélanger.

Pour ubuntu, il faut modifier l'image et créer un compte pour pouvoir se logguer plus tard.

La Toolchain: chaine de compilation

La première chose dont on doit disposer, c'est le compilateur et les outils associés et ceci peut se faire de plusieurs façons:

La façon la plus simple, quand cela est possible, c'est d'installer le paquet fourni par sa distribution et dans mon cas sous Void Linux, j'ai installé le paquet cross-aarch64-linux-musl. Le compilateur se retrouve ainsi naturellemnt dans le PATH.

Pour prendre en compte la toolchain, on définit une variable CC que l'on passera dans les comandes de compilation. Voici la variable correspondant à mon installation:

export CC=aarch64-linux-musl-

Une autre solution, c'est d'installer une chaine de compilation toute prête voir lien sur Bootlin.

Compilation de U-boot

Après installation du compilateur, on peut passer au téléchargement du code source de U-boot, des patches éventuels on se retouve dans la branche master

git clone https://github.com/u-boot/u-boot
cd u-boot/

Maintenant que l'on a les sources, il est nécessaire de lire et d'exécuter les instructions du document board/amlogic/p212/README. Cela consiste à compiler une version spécifique de u-boot pour récupérer le répertoire fip que l'on recopie dans notre répertoire u-boot sous, par exemple, le nom amlfip. On compile u-boot et ensuite on termine avec les instructins du document.

Ne pas oublier de mettre un python devant la commande acs_tool.pyc.

python $FIPDIR/acs_tool.pyc fip/bl2.bin fip/bl2_acs.bin fip/acs.bin 0

Noter que je n'ai pas pu compiler la version du document sur ma machine, je l'ai fait en chroot sur une autre machine, problème de binaire i386 sans doute.

On peut configurer u-boot pour amlogic:

make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} p212_defconfig

Vous pouvez personnaliser votre u-boot:

make ARCH=arm CROSS_COMPILE=${CC} menuconfig

Compiler u-boot:

make ARCH=arm CROSS_COMPILE=${CC}

Un incident avec le compilateur: il ne trouve pas les fichiers stddef.h et bits/... Le compilateur a 2 chemins de recherche par défaut mais le Makefile par l'option -isystem path réduit le chemin à path qui est un des 2 par défaut. En faisant, dans path, un lien symbolique sur les fichiers manquant, on résout temporairement le problème: i.e on compile!.

On reprend le document jusqu'à la copie de u-boot généré sur la carte SD.

cd u-boot
sudo dd if=fip/u-boot.bin.sd.bin of=/dev/sdb conv=fsync,notrunc bs=512 skip=1 seek=1
sudo dd if=fip/u-boot.bin.sd.bin of=/dev/sdb  conv=fsync,notrunc bs=1 count=444

Compilation du noyau Linux

La compilation du noyau est similaire à celle de u-boot et on commence par télécharger le source :

wget  https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.4.tar.xz
tar Jxvf linux-4.19.4.tar.xz
ln -s linux-4.19.4 linux
cd linux

Créer une config par défaut. C'est une étape indispensable pour éviter de passer des heures à compiler des choses que l'on n'utilise pas.

make ARCH=arm64 CROSS_COMPILE=${CC} defconfig

La commande, qui suit, permet la personnalisation de la configuration. Il faudra revenir ici plus tard, pour créer les modules dont on aura besoin.

make ARCH=arm64 CROSS_COMPILE=${CC} menuconfig

Il est nécessaire de sélectionner sa platforme et déactiver les autres. Vous pouvez aussi parcourir et appliquer les autres rubriques memuconfig de ce document.

linux menuconfig
  Platform selection
    Amlogic Platforms

Device Drivers
   GPIO Support
     <*> /sys/class/gpio/... (sysfs interface)

On peut maintenant compiler le noyau, le dts et les modules qui seront installés dans le répertoire indiqué. Ces commandes devront être exécutées pour prendre en compte les modifications ultérieures de la configuration

ARCH=arm64 CROSS_COMPILE=${CC} make
ARCH=arm64 CROSS_COMPILE=${CC} INSTALL_MOD_PATH=../modules make modules_install

ARCH=arm64 CROSS_COMPILE=${CC} make headers_install

La dernière ligne, génère une copie des headers du noyau dans linux/usr/include, que l'on peut copier sur la machine cible dans /usr/include.

Le uboot amlogic sait lire le format uImage. La commande suivante crée donc un noyau au format uImage.

mkimage -A arm64 -O linux -C none -T kernel -a 0x01080000 -e 0x01080000 \
   -d linux/arch/arm64/boot/Image uImage

Quel DTB utiliser

Le dtb c'est le fichier qui décrit la machine et qui fait qu'elle boote ou pas. Le dtb utilisé sous Android est le gxl_p281_2g. Sous linux le dtb meson-gxl-s905x-p212.dtb fournit un fonctionement minimal. Il existe aussi un meson-gxl-s905w-p281.dtb qui est incomplet. Aussi je me suis créé un meson-gxl-s905w-p281hq.dtb pour pouvoir le modifier suivant les besoins. Il inclus meson-gxl-s905x-p212.dtsi et meson-gx-p23x-q20x.dtsi.

Avant l'installation de la carte SD

C'est le moment de décider de sa distribution. En effet, on va avoir besoin des fichiers d'un filesystem root minimal pour l'architecture arm64.

La distribution Void Linux fournit 2 archives de rootfs void-aarch64-ROOTFS-20181111.tar.xz et void-aarch64-musl-ROOTFS-20181111.tar.xz. Le choix dépend de l'usage que l'on va en faire. La version musl est plus rapide, mais toutes applications ne fonctionnent pas avec.

Si vous avez l'intention d'installer Asterisk, n'installez pas la version musl mais plutôt la version glibc, les fonctionnalités sont les mêmes, c'est juste un peu plus lent, mais ça fonctionne, ce qui n'est pas le cas avec la première.

Préparation de la carte SD

Le code du bootloader a déjà été installé sur la carte SD. On peut maintenant la formatter si on ne l'a pas déjà fait. Le format utilisé est une partition du type ext4 root de 4G et pour le reste une partition ext4 qui sera montée sur /home.

La disposition choisie implique de modifier quelques variables d'environnement de u-boot. Il est, en effet, nécessaire d'utiliser ext4load pour charger les fichiers.

La commande fdisk permet de la faire. La séquence de caractères à taper est la suivante, <enter> représente un appui sur la touche entrée.

fdisk /dev/sdX
o<enter>
n<enter><enter><enter>+4G<enter>
n<enter><enter><enter><enter>
w<enter>

Après la séquence précédente, La commande p dans fdisk montre ceci:

Disk /dev/sdb: 14.6 GiB, 15707668480 bytes, 30679040 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: 0xc6a382f1

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdb1          2048  8390655  8388608    4G 83 Linux
/dev/sdb2       8390656 30679039 22288384 10.6G 83 Linux

Pour formatter les partitions linux, si u-boot ne sait pas gérer les nouvelles options de mkfs.ext4 version >= 1.43.

  mkfs.ext4 -L AMLROOT  -O ^metadata_csum,^64bit /dev/sdb1
  mkfs.ext4 -L AMLHOME  -O ^metadata_csum,^64bit /dev/sdb2

Si la version mkfs.ext4 est < 1.43, formatter les partitions linux:

  mkfs.ext4 -L AMLROOT /dev/sdb1
  mkfs.ext4 -L AMLHOME /dev/sdb2

Maintenant, il est temps d'extraire le filesystem root de notre distribution que l'on a préalablement téléchargé qui s'appelle void-aarch64-musl-ROOTFS-20181111.tar.xz ou void-aarch64-ROOTFS-20181111.tar.xz.

mount /dev/sdb1 /mnt
tar -C /mnt -Jxvf void-aarch64-musl-ROOTFS-20181111.tar.xz

On a besoin d'un fichier s905_autoscript, appelé par la variable start_mmc_autoscript, pour modifier certaines variables de u-boot et les adapter à notre configuration: console, rootfs, DTB,... et pour lancer le boot.

On crée donc un fichier source s905_autoscript.cmd que l'on modifie par mkimage:

setenv kernel_loadaddr "0x11000000"
setenv dtb_mem_addr "0x20000000"
setenv init_hdmi "logo=osd1,loaded,${fb_addr},${hdmimode} vout=${hdmimode},enable"
setenv condev "console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0"
setenv bootargs "root=/dev/mmcblk0p1 rw ${init_hdmi} ${condev} fsck.repair=yes net.ifnames=0 mac=${mac}"
ext4load mmc 0:1 ${kernel_loadaddr} /boot/uImage
ext4load mmc 0:1 ${dtb_mem_addr} /boot/meson-gxl-s905x-p212.dtb
setenv boot_start bootm ${kernel_loadaddr} - ${dtb_mem_addr}
run boot_start;
mkimage -C none -A arm -T script -d s905_autoscript.cmd s905_autoscript

Pour finir, on peut copier nos fichiers générés vers la carte SD. Notez que le fichier u-boot.bin.sd.bin est copié dans /boot, mais ne sert pas.

VERSION=4.19.4
cp s905_autoscript  s905_autoscript.cmd /mnt/boot
cp u-boot/fip/u-boot.bin.sd.bin /mnt/boot
mkimage -A arm64 -O linux -C none -T kernel -a 0x01080000 -e 0x01080000 \
   -d linux/arch/arm64/boot/Image uImage
cp uImage  /mnt/boot/uImage
mkdir -p /mnt/boot/dtbs/${VERSION}
cp linux-${VERSION}/arch/arm/boot/dts/amlogic/meson-gxl-s905x*.dtb /mnt/boot/dtbs/${VERSION}

mkdir -p /mnt/lib/modules/${VERSION}
tar -C modules/lib/modules/${VERSION} -cvf - . | tar -C /mnt/lib/modules/${VERSION} -xf -

Comme on aura, certainement, à le faire plusieurs fois, on regroupe ces commandes dans un Makefile avec 2 cibles, une make sd lorsque la carte est montée sur /mnt et l'autre make tanix lorsque la machine est operationnelle en réseau:

# Void Linux Tanix box sd cart generation Makefile

# sd card mounted on /mnt

VERSION = $(shell readlink -f linux | sed -e 's/.*linux-//')
LINUX = linux-$(VERSION)
LINUXIMG = $(LINUX)/arch/arm64/boot
LINUXDTB = $(LINUXIMG)/dts/amlogic
DTB = meson-gxl-s905w-p281hq.dtb
DTBs = meson-gxl-s905*.dtb
UBOOT = u-boot
UBOOT_IMG = fip/u-boot.bin.sd.bin
BOOT = /mnt/boot
MODULES = /mnt/lib/modules/$(VERSION)
REMMODULES = /lib/modules/$(VERSION)
SMODULES = modules/lib/modules/$(VERSION)
UENV = s905_autoscript

machin := tanix

$(machin): uenv/$(UENV) uenv/modify_env uImage
        ssh $(machin) "mkdir -p $(REMMODULES) /boot/dtbs/$(VERSION)"
        tar -C  $(SMODULES) -cvf - . | ssh $(machin) tar -C $(REMMODULES) -xf -
        scp uenv/$(UENV) uenv/$(UENV).cmd $(machin):/boot
        scp uImage $(UBOOT)/$(UBOOT_IMG) \
            $(machin):/boot
        scp $(LINUXDTB)/$(DTBs) $(machin):/boot/dtbs/$(VERSION)
        

sd: $(BOOT)/vmlinuz-$(VERSION) $(BOOT)/dtbs/$(DTB) \
         $(BOOT)/$(UBOOT_IMG) $(MODULES)/modules.alias $(BOOT)/$(UENV) \
         $(BOOT)/modify_env

$(BOOT)/$(UBOOT_IMG) : $(UBOOT)/$(UBOOT_IMG) 
        cp $(UBOOT)/$(UBOOT_IMG)  $(BOOT)

$(BOOT)/modify_env : uenv/modify_env 
        cp uenv/modify_env uenv/modify_env.cmd $(BOOT)

kernel : $(BOOT)/vmlinuz-$(VERSION) $(MODULES)/modules.alias

$(BOOT)/$(UENV): uenv/$(UENV)
        cp uenv/$(UENV) uenv/$(UENV).cmd $(BOOT)/

uenv/$(UENV): uenv/$(UENV).cmd
        mkimage -C none -A arm -T script -d $< $@

uenv/modify_env: uenv/modify_env.cmd
        mkimage -C none -A arm -T script -d $< $@
uImage: $(LINUXIMG)/Image
        mkimage -A arm64 -O linux -C none -T kernel \
           -a 0x01080000 -e 0x01080000 -d $< $@
   
$(BOOT)/vmlinuz-$(VERSION) : $(LINUXIMG)/Image uImage
        cp $(LINUXIMG)/Image.gz $(BOOT)/vmlinuz-$(VERSION)
        cp uImage $(BOOT)

$(BOOT)/dtbs/$(DTB): $(LINUXDTB)/$(DTB)
        mkdir -p $(BOOT)/dtbs/$(VERSION)
        cp $(LINUXDTB)/$(DTBs) $(BOOT)/dtbs/$(VERSION)
        (cd /mnt/boot ; ln -sf dtbs/$(VERSION)/$(DTB) $(DTB) )

$(MODULES)/modules.alias : $(SMODULES)/modules.alias
        mkdir -p $(MODULES)
        tar -C $(SMODULES) -cvf - . | tar -C $(MODULES) -xf -
        touch $@

clean:
        rm -f *~ uImage modules.tar
        

Modification des variables d'environnement u-boot

On n'oublie pas que notre carte dispose d'une mémoire flash avec un partitionnement Android et Android installé et fonctionnel si la carte SD n'est pas insérée.

Logées quelque part sur la flash, ces variables d'environnement définissent des valeurs et des commandes à exécuter. Par exemple, bootcmd appelle start_autoscript qui appelle soit start_usb_autoscript soit start_mmc_autoscript. Voici les valeurs initiales de ces variables:

printenv bootcmd

bootcmd=run start_autoscript
printenv start_autoscript

start_autoscript=if usb start ; then run start_usb_autoscript; fi; if mmcinfo; then run start_mmc_autoscript; fi;
start_mmc_autoscript=if fatload mmc 0 1020000 s905_autoscript; then autoscr 1020000; fi;
start_usb_autoscript=if fatload usb 0 1020000 s905_autoscript; then autoscr 1020000; fi; if fatload usb 1 1020000 s905_autoscript; then autoscr 1020000; fi; if fatload usb 2 1020000 s905_autoscript; then autoscr 1020000; fi; if fatload usb 3 1020000 s905_autoscript; then autoscr 1020000; fi;

start_usb_autoscript fait la même chose que start_mmc_autoscript lorsqu'on insére dans la prise USB de Tanix soit une clé USB soit la carte SD insérée dans un lecteur de carte USB.

Pour éviter de trainer des partitions FAT devenues inutiles puisque u-boot sait lire une partition ext4, on va modifier start_mmc_autoscript et start_usb_autoscript pour dire à u-boot de charger s905_autoscript sur la partition ext4.

Ceci peut se faire en exécutant les commandes suivantes dans la console série connectée à u-boot:

setenv start_mmc_autoscript "if ext4load mmc 0 1020000 /boot/s905_autoscript; then autoscr 1020000; fi;"
setenv start_usb_autoscript "if ext4load usb 0 1020000 /boot/s905_autoscript; then autoscr 1020000; fi; if ext4load usb 1 1020000 /boot/s905_autoscript; then autoscr 1020000; fi; if ext4load usb 2 1020000 /boot/s905_autoscript; then autoscr 1020000; fi; if ext4load usb 3 1020000 /boot/s905_autoscript; then autoscr 1020000; fi;"
saveenv

Si on n'a pas de console série, On crée un fichier de modification modify_env.cmd à compiler par mkimage et à copier dans la partition boot vfat, et dans le répertoire /boot de la partition ext4 root. Lorsque l'on veut changer l'environnement, il faut:

  1. sauvegarder le fichier s905_autoscript principal,
  2. copier le fichier modify_env dans s905_autoscript,
  3. de rebooter pour exécuter modify_env,
  4. de restorer le fichier s905_autoscript principal.

Le fichier modify_env.cmd:

setenv start_mmc_autoscript "if ext4load mmc 0 1020000 /boot/s905_autoscript; then autoscr 1020000; fi; if fatload mmc 0 1020000 s905_autoscript; then autoscr 1020000; fi;"
setenv start_usb_autoscript "if ext4load usb 0 1020000 /boot/s905_autoscript; then autoscr 1020000; fi; if fatload usb 0 1020000 s905_autoscript; then autoscr 1020000; fi; if ext4load usb 1 1020000 /boot/s905_autoscript; then autoscr 1020000; fi; if fatload usb 1 1020000 s905_autoscript; then autoscr 1020000; fi;"
saveenv
sleep 1
reboot

Exemple:

mkimage -C none -A arm -T script -d modify_env.cmd modify_env
mv s905_autoscript s905_autoscript.sav
cp modify_env s905_autoscript
reboot

Il faudra restorer s905_autoscript.

On peut aussi taper, dans la console de u-boot, la ligne suivante:

if ext4load mmc 0 1020000 /boot/modify_env; then autoscr 1020000; fi;

Boot de la Tv box Tanix Tx3

On met la carte SD dans son emplacement, on démarre gtkterm et on branche le cordon secteur. Le listing suivant est la capture par gtkterm des messages émis sur l'UART0. On constate un prompt de login au bout de 10 s après le démarrage du noyau. Le réseau est prêt au bout de 12 s.

BL2 Built : 20:22:19, Aug 18 2017. 
gxl gfa7a104 - xiaobo.gu@droid12

set vcck to 1120 mv
set vddee to 1000 mv
Board ID = 12
CPU clk: 1200MHz
DQS-corr enabled
DDR scramble enabled
STICKY_REG0: 0x00000000
STICKY_REG1: 0x00000000
STICKY_REG9: 0x00000000
DDR3 chl: Rank0 16bit @ 660MHz
p_ddr_set->ddr_size = 0
p_ddr_set->ddr_size = 2048
Rank0: 2048MB(auto)-2T-9
DataBus test pass!
AddrBus test pass!
-s
Load fip header from eMMC, src: 0x0000c200, des: 0x01400000, size: 0x00004000
New fip structure!
Load bl30 from eMMC, src: 0x00010200, des: 0x01100000, size: 0x0000d600
Load bl31 from eMMC, src: 0x00020200, des: 0x05100000, size: 0x0002c600
Load bl33 from eMMC, src: 0x00050200, des: 0x01000000, size: 0x00066c00
NOTICE:  BL3-1: v1.0(release):a625749
NOTICE:  BL3-1: Built : 11:25:15, Aug 25 2017
[BL31]: GXL CPU setup!
NOTICE:  BL31: BL33 decompress pass
mpu_config_enable:ok

[Image: gxl_v1.1.3242-f21d6ea 2017-08-08 12:09:41 qiufang.dai@droid07]

OPS=0xa4

e e7 5a 6d b4 c5 1c cb 92 8f b8 13 [0.287522 Inits done]

secure task start!
high task start!
low task start!
ERROR:   Error initializing runtime service opteed_fast


U-Boot 2015.01-g796afe43bb-dirty (Dec 27 2017 - 15:05:55)

DRAM:  2 GiB
Relocation Offset is: 76eb0000
register usb cfg[0][1] = 0000000077f58fe0
[CANVAS]canvas init
boot_device_flag : 1
Nand PHY Ver:1.01.001.0006 (c) 2013 Amlogic Inc.
init bus_cycle=6, bus_timing=7, system=5.0ns
reset failed
get_chip_type and ret:fffffffe
get_chip_type and ret:fffffffe
chip detect failed and ret:fffffffe
nandphy_init failed and ret=0xfffffff1
MMC:   aml_priv->desc_buf = 0x0000000073eb06b0
aml_priv->desc_buf = 0x0000000073eb29d0
SDIO Port B: 0, SDIO Port C: 1
emmc/sd response timeout, cmd8, status=0x1ff2800
emmc/sd response timeout, cmd55, status=0x1ff2800
init_part() 293: PART_TYPE_AML
[mmc_init] mmc init success
dtb magic 5f4c4d41
      Amlogic multi-dtb tool
      Multi dtb detected
      Multi dtb tool version: v2 .
      Support 2 dtbs.
        aml_dt soc: gxl platform: p281 variant: 2g
        dtb 0 soc: gxl   plat: p281   vari: 1g
        dtb 1 soc: gxl   plat: p281   vari: 2g
      Find match dtb: 1
start dts,buffer=0000000073eb5200,dt_addr=0000000073ec0200
      Amlogic multi-dtb tool
      Multi dtb detected
      Multi dtb tool version: v2 .
      Support 2 dtbs.
        aml_dt soc: gxl platform: p281 variant: 2g
        dtb 0 soc: gxl   plat: p281   vari: 1g
        dtb 1 soc: gxl   plat: p281   vari: 2g
      Find match dtb: 1
parts: 10
00:      logo	0000000002000000 1
01:  recovery	0000000002000000 1
02:       rsv	0000000000800000 1
03:       tee	0000000000800000 1
04:     crypt	0000000002000000 1
05:      misc	0000000002000000 1
06:      boot	0000000002000000 1
07:    system	0000000080000000 1
08:     cache	0000000020000000 2
09:      data	ffffffffffffffff 4
init_part() 293: PART_TYPE_AML
eMMC/TSD partition table have been checked OK!
check pattern success
mmc env offset: 0x27400000 
In:    serial
Out:   serial
Err:   serial
reboot_mode=cold_boot
[store]To run cmd[emmc dtb_read 0x1000000 0x40000]
_verify_dtb_checksum()-917: calc 45c7c07c, store 45c7c07c
_verify_dtb_checksum()-917: calc 45c7c07c, store 45c7c07c
dtb_read()-1039: total valid 2
dtb_read()-1106: do nothing
      Amlogic multi-dtb tool
      Multi dtb detected
      Multi dtb tool version: v2 .
      Support 2 dtbs.
        aml_dt soc: gxl platform: p281 variant: 2g
        dtb 0 soc: gxl   plat: p281   vari: 1g
        dtb 1 soc: gxl   plat: p281   vari: 2g
      Find match dtb: 1
vpu: clk_level in dts: 7
vpu: set clk: 666667000Hz, readback: 666660000Hz(0x300)
vpu: vpu_clk_gate_init_off
vpp: vpp_init
hpd_state=1
[1080p60hz] is invalid for cvbs.
set hdmitx VIC = 16
config HPLL = 3712500
HPLL: 0xc000029a
config HPLL done
j = 4  vid_clk_div = 1
hdmitx: set enc for VIC: 16
HDMITX-DWC addr=0x10004006 rd_data=0x40
Error: HDMITX-DWC exp_data=0xff mask=0x9f
rx version is 1.4 or below  div=10
hdmtix: set audio
hdmitx phy setting done
setenv ddrclk  666 MHz
Net:   dwmac.c9410000
Start read misc partition datas!
info->attemp_times = 0
info->active_slot = 0
info->slot_info[0].bootable = 1
info->slot_info[0].online = 1
info->slot_info[1].bootable = 0
info->slot_info[1].online = 0
info->attemp_times = 0
attemp_times = 0 
active slot = 0 
wipe_data=successful
wipe_cache=successful
upgrade_step=0
[OSD]load fb addr from dts
[OSD]fb_addr for logo: 0x7fb00000
[OSD]load fb addr from dts
[OSD]fb_addr for logo: 0x7fb00000
[CANVAS]addr=0x7fb00000 width=3840, height=2160
amlkey_init() enter!
[EFUSE_MSG]keynum is 4
[BL31]: tee size: 0
[KM]Error:f[key_manage_query_size]L507:key[usid] not programed yet
[KM]Error:f[key_manage_query_size]L507:key[deviceid] not programed yet
saradc - saradc sub-system

Usage:
saradc saradc open 		- open a SARADC channel
saradc close	- close the SARADC
saradc getval	- get the value in current channel
saradc get_in_range  	- return 0 if current value in the range of current channel

time_out = f4240
ir init
irkey_update - irkey_update time_value

Usage:
irkey_update 
InUsbBurn
noSof
Hit Enter or space or Ctrl+C key to stop autoboot -- :  1  0 
(Re)start USB...
USB0:   USB3.0 XHCI init start
Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
** Bad device usb 0 **
** Bad device usb 0 **
** Bad device usb 1 **
** Bad device usb 1 **
card in
init_part() 278: PART_TYPE_DOS
[mmc_init] mmc init success
Device: SDIO Port B
Manufacturer ID: 28
OEM: 4245
Name:       
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.9 GiB
mmc clock: 40000000
Bus Width: 4-bit
709 bytes read in 22 ms (31.3 KiB/s)
## Executing script at 01020000
17304128 bytes read in 960 ms (17.2 MiB/s)
24260 bytes read in 48 ms (493.2 KiB/s)
ee_gate_off ...
## Booting kernel from Legacy Image at 11000000 ...
   Image Name:   
   Image Type:   AArch64 Linux Kernel Image (uncompressed)
   Data Size:    17304064 Bytes = 16.5 MiB
   Load Address: 01080000
   Entry Point:  01080000
   Verifying Checksum ... OK
load dtb from 0x20000000 ......
      Amlogic multi-dtb tool
      Single dtb detected
## Flattened Device Tree blob at 20000000
   Booting using the fdt blob at 0x20000000
Host not halted after 16000 microseconds.
   Loading Kernel Image(COMP_NONE) ... OK
   kernel loaded at 0x01080000, end = 0x02100a00
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND
[rsvmem] fdt get prop fail.
   Loading Device Tree to 000000001fff7000, end 000000001ffffec3 ... OK
fdt_instaboot: no instaboot image

Starting kernel ...

uboot time: 6102469 us
[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 4.19.4 (hq@olix) (gcc version 8.2.0 (GCC)) #10 SMP PREEMPT Sun Nov 25 11:08:28 CET 2018
[    0.000000] Machine model: Amlogic Meson GXL (S905W) P281 HQ Development Board
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x000000006c400000, size 188 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] NUMA: No NUMA configuration found
[    0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x0000000077ffffff]
[    0.000000] NUMA: NODE_DATA [mem 0x6c3cfa00-0x6c3d11bf]
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000001000000-0x0000000077ffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000001000000-0x0000000004ffffff]
[    0.000000]   node   0: [mem 0x0000000005300000-0x000000000fffffff]
[    0.000000]   node   0: [mem 0x0000000010200000-0x0000000077ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000001000000-0x0000000077ffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv0.2 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: Trusted OS migration not required
[    0.000000] random: get_random_bytes called from start_kernel+0x94/0x400 with crng_init=0
[    0.000000] percpu: Embedded 23 pages/cpu @(____ptrval____) s56728 r8192 d29288 u94208
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: enabling workaround for ARM erratum 845719
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 478528
[    0.000000] Policy zone: DMA32
[    0.000000] Kernel command line: root=/dev/mmcblk0p1 rw logo=osd1,loaded,0x3d800000,1080p60hz vout=1080p60hz,enable console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0  fsck.repair=yes net.ifnames=0 mac=06:41:80:42:78:43
[    0.000000] Memory: 1701184K/1944576K available (9788K kernel code, 706K rwdata, 5584K rodata, 768K init, 370K bss, 50880K reserved, 192512K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=4.
[    0.000000] 	Tasks RCU enabled.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] irq_meson_gpio: 110 to 8 gpio interrupt mux initialized
[    0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000004] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.000361] Console: colour dummy device 80x25
[    0.000720] console [tty0] enabled
[    0.000808] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000)
[    0.000830] pid_max: default: 32768 minimum: 301
[    0.000904] Security Framework initialized
[    0.002041] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.002606] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.002652] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
[    0.002681] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes)
[    0.024034] ASID allocator initialised with 32768 entries
[    0.032012] rcu: Hierarchical SRCU implementation.
[    0.040855] EFI services will not be available.
[    0.048061] smp: Bringing up secondary CPUs ...
[    0.080292] Detected VIPT I-cache on CPU1
[    0.080350] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.112328] Detected VIPT I-cache on CPU2
[    0.112377] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.144373] Detected VIPT I-cache on CPU3
[    0.144420] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.144493] smp: Brought up 1 node, 4 CPUs
[    0.144561] SMP: Total of 4 processors activated.
[    0.144573] CPU features: detected: 32-bit EL0 Support
[    0.148181] CPU: All CPU(s) started at EL2
[    0.148205] alternatives: patching kernel code
[    0.149230] devtmpfs: initialized
[    0.154023] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.154104] futex hash table entries: 1024 (order: 4, 65536 bytes)
[    0.159399] pinctrl core: initialized pinctrl subsystem
[    0.160724] DMI not present or invalid.
[    0.161081] NET: Registered protocol family 16
[    0.161595] audit: initializing netlink subsys (disabled)
[    0.161741] audit: type=2000 audit(0.160:1): state=initialized audit_enabled=0 res=1
[    0.162835] cpuidle: using governor menu
[    0.163303] vdso: 2 pages (1 code @ (____ptrval____), 1 data @ (____ptrval____))
[    0.163332] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.165519] DMA: preallocated 256 KiB pool for atomic allocations
[    0.166268] Serial: AMBA PL011 UART driver
[    0.188969] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.189381] cryptd: max_cpu_qlen set to 1000
[    0.190215] ACPI: Interpreter disabled.
[    0.192007] vgaarb: loaded
[    0.192347] SCSI subsystem initialized
[    0.192732] usbcore: registered new interface driver usbfs
[    0.193603] usbcore: registered new interface driver hub
[    0.193720] usbcore: registered new device driver usb
[    0.194321] media: Linux media interface: v0.10
[    0.194385] videodev: Linux video capture interface: v2.00
[    0.194545] pps_core: LinuxPPS API ver. 1 registered
[    0.194565] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti 
[    0.194616] PTP clock support registered
[    0.194903] EDAC MC: Ver: 3.0.0
[    0.195913] Advanced Linux Sound Architecture Driver Initialized.
[    0.196957] clocksource: Switched to clocksource arch_sys_counter
[    0.197150] VFS: Disk quotas dquot_6.6.0
[    0.197230] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.197608] pnp: PnP ACPI: disabled
[    0.204836] NET: Registered protocol family 2
[    0.205434] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes)
[    0.205619] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
[    0.205767] TCP bind hash table entries: 16384 (order: 6, 262144 bytes)
[    0.206046] TCP: Hash tables configured (established 16384 bind 16384)
[    0.206283] UDP hash table entries: 1024 (order: 3, 32768 bytes)
[    0.206346] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes)
[    0.206552] NET: Registered protocol family 1
[    0.207041] RPC: Registered named UNIX socket transport module.
[    0.207067] RPC: Registered udp transport module.
[    0.207078] RPC: Registered tcp transport module.
[    0.207087] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.208074] hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 counters available
[    0.208438] kvm [1]: 8-bit VMID
[    0.210418] kvm [1]: vgic interrupt IRQ1
[    0.210538] kvm [1]: Hyp mode initialized successfully
[    0.214162] Initialise system trusted keyrings
[    0.214355] workingset: timestamp_bits=44 max_order=19 bucket_order=0
[    0.220935] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.222191] NFS: Registering the id_resolver key type
[    0.222239] Key type id_resolver registered
[    0.222249] Key type id_legacy registered
[    0.222266] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    0.222476] 9p: Installing v9fs 9p2000 file system support
[    0.222606] pstore: using deflate compression
[    0.225035] Key type asymmetric registered
[    0.225069] Asymmetric key parser 'x509' registered
[    0.225159] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 243)
[    0.225180] io scheduler noop registered
[    0.225190] io scheduler deadline registered
[    0.225400] io scheduler cfq registered (default)
[    0.225425] io scheduler mq-deadline registered
[    0.225436] io scheduler kyber registered
[    0.231016] EINJ: ACPI disabled.
[    0.238395] soc soc0: Amlogic Meson GXL (S905W) Revision 21:d (a4:2) Detected
[    0.243355] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.245984] c11084c0.serial: ttyAML1 at MMIO 0xc11084c0 (irq = 10, base_baud = 1500000) is a meson_uart
[    0.246174] serial serial0: tty port ttyAML1 registered
[    0.246528] c81004c0.serial: ttyAML0 at MMIO 0xc81004c0 (irq = 13, base_baud = 1500000) is a meson_uart
[    1.024751] console [ttyAML0] enabled
[    1.039195] loop: module loaded
[    1.041751] libphy: Fixed MDIO Bus: probed
[    1.042446] tun: Universal TUN/TAP device driver, 1.6
[    1.046808] thunder_xcv, ver 1.0
[    1.049063] thunder_bgx, ver 1.0
[    1.052204] nicpf, ver 1.0
[    1.055556] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    1.060646] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    1.066597] igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k
[    1.073396] igb: Copyright (c) 2007-2014 Intel Corporation.
[    1.078980] igbvf: Intel(R) Gigabit Virtual Function Network Driver - version 2.4.0-k
[    1.086676] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[    1.092818] sky2: driver version 1.30
[    1.096772] VFIO - User Level meta-driver version: 0.3
[    1.102733] dwc3 c9000000.dwc3: Failed to get clk 'ref': -2
[    1.108867] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.113260] ehci-pci: EHCI PCI platform driver
[    1.117720] ehci-platform: EHCI generic platform driver
[    1.123072] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.128972] ohci-pci: OHCI PCI platform driver
[    1.133413] ohci-platform: OHCI generic platform driver
[    1.139422] usbcore: registered new interface driver usb-storage
[    1.147355] i2c /dev entries driver
[    1.150375] sdhci: Secure Digital Host Controller Interface driver
[    1.154048] sdhci: Copyright(c) Pierre Ossman
[    1.158695] Synopsys Designware Multimedia Card Interface Driver
[    1.165425] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    1.171200] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    1.178060] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.1
[    1.184536] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.2
[    1.191424] meson-gx-mmc d0072000.mmc: Linked as a consumer to regulator.2
[    1.197917] meson-gx-mmc d0072000.mmc: Linked as a consumer to regulator.1
[    1.204720] meson-gx-mmc d0072000.mmc: Got CD GPIO
[    1.236658] meson-gx-mmc d0074000.mmc: Linked as a consumer to regulator.4
[    1.238087] meson-gx-mmc d0074000.mmc: Linked as a consumer to regulator.1
[    1.244827] meson-gx-mmc d0074000.mmc: allocated mmc-pwrseq
[    1.277680] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.279293] ledtrig-cpu: registered to indicate activity on CPUs
[    1.284778] meson-sm: secure-monitor enabled
[    1.289248] usbcore: registered new interface driver usbhid
[    1.293610] usbhid: USB HID core driver
[    1.297627] mmc0: new high speed SDHC card at address 59b4
[    1.298035] platform-mhu c883c404.mailbox: Platform MHU Mailbox registered
[    1.304281] mmcblk0: mmc0:59b4       14.9 GiB 
[    1.311436] meson-saradc c1108680.adc: Linked as a consumer to regulator.3
[    1.323185]  mmcblk0: p1 p2
[    1.327816] NET: Registered protocol family 17
[    1.327933] 9pnet: Installing 9P2000 support
[    1.332213] Key type dns_resolver registered
[    1.337207] registered taskstats version 1
[    1.340344] Loading compiled-in X.509 certificates
[    1.353636] phy phy-d0078000.phy.0: Linked as a consumer to regulator.5
[    1.357274] meson-drm d0100000.vpu: Queued 3 outputs on vpu
[    1.360663] meson-drm d0100000.vpu: Failed to create d0100000.vpu debugfs directory
[    1.361040] mmc1: new HS200 MMC card at address 0001
[    1.367844] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    1.374214] mmcblk1: mmc1:0001 SEM16G 14.7 GiB 
[    1.379220] [drm] No driver support for vblank timestamp query.
[    1.384784] mmcblk1boot0: mmc1:0001 SEM16G partition 1 4.00 MiB
[    1.396433] mmcblk1boot1: mmc1:0001 SEM16G partition 2 4.00 MiB
[    1.401538] mmcblk1rpmb: mmc1:0001 SEM16G partition 3 4.00 MiB, chardev (240:0)
[    1.417038] meson-dw-hdmi c883a000.hdmi-tx: Detected HDMI TX controller v2.01a with HDCP (meson_dw_hdmi_phy)
[    1.421737] meson-dw-hdmi c883a000.hdmi-tx: registered DesignWare HDMI I2C bus driver
[    1.429826] meson-drm d0100000.vpu: bound c883a000.hdmi-tx (ops meson_dw_hdmi_ops)
[    1.509558] random: fast init done
[    1.543840] [drm] kms: can't enable cloning when we probably wanted to.
[    1.738824] Console: switching to colour frame buffer device 170x48
[    1.755327] meson-drm d0100000.vpu: fb0: DRM emulated frame buffer device
[    1.762668] [drm] Initialized meson 1.0.0 20161109 for d0100000.vpu on minor 0
[    1.772249] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    1.774695] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[    1.783447] xhci-hcd xhci-hcd.0.auto: hcc params 0x0228f664 hci version 0x100 quirks 0x0000000002010010
[    1.791628] xhci-hcd xhci-hcd.0.auto: irq 35, io mem 0xc9000000
[    1.798254] hub 1-0:1.0: USB hub found
[    1.801189] hub 1-0:1.0: 2 ports detected
[    1.805429] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    1.810550] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[    1.818134] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0  SuperSpeed
[    1.824738] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.833299] hub 2-0:1.0: USB hub found
[    1.836426] hub 2-0:1.0: config failed, hub doesn't have any ports! (err -19)
[    1.844885] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    1.850367] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    1.857212] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.1
[    1.863707] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.2
[    1.870995] scpi_protocol scpi: SCP Protocol legacy pre-1.0 firmware
domain-0 init dvfs: 4

[    1.887958] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    1.893237] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    1.900076] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.1
[    1.906553] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.2
[    1.915021] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    1.920206] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    1.926978] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.1
[    1.933457] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.2
[    1.940427] hctosys: unable to open rtc device (rtc0)
[    1.945230] ALSA device list:
[    1.948702]   #0: Loopback 1
[    1.964642] EXT4-fs (mmcblk0p1): warning: mounting fs with errors, running e2fsck is recommended
[    1.974333] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
[    1.980466] VFS: Mounted root (ext4 filesystem) on device 179:1.
[    1.996007] devtmpfs: mounted
[    2.000040] Freeing unused kernel memory: 768K
[    2.003630] Run /sbin/init as init process
[    2.145016] usb 1-1: new low-speed USB device number 2 using xhci-hcd
[    2.747593] udevd[1320]: starting version 3.2.7
[    2.793888] random: udevd: uninitialized urandom read (16 bytes read)
[    2.799114] random: udevd: uninitialized urandom read (16 bytes read)
[    2.804478] random: udevd: uninitialized urandom read (16 bytes read)
[    2.907779] [drm] kms: can't enable cloning when we probably wanted to.
[    2.977272] udevd[1324]: starting eudev-3.2.7
[BL31]: tee size: 0
[    3.210122] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    3.214858] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    3.221732] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.1
[    3.228244] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.2
[    3.240349] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    3.245191] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    3.253876] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.1
[    3.258164] meson-gx-mmc d0070000.mmc: Dropping the link to regulator.2
[    3.269814] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.2
[    3.274509] meson-gx-mmc d0070000.mmc: Linked as a consumer to regulator.1
[    3.281005] meson-gx-mmc d0070000.mmc: allocated mmc-pwrseq
[    3.340093] mmc2: new high speed SDIO card at address 0001
[    3.648164] Registered IR keymap rc-empty
[    3.651310] rc rc0: meson-ir as /devices/platform/soc/c8100000.bus/c8100580.ir/rc/rc0
[    3.657395] input: meson-ir as /devices/platform/soc/c8100000.bus/c8100580.ir/rc/rc0/input0
[    3.666343] meson-ir c8100580.ir: receiver initialized
[    4.416851] meson8b-dwmac c9410000.ethernet: PTP uses main clock
[    4.420401] meson8b-dwmac c9410000.ethernet: no reset control found
[    4.427969] meson8b-dwmac c9410000.ethernet: User ID: 0x11, Synopsys ID: 0x37
[    4.433683] meson8b-dwmac c9410000.ethernet: 	DWMAC1000
[    4.438866] meson8b-dwmac c9410000.ethernet: DMA HW capability register supported
[    4.446260] meson8b-dwmac c9410000.ethernet: RX Checksum Offload Engine supported
[    4.453705] meson8b-dwmac c9410000.ethernet: COE Type 2
[    4.458841] meson8b-dwmac c9410000.ethernet: TX Checksum insertion supported
[    4.465857] meson8b-dwmac c9410000.ethernet: Wake-Up On Lan supported
[    4.472246] meson8b-dwmac c9410000.ethernet: Normal descriptors
[    4.478110] meson8b-dwmac c9410000.ethernet: Ring mode enabled
[    4.483855] meson8b-dwmac c9410000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[    4.492083] libphy: stmmac: probed
[    4.497080] libphy: mdio_mux: probed
[    4.738739] libphy: mdio_mux: probed
[    4.940590] Bluetooth: Core ver 2.22
[    4.943467] Bluetooth: Starting self testing
[    4.967136] Bluetooth: ECDH test passed in 20488 usecs
[    4.974029] Bluetooth: SMP test passed in 3557 usecs
[    4.976266] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    4.976911] Bluetooth: Finished self testing
[    4.988288] NET: Registered protocol family 31
[    4.992534] Bluetooth: HCI device and connection manager initialized
[    4.997212] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    4.998798] Bluetooth: HCI socket layer initialized
[    5.010092] Bluetooth: L2CAP socket layer initialized
[    5.015156] Bluetooth: SCO socket layer initialized
[    5.965388] Bluetooth: HCI UART driver ver 2.3
[    5.968272] Bluetooth: HCI UART protocol H4 registered
[    5.972208] Bluetooth: HCI UART protocol BCSP registered
[    5.977556] Bluetooth: HCI UART protocol LL registered
[    5.982563] Bluetooth: HCI UART protocol ATH3K registered
[    5.987996] Bluetooth: HCI UART protocol Three-wire (H5) registered
[    5.994407] Bluetooth: HCI UART protocol Intel registered
[    5.999792] Bluetooth: HCI UART protocol Broadcom registered
[    6.005180] Bluetooth: HCI UART protocol QCA registered
[    6.010230] Bluetooth: HCI UART protocol AG6XX registered
[    6.015586] Bluetooth: HCI UART protocol Marvell registered
[    6.615091] Bluetooth: hci0: RTL: rtl: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
[    6.615091] 
[    6.628790] Bluetooth: hci0: RTL: rom_version status=0 version=1
[    6.628790] 
[    6.636117] Bluetooth: hci0: RTL: rtl: loading rtl_bt/rtl8723bs_fw.bin
[    6.636117] 
[    6.687390] Bluetooth: hci0: RTL: rtl: loading rtl_bt/rtl8723bs_config.bin
[    6.687390] 
[    6.701202] r8723bs: module is from the staging directory, the quality is unknown, you have been warned.
[    6.725082] Bluetooth: hci0: RTL: cfg_sz 109, total sz 22605
[    6.725082] 
[    6.746527] RTL8723BS: module init start
[    6.749655] RTL8723BS: rtl8723bs v4.3.5.5_12290.20140916_BTCOEX20140507-4E40
[    6.754899] RTL8723BS: rtl8723bs BT-Coex version = BTCOEX20140507-4E40
[    6.761665] pnetdev = (____ptrval____)
[    6.794512] RTL8723BS: rtw_ndev_init(wlan0)
[    6.800095] RTL8723BS: module init ret =0
[    7.026102] EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
[    7.535320] EXT4-fs (mmcblk0p1): warning: mounting fs with errors, running e2fsck is recommended
[    7.564427] EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
[    7.627896] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    7.691830] urandom_read: 4 callbacks suppressed
[    7.691838] random: dd: uninitialized urandom read (4096 bytes read)
[    7.763454] random: ln: uninitialized urandom read (6 bytes read)
[    8.853987] NET: Registered protocol family 10
[    8.858148] Segment Routing with IPv6
[    9.124415] udevd[2226]: starting version 3.2.7
[    9.192007] random: udevd: uninitialized urandom read (16 bytes read)
[    9.536635] udevd[2226]: starting eudev-3.2.7
[    9.631652] rtl8723bs: acquire FW from file:rtlwifi/rtl8723bs_nic.bin
[    9.712531] random: crng init done
[    9.782401] 8021q: 802.1Q VLAN Support v1.8


Void 4.19.4 (tanix) (ttyAML0)

tanix login: [   10.407310] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   10.410650] Bluetooth: BNEP filters: protocol multicast
[   10.415877] Bluetooth: BNEP socket layer initialized
[   10.911777] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[   11.176055] Meson GXL Internal PHY 0.e40908ff:08: attached PHY driver [Meson GXL Internal PHY] (mii_bus:phy_addr=0.e40908ff:08, irq=36)
[   11.198343] meson8b-dwmac c9410000.ethernet eth0: No Safety Features support found
[   11.203744] meson8b-dwmac c9410000.ethernet eth0: PTP not supported by HW
[   11.210994] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   12.665071] meson8b-dwmac c9410000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[   12.671724] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   12.832433] RTL8723BS: rtw_set_802_11_connect(wlan0)  fw_state = 0x00000008
[   12.929623] RTL8723BS: start auth
[   12.941138] RTL8723BS: auth success, start assoc
[   12.953160] RTL8723BS: rtw_cfg80211_indicate_connect(wlan0) BSS not found !!
[   12.958295] RTL8723BS: assoc success
[   12.965609] RTL8723BS: send eapol packet
[   12.977548] RTL8723BS: send eapol packet
[   12.978162] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   13.059308] RTL8723BS: set pairwise key camid:4, addr:3c:17:10:b8:0f:84, kid:0, type:AES
[   13.066011] RTL8723BS: set group key camid:5, addr:3c:17:10:b8:0f:84, kid:1, type:TKIP

Le fait d'avoir booté correctement valide, entre autres, le choix de la chaine de compilation fait tout au début !

Installation de la distribution

Les fichiers du root fs ne sont qu'un minimum. La première chose à faire c'est de mettre à jour les fichiers installés avec l'installateur de paquets xbps-install et xbps-query pour la recherche. Ensuite chacun installera ses paquets en fonction de son besoin.

xbps-install -Su     # met à jour l'installateur de paquets
xbps-install -Su     

xbps-install -S gcc make xauth rsync nano ...     

Comme nous n'avons pas utilisé l'installatateur officiel de la distribution, il est nécessaire de finir manuellement.

Installation réseau

L'accès naturel à la machine se fait par ssh. Il faut donc que le réseau soit configuré. Pour cela, une solution simple est d'utiliser dhcpcd et voici son fichier de configuration /etc/dhcpcd.conf qui utilise des ip statiques:

interface eth0
static ip_address=192.168.1.93/24       
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
interface wlan0
static ip_address=192.168.1.94/24       
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Ce fichier contient déjà la configuration pour la wifi que l'on peut commenter ou enlever si on n'a pas l'intention de l'utiliser. La commande suivante permet de démarrer le démon dhcpcd.

# ln -s /etc/sv/dhcpcd /var/service/

ou si la carte sd est montée sur /mnt sur la machine de développement:

# cd /mnt/etc/runit/runsvdir/default/
# ln -s /etc/sv/dhcpcd dhcpcd

Installation wifi

La Tv box Tanix possède une interface wifi. Pour l'installer if faut commencer par reconfigurer et recompiler le noyau linux pour le module r8723bs:

linux menuconfig
  Device Drivers
     [*] Staging drivers  --->    
          Realtek RTL8723BS SDIO Wireless LAN NIC driver

Après le reboot, la commande suivante donne la liste des interfaces net:

# ls /sys/class/net
eth0  lo  wlan0

Une nouvelle interface wlan0 apparait Il faut alors installer le paquet wpa_supplicant et le configurer. On crée le fichier de configuration wpa_supplicant, d'après le modèle, puis on le modifie avec wpa_passphrase. La commande wifi fait "echo <Mon-ssid> <Ma-passphrase>".

# cp /etc/wpa_supplicant/wpa_supplicant.conf  /etc/wpa_supplicant/wpa_supplicant-wlan0.conf 
# wpa_passphrase `wifi` >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

Le fichier de configuration wpa_supplicant est à peu près ceci avec des vraies valeurs pour MY-SSID et MY-WPA-KEY :

# Default configuration file for wpa_supplicant.conf(5).

ctrl_interface=/run/wpa_supplicant
ctrl_interface_group=wheel
eapol_version=1
ap_scan=1
fast_reauth=1
update_config=1

# Add here your networks.
network={
        ssid="My-Livebox"
        #psk="3456D271924332517A212C91FF"
        psk=3e187b29ae183052c6900244df85b546dce324902938aa486e9063391fd7c73e
}

Il faut ensuite préparer un service qui sera démarré avec la machine. On crée un fichier /etc/sv/wpa_supplicant/conf parce que l'on a modifié le nom du fichier de configuration de wpa_supplicant:

CONF_FILE=/etc/wpa_supplicant/wpa_supplicant-wlan0.conf

Si on a l'intention de travailler en wifi et débrancher le cable réseau, il ne reste plus qu'à démarrer wpa_supplicant en tant que service:

# ln -s /etc/sv/wpa_supplicant /var/service/

Un message d'erreur au boot. Il faut donc trouver un firmware rtl8723bs_nic.bin à installer dans /lib/firmware/rtlwifi/ et ça va mieux . On le trouve ici.

  rtl8723bs: acquire FW from file:rtlwifi/rtl8723bs_nic.bin

Le service démarré, on regarde l'état de notre connection wlan0 avec ip addr:

# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:15:18:01:81:31 brd ff:ff:ff:ff:ff:ff
3: wlan0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 80:5e:4f:04:9e:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.94/24 brd 192.168.1.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::825e:4fff:fe04:9eb6/64 scope link 
       valid_lft forever preferred_lft forever

Installation bluetooth

La Tv box Tanix possède une interface bluetooth fournie par le chip Realtek RTL8723BS, le même que pour la wifi, monté dans un module. Vous trouverez une pseudo spécification en ref10. Il semble que la bluetooth est géré par son propre processeur, on peut donc s'attendre à trouver un firmware spécifique pour la bluetooth. La communication se fait par l'interface HS-UART connectée à l'interface série /dev/ttyAML1 du processeur Amlogic s905w.

Pour l'installer, il faut commencer par reconfigurer et recompiler le noyau linux pour les modules :

linux menuconfig
  -> Networking support
     -> Bluetooth subsystem support 
         Bluetooth Classic (BR/EDR) features
               RFCOMM protocol support
               BNEP protocol support
               HIDP protocol support
          Bluetooth High Speed (HS) features
        -> Bluetooth device drivers
           HCI UART driver
          [*]   BCSP protocol support
          [*]   Three-wire UART (H5) protocol support
          [*] Intel protocol support   

Il faut également installer quelques paquets de la distribution: bluez, rfkill, puis installer le daemon bluetoothd ainsi que dbus si ce n'est déjà fait.

# ln -s /etc/sv/dbus /var/service/
# ln -s /etc/sv/bluetoothd /var/service/

Le chip bluetooth est connecté intérieurement sur /dev/ttyAML1. Le gpio GPIOX_17 est connecté au signal BT_DIS pin 34 du module. Le gpio GPIOX_17 a pour numéro 0x60 (96) voir gpio/meson-gxl-gpio.h et donc un numéro sysfs base + gpio => 497. Pour faire marcher tout cela avec le kernel courant, il faut quelques recettes de cuisine:

Installer un lien vers le module dans le dts. Les lignes device-wake-gpios et host-wake-gpios ne semblent pas servir.

&uart_A {
    bluetooth {
        compatible = "realtek,rtl8723bs-bt";
        enable-gpios = < &gpio GPIOX_17 GPIO_ACTIVE_HIGH >;
        device-wake-gpios = < &gpio GPIOX_18 GPIO_ACTIVE_HIGH >;
        host-wake-gpios = < &gpio GPIOX_16 GPIO_ACTIVE_HIGH >;
    };
};

Avec cette configuration, le kernel réclame les fichiers rtl_bt/rtl8723bs_fw.bin et rtl_bt/rtl8723bs_config.bin installés dans le répertoire /lib/firmware. Aujourd'hui, on trouve un firmware rtl_bt/rtl8723b_fw.bin, dont le md(sum est 1e3ca03c3d812f133e32c769240fca34, sur le site firmware/linux-firmware. On peut faire un lien sur le fichier requis. N'ayant pas trouvé le fichier de config, j'utilise celui installé, il y a 3 mois, rtl8723bs_config qui provenant peut être d'android.

ln -sf rtl8723b_fw.bin rtl8723bs_fw.bin
ln -sf rtl8723bs_config rtl8723bs_config.bin

Après un reboot, La commande rfkill laisse apparaitre une nouvelle interface hci0 ainsi que ls /sys/class/bluetooth/ ou hciconfig.

# rfkill list
rfkill list
0: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no
1: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no

# ls /sys/class/bluetooth/
hci0

# hciconfig
hci0:	Type: Primary  Bus: UART
	BD Address: 80:5E:4F:04:C5:C6  ACL MTU: 820:8  SCO MTU: 255:16
	UP RUNNING PSCAN ISCAN 
	RX bytes:3956 acl:0 sco:0 events:167 errors:0
	TX bytes:27534 acl:0 sco:0 commands:167 errors:0

La commande bluetoothctl trouve un controleur. Après un scan on trouve les devices à proximité et les autres devices voient la box.

# bluetoothctl
Agent registered
[bluetooth]# show
Controller 80:5E:4F:04:C5:C6 (public)
	Name: Tanix Linux
	Alias: Tanix Linux
	Class: 0x00000100
	Powered: yes
	Discoverable: yes
	Pairable: no
	UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
	UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
	UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
	UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
	UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
	Modalias: bluetooth:v1234p5678dABCD
	Discovering: no

[bluetooth]# scan on
Discovery started
[CHG] Controller 80:5E:4F:04:C5:C6 Discovering: yes
[CHG] Device 8D:18:D9:22:62:D8 RSSI: -62
[CHG] Device 08:81:BC:1D:40:2F RSSI: -60

Pour moi, les binaires de Larry Finger ne fonctionnent pas. Il y a bien un hci0, mais pas de controller dans bluetoothctl.

Si vous avez l'impression que ça marche, que votre device découvre les autres devices autour, mais que les autres ne vous détectent pas, c'est que vous n'avez pas le bon firmware !.

Clavier et souris

La box ne possède pas d'entrée PS2, le clavier et la souris doivent donc se connecter en USB, ce qui nécessite une configuration pour définir USBHID:

linux menuconfig
 General setup 
   -> Configure standard kernel features (expert users)

 Device drivers
  -> Hid support
      <*> HID bus support 
      <*> Generic HID driver 
          USB HID support  --->   
             <*> USB HID transport layer
             [ ] PID device support
             USB HID Boot Protocol drivers  --->      
               < > USB HIDBP Keyboard (simple Boot) support         
               < > USB HIDBP Mouse (simple Boot) support  

Pour avoir un login sur la console, il faut activer le service agetty-tty1.

# ln -s /etc/sv/agetty-tty1 /var/service

Configuration Video

La box possède une sortie hdmi que l'on peut raccorder à un moniteur ou une télé. Une télé qui ne fonctionne plus en TV parce les formats ont changés, fait très bien l'affaire.

If faut installer les paquets xorg-server xorg-video-drivers et un desktop comme mate et lightdm. Ne pas oublier d'installer xf86-input-evdev, sinon pas de clavier ni souris.

Pour un essai, on peut lancer lightdm sur la console en étant root. Le serveur X démarre et lightdm présente un écran de login. Le clavier est alors du type qwerty, c'est gênant pour les mots de passe. Mais cela se corrige avec un fichier /etc/X11/xorg.conf.d/00-keyboard.conf

# Xorg french keyboard settings
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "fr,us"
        Option "XkbVariant" "oss_latin9,"
EndSection

Si on veut démarrer X11 à chaque reboot, il faut activer le service lightdm.

# ln -s /etc/sv/lightdm /var/service

Mate est très lent à démarrer, il semble qu'Ubuntu avec xfce4 est plus réactif. L'utilisation après est correcte.

Configuration pour V4L

L'utlisation de webcams ou faire de la video nécessitent une interface /dev/v4l qu'il est nécessaire de configurer.

linux menuconfig
 Device Drivers  --->
    [M] Multimedia support 
          <*> Cameras/video grabbers support
          <*> Analog TV support 
          <*> Digital TV support 
          <*> HDMI CEC support
          <*> HDMI CEC RC integration
          <*> Media Controller API 
          <*> V4L2 sub-device userspace API
          <*> DVB Network Support

       <*> Media USB Adapters
          <*> GSPCA based webcams
             Pixart PAC207 USB Camera Driver
             Pixart PAC7302 USB Camera Driver
             Pixart PAC7311 USB Camera Driver
             SPCA501 USB Camera Driver
             SPCA505 USB Camera Driver
             SPCA506 USB Camera Driver
             SPCA508 USB Camera Driver
             
       <*> V4L platform devices
             Video Multiplexer 
             SoC camera support
             platform camera support

       <*> Memory-to-memory multimedia devices
             SuperH VEU mem2mem video processing driver



    [M] Graphics support  --->
        [M] DRM Support for Amlogic Meson Display Controller
            [M] HDMI Synopsys Controller support for Amlogic Meson Display
        [M] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
            [M] Enable legacy fbdev support for your modesetting driver

Configuration pour le son

La carte fournit ce qu'il faut pour gérer le son, par contre du coté Linux c'est du "Work In Progress". La version d'Ubuntu, citée plus haut, fournit du son avec un kernel fortement patché. Voir pour cela du coté khadas-vim.

Télécommande et détecteur infra rouge

La carte Tanix possede un récepteur infrarouge, connecté directement au processeur et controllé par le module meson-ir du noyau et est livrée avec une télécommande. Avant de le rendre opérationnel, une configuration du noyau est nécessaire.

linux menuconfig
Device Drivers
  Input device support 
     Generic input layer
     Event interface

  Remote Controller support
   Compile Remote Controller keymap modules
   LIRC user interface 

    Remote controller decoders
      Enable IR raw decoder for the xxx protocol

    Remote controller devices
       Amlogic Meson IR remote receiver
       Remote Control Loopback Driver

Le device tree est déjà renseigné. Mais on peut y rajouter cette information:

&ir {
        linux,rc-map-name = "rc-geekbox";
};

Après compilation, installation et un reboot les modules se chargent automatiquement et on peut faire quelques test:

# ls /sys/class/rc/
rc0

# cat /sys/class/rc/rc0/protocols
rc-5 [nec] rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp imon [lirc]

La modification du protocole peut se faire de la fçon suivante:

echo -n  rc-5 > /sys/class/rc/rc0/protocols

Le driver est accessible dans /dev/input/eventx ou x peut varier de 0 à 3. Un fichier /etc/udev/rules.d/10-meson-ir.rules permet de nommer définitivement le point d'accès en /dev/input/meson-ir et éventuellement donner des droits.

SUBSYSTEM=="input", ACTION=="add", KERNEL=="event*", ATTRS{name}=="meson-ir", SYMLINK+="input/meson-ir"

Lancer evtest, qui est un outil approprié pour tester et appuyer sur les touches de la télécommande:

# evtest /dev/input/event3
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "meson-ir"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 102 (KEY_HOME)
    Event code 103 (KEY_UP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 108 (KEY_DOWN)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 116 (KEY_POWER)
    Event code 139 (KEY_MENU)
    Event code 158 (KEY_BACK)
    Event code 352 (KEY_OK)
    Event code 375 (KEY_SCREEN)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
Testing ... (interrupt to exit)
Event: time 1543327812.287381, type 4 (EV_MSC), code 4 (MSC_SCAN), value 00
Event: time 1543327812.287381, -------------- SYN_REPORT ------------
Event: time 1543327812.395389, type 4 (EV_MSC), code 4 (MSC_SCAN), value 00
Event: time 1543327812.395389, -------------- SYN_REPORT ------------
Event: time 1543327818.843394, type 4 (EV_MSC), code 4 (MSC_SCAN), value 404001
Event: time 1543327818.843394, -------------- SYN_REPORT ------------
Event: time 1543327818.903394, type 4 (EV_MSC), code 4 (MSC_SCAN), value 404001
Event: time 1543327818.903394, -------------- SYN_REPORT ------------
Event: time 1543327832.907387, type 4 (EV_MSC), code 4 (MSC_SCAN), value 40404d
Event: time 1543327832.907387, -------------- SYN_REPORT ------------
Event: time 1543327832.963387, type 4 (EV_MSC), code 4 (MSC_SCAN), value 40404d
Event: time 1543327832.963387, -------------- SYN_REPORT ------------

Les gpios

La boite possède des gpios, mais ils ne sont pas accessibles en dehors de la boite. En cas de besoin, une extension par USB avec un processeur comme stm32 pourra les fournir.

Afficheur face avant

Voir la page de l'afficheur face avant.

Configuration pour openvpn

linux menuconfig
 Device Drivers  --->
    [*] Network device support  --->
        [*] Network core driver support
        <*>   Universal TUN/TAP device driver support
# ls /dev/net
tun

Récupération sortie uart

L'uart est une des premières interfaces actives après la mise sous tension, il permet de controler le démarrage de u-boot et du kernel. Sur la tanix, l'uart n'est pas disponible sur un connecteur externe, il faut donc aller le chercher.

4 trous de 1.55 mm dans le couvercle de fond permettent d'y enfoncer des broches (celles des supports de circuit intégré). Ces broches sont, ensuite, reliées par des fils soudés aux plots que l'on a découvert précédemment sur les photos, en évitant de trop chauffer, un peu de colle permet d'éviter que ça bouge.

Photo du dessous de la box après modif
photo du dessous de la box

L'adaptateur permet de sortir de dessous la box et de mettre les fils dans l'ordre pour se connecter à l'adaptateur de niveaux rs232 <-> 3.3 Volts ou un adaptateur USB <-> série 3.3 volts. Voir ici.

Adaptateur pour liaison série
photo de l'adaptateur

Avec cela et gtkterm sur le PC, on peut enregister la séquence de boot.

Login sur la liaison série

Pour se logguer par la liaison série, il faut activer le service agetty-ttyAML0.

cd /var/service
ln -s /etc/sv/agetty-ttyAML0

Cette commande suppose la machine en fonctionnement, ce qui n'est pas toujours le cas. Pour préparer l'opération sur la carte SD montée sur /mnt sur votre machine de développement, exécuter les commandes suivantes:

# cd /mnt/etc/runit/runsvdir/default/
# ln -s /etc/sv/agetty-ttyAML0

Le fichier de configuration /etc/sv/etc/sv/agetty-ttyAML0:

GETTY_ARGS="-L"
if [ -x /sbin/agetty -o -x /bin/agetty ]; then
	# util-linux specific settings
	GETTY_ARGS="${GETTY_ARGS} -8"
fi

BAUD_RATE=115200
TERM_NAME=xterm

Consommation

L'alimentation de la box se fait avec le bloc secteur 5V 2A fournit avec:

Tension secteur 240 V
Appareil Courant mA Puissance W
alim à vide 1 0.24
alim + Tanix Tx3 Max (au boot) 15 3.6

Test comparatif de la Tanix Tx3 Max avec UnixBench

On termine avec un petit test, effectué avec la même carte SD, avec UnixBench pour pouvoir comparer les caractéristiques des OS sur la même machine:

Tv box Tanix Tx3 Max
Operating System result 1 cpu Result n cpus Delta
Void Linux musl 375.2 945.9 +13.8 %
Ubuntu 4.16.1 amlogic Linux 329.6 832.7 0 % (Ref)

Références

  1. toolchains.bootlin.com.
  2. source u-boot.
  3. wiki Void Linux.
  4. source code commande afficheur face avant.
  5. source code commande afficheur face avant.
  6. Download image LibreElec autonome.
  7. Download image Ubuntu. Armbian_5.67_Aml-s9xxx_Ubuntu_bionic_default_4.19.0-rc7_desktop_20181117.img.xz (lien indirect)
  8. AiP1628 Datasheet- display controller en chinois
  9. PT6964 Datasheet- display controller (Lien indirect)
  10. Realtek RTL8723BS Combo Module