O que é necessário para compilar o Linux no Arduino, se possível?

25

É possível rodar o Linux no Arduino? Se sim, quais etapas e limitações precisam ser consideradas? Caso contrário, quais são as limitações que impedem isso?

Jakub Arnold
fonte
3
Use uma RPi.
Anonymous Penguin

Respostas:

19

O Linux é um sistema operacional muito complexo, mas pode caber em um Arduino. Coisas a considerar:

  • Não há porta AVR atual do código fonte.
  • Você não teria gráficos; em vez disso, acesse o terminal pelo UART.
  • O driver do sistema de arquivos teria que ser reescrito para acessar o flash interno ou um cartão SD externo.
  • Seria extremamente lento! O ATmega328 seria executado em 16 MHz, ou cerca de 20 MHz no máximo (com overclock). A maioria das máquinas Linux roda no mínimo a 400 MHz e mais com gráficos.
  • Você provavelmente precisaria de uma RAM extra, provavelmente uma boa idéia para usar um ATmega2650 (o do Mega), que tem 16 vezes a RAM do Uno. Você também pode usar um Due (6x mais rápido que o Uno, mais RAM).
  • Pode ser necessário escrever drivers USB especiais para OTG (no vencimento) ou MAX3421EE (Mega ADK, blindagem de host USB).

Em suma, levaria muito tempo e esforço e provavelmente seria muito lento para o uso diário. Se você realmente quer o Arduino Linux, confira o Yún.

O médico
fonte
2
Você não iria "provavelmente" necessidade RAM extra, você não precisa de RAM extra. O Linux requer 1 MB + ram. Além disso, a falta de um MMU significaria que você teria que descobrir como emular um (ou executar o ucLinux). Realisticamente, na melhor das hipóteses, você acabaria imitando um processador mais capaz no atmega, que seria uma ordem de magnitude mais lenta que o código nativo. Mesmo o arduino devido não tem nem perto do ram necessário.
Connor Lobo
Além disso, o ATmega328P possui 2 KB de SRAM e o ATmega2560P possui apenas 8 KB. Isso é apenas 4X a ram, não 16x.
Connor Lobo
16

Apenas não tem RAM suficiente. Você também precisa ensiná-lo a inicializar a partir da memória flash, o que envolveria a reescrita do carregador de inicialização.

Você pode usar um Arduino Yun ou um PCDuino ; embora não sejam Arduinos "padrão", eles suportam escudos do Arduino e executam o Linux.

Ou sempre há o Raspberry Pi .

Manishearth
fonte
Por que você diz que Yun não é um Arduino "padrão"? Concordo que pode não ser o mais comum, mas é um Arduino de fato.
Jfpoilpret
@jfpoilpret A maioria dos Arduinos são placas atmega que executam C ++ compilado via avr-gcc e possuem um chip de manipulação USB. Eles vêm em várias formas / tamanhos / potências, mas são essencialmente os mesmos (mega aparte). Parecia bastante óbvio que o OP estava falando sobre isso e não sobre o Yun / etc, daí a distinção.
Manishearth
Existe também o logo-a-ser-lançado Arduino Tre , pelo menos eu estou esperando que seja em breve ;-)
Chris O
6

A resposta curta é não.

Basicamente, você precisaria de muito mais memória RAM do que até o maior ATmega possui nativamente.

Ele é teoricamente possível adicionar hardware externo, e programar o ATmega para emular uma CPU mais potente, e rodar o Linux em que. No entanto, em um arduino simples, não é possível.

Seria muito mais realista rodar o Linux em um Arduino Due, que é basicamente uma CPU AT91SAM3X8E. No entanto, você ainda precisará adicionar SRAM e armazenamento adicionais.

Existem coisas como o Arduino Yun, mas esse é realmente um módulo linux totalmente separado no mesmo PCB que o ATmega32U4, então não sei se você pode realmente contá-lo como um arduino.


Possivelmente relevante: o que é necessário para executar o linux incorporado?

Connor Wolf
fonte
1

Existe uma placa chamada pcDuino que pode executar várias variantes do Linux, como Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (apenas para citar algumas). Esta placa não é um Arduino nativo, e sim o Arduino AtHeart , e é feita pelo LinkSprite .
pcDuino

O Arduino possui algumas placas que suportam a execução de uma variante do Linux chamada Linino :

  • O Arduino Yún é uma placa de microcontrolador baseada no ATmega32u4 e no Atheros AR9331. O processador Atheros suporta uma distribuição Linux baseada no OpenWrt chamada Linino OS. A placa possui suporte Ethernet e WiFi integrado, uma porta USB-A, slot para cartão micro-SD, 20 pinos de entrada / saída digitais (7 deles podem ser usados ​​como saídas PWM e 12 como entradas analógicas), um cristal de 16 MHz oscilador, uma conexão micro USB, um cabeçalho ICSP e 3 botões de reinicialização.
  • A nova placa Arduino Tian é equipada com o SAMD21 MCU da Atmel, apresentando um núcleo ARM Cortex® M0 + de 32 bits e um Qualcomm Atheros AR9342, que é um processador MIPS altamente integrado que opera em até 533MHz e IEEE802.11n 2x2 2.4 / rico em recursos Módulo WiFi de banda dupla de 5 GHz. O Qualcomm Atheros MIPS suporta uma distribuição Linux, baseada no OpenWRT chamado Linino. O Arduino Tian também tem uma compilação na memória eMMC de 4 GB que pode ser útil para criar seus projetos. É possível LIGAR / DESLIGAR a porta Linux do MCU para reduzir o consumo de energia.
  • O Arduino Industrial 101 é uma placa de avaliação para o módulo LGA do Arduino 101. O microcontrolador ATmega32u4 está integrado no rodapé. O módulo suporta uma distribuição Linux baseada no OpenWRT chamada LininoOS. A placa possui WiFi embutido (operações IEEE 802.11b / g / n de até 150Mbps 1x1 2,4 GHz), 3 GPIOs (dos quais 2 podem ser usados ​​como saídas PWM), 4 entradas analógicas, 1 USB, 1 sinal Ethernet no pino cabeçalhos e um conversor DC / DC embutido. Confira o guia de montagem e conecte sua placa a um computador com um cabo micro USB para começar.
sa_leinad
fonte
-1

Isso tem vários anos, mas talvez seja mais pertinente, pois os Arduinos recebem mais RAM e AVRs ATMega de 32 bits, etc. Há um problema óbvio, notavelmente não na resposta mais popular aqui. O Arduino usa um MICROCONTROLADOR AVR, não um microprocessador. Esta é uma das principais razões pelas quais não há porta do linux. Os microcontroladores são projetados para executar uma tarefa específica, aplicações em que o relacionamento de entrada e saída é bem definido. Os microprocessadores são projetados para executar uma variedade de aplicativos em sistemas operacionais. Lembre-se, desde o início, o Linux precisava de uma unidade de gerenciamento de memória e não podia rodar em 8088 ou 286 PCs. Havia o μClinux, que originalmente tinha como alvo a família Motorola DragonBall de processadores embarcados de 68k para Palm Pilots. Nunca foi particularmente bem sucedido. Você pode ter mais sucesso portando FreeDOS ou Minix que Linux, talvez algo em assembler, mas compilar um sistema operacional em um microcontrolador é muito impraticável. Talvez seja um problema acadêmico desafiador,

Cuvtixo
fonte
-2

É possível, no entanto, seria uma dor, porque você teria que escrevê-lo em C. (para não mencionar o hardware extra necessário, como um escudo de cartão SD e chip (s) de memória extra) Algo como Ontas, um kernel que escrevi em C para o arduino, ajudaria, pois possui suporte para adicionar drivers, às custas de fazer com que a função de loop vazio se repita mais lentamente. (Isso não é tão importante quanto você imagina) (o Ontas ainda está em desenvolvimento e novos recursos são adicionados o tempo todo)

Clique aqui para o link para os arquivos .ino e .h que os acompanham

Luke Tindale
fonte