111 lines
3.2 KiB
Markdown
111 lines
3.2 KiB
Markdown
# Minimal Embedded Initramfs Design
|
|
|
|
## 🎯 **Requirements: Ultra-Minimal Embedded CPIO**
|
|
|
|
- **Size Target**: 50-100MB (not 700MB!)
|
|
- **Network drivers** + essential firmware only
|
|
- **eudev** for module loading
|
|
- **btrfs** and **vfat** filesystem support
|
|
- **Embedded in kernel** for fastest boot
|
|
|
|
## 📦 **Minimal Package List**
|
|
|
|
### Core System (Essential Only)
|
|
```
|
|
alpine-baselayout # Basic filesystem structure
|
|
busybox # Essential utilities
|
|
musl # C library
|
|
```
|
|
|
|
### Module Loading & Hardware Detection
|
|
```
|
|
eudev # Hardware detection and module loading
|
|
kmod # Module management
|
|
```
|
|
|
|
### Filesystem Support (Minimal)
|
|
```
|
|
btrfs-progs # btrfs filesystem support
|
|
dosfstools # vfat filesystem support
|
|
```
|
|
|
|
### Network Essentials (Minimal)
|
|
```
|
|
# NO full linux-firmware (600MB!)
|
|
# Only essential network drivers via selective firmware
|
|
```
|
|
|
|
## 🗂️ **Firmware Strategy: Selective Loading**
|
|
|
|
Instead of 600MB linux-firmware package:
|
|
|
|
### Essential Network Firmware Only
|
|
```
|
|
intel/ # Intel ethernet (e1000e, ixgbe, i40e)
|
|
realtek/ # Realtek ethernet (r8169)
|
|
broadcom/ # Broadcom ethernet (bnx2, tg3)
|
|
```
|
|
|
|
### Load via Kernel Modules (Not Initramfs)
|
|
- WiFi firmware (loaded later from RFS)
|
|
- GPU firmware (not needed for initramfs)
|
|
- Sound firmware (not needed)
|
|
|
|
## 🎯 **Size Optimization Strategy**
|
|
|
|
### What to EXCLUDE from Initramfs
|
|
- ❌ **SSH tools** (700KB) - load from RFS
|
|
- ❌ **Debugging tools** (gdb, strace, etc. - 50MB)
|
|
- ❌ **Development tools** (python, etc. - 50MB)
|
|
- ❌ **Full linux-firmware** (600MB) - selective only
|
|
- ❌ **Compression tools** (load from RFS)
|
|
- ❌ **Network utilities** (curl, wget, etc.)
|
|
|
|
### What to INCLUDE in Initramfs
|
|
- ✅ **Core Alpine base** (~10MB)
|
|
- ✅ **eudev + kmod** (~5MB)
|
|
- ✅ **Essential network drivers** (~20MB firmware)
|
|
- ✅ **btrfs-progs + dosfstools** (~10MB)
|
|
- ✅ **GitHub components** (zinit, etc. ~5MB)
|
|
|
|
**Target: ~50MB total**
|
|
|
|
## 🔧 **Implementation Changes Needed**
|
|
|
|
### 1. Create Minimal Package List
|
|
Replace `packages.txt` with ultra-minimal version
|
|
|
|
### 2. Selective Firmware Installation
|
|
Custom script to install only essential network firmware:
|
|
- `/lib/firmware/intel/`
|
|
- `/lib/firmware/realtek/`
|
|
- `/lib/firmware/broadcom/`
|
|
|
|
### 3. Build Process Changes
|
|
- Skip massive firmware installation
|
|
- Strip unnecessary files aggressively
|
|
- Optimize cpio compression
|
|
|
|
### 4. Two-Stage Loading
|
|
1. **Initramfs**: Minimal (network + filesystems)
|
|
2. **RFS**: Full tooling loaded after network
|
|
|
|
## 📊 **Expected Size Breakdown**
|
|
|
|
| Component | Size | Notes |
|
|
|-----------|------|-------|
|
|
| Alpine base | ~10MB | Core system |
|
|
| eudev + kmod | ~5MB | Module loading |
|
|
| Filesystems | ~10MB | btrfs + vfat |
|
|
| Network firmware | ~20MB | Essential only |
|
|
| GitHub tools | ~5MB | zinit, core-x, etc |
|
|
| **Total** | **~50MB** | **10x smaller!** |
|
|
|
|
## 🚀 **Benefits of Minimal Approach**
|
|
|
|
- **Fast boot**: 50MB vs 700MB embedded
|
|
- **Memory efficient**: Less RAM usage
|
|
- **Network focused**: Only what's needed for connectivity
|
|
- **Scalable**: Load additional tools from RFS after network
|
|
|
|
This aligns with the original Zero-OS philosophy: minimal initramfs + network-loaded tools. |