No description
Find a file
2026-03-08 11:10:59 +05:30
basic init 2026-03-07 19:22:12 +05:30
gnu_util add: cp & mkdir & mv & rm & rmdir 2026-03-08 11:10:59 +05:30
.gitignore init 2026-03-07 19:22:12 +05:30
LICENSE add: readme and license 2026-03-07 20:43:39 +05:30
README.md add: cp & mkdir & mv & rm & rmdir 2026-03-08 11:10:59 +05:30

ARM-Coreutils

A collection of GNU coreutils utilities implemented in 32bit ARM assembly.

Build

If you are on an ARMbased system, you can assemble and link the source files directly:

as <filename>.s -o <filename>.o
ld <filename>.o -o <filename>.out

For nonARM hosts you can use QEMU usermode emulation. First install podman and QEMU and pull an ARM32v7 base image:

On Fedorabased systems you can install the required QEMU usermode static binary with:

sudo dnf install qemu-user-static
podman run --rm -it --platform linux/arm/v7 docker.io/arm32v7/alpine

Inside the container install the binutils package to obtain as and ld:

apk add binutils

Now assemble with as and link with ld, then run the resulting executable.

Benchmarks

Alpine Linux (arm32v7) container using Podman with QEMU user-mode translation:

Test arm-cat gnu-cat Ratio
Empty file 2.4ms 8.4ms 3.5x
100MB file 18.2ms 14.6ms 1.25x

For empty files the assembly implementation is faster because it has almost no runtime initialization, while GNU cat performs additional setup through libc and coreutils infrastructure. For large files the performance gap becomes small because the workload is dominated by I/O throughput and QEMU translation overhead rather than program startup.

TODO

  • Implement cp
  • Implement cat
  • Implement mv
  • Implement mkdir
  • Implement rm
  • Implement pwd
  • Implement rmdir
  • Implement tee
  • Implement head
  • Implement tail
  • Implement echo

License

This project is licensed under the MIT License. See the LICENSE file for the full license text.