Cross-compile for arm S905x (LePotato)

  • Hello everybody!

    I am very glad that people are active on this forum and hope that someone will give me some pointers. This will be another hyperion topic.

    I have been fiddling with hyperion for quite a while. I am trying to run it on my Aml LePotato board with a WS2801 led strip and LibreElec. It turned out that the existing hyperion packages created for AML devices do not support SPI (it is a switch in the cmake of hyperion that is turned off by default when compiling for AML devices). So I am trying to cross-compile hyperion with the switch on, on my Debian

    I have a software development background, but cross-compiling for ARM is new to me. I followed the steps for cross-compilation from

    CrossCompileHowto.txt (which may be a bit outdated). Here are the steps I've taken and the error that bugs me:

    Now a couple of points:

    * For step 1, I couldn't really install the packages (and probably that is the real problem), since LibreElec is plain vanilla linux without a package manager.

    * For step 13, I tried rsync-ing, but there wasn't rsync on the board. I installed the network-tools addon which has rsync, but still, I couldn't make it work. So I just copied the folders with scp.

    * For step 19, What I read of the error is that there isn't QT4Core on the target filesystem (the copied /usr and /bin). I double checked and they aren't there.

    So my questions are:

    1. How do I have to proceed? Is there a "development" version of LibreElec which has installed dev packages and is used for compiling addons? Or do I have to decompress raw packages (with arm binaries and shared objects) in the "right" rootfs subfolders.

    2. I didn't find any qt related binaries and .so's in the LibreElec file system on my board, is everything linked statically or I just don't have an installed addon that uses them?

    3. I read in this forum that the SPI drivers for AML boards aren't behaving well. Does this still hold true?

    I am sorry for the long post. I have spent quite a bit of time understanding how everything works, but I feel like I am really close.

    Thanks for reading,

    Stan

  • Thank you, vpeter! I wish I asked earlier. I will write back with the result.

    About the SPI_DEV, it is not enabled by default and I was getting a - "An unknown/unimplemented device" when I installed the packaged hyperion for AML (the WeTek archive). I investigated a bit and found that the SPI_DEV switch is off when compiling for AML boards. I will enable it when I compile the addon.

    Thank a bunch!

    Stan

  • I read the guides last night and downloaded the dependencies. I ran today the create_addon script the the params for the LePotato. It downladed hyperion-1d125d8df863ad176002f591d72dbba79ce9be63. The CMakeLists.txt (line 17) inside of the hyperion dir has option DEFAULT_SPIDEV which is turned on depending on the platform that it compiled for.

    I am still compiling the whole LibreElec, but it all seems very promising! I am so happy I am finally progressing.

    Thanks again!

  • Ah, I see now what you meant! I was trying to install hyperion from HyperCon (the config gui), which maybe has an obsolete version for LePotato / LibreElec. I will try to install it directly from the repository. And will write back.

  • Just an update.

    It did not work with the hyperion package from the repository. I "hacked" it a bit and made sure that I the flag is set by the package.mk of hyperion.

    I changed it from/to:

    Code
    PKG_AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=0"
    Code
    PKG_AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=1 -DENABLE_SPIDEV=1"

    I did not get the error now. Hyperion starts correctly, I can connect with the mobile app, I can not change colors yet. I will work on that in the next few days. So compile mission is successful :)

  • Hello again!

    I just tested installing the compiled addon (without any modifications of the addon source and packaging) and everything went perfect. The hyperion starts just fine. I also tried installing the addon from the repository which also went perfectly. In the end it was just a silly mistake on my end.

    And about the led strip not changing colours, I just found out that on the LePotato box there is no /dev/spidev (ls /dev shows no such devices). After a brief search it turned out that the spi support on the LePotato is on its way and it is currently only possible by modifying device tree bindings (for which I know very little). I just think my setup is rare and very few people have struggled with it - LePotato + LibreElec + hyperion + WS2801 strip.

    Thank for bearing with me, vpeter. I wouldn't be able to get to this point without your help.

    Stan

  • 2Lame2bTrue you could try to use an Arduino instead of the SPI.

    Something like this: Ambilight on the ODROID-C2 Using LibreElec: Adapting the Ambilight for the ODROID-C2 | ODROID Magazine

    So, only upload the firmware to the Arduino, connect it with USB to the LePotato and change the Hyperion config output to "/dev/ttyUSB0". And then it should work.

    The Odroid C2 needs an Arduino as well, and the LEDs are changing correctly. Unfortunatly it suffers some Softwarebugs... Maybe the S905x chip works better.

  • Thanks for the hint, qwasy! I have an Intel Galileo lying around that is very similar to the arduino and uses the same sketches, so I might give that a go, or even I could buy one, they are not that expensive. Thanks for the hint again!

  • You're welcome^^

    I'm interessted in the result as well, since I'm planning to upgrade from a RPI3, but at the moment all the AML Boxes suffer some slowdowns, which are annoying :/

  • I had been pretty busy last week, but I fiddled with it today. It turned out that the FastLED library can not be compiled for Intel Galileo. I think I can borrow Arduino Uno board from a friend and test it. I will post back the results.

  • Just a quick update. I got an arduino board and uploaded the sketch. It does not work correctly as it is made for Adalight leds. There is some kind of negotiation happening in the sketch(Ada light magic words, etc) that I can not get through with a WS2801 led strip. I need to research a bit - can I just send the light data of WS2801 to /dev/ttyACM0 (thats the usb to which I have connected the arduino) and read it from the arduino. Or if the existing mechanism is just for Adalight (I guess it is universal but still, I have to do my homework). Also I need to check how the data for the ws2801 is sent over usb and unpack it the same way in the arduino sketch. Also I have to find out the right settings in the hyperion.config, but that will be easy.

    I will post again when I have more information.

  • Normaly, you can just send the light data to the arduino, and it will set the leds accordingly.
    [DIY] Amblight project/guide - Hyperion - WS2801/ WS2812B / APA102 | Hyperion - Forum there's a tutorial on how to use an arduino. It's just flashing the code from step 4 ( with own settings for the number of leds, and the type of LEDs, in this case the WS2801) and /dev/ttyACM0 in the hyperion.config as output should be enough to make it happen, I guess^^

  • Thanks for the link. These bits made me think its just for Adalight:

    Code
    // Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
    uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
    
    Serial.begin(serialRate);
    Serial.print("Ada\n"); // Send "Magic Word" string to host

    Maybe it is universal. Yesterday I gave it a go a couple of times with different settings. I will fiddle with it now.

    Edited once, last by 2Lame2bTrue (March 31, 2019 at 7:27 PM).