127 lines
2.6 KiB
Markdown
127 lines
2.6 KiB
Markdown
# Cross-Compilation Guide for ARM64
|
|
|
|
This guide explains how to cross-compile the framebuffer demo for ARM64 (aarch64) architecture, which is used by the R36 Ultra device.
|
|
|
|
## Prerequisites
|
|
|
|
### Install ARM64 Cross-Compiler
|
|
|
|
On Ubuntu/Debian:
|
|
```bash
|
|
sudo apt-get update
|
|
sudo apt-get install gcc-aarch64-linux-gnu
|
|
sudo apt-get install valac
|
|
```
|
|
|
|
### Verify Installation
|
|
```bash
|
|
aarch64-linux-gnu-gcc --version
|
|
```
|
|
|
|
## Compilation Methods
|
|
|
|
### Method 1: Using the Compile Script (Recommended)
|
|
|
|
```bash
|
|
./compile.sh arm64
|
|
```
|
|
|
|
This will:
|
|
1. Compile Vala code to C
|
|
2. Cross-compile C code to ARM64 using `aarch64-linux-gnu-gcc`
|
|
3. Create a statically-linked binary for ARM64
|
|
|
|
### Method 2: Manual Cross-Compilation
|
|
|
|
#### Step 1: Compile Vala to C
|
|
```bash
|
|
valac --pkg posix -C framebuffer_demo.vala
|
|
```
|
|
|
|
#### Step 2: Cross-compile C to ARM64
|
|
```bash
|
|
aarch64-linux-gnu-gcc framebuffer_demo.c -o framebuffer_demo \
|
|
$(pkg-config --cflags --libs glib-2.0 gobject-2.0) \
|
|
-static
|
|
```
|
|
|
|
### Method 3: Native Compilation (on R36 Ultra)
|
|
|
|
If you prefer to compile directly on the R36 Ultra device:
|
|
```bash
|
|
./compile.sh
|
|
```
|
|
|
|
## Verifying the Binary
|
|
|
|
Check the compiled binary architecture:
|
|
```bash
|
|
file framebuffer_demo
|
|
```
|
|
|
|
Expected output:
|
|
```
|
|
framebuffer_demo: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, ...
|
|
```
|
|
|
|
## Transferring to R36 Ultra
|
|
|
|
### Using SCP
|
|
```bash
|
|
scp framebuffer_demo user@r36ultra:/home/user/
|
|
```
|
|
|
|
### Using USB/SD Card
|
|
1. Copy `framebuffer_demo` to USB drive or SD card
|
|
2. Insert into R36 Ultra
|
|
3. Copy to device storage
|
|
|
|
## Running on R36 Ultra
|
|
|
|
```bash
|
|
chmod +x framebuffer_demo
|
|
sudo ./framebuffer_demo
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Cross-compiler not found
|
|
```bash
|
|
sudo apt-get install gcc-aarch64-linux-gnu
|
|
```
|
|
|
|
### Missing GLib dependencies
|
|
```bash
|
|
sudo apt-get install libglib2.0-dev
|
|
```
|
|
|
|
### Binary won't run on device
|
|
- Ensure you compiled for the correct architecture (ARM64/aarch64)
|
|
- Try static linking: add `-static` flag to gcc command
|
|
- Check device architecture: `uname -m` (should show `aarch64`)
|
|
|
|
### Permission denied on /dev/fb0
|
|
```bash
|
|
sudo ./framebuffer_demo
|
|
```
|
|
|
|
## Static vs Dynamic Linking
|
|
|
|
### Static Linking (Recommended for R36 Ultra)
|
|
- Binary includes all dependencies
|
|
- Larger file size
|
|
- No dependency issues on target device
|
|
- Use `-static` flag
|
|
|
|
### Dynamic Linking
|
|
- Smaller binary
|
|
- Requires compatible libraries on target device
|
|
- May have compatibility issues
|
|
- Remove `-static` flag
|
|
|
|
## Architecture Information
|
|
|
|
- **R36 Ultra**: ARM64 (aarch64)
|
|
- **Cross-compiler**: `aarch64-linux-gnu-gcc`
|
|
- **Target**: Linux ARM 64-bit
|