Is there a way to run linux in arduino due like Ubuntu?

I'm new to arduino and I am interested in arduino. But i know Linux system are compatible with arm processors, and i know that the arduino due haves arm processor. Is there a way to run linux such as Ubuntu or centOS in arduino due Board and how to connect sdcard and RAM to ardunio due?


Solution 1:

The Arduino Due has an Atmel/Microchip Atmel AT91SAM3X8E microcontroller, which integrates an ARM Cortex-M3 processor with Ethernet, USB, CAN, USART, and other peripheral. Since it's a Cortex-M3 processor, there is no MMU, memory management unit, to provide virtual memory capability.

Ubuntu is a Debian-based version of the Linux kernel bundled with Open Source software to provide a full-featured operating system with a graphical user interface (GUI). The system hardware requirements for running such an OS include a MMU and a video interface, and the Arduino Due has neither.

However there is a version of the Linux kernel (derived from the uClinux project) that does not require a MMU. There are also small-memory-footprint versions of the C library (uClibc) and user-space utilities (Busybox). Combine these, and you can build/install a headless (no video/graphical interface, just a serial terminal) version of the Linux OS for a MMU-less SoC with limited memory.

See Practical Advice on Running uClinux on Cortex-M3/M4 for the limitations of such a system.


Is there a way to run linux such as Ubuntu or centOS in arduino due Board ...

The lack of video hardware, insufficient memory, and lack of a MMU prevent use of "linux such as Ubuntu or centOS in arduino due Board".
However a text-based variant of the Linux kernel that doesn't require a MMU can be built.

... and how to connect sdcard and RAM to ardunio due?

The AT91SAM3X8E does have a HSMCI (high speed memory card interface) for a SD card socket. But there is no DRAM controller to support additional external DRAM, although external SRAM could be used.

Solution 2:

Linux is just a kernel, while Ubuntu, CentOS are operation systems that includes configurable environment and userland programs. Linux kernel itself is pretty complex system that would need a lot of resources. Ask yourself first: - "Why do you need multi processing systems on limited hardware?". While Arduino DUE is comparably powerful for some cases, it still pretty limited from the point of multiprocessing. You can try something like that, but why, while you can buy for the same amount of money a Raspberry Pi, and use on it full blown operation system on it while still having access to multiple hardware interfaces. Use arduino, where you limited with power (such as battery), or you need real time processing and/or as companion to more powerful computer such as Raspberry Pi. Thtat's the place where Arduino will shine because if you need real time processing, computers with full blown operation systems will sucks since kernel need to freeze periodically running programs to do internal stuff, like adjust time, watch for interruption and process them in queue.

So shortly, - use the right tool for a job.