Apa yang diperlukan untuk mengkompilasi Linux di Arduino, jika memungkinkan?

25

Apakah mungkin menjalankan Linux di Arduino? Jika ya, langkah dan batasan apa yang perlu dipertimbangkan? Jika tidak, apa saja batasan yang mencegah hal ini?

Jakub Arnold
sumber
3
Gunakan RPi sebagai gantinya.
Penguin Anonim

Jawaban:

19

Linux adalah sistem operasi yang sangat kompleks, tetapi mungkin bisa muat pada Arduino. Hal yang perlu dipertimbangkan:

  • Tidak ada port AVR saat ini dari kode sumber.
  • Anda tidak akan memiliki gambar, sebaliknya mengakses terminal melalui UART.
  • Driver sistem file harus ditulis ulang untuk mengakses flash internal atau kartu SD eksternal.
  • Itu akan sangat lambat! ATmega328 akan berjalan pada 16 MHz, atau sekitar 20 MHz maks (overclocked). Sebagian besar mesin Linux beroperasi pada minimum 400 MHz, dan lebih banyak lagi dengan grafis.
  • Anda mungkin perlu beberapa RAM tambahan, mungkin ide yang baik untuk menggunakan ATmega2650 (yang ada di Mega), yang memiliki 16 kali RAM Uno. Anda juga bisa menggunakan Due (6x lebih cepat dari Uno, lebih banyak RAM).
  • Anda mungkin harus menulis driver USB khusus untuk OTG (pada saat Jatuh Tempo) atau MAX3421EE (Mega ADK, pelindung host USB).

Singkatnya, itu akan membutuhkan banyak waktu dan usaha, dan mungkin akan terlalu lambat untuk penggunaan sehari-hari. Jika Anda benar-benar ingin Arduino Linux, periksa Yún.

Dokter
sumber
2
Anda tidak akan "mungkin" perlu ram ekstra, Anda tidak perlu ram tambahan. Linux membutuhkan 1 MB + ram. Juga, tidak adanya MMU berarti Anda harus mencari cara untuk meniru satu (atau menjalankan ucLinux). Secara realistis, paling banter, Anda akan meniru prosesor yang lebih mumpuni dalam atmega, yang akan menjadi urutan lebih lambat dari kode asli. Bahkan arduino karena tidak memiliki mendekati ram yang diperlukan.
Connor Wolf
Juga, ATmega328P memiliki 2 KB SRAM, dan ATmega2560P hanya memiliki 8 KB. Itu hanya 4X ram, bukan 16x.
Connor Wolf
16

Itu hanya tidak memiliki RAM yang cukup. Anda juga perlu mengajarkannya untuk mem-boot dari memori flash, yang melibatkan penulisan ulang bootloader.

Anda bisa menggunakan Arduino Yun atau PCDuino ; sementara Arduino tidak "standar", ini mendukung perisai Arduino dan menjalankan Linux.

Atau selalu ada Raspberry Pi .

Manishearth
sumber
Mengapa Anda mengatakan Yun bukan Arduino "standar"? Saya setuju itu mungkin bukan yang paling umum, tapi itu memang Arduino.
jfpoilpret
@ jfpoilpret Sebagian besar Arduino adalah papan atmega yang menjalankan C ++ melalui avr-gcc dan memiliki chip penanganan USB. Mereka datang dalam berbagai bentuk / ukuran / kekuatan, tetapi mereka pada dasarnya sama (Mega samping). Tampaknya cukup jelas bahwa OP berbicara tentang ini dan bukan Yun / etc, maka perbedaannya.
Manishearth
Ada juga Arduino Tre yang akan segera dirilis , setidaknya saya berharap akan segera ;-)
Chris O
6

Jawaban singkatnya adalah tidak.

Pada dasarnya, Anda akan membutuhkan BANYAK ram lebih banyak daripada ATmega terbesar sekalipun.

Hal ini secara teoritis mungkin untuk menambahkan hardware eksternal, dan program ATmega untuk meniru CPU lebih kuat, dan menjalankan linux itu. Namun, pada arduino biasa, itu tidak mungkin.

Akan jauh lebih realistis untuk menjalankan linux pada Arduino Due, yang pada dasarnya adalah CPU AT91SAM3X8E. Namun, Anda masih perlu menambahkan beberapa SRAM dan penyimpanan tambahan.

Ada hal-hal seperti Arduino Yun, tapi itu benar-benar modul linux yang sepenuhnya terpisah pada PCB yang sama dengan ATmega32U4, jadi saya tidak tahu apakah Anda benar-benar dapat menghitungnya sebagai arduino.


Mungkin relevan: Apa yang diperlukan untuk menjalankan linux tertanam?

Connor Wolf
sumber
1

Ada papan yang disebut pcDuino yang dapat menjalankan beberapa varian Linux seperti Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (hanya untuk menyebutkan beberapa). Papan ini bukan Arduino asli, melainkan Arduino AtHeart , dan dibuat oleh LinkSprite .
pcDuino

Arduino memiliki beberapa papan yang mendukung menjalankan varian Linux bernama Linino :

  • The Arduino Yun adalah papan mikrokontroler berdasarkan ATmega32u4 dan Atheros AR9331. Prosesor Atheros mendukung distribusi Linux berdasarkan OpenWrt bernama Linino OS. Board ini memiliki dukungan Ethernet dan WiFi built-in, port USB-A, slot kartu micro-SD, 20 pin input / output digital (7 di antaranya dapat digunakan sebagai output PWM dan 12 sebagai input analog), kristal 16 MHz osilator, koneksi micro USB, header ICSP, dan 3 tombol reset.
  • Baru Arduino Tian papan didukung oleh Atmel SAMD21 MCU, menampilkan 32-bit ARM Cortex® M0 + inti dan Qualcomm Atheros AR9342, yang merupakan operasi MIPS prosesor sangat terintegrasi sampai dengan 533MHz dan kaya fitur IEEE802.11n 2x2 2.4 / Modul WiFi dual-band 5 GHz. Qualcomm Atheros MIPS mendukung distribusi Linux, berdasarkan OpenWRT bernama Linino. Arduino Tian juga memiliki memori eMMC 4GB yang dapat membantu membangun proyek Anda. Dimungkinkan untuk MENONAKTIFKAN / MATI port Linux dari MCU untuk mengurangi konsumsi daya.
  • Arduino Industrial 101 adalah papan Evaluasi untuk modul LGA Arduino 101. Mikrokontroler ATmega32u4 terintegrasi di alas tiang. Modul ini mendukung distribusi Linux berdasarkan OpenWRT bernama LininoOS. Papan memiliki built-in WiFi (operasi IEEE 802.11b / g / n hingga 150Mbps 1x1 2,4 GHz), 3 GPIO (yang 2 dapat digunakan sebagai Output PWM), 4 Input Analog, 1 USB, 1 sinyal Ethernet pada pin header dan konverter DC / DC bawaan. Lihatlah panduan pemasangan dan hubungkan papan Anda ke komputer dengan kabel micro USB untuk memulai.
sa_leinad
sumber
-1

Ini sudah berumur beberapa tahun, tetapi mungkin lebih relevan karena Arduinos mendapatkan lebih banyak RAM dan AVR ATMega 32 bit, dll. Ada masalah yang jelas terutama dalam jawaban paling populer di sini. Arduino menggunakan AVR MICROCONTROLLER, bukan MICROPROCESSOR. Ini adalah alasan utama mengapa tidak ada port linux. Mikrokontroler dirancang untuk melakukan tugas tertentu, aplikasi di mana hubungan input dan output didefinisikan dengan baik. Mikroprosesor dirancang untuk menjalankan berbagai aplikasi pada sistem operasi. Ingat, sejak awal, Linux membutuhkan unit manajemen memori dan tidak dapat berjalan pada 8088 atau 286 PC. Lalu ada μClinux, yang awalnya menargetkan keluarga Motorola DragonBall dengan prosesor 68k, untuk Palm Pilots. Itu tidak pernah berhasil. Anda mungkin lebih sukses mem-porting FreeDOS atau bahkan Minix daripada Linux, mungkin sesuatu di assembler, tetapi mengkompilasi OS pada mikrokontroler sangat tidak praktis. Mungkin itu adalah masalah akademik yang menantang,

Cuvtixo
sumber
-2

Mungkin saja, tetapi itu akan menyusahkan karena Anda harus menulisnya dalam C. (belum lagi perangkat keras tambahan yang diperlukan seperti perisai kartu sd dan chip memori tambahan) Sesuatu seperti Ontas, sebuah kernel yang saya tulis di C untuk Arduino, akan membantu karena memiliki dukungan untuk menambah driver, dengan mengorbankan membuat fungsi loop berulang lebih lambat. (Ini bukan masalah besar seperti yang Anda pikirkan) (Ontas masih dalam pengembangan dan fitur baru ditambahkan setiap saat)

Klik di sini untuk tautan ke .ino dan file .h yang menyertainya

Luke Tindale
sumber