KernelUNO v1.0

A lightweight RAM-based shell for Arduino UNO with filesystem simulation, hardware control, and interactive shell.

Features

Virtual Filesystem - Create files and directories in RAM (/dev, /home) - Hardware Control - GPIO management with pin mode configuration

- Create files and directories in RAM (/dev, /home) - - GPIO management with pin mode configuration System Monitoring - Memory usage, uptime, kernel messages (dmesg)

- Memory usage, uptime, kernel messages (dmesg) 22 Built-in Commands - From basic file operations to hardware control

- From basic file operations to hardware control Interactive Shell - Real-time command execution with input buffering

- Real-time command execution with input buffering LED Disco Mode - Fun easter egg for testing GPIO

Hardware Requirements

Arduino UNO (or compatible board with ATmega328P)

USB cable for programming

LEDs and resistors (optional, for GPIO testing)

Installation

Clone or download this repository Open KernelUNO.ino in Arduino IDE Select Board: Tools → Board → Arduino UNO Select Port: Tools → Port → /dev/ttyUSB0 (or your port) Compile & Upload: Sketch → Upload Open Serial Monitor: Tools → Serial Monitor (115200 baud)

Alternative with arduino-cli:

arduino-cli compile --fqbn arduino:avr:uno . arduino-cli upload --fqbn arduino:avr:uno -p /dev/ttyUSB0 .

Commands

Filesystem Commands

ls - List files in current directory

- List files in current directory cd [dir] - Change directory

- Change directory pwd - Print working directory

- Print working directory mkdir [name] - Create directory

- Create directory touch [name] - Create file

- Create file cat [file] - Read file contents

- Read file contents echo [text] > [file] - Write to file

- Write to file rm [name] - Remove file/directory

- Remove file/directory info [name] - Display file information

Hardware Commands

pinmode [pin] [in/out] - Set pin mode

- Set pin mode write [pin] [high/low] - Write to pin

- Write to pin read [pin] - Read pin value

- Read pin value gpio [pin] [on/off/toggle] - GPIO control

- GPIO control gpio vixa [count] - LED disco mode (easter egg)

System Commands

uptime - System uptime

- System uptime uname - System information

- System information dmesg - Kernel messages

- Kernel messages df / free - Free memory

/ - Free memory whoami - Current user (hardcoded root)

- Current user (hardcoded root) clear - Clear screen

- Clear screen reboot - Restart system

- Restart system help - Show all commands

Usage Examples

# Navigate filesystem cd home mkdir myproject cd myproject touch notes.txt echo Hello World > notes.txt cat notes.txt # Hardware control pinmode 13 out gpio 13 on gpio 13 toggle read 2 # System info uname uptime dmesg df # Fun mode gpio vixa 10

Memory Usage

Program: ~38% of 32KB flash

RAM: ~85% of 2KB SRAM (optimized)

Filesystem: 10 files/directories max

DMESG buffer: 6 messages

Specifications

Board : Arduino UNO (ATmega328P)

: Arduino UNO (ATmega328P) Clock : 16 MHz

: 16 MHz Serial Baud : 115200

: 115200 Filesystem : RAM-based (no EEPROM)

: RAM-based (no EEPROM) Storage: Volatile (resets on power cycle)

Technical Details

Char-array based input buffer (32 bytes max)

Safe path concatenation to prevent buffer overflow

Kernel message logging with timestamps

Real-time GPIO operations

Efficient memory management

Limitations

No persistent storage (EEPROM/SD)

Limited file size (32 bytes content per file)

Maximum 10 files/directories

PATH limited to 16 characters

Single user (root)

TODO / Future Enhancements

EEPROM persistence

EEPROM persistence PWM/analog control

PWM/analog control SD card support

SD card support File size display

File size display More GPIO features

License

BSD 3-Clause License - See LICENSE file for details

Author

Arc1011 (Arc1011)

Created in 2026.

Contributing

Feel free to fork, modify, and improve! Send PRs for:

Bug fixes

Performance improvements

New commands

Code optimization

// The descriptive files (i.e., README and QUICKSTART) were written by Claude AI (with minor tweaks). Why? Because if I had done it myself, it would have ended up as a few lines of incoherent gibberish that wouldn't tell you anything.//