Bring-up tooling, static C helpers, and OpenRC service scripts for converting a bare Vestel Venus 5.5x (VSP355s) motherboard into a headless Alpine Linux node with USB RNDIS networking, Dropbear SSH, Qualcomm WCNSS/Pronto Wi-Fi, persistent ext4 storage, and a working apk package manager.
The target is a bare board with no display, no touchscreen, no battery, and no accessible UART pins — every diagnostic probe, kernel ramdisk replacement, and rootfs deployment was executed exclusively over Qualcomm EDL (05c6:9008) and USB.
Hardware Specifications
| Component | Specification | Details |
|---|---|---|
| Model | Vestel Venus 5.5x (VSP355s) |
Reference board family MSM8226 |
| SoC | Qualcomm Snapdragon 400 (MSM8926) |
4× ARM Cortex-A7 (armv7l, 32-bit), Adreno 305 |
| RAM | 1 GB LPDDR2/3 | 848 MB usable by the stock 3.4.0 kernel |
| Storage | 14.6 GiB eMMC | 30,535,680 × 512 B sectors across 25 partitions |
| Wireless | Qualcomm WCNSS / Pronto (Prima) | Activated via custom userspace firmware loader helper |
| Debug Interface | Qualcomm EDL (05c6:9008) |
Triggered via Volume Up + Volume Down on USB VBUS |
Hardware & Feature Support Status
| Feature | State | Notes |
|---|---|---|
| EDL Access & Full Backup | Working | Firehose prog_emmc_firehose_8x26.mbn (--sectorsize=512) |
Custom Static PID 1 (/init) |
Working | Static ARMv7 ELF in boot.img ramdisk (scripts/init_final.c) |
Rootfs Pivot (userdata) |
Working | Mounts mmcblk0p25 (ext4) and pivot_roots into Alpine OpenRC |
| USB RNDIS Networking | Working | Configured automatically at boot via android_usb gadget |
SSH Server (dropbear) |
Working | Dropbear used because OpenSSH requires PR_SET_NO_NEW_PRIVS (Linux 3.5+) |
Wi-Fi (wlan0) |
Working | Custom vestel_fw_helper + vestel_wcnss_trigger brings up Pronto Wi-Fi & DHCP |
Package Manager (apk) |
Working | Interactive PTY sessions (devpts) and Alpine package repositories working |
Boot Architecture
[PBL / SBL / aboot] → stock boot.img (Linux 3.4.0 + custom ramdisk)
└── /init (static ARMv7 ELF, scripts/init_final.c)
├── creates /dev block & char nodes directly (no devtmpfs on this kernel)
├── mounts userdata (mmcblk0p25) at /newroot
└── pivots into /newroot as PID 1 → Alpine OpenRC
├── vestel-usb-net (configures android_usb RNDIS gadget)
├── vestel-wifi-hw (WCNSS firmware helper + module bring-up)
├── vestel-devpts (mounts /dev/pts for SSH PTYs)
└── dropbear, wpa_supplicant, udhcpc
Notable Engineering Lessons
- No
devtmpfsin the Stock 3.4 Kernel:- Early custom
/initprobes appeared to make zero progress because the kernel was built withoutCONFIG_DEVTMPFS, leaving/devempty in a fresh ramdisk.scripts/init_final.cexplicitly callsmknod()formmcblk0p25,console,null, andkmsgbefore mounting the root filesystem.
- Early custom
- Userspace WCNSS Firmware Loader Without
udev/mdev:- Bringing up Qualcomm WCNSS Wi-Fi on a minimal 3.4 kernel required three pieces working together:
- Extracting the split
wcnss.mdt+wcnss.b00…b09segments from themodempartition image (rather than the standalonewcnss.mbn). - Writing a custom static helper (
scripts/vestel_fw_helper.c) that loops onwrite()because the kernel's sysfs firmwaredataattribute caps individual writes atPAGE_SIZE. - Opening
/dev/wcnss_wlanviascripts/vestel_wcnss_trigger.cto trigger the subsystem restart and firmware request.
- Extracting the split
- Bringing up Qualcomm WCNSS Wi-Fi on a minimal 3.4 kernel required three pieces working together:
- Linux 3.4
ext4Feature Compatibility:- Modern
mkfs.ext4defaults enablemetadata_csumand64bit, which the 3.4 kernel refuses to mount. Formattinguserdatawith-O ^metadata_csum,^64bit,^orphan_fileensures clean mounting at boot.
- Modern
- Why Dropbear Instead of OpenSSH:
- OpenSSH's pre-auth privilege separation sandbox requires
prctl(PR_SET_NO_NEW_PRIVS), introduced in Linux 3.5. On Linux 3.4.0, Dropbear provides reliable SSH login without kernel backports.
- OpenSSH's pre-auth privilege separation sandbox requires
Device Tags: