WIP: novembre 2018.
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.
Voici les caractéristiques principales de la box Tanix Tx3 Max:
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.
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:
Noter les 4 pads sur le coté droit de l'image. Il s'agit des points de connection de l'uart.
Le marquage concernant la prise uart est caché. Il faut lire, de bas vers le haut: GND TX RX VCC.
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.
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 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.
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
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.
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
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.
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.
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
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:
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;
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 !
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.
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
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:
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
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 :
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 !.
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:
Pour avoir un login sur la console, il faut activer le service agetty-tty1.
# ln -s /etc/sv/agetty-tty1 /var/service
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.
L'utlisation de webcams ou faire de la video nécessitent une interface /dev/v4l qu'il est nécessaire de configurer.
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.
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.
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 ------------
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.
Voir la page de l'afficheur face avant.
# ls /dev/net tun
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.
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.
Avec cela et gtkterm sur le PC, on peut enregister la séquence de boot.
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
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 |
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) |