GL-AXT1800 with NodeJS

I’ve read all that I can find on these forums about NodeJS. Some people have been able to get it working on some devices but I think that is very device specific. I’m hoping I can get some help with this.

First of all, the reason I want to run NodeJS on the AXT1800 is so that I can run SignalK, a webserver that gathers instrument data from my sailboat and will store/broadcast it in various forms. I want to put all of this into my wifi router so that I don’t need multiple devices and can limit the power utilization on the sailboat.

I chose the AXT1800 as it fulfills all my other needs on the boat (wifi and a few WAN/LAN ports) and it has a sdcard slot where I could store nodejs and the database for signalk.

I’ve now done more experimentation with the AXT1800 and I’ve found that there are no packages for node on GL.iNet. I considered using OpenWRT vanilla and installing their node package but it looks like they don’t have one for armv7l which is used in the axt1800.

I tried installing nodejs using the prebuilt armv7l binaries for linux but that doesn’t work (reports node:file not found when trying to run node).

Has anyone had success with node on a wifi router, or does anyone have any suggestions on what I should be looking for if the AXT1800 isn’t the right choice?

There is a forum member (@solidus1983) who compiles different packages and images for AXT1800 and AX1800 on his website: https://flint.solidus1983.duckdns.org

check it out.

Thanks Spitz. I saw this in another thread as well where I was considering the route of using vanilla OpenWRT however I would still have the issue of not having a NodeJS compiled for the axt1800. @solidus1983, do you know if building the nodejs and node-npm packages for your images would work?

How did you find that? Please execute the following to find your exact arch:

root@GL-X3000:~# cat /proc/cpuinfo  
processor	: 0
model name	: ARMv8 Processor rev 4 (v8l)
BogoMIPS	: 26.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 1
model name	: ARMv8 Processor rev 4 (v8l)
BogoMIPS	: 26.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

root@GL-X3000:~# opkg update
Downloading https://fw.gl-inet.com/releases/v21.02.3/kmod-4.4**/aarch64_cortex-a53**/mediatek/x3000/Packages.gz
.....................................................
Database update completed.

 file /sbin/fw3 
/sbin/fw3: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, no section header

**strong text**

So for my router the arch is: aarch64_cortex-a53

Once you find your arch, you can download node form Openwrt:
https://downloads.openwrt.org/releases/22.03.5/packages/
https://downloads.openwrt.org/releases/22.03.5/packages/aarch64_cortex-a53/packages/node_v16.20.0-1_aarch64_cortex-a53.ipk

No need for vanilla. You can easily find them online. Otherwise cross compile them in a virtual machine.

My builds compile everything openwrt has to over this includes nodejs and node npm which is at version 18.

packages (solidus1983.duckdns.org) Just do a search for node.

Here is my arch from the command you listed:

processor : 0
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 72.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x51
CPU architecture: 7
CPU variant : 0xa
CPU part : 0x801
CPU revision : 4

processor : 1
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 72.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x51
CPU architecture: 7
CPU variant : 0xa
CPU part : 0x801
CPU revision : 4

processor : 2
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 72.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x51
CPU architecture: 7
CPU variant : 0xa
CPU part : 0x801
CPU revision : 4

processor : 3
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 72.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x51
CPU architecture: 7
CPU variant : 0xa
CPU part : 0x801
CPU revision : 4

Hardware : Qualcomm Technologies, Inc IPQ6000
Revision : 0000
Serial : 0000000000000000

Hey @solidus1983 thanks again for compiling all of these packages and the firmware. Do these packages all run on the AXT1800? The package name for node is

I looked up cortex-a53 and it says that is v8l, not v7l. Is that just the naming?

No this is using Kernel 5.15 aarch64 hence it’s armv8 and not armv7.

Whilst QSDK and GL-iNet uses kernel 4.4.60 which is armv7 32bit.

Your kernel 5.15 wouldn’t work on the AX1800/AXT1800, right? Because the AXT1800 is v7l? Or am I missing something and I can use your 5.15 kernel from here on my AXT1800 and then use the packages from here to install the nodejs package?

The IPQ6000 SOC is an ARM 8.1 soc, thus aarch64 works perfectly fine on both Flint and Slate AX.

The ARM7 images on Kernel 4.4.60 can also be made as aarch64.

As for the second question you use my firmware yes and then use opkg to install node stuff

Amazing! Thank you for all your help! I was able to install your firmware and the nodejs package and tldr I have signalk installed and everything is working well.

To follow up on my original post I was able to install the new firmware provided by solidus.
After installing the firmware and inserting my sdcard I followed the instructions here to set up extroot: [OpenWrt Wiki] Extroot configuration
NOTE: To install signalk I needed to use a portion of my sdcard as swap (see here
I installed the node and node-npm packages using opkg install node node-npm. Install went fine and pulled packages from solidus’s site.
I was then able to install signalk using npm install signalk-server
SignalK needs a user, so I added shadow-useradd
SignalK seems to expect /home/[signalkuser] to exist, so I created that
Started up SignalK and everything seems to work!

1 Like