A web-based tool to flash BeagleBoard images to OMAP devices via USB. This application runs entirely in the browser using WebAssembly and the WebUSB API.
BB_Imager_WASM is a WebUSB-based flashing tool that allows users to:
- Download official BeagleBoard images directly from the web
- Flash custom image files to OMAP devices via USB
- Monitor the flashing process in real-time
- Frontend: HTML5, CSS3, JavaScript (ES6+)
- WASM Module: Rust compiled to WebAssembly using
wasm-bindgen - USB Communication: WebUSB API
- Build System: Cargo (Rust)
BB_Imager_WASM/
├── index.html # Main HTML page with UI
├── style.css # Styling for the application
├── script.js # JavaScript for download and USB flashing
├── Cargo.toml # Rust project configuration
├── src/
│ └── lib.rs # Rust code for USB boot protocol
└── README.md # This file
- Rust - Install from rustup.rs
- wasm-pack - Install via:
cargo install wasm-pack
- A modern web browser with WebUSB support (Chrome, Edge, Opera)
- An OMAP-based device (BeagleBoard/BeagleBone) in USB boot mode
- Appropriate USB permissions configured
-
Build the WASM module:
wasm-pack build --target web
-
Serve the application using a local web server:
# Using Python python -m http.server 8080 # Using Node.js npx serve .
-
Open
http://localhost:8080in your browser
- Open the application in a WebUSB-compatible browser
- Select an image source (Official BeagleBoard Repository)
- Choose an image from the available list
- Click "Download Selected" to download the image
- Connect your BeagleBoard/BeagleBone device in USB boot mode
- Click "Select Image File" and choose your image file (.bin, .img, .hex, .xz)
- Click "Connect & Flash" to begin the flashing process
- Monitor the progress in the log window
Note: The device must be in USB boot mode. Consult your BeagleBoard documentation for instructions on entering boot mode.
- Browse available BeagleBoard images
- Download images directly from official sources
- Display image metadata (name, size)
- WebUSB-based device communication
- Real-time progress logging
- Support for various image formats
- Automatic USB endpoint detection
The Rust module provides low-level USB boot protocol functions:
block_size()- Returns the USB block size (512 bytes)boot_command()- Generates the OMAP boot commandimage_length_packet()- Creates length packet for image transferraw_chunk()- Pads data chunks to block size
| Browser | WebUSB Support |
|---|---|
| Chrome | Full Support |
| Edge | Full Support |
| Opera | Full Support |
| Firefox | Limited/No |
| Safari | Limited/No |
- Ensure the device is in USB boot mode
- Try a different USB cable
- Check USB driver installation
- On Linux, you may need to add udev rules
- On Windows, ensure appropriate drivers are installed
- Verify the image file is compatible with your device
- Check that the device has sufficient storage
- Ensure stable USB connection
Contributions are welcome! Please feel free to submit issues and pull requests.
This project is for educational and development purposes. Refer to BeagleBoard's official images for their respective licenses.
- BeagleBoard.org for providing official images and documentation
- wasm-bindgen for excellent Rust-to-WASM tooling
