I grabbed the strace, and looked at the things I'd look first: accesses to character devices and pseudofiles. (Essentially variants of
grep -ne /dev/ -e /proc/ -e /sys/ 'strace phoenix.txt', where the
-n option enables line numbers, so I can refer to those easily.)
Running
ldd binaryname would reveal the dynamic library dependencies directly. It obviously uses FreeType for rendering text, but the
libanolis.so.0 got me stumped. I wonder if it is Hantek's internal GUI library or what. Other than that, the lib references I see are typical compression and image format stuff, SQLite3 for file-based database stuff, C++ standard library 6.0.21, libsigc++, expat XML library, and so on.
Lines 187-190 show that the process opens the raw framebuffer, and memory-maps 768000 bytes of it, after getting the framebuffer information. I'd wager it's a 16-bit truecolor (R5G5B5 or R5G6B5) 800×480 framebuffer; the numbers match.
Around line 1292, we can see the
/dso/etc/load_fpga_kb.sh script is used to ensure the FPGA kernel module is loaded. At lines 1369-1370, we see that the FPGA character device driver
/dev/tn652_fpga_cfg is only used to tell it which firmware file to load, by writing the firmware file name (
psram_board_test.fs.bin) and nothing else.
From line 1584 onwards, you can see that the process uses configfs (another pseudofilesystem like sysfs and procfs, dedicated for kernel stuff) to configure the USB gadget
/sys/kernel/config/usb_gadget/g1, so that the system will appear as an USB device when connected to another host, using the standard Linux USB gadget driver.
Note that seems to use musb_hdrc, Inventra Highspeed Dual Role Controller, as used on e.g. Allwinner SOCs.
From line 1906 onwards, we can see how GPIO pins are configured and used. Another set continues at line 2873.
At and after line 1998, we can see that the process opens
/dev/input/event0, which happens to be an
afg3050_kbd type
Linux Input device. As I understand it, AFG3050 is an FPGA, so the afg3050_kbd driver obviously implements an event device for the "keyboard" on the device. Normally,
events (16 bytes per
struct input_event) are only
read from the device (the
uinput device being special one, allowing one to create input event devices in software), but there are a LOT of writes to this device... intriguing.
At and after line 2859, we can see that the
/dev/spidev1.0 character device is used a lot. This is a Linux
spidev device node, controlling a SPI bus; this part also mixes in some GPIO pin stuff. Poor gpiochip0 pin gpio135 seems to be pulsed at 33Hz for a while.
To get any further, one would need to know what to look for. For example, see what the process does when stuff is manipulated; or see how different bootups differ.