Jump to content

Tigermedia Tigerbox TOUCH (tigermedia-tigerbox)

From postmarketOS Wiki
🚧 This page is a work-in-progress. Some information contained within may be inaccurate or incomplete.
Tigermedia Tigerbox TOUCH
Neofetch running on a tigerbox over SSH (click to expand)
Neofetch running on a tigerbox over SSH (click to expand)
Manufacturer Tigermedia
Name Tigerbox TOUCH
Codename tigermedia-tigerbox
Released Not sure, around 2017 or so
Type embedded
Hardware
Chipset Rockchip RK3128
CPU 4x 1.2 GHz ARM Cortex-A9
GPU Mali-400 MP2
Display -
Storage 8 GB
Memory 512 MB (2x 256MB DDR3L SDRAM)
Architecture armv7
Software
Original software
The software and version the device was shipped with.
Android 5.1
Extended version
The most recent supported version from the manufacturer.
Android
postmarketOS
Category testing
Mainline
Instead of a Linux kernel fork, it is possible to run (Close to) Mainline.
yes
pmOS kernel
The kernel version that runs on the device's port.
-
Unixbench score
Unixbench Whetstone/Dhrystone score. See Unixbench.
506.9
Features
Flashing
It is possible to flash the device with pmbootstrap flasher.
Broken
Internal storage
eMMC, SD cards, UFS, ...
Untested
SD card
Also includes other external storage cards
Untested
Battery
Charging and battery level reporting works
Works
Screen
Display works. Ideally with sleep mode and brightness control.
Partial
Touchpad
Build in Touchpad
Untested
Stylus
Untested
Multimedia
Audio
Audio playback, microphone, headset and buttons.
Untested
Camera
Untested
IR TX
Untested
IR RX
Untested
Connectivity
WiFi
Works
Bluetooth
Untested
Ethernet
Untested
GPS
Untested
NFC
Near Field Communication
Untested
Modem
Calls
Untested
SMS
Untested
Mobile data
Untested
Miscellaneous
FDE
Full disk encryption and unlocking with unl0kr.
Untested
USB-A
Full-sized USB-A port works (Usually applicable to SBCs and laptops).
Untested
USB OTG
USB On-The-Go or USB-C Role switching
Untested
HDMI/DP
Video and audio output with HDMI or Display Port works.
Untested
Sensors
Ambient Light
Untested
Proximity
Untested
Hall Effect
Also known as flip cover sensor
Untested
Haptics
Untested
Barometer
Sensor to measure air pressure
Untested
Power Sensor
Sensor to monitor current, voltage and power. Not fuel gauge!
Untested
Warning WARNING: Installations on this device are only happening in a seperate chroot with openRC enabled.

Contributors

Users owning this device

  • User0 (Notes: running pmOS in a chroot.)


Warning WARNING: The bootloader cannot really be unlocked, you'll still need signed images

How to flash the device / How to "unlock" the Bootloader

Unlocking the device is possible and really easy -

You need:
ADB with fastboot
A paperclip
A USB cable

How to unlock: Insert the paperclip into device in shutdown state - power it on, it'll enter recovery mode. From there, run:

adb reboot fastboot

now in fastboot, unlock it:

fastboot oem unlock
fastboot oem unlock_accept

Now flashing is impossible (remote: 'not support "-u" option'), so we got to use ADB for that... Note: you need to run unlock_accept in 5 seconds after running unlock.

Using ADB

Boot into recovery mode as described above.

To gain access to /dev, use

adb root

(You *will* get a timeout error, this is safe to ignore)

To pull a partiton:

adb pull /dev/block/mmcblk0pX partition.img

To push it:

adb push partition.img /dev/block/mmcblk0pX

Known partitions:

/dev/block/mmcblk0p12 - system
/dev/block/mmcblk0p14 - userdata
/dev/block/mmcblk0p6 - boot
/dev/block/mmcblk0p7 - recovery (probably)

Installation (sort of)

Warning WARNING: Fully installing postmarketOS on this device is *NOT* possible! What we'll do here is installing postmarketOS on the userdata partition, chroot into it on startup, and run OpenRC. This is not the way pmOS is meant to be used, do not rely on this hacky setup, and do not expect any support with it!
Notice From what I know, this is the only way to get pmOS somewhat working. The bootloader is fully locked down, at BootROM level. There is no way to flash unsigned images.

Start by running pmbootstrap init. Create a new port, put tigermedia as manufacturer, and tigerbox as device codename. Select embedded as category, select yes when it asks if the device has external storage, select OpenRC as init and wpa_supplicant for networking, and none as flashing method. The other values should not really matter. Now, pmbootstrap should have generated two aports: device-tigermedia-tigerbox and linux-tigermedia-tigerbox. Delete the linux aport. In your device package's APKBUILD, replace linux-tigermedia-tigerbox with linux-lts. Now checksum and build the device package:

pmbootstrap checksum device-tigermedia-tigerbox
pmbootstrap build device-tigermedia-tigerbox

After that, you can run pmbootstrap install. While pmbootstrap is running, you can prepare the device. First, pull the system partition as described in Using ADB. Then, mount the system partition, e.g. like this:

mkdir /mnt/system
mount system.img /mnt/system

After it's been mounted, you need to enable ADB. Open the build.prop file in the root directory of the system partition with any text editor, and locate the line persist.sys.usb.config=charging. Replace charging with mtp,adb, and paste the two lines below anywhere in the build.prop file:

persist.service.adb.enable=1
persist.service.debuggable=1  

Now, unmount the partition and push it back to the device, e.g.:

umount /mnt/system
adb root
adb push system.img /dev/block/mmcblk0p12

Now wait for pmbootstrap to finish. Once it's done, export the generated image and extract the rootfs from it:

pmbootstrap export
sudo losetup -Pf $(readlink /tmp/postmarketOS-export/tigermedia-tigerbox.img)
sudo dd if=/dev/loopXp2 of=/some/path/for/the/rootfs.img # replace directories with correct ones

Now flash the image to the device. First boot recovery mode as described above, then gain root and push the rootfs to the userdata partition, and reboot the device

adb root
adb push rootfs.img /dev/block/mmcblk0p14
adb reboot

Now, you are ready to configure the device. First, we need to create five scripts. Create them on your host for now, mark them as executable! (e.g. chmod +x). Here are my reference ones for XFCE4. Their function should be obvious.

lmkd
#!/system/bin/sh
# simple wrapper for pmos-boot, gets executed by android on startup
su -c "pmos-boot"
pmos-boot
#!/system/bin/sh
# initialize pmos, ensure android keeps getting kiled
while true
do
    busybox pkill -9 surfaceflinger
    busybox pkill -9 wpa_supplicant_rtl
    busybox pkill -9 zygote
    busybox pkill -9 bootanimation
done &
# bind
mount -o bind /dev /data/dev
mount -o bind /dev/pts /data/dev/pts
mount -o bind /proc /data/proc
mount -o bind /sys /data/sys
mount -t tmpfs tmpfs /data/run || true
mount -t tmpfs tmpfs /data/tmp || true
# execute init
cp /system/bin/pmos-init /data/bin/pmos-init
busybox chroot /data /bin/pmos-init
# loop forever in case we get an exit
while true
do
    sleep 1
done
pmos-chroot
#!/system/bin/sh
# chroot into pmos
cp /system/bin/pmos-sub-chroot /data/bin/pmos-sub-chroot
busybox chroot /data /bin/pmos-sub-chroot
pmos-init
#!/bin/ash
# Starts the RC services on runlevel default. Attempts to run CHANGEME! desktop environment
# set PATH
export PATH='/sbin:/bin:/usr/bin'
# prepare for xorg and openrc
ln -sf /dev/graphics/fb0 /dev/fb0
rm -rf /run/openrc/clock-skewed
touch /run/openrc/softlevel || true
# flush the framebuffer
cat /dev/urandom > /dev/fb0
# run services on runlevel default
openrc default
# wait 0.75 secs to ensure all services are running
sleep 0.75
# ensure lightdm is dead. it does not work but sometimes reserves the framebuffer.
service lightdm stop &> /dev/null || true # not working because of udev, CHANGEME?
pkill -9 lightdm || true # CHANGEME
pkill -9 X || true
rm -rf /tmp/.X0-lock || true
# flush the framebuffer
cat /dev/zero > /dev/fb0
# start CHANGEME! desktop
startxfce4 # CHANGEME: replace with your desktop
# === X.org died ===
# loop so the script doesnt exit
while true
do
    service lightdm stop &> /dev/null || true # not working because of udev, CHANGEME?
    pkill -9 lightdm || true # CHANGEME
    pkill -9 X || true
    rm -rf /tmp/.X0-lock || true
    startxfce4
done
pmos-sub-chroot
#!/bin/ash
# export PATH and run ash
export PATH='/sbin:/bin:/usr/bin'
ash

Once you've created them all, push them to your running device one by one. Double-check if you marked them all as executable. The device needs to be fully booted, not in recovery mode or similar. After pushing, reboot to initialize pmOS for the first time:

adb root
adb push lmkd /system/bin/lmkd
adb push pmos-boot /system/bin/pmos-boot
adb push pmos-chroot /system/bin/pmos-chroot
adb push pmos-init /system/bin/pmos-init
adb push pmos-sub-chroot /system/bin/pmos-sub-chroot
adb reboot

Wait for the device to boot.

Now, enter a shell

adb shell

Inside the shell, ensure you are root. If you aren't, use su to become root. Then, run pmos-chroot. You'll enter pmOS. From there, you might want to resize your root partition's filesystem to the ~5GB of the userdata partition.

sudo /usr/sbin/resize2fs /dev/block/mmcblk0p13

Now, do anything you want. To connect to WiFi, use wpa_cli. This Arch Linux wikipage is a great starting point. You might also want to enable SSH over WiFI as SSH over USB does not work. After you've did everything you wanted to do, reboot the device over ADB:

adb reboot

Now you are free to use your pmOS installation.

See also