Linux is generally considered the go-to OS for under powered computers. Wanting to challenge the preconceived notion that Linux requires ‘a computer made in the last 20 years,’ [Dmitry] built the worst Linux PC ever around a simple 8-bit microcontroller.
The ATMega1284p [Dmitry] used doesn’t have a lot to offer as far as RAM and storage goes; just 16 kilobytes of SRAM and a paltry 128 kilobytes of Flash storage. While this may be voluminous in the embedded world, it’s peanuts compared to the gigabytes of RAM and hard drive space on even a low-end netbook. To solve this problem, [Dmitry] threw an antique 30-pin RAM SIMM at the problem. It’s wired up directly to the microcontroller, as is the 1 Gigabyte SD card that serves as the PC’s hard drive.
Linux requires a 32-bit CPU and a memory management unit, something the puny microcontroller doesn’t have. For [Dmitry], the best course of action was emulating an ARM processor on an AVR. We’re not sure if we’re dealing with genius or madness here, but it did prove to be a valuable learning exercise in writing a modular ARM emulator.
How fast is it? [Dmitry] tells us it takes two hours to boot up to a bash prompt, and four more to load up Ubuntu and login. If you want a Megahertz rating, good luck; the effective clock speed is about 6.5 kilohertz. While the worst Linux PC ever won’t win any races, its simple construction puts it within the reach of even the klutziest of hardware builders; the entire device is just a microcontroller, RAM, SD card, a few resistors, and some wire.
If you’d like to build your own worst Linux PC, [Dmitry] has the firmware and disk image available to download. If you want to watch the time-lapse of this thing booting, check out the video after the break.
[vimeo=39286771]
Congratulations on your awesome effort Dimitry – no doubt this would have been an awful lot of fun for you!!! :)
Most that I could achieve with my own 8-bit micro project (in this case, using a 150-MIPS 8052 to emulate an entire 16-bit x86 system) was getting it to boot minix 2.0.2 ..
Link to my own ‘Flea86’ project:
http://www.armchairarcade.com/neo/node/3810
Regards,
Valentin Angelovski
This nothing! I did this with 3 transistors, a relay, 8 diodes and some toothpaste.
But really, this is an awesome project. I think I’ve seen you’re name quite a few times on here before Dmitry. Actually just searched it. You’ve been on here LOTS of times.
Wa Wa WiVa!!! I love it!!!
This is as fast as my first Packard Bell pc.
Just freaking amazing Dmitry!
I wonder though… what about finding or building a more light weight linux os? Perhaps getting it to boot faster..?
Might I suggest minuetos?
http://www.menuetos.net/
idk how it’d work but you’ve proven just about anything is possible :)
“genius or madness?”
having known dima for a while now, I can definitively say “both” :-P
good stuff as always, you crazy sonnofagun.
For you 8 bit fans, try
http://nuttx.sourceforge.net/
but can it run crysis?
haha beautiful..
this is one of those “dont ask” because you can things..
except… he took it too far ;)
/lamer
What about TCP/IP? Can it do RFC 1149?
If this could do tcp/ip it would multiply the awesomeness. I actually need a dirt ass cheap processor that does tcp/ip, for a custom cheap ddns client, and uses a Linux tool chain (it’s what I know).
Great work!
Now it’s possible to run simply any OS on an Atmega, just run it in a VM…
You misspelled “awesomest”.
Since when is being slow deserve to be called the ‘worst’. I think it is a very special pc linux pc :-)
ftw!
There was already LUnix, Commodore 64 port of L… Unix: not all *nix commands nor gui (as it is not in this case)… but there was obviously lower hardware dependency
http://hld.c64.org/poldi/lunix/lunix.html
but… will it blend?
awesome!
This is the most amazing hack I’ve ever seen. I thought the relay-logic computers were the coolest, but this actually has GUI and everything. If you ever needed a benchmark for your competence, this is probably the best one you could manage. We are not worthy.
See… Linux IS made for small devices ;)
Now let’s wait for him to port Windows 7 (the 64 bit edition, of course ;) to the AVR…
God level porting
Hey !
I want to ask you :) is this could be even somehow possible, to add RAM to arduino MEGA ?
Thanks ;)
Part of the reason that this build is taking forever to boot and running like garbage (forgive me for saying so) is because you’re trying to run Ubuntu Jaunty on it.
Maybe see what kind of mileage you could get with your 8-bit ARM microprocessor and, say, BasLin/DSL/TCL or something to that effect.
Now, I’ve seen some just plain ridiculously refactored code done in assembler (like, absolutely SILLY amounts of graphics rendering in under 64kb) so I’m thinking it might be possible to actually code an entire Linux distro in asm and come up with something that actually RUNS on this tiny computer.
If we do THAT, I have a feeling it would have a significant impact on computing in general. We have these beasts of machines and tap barely 1% of their potential by stacking clumsy and kludgy code on top of even clumsier code.
Absolutely incredible. I am now much more curious about what is involved to interface RAM directly to a microcontroller. Great post. Thank you, very interesting.
Edit: in interfacing
Incredible work.
I notice that it is slow… Don’t you wan’t to work on a quad core version ?
I don’t know if it’s been mentioned, but there is actually a port of Linux that runs on embedded devices without an MMU, μClinux. There isn’t a port for this particular chip, but I wonder what the relative difficulty of getting μClinux up and running on an 8 bit MCU would be vs writing a simulation of a 32-bit ARM chip. Still really impressive stuff :)
YA the site is slow. I dont know y. The VERONICA and LAZARUS64 have vram but no ram. I wonder..do we tap the ram bus for VRAM? With 3 shift registers on the VRAM inverter we might be able to pull off a 3 ATMEGA core computer.(with resonable amount of VRAM+RAM.) Yeah agree.Problem is nobody homebrews and Linux turning into shit these days. There r several RTOS out there. If a guy can put a cdrom +HD onto a C64, like the Performa series did..certainly this is not impossible. Those machines were responsive. NOT so these days.
If APPLE did it with Z80 or similar..certainly WE CAN.
All hail the Tomato!!!
Ok… who can boot Linux on a marble-machine…?
Could the code be ported to run on an esp or wemos board?
Done: https://hackaday.com/2021/07/21/its-linux-but-on-an-esp32/
> Linux requires a 32-bit CPU
The assembly code is CPU-specific anyway.
And it should be possible to write (or modify) a C compiler for an 8-bit CPU that compiles the code in a way that it behaves like on a 32-bit CPU.
> and a memory management unit
There is the possibility to compile Linux without MMU support!
Originally, this feature was introduced for m68k only to run Linux on Amiga and Atari ST; today, this feature is available for all CPUs.
However, I think that running a “native AVR Linux” would be much more work than an ARM (or MIPS) emulator…
So it runs about the same speed as my 2020 Macbook, after I updated to Monterey