263 lines
6.6 KiB
Markdown
Executable File
263 lines
6.6 KiB
Markdown
Executable File
# GL-AX1800 (Flint1) SDK Research and Cross-Compilation Strategy
|
|
|
|
**Date:** 2026-01-11
|
|
**Device:** GL-AX1800 (Flint 1)
|
|
**SoC:** Qualcomm IPQ6000 (Quad-core ARM @ 1.2GHz)
|
|
|
|
## Architecture Confirmation (CORRECTED)
|
|
|
|
> [!IMPORTANT]
|
|
> **Confirmed from actual hardware:**
|
|
> - **Flint1 (GL-AX1800)**: ARMv7 rev 4 (v7l) - **32-bit ARM**
|
|
> - **Flint2 (GL-MT6000)**: ARMv8 rev 4 (v8l) - **64-bit ARM (aarch64)**
|
|
>
|
|
> These are **different architectures** and require **separate binaries**.
|
|
|
|
### Architecture Details
|
|
|
|
**GL-AX1800 (Flint1):**
|
|
- CPU: ARMv7 Processor rev 4 (v7l)
|
|
- Instruction set: 32-bit ARM
|
|
- Typical target triplet: `arm-linux-musleabihf` or `armv7l-linux-musleabihf`
|
|
|
|
**GL-MT6000 (Flint2):**
|
|
- CPU: ARMv8 Processor rev 4 (v8l)
|
|
- Instruction set: 64-bit ARM (aarch64)
|
|
- Typical target triplet: `aarch64-linux-musl`
|
|
|
|
---
|
|
|
|
## SDK Options for GL-AX1800 (ARMv7)
|
|
|
|
### Option 1: Pre-built musl.cc Toolchain (RECOMMENDED for Quick Start)
|
|
|
|
**Source:** https://musl.cc/
|
|
|
|
#### Relevant Toolchains
|
|
- `armv7l-linux-musleabihf-cross.tgz` (ARMv7, hard-float)
|
|
- `arm-linux-musleabihf-cross.tgz` (Generic ARM, hard-float)
|
|
|
|
**Download:**
|
|
```bash
|
|
wget https://musl.cc/armv7l-linux-musleabihf-cross.tgz
|
|
tar -xzf armv7l-linux-musleabihf-cross.tgz
|
|
export PATH=$PWD/armv7l-linux-musleabihf-cross/bin:$PATH
|
|
```
|
|
|
|
#### Advantages
|
|
- Quick setup (download and extract)
|
|
- Modern GCC (13.2+) with C++23 support
|
|
- Proven for static binary compilation
|
|
- Small download (~40-50MB compressed)
|
|
|
|
#### Disadvantages
|
|
- Not optimized for IPQ6000 specifically
|
|
- Generic ARMv7 (not Cortex-A7 specific)
|
|
|
|
---
|
|
|
|
### Option 2: musl-cross-make (Build Your Own)
|
|
|
|
**Source:** https://github.com/richfelker/musl-cross-make
|
|
|
|
#### Configuration for ARMv7
|
|
```makefile
|
|
TARGET = armv7l-linux-musleabihf
|
|
# or: arm-linux-musleabihf
|
|
GCC_VER = 14.2.0
|
|
MUSL_VER = 1.2.5
|
|
LINUX_VER = 6.6.y
|
|
GCC_CONFIG += --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard
|
|
```
|
|
|
|
#### Advantages
|
|
- Full control over toolchain versions
|
|
- Can build latest GCC 14+ for C++23
|
|
- Optimize for Cortex-A7 specifically
|
|
- Creates musl-based static-friendly toolchain
|
|
|
|
#### Disadvantages
|
|
- Time-consuming build (30-60 minutes)
|
|
- Requires build dependencies
|
|
- More complex setup
|
|
|
|
---
|
|
|
|
### Option 3: GL.iNet SDK (NOT RECOMMENDED)
|
|
|
|
**SDK:** `ipq807x-2102`
|
|
**GCC:** 5.5.0 (Too old)
|
|
**Architecture:** arm_cortex-a7 (32-bit)
|
|
|
|
#### Why Not Use This?
|
|
- ❌ GCC 5.5.0 cannot compile C++23 (btop)
|
|
- ❌ Outdated toolchain from ~2017
|
|
- ❌ Build failures documented in `agent-notes/glax1800-build-results.md`
|
|
- ✅ Correct architecture (ARMv7), but toolchain too old
|
|
|
|
---
|
|
|
|
## Compilation Requirements
|
|
|
|
### btop Requirements
|
|
|
|
**Language:** C++23
|
|
**Minimum GCC:** 11 (experimental), **14+ recommended** (full support)
|
|
**Dependencies:** None (headers only)
|
|
**Build System:** Make or CMake
|
|
**Static Linking:** Fully supported with musl
|
|
|
|
#### Build Strategy
|
|
```bash
|
|
# With OpenWrt SDK
|
|
make STATIC=true VERBOSE=true CXX=aarch64-openwrt-linux-musl-g++ \
|
|
CXXFLAGS="-static -std=c++23 -O3" LDFLAGS="-static"
|
|
```
|
|
|
|
---
|
|
|
|
### mosh Requirements
|
|
|
|
**Language:** C++14
|
|
**Build System:** Autotools (./configure)
|
|
**Dependencies (must be cross-compiled):**
|
|
- **protobuf** 3.x (C++ library, requires host protoc)
|
|
- **ncurses** 6.x (terminfo)
|
|
- **OpenSSL** 1.1.x (or omit with `--without-crypto`)
|
|
- **zlib** (compression)
|
|
|
|
#### Build Strategy (Multi-Stage)
|
|
|
|
1. **Build host protoc** (x86_64)
|
|
```bash
|
|
cd protobuf-3.17.3
|
|
./configure --prefix=/usr/local
|
|
make && sudo make install
|
|
```
|
|
|
|
2. **Cross-compile protobuf libraries**
|
|
```bash
|
|
./configure --host=aarch64-linux-musl --prefix=$PWD/sysroot \
|
|
--with-protoc=/usr/local/bin/protoc \
|
|
CXXFLAGS="-static" LDFLAGS="-static"
|
|
make && make install
|
|
```
|
|
|
|
3. **Cross-compile ncurses**
|
|
```bash
|
|
./configure --host=aarch64-linux-musl --prefix=$PWD/sysroot \
|
|
--without-shared --with-normal --without-debug
|
|
make && make install
|
|
```
|
|
|
|
4. **Build mosh** (static)
|
|
```bash
|
|
./configure --host=aarch64-linux-musl \
|
|
PKG_CONFIG_PATH=$PWD/sysroot/lib/pkgconfig \
|
|
CXXFLAGS="-static" LDFLAGS="-static -pthread" \
|
|
--without-crypto # Optional: skip OpenSSL
|
|
make
|
|
```
|
|
|
|
#### Existing Build Environment
|
|
The `src/mosh/` directory already has:
|
|
- `env.sh` - Cross-compilation environment
|
|
- `sysroot/` - Custom libraries
|
|
- `host_protoc/` - Host protobuf compiler
|
|
- Built static binaries (for aarch64)
|
|
|
|
✅ **This can likely be reused or adapted!**
|
|
|
|
---
|
|
|
|
## Recommended Approach (CORRECTED)
|
|
|
|
### Phase 1: Toolchain Setup
|
|
|
|
**Use musl.cc pre-built ARMv7 toolchain for fastest results:**
|
|
|
|
```bash
|
|
cd /home/user/Public/Projects/OpenWRT/sdk/
|
|
|
|
# Download ARMv7 hard-float toolchain
|
|
wget https://musl.cc/armv7l-linux-musleabihf-cross.tgz
|
|
tar -xzf armv7l-linux-musleabihf-cross.tgz
|
|
|
|
# Add to PATH
|
|
export PATH=$PWD/armv7l-linux-musleabihf-cross/bin:$PATH
|
|
|
|
# Verify
|
|
armv7l-linux-musleabihf-gcc --version
|
|
```
|
|
|
|
---
|
|
|
|
### Phase 2: Build btop for ARMv7
|
|
|
|
```bash
|
|
cd /home/user/Public/Projects/OpenWRT/src/btop
|
|
|
|
# Clean previous builds
|
|
make clean
|
|
|
|
# Build static for ARMv7
|
|
make STATIC=true \
|
|
CXX=armv7l-linux-musleabihf-g++ \
|
|
CXXFLAGS="-static -std=c++23 -O3 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard" \
|
|
LDFLAGS="-static"
|
|
|
|
# Verify architecture
|
|
file bin/btop
|
|
# Should show: ELF 32-bit LSB executable, ARM, EABI5
|
|
|
|
# Copy to flint1 binaries
|
|
cp bin/btop /home/user/Public/Projects/OpenWRT/binaries/flint1/btop/
|
|
```
|
|
|
|
---
|
|
|
|
### Phase 3: Build mosh for ARMv7
|
|
|
|
Mosh requires cross-compiling dependencies. Two options:
|
|
|
|
#### Option A: Adapt Existing Environment
|
|
|
|
The `src/mosh/` directory has a working setup for aarch64. Update it for ARMv7:
|
|
|
|
```bash
|
|
cd /home/user/Public/Projects/OpenWRT/src/mosh
|
|
|
|
# Update environment
|
|
export PATH=/path/to/armv7l-linux-musleabihf-cross/bin:$PATH
|
|
export CC=armv7l-linux-musleabihf-gcc
|
|
export CXX=armv7l-linux-musleabihf-g++
|
|
export AR=armv7l-linux-musleabihf-ar
|
|
export RANLIB=armv7l-linux-musleabihf-ranlib
|
|
|
|
# Rebuild protobuf for ARMv7
|
|
# (Host protoc already built)
|
|
|
|
# Configure mosh
|
|
./configure --host=armv7l-linux-musleabihf \
|
|
CXXFLAGS="-static" \
|
|
LDFLAGS="-static -pthread" \
|
|
--without-crypto
|
|
|
|
make clean && make
|
|
```
|
|
|
|
#### Option B: Fresh Build
|
|
|
|
Follow multi-stage process from research document (protobuf → ncurses → mosh).
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ **Verify architecture** - Confirmed ARMv7 (32-bit ARM) vs ARMv8 (aarch64)
|
|
2. ⏭️ **Download ARMv7 toolchain** - Use musl.cc armv7l-linux-musleabihf
|
|
3. ⏭️ **Build btop** - Static ARMv7 binary with modern GCC
|
|
4. ⏭️ **Build mosh** - Cross-compile dependencies + static linking
|
|
5. ⏭️ **Create .ipk packages** - Package for opkg installation
|
|
6. ⏭️ **Test on hardware** - Verify on actual GL-AX1800
|