joi, 9 ianuarie 2014

Linux Ubuntu pe BeagleBoard - setup initial

English: tutorial on how to perform the hardware setup on a BeagleBoard Rev C4 (power supply, USB hubs, USB memory stick, webcam), how to install Ubuntu on a BagleBoard Rev C4 on SD card, how to connect the board to a wired internet connection and to a wireless connection, how to install a graphic user interface (GUI) LXDE.


For more details please use Google Translate (Romanian to English) and also use the coment area below! 

Next episode: here

**************
In ultimul an tabletele si telefoanele inteligente au devenit ceva cu adevarat banal. Privind in detaliu, trebuie remarcat ca un telefon inteligent este de multe ori mai puternic decat un PC 286, 386, 486 samd din anii '90, puterea de calcul a unui telefon inteligent (smart phone) permite rularea de aplicatii care pe un 286 - 486 parea desprinsa din cartile de SF, procesoarele utilizate acum sunt incredibile. Totul este mult mai mic, totul este mult mai puternic si consuma foarte putina energie. Si mai ales se produce in masa, astfel ca preturile ar trebui sa fie mici.

Cineva si-a pus problema de a utiliza un astfel de procesor similar cu cel dintr-un telefon inteligent pe o placa electronica pe care sa aibe posibilitatea de a conecta dispozitive USB, monitoare video, alte dispozitive electronice (prin I2C, SPI, port serial etc). Toata placa respectiva trebuia sa fie guvernata de un sistem de operare necomercial, OpenSource si sa fie accesibila amatorilor, hobby-stilor (nu hobbitilor :) ).

Asa au aparut o sumedenie de placi, single board computer (SBC): BeagleBoard, BeagleBone Black, RaspberryPi etc. Aceste placi folosesc o memorie gen SD card sau micro SD, pe care este sistemul de operare. Asadar in 30 de minute poti scrie sistemul de operare pe cardul SD, conectezi un mouse, o tastatura, un monitor, un microfon, boxe audio, un web cam USB si legi un cablu de retea (sau un dongle WiFi pe USB) si gata, ai un computer cu care poti naviga pe intenet, poti asculta muzica, poti vedea filme, poti avea convorbiri pe Skype (video si audio). Totul la un cost redus (vedeti singuri preturile, nu are sens sa le dau aici, ele variind).



De asemenea poti invata programare folosind acest setup, poti folosi acest setup pt a automatiza diverse operatii, poti sa il legi la un TV plat si sa il faci media center, iti poti automatiza diverse operatii chiar si in mediul industrial.

Prin 2008 am facut rost de un BeagleBoard Rev C4 (il numim de aici mai departe BB pt usurinta scrierii), nu am facut mari minuni cu el. Din 2008 multe lucruri s-au schimbat in lumea SBC, dar relativ neschimbata este cantitatea de material in limba romana despre aceste aplicatii ceea ce pentru unii tovarasi din Romania (de toate virstele) este un impediment de a pune in realitate ideile lor, nu cred ca replica "sa invete engleza!" este solutia (e oarecum echivalenta cu replica "-Ce vor acesti oameni? -Le este foame Alteta, nu au paine! - Pai de ce nu maninca cozonaci?"). Asadar aici este motivatia de a scrie despre BeagleBoard cand netul duduie de explicatii, sper sa va ajute sa incepeti ceva, sa faceti o chestie performanta made in Romania (cu aplicabilitate si in RaspberryPi, BeagleBone samd).

Articolul explica cum se poate face un setup cu un SBC (single board computer) tip BeagleBoard Rev C4: un webcam HD online, conectabil prin 3G (modem USB Huawei E220) / Ethernet / WiFi (un USB WiFi dongle D-Link DWA-110), care face poze la 20 de secunde, le salveaza pe un memory stick local, la fiecare 5 minute SBCul trimite o poza prin FTP pe un webserver.


SBCul are un server de SSH, un server de SFTP, un client de SFTP, are instalat Python. Prin I2C am conectat un senzor de presiune atmosferica BMP085 care returneaza si temperatura, aceste date sunt inregistrate intr-un fisier, sunt trimise si catre un webserver. Cu alte cuvinte, avem o camera video care ne ajuta sa monitorizam vremea (vezi cum e afara, sti temperatura si evolutia presiunii atmosferice - weather webcam, meteo webcam).

Senzorul de presiune atmosferica BMP085

Senzorul de presiune atmosferica BMP085

Acest articol este util pt ca un difera de la SBC la SBC modul in care instalezi Linuxul pe SBC, in mare aplicatiile si pachetele sunt la fel. De asemenea articolul doreste sa fie util, poate sa deschida calea cititorilor de limba romana, in engleza exista material pe tema asta (cum sa nu fie cand plac e destul de matura), am mai spus-o si o mai spun: spiritul Tehnium, spiritul acela de a face ceva singur dispare si din cauza lipsei accesului la informatie, nu sti efectiv de unde sa incepi, gasesti fragmente pe care uneori nu ai timp sau nu esti in stare sa le pui la un loc sa obtii ceva. Sper sa fie de ajutor.

BeagleBoard Rev C4 fiind mai vechi, are doar un port USB, nu are conector de retea pe placa, asa ca trebuie folosit un hub USB cu port de retea si care sa aibe alimentare externa (pt a putea folosi un mouse si o tastatura si pt conectarea la internet, e cel mai facil mod de a instala aplicatii si alte pachete, de a face update si upgrade). De asemenea e necesar un card SD de minim 4GB (sau maxim 8GB).

Mai e necesar sa avem alimentare externa pt BB (5V), un adaptor din ala care se baga in priza si are un cablu cu conector de 5mm cu 5V (ca si conectorul din dreapta, cu +5V in centru).

Conector de conductori electrici folosit pt cablurile de alimentare


  
Alimentarea - o sursa in comutatie, buck, de la 12V face 5V pt hubul USB 
si pt BeagleBoard Rev C4


Sa incepem: intai trebuie pregatit cardul SD pe care vom instala sistemul de operare, in cazul de fata vom folosi o distributie de Linux pt tipul de procesor de pe BeagleBoard Rev C4, avem Ubuntu, ceea ce este bine pt ca este extrem de popular si pt multe probleme, gasesti solutii pe internet. In mod cert nu esti primul care are problema respectiva si in mod cert cineva a facut un efort si a scris pe internet despre asta :)



Cardul SD (poate fi folosit si un card micro SD cu adaptor SD) trebuie sa aibe 2 partitii, prima de 50 MB si sa fie FAT32, iar ce ramine trebuie sa fie EXT2 sau EXT3 (partitie de Linux / Unix). Pt ca pe BB instalam Linux, pt usurinta am folosit un computer cu Linux, daca nu ai asa ceva si nu vrei sa instalezi Linux (recomand Ubuntu), poti sa bootezi Linux de pe un CD sau poti sa instalezi o masina virtuala pe PCul tau si ai un computer intr-un computer :) (detaliile le are colaboratorul nostru Google, tutorialul pt instalarea Ubuntu / masina virtuala in Windows este departe de scopul acestui articol, plus ca exista si Ubuntu Romania cu documentatie in limba romana).

Daca totusi nu vreti sa folositi Ubuntu, se poate folosi si Windows, dar cred ca este mai complicat si sunt lenes, nu imi place sa ma complic. Daca folositi Windows, puteti incerca sa instalati o masina virtuala (detalii aici)

Asadar avem un computer cu Linux, Ubuntu in cazul meu. Trebuie sa dam jos (dowload) pe computerul cu Linux distributia de Linux pt placa BB si sa o instalam pe cardul SD -  aici, pe elinux.org sunt pasii , sunt detaliati la sectiunea "Saucy 13.10". Imaginile de Ubuntu de pe acest site sunt modificate lunar, deci daca instalati acum o imagine, peste o luna imaginea de pe elinux.org va fi usor diferita, poate e bine sa salvati imaginile la voi (unele imagini pot avea probleme, vorbim de un mediu care este viu, se dezvolta, uneori merge, alteori nu).

Deschid un terminal in Ubuntu (Ctrl+Alt+T) si dau jos imaginea pre-compilata, spre exemplu Raring 13.03 (luati ultimile imagini de pe site, dar aveti grija ca se poate ca anumite imagini sa nu functioneze pe BB
, daca una nu merge, nu disperati, luati alta, nu merge Saucy, luati Raring sau luati una mai veche samd):

wget https://rcn-ee.net/deb/rootfs/raring/ubuntu-13.04-console-armhf-2013-11-15.tar.xz


Verificam integritatea arhivei:

md5sum ubuntu-13.04-console-armhf-2013-11-15.tar.xz

raspunsul trebuie sa fie: 6692e4ae33d62ea94fd1b418d257a514

Dezarhivam imaginea (dureaza circa 30 de secunde si nu apare nimic pe ecran, doar trecerea la un prompt nou indica finalizarea):


tar xf ubuntu-13.04-console-armhf-2013-11-15.tar.xz 

Intram in directorul unde am dezarhivat:

cd ubuntu-13.04-console-armhf-2013-11-15

Acum trebuie sa stim care este cardul SD, sa stim unde instalam imaginea:
 

sudo ./setup_sdcard.sh --probe-mmc

 Raspunsul e ceva similar, ca mai jos:

Are you sure? I Don't see [/dev/idontknow], here is what I do see...

fdisk -l:
Disk /dev/sda: 320.1 GB, 320072933376 bytes
Disk /dev/sdb: 4043 MB, 4043309056 bytes

lsblk:
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 298.1G  0 disk
├─sda1   8:1    0  14.9G  0 part [SWAP]
├─sda2   8:2    0  59.6G  0 part /
└─sda3   8:3    0 223.6G  0 part /home
sdb      8:16   1   3.8G  0 disk
└─sdb1   8:17   1   3.8G  0 part /media/cata/CANON_DC

In acest examplu, /dev/sdb este cardul SD (fiind luat de la un aparat foto) si el trebuie folosit mai departe.

Instalarea imaginii se face usor pt ca ceea ce am dat noi jos contine si un script care automatizeaza procesul de instalare:
 

sudo ./setup_sdcard.sh --mmc /dev/sdb --uboot beagle

Apare ceva de genul (la final):
............

Finished populating Boot Partition
-----------------------------
Populating rootfs Partition
Please be patient, this may take a few minutes, as its transfering a lot of data..
-----------------------------
/home/cata/ubuntu-13.10-console-armhf-2013-09-26/armhf-rootfs-ubuntu-saucy.tar
 409MB 0:01:36 [4.25MB/s] [===========================================>] 100%           
Transfer of data is Complete, now syncing data to disk...
-----------------------------
Finished populating rootfs Partition
-----------------------------
setup_sdcard.sh script complete
-----------------------------
The default user:password for this image:
ubuntu:temppwd
-----------------------------



Dupa ce se termina instalarea (aprox 3-4 minute), dam unmount la cardul SD, il bagam in BB si pornim placa BB. Pe monitorul legat la placa BB (monitorul trebuie sa aibe intrare digitala, BeagleBoard Rev C4 are doar iesire HDMI (S-Video nu e de interes)) ar trebui sa vedem un prompt unde introducem la user ubuntu si la parola temppwd.








In acet moment placa BeagleBoard nu are conexiune la internet, activarea conexiunii se face simplu cu 3 comenzi (pt conexiune prin cablul de retea, nu fara fir - wireless / WiFi):
 

sudo ifconfig -a
sudo dhclient eth0
sudo ifconfig -a




Hub USB cu 3 porturi USB si cu port Ethernet pt conexiunea la retea 
a placii BeagleBoard Rev C4 (care nu are port Ethernet instalat)





Cablul conectat la portul Ethenet de la hub-ul USB

Un alt hub USB cu 4 porturi USB cu alimentare externa, dezasamblat

Hub-ul USB de mai sus, alimentarea externa se poate face cu un conector 
ca in imagine (ii lipesti tu cablul)

Alt hub USB cu 4 porturi si alimentare externa

Un hub USB cu 4 porturi USB (unul e in lateral si 3 in fata), 
care a fost modificat pt alimentare externa
  
Alimentarea externa adaugata la hub0ul USB

Hub-ul USB in uz, are conectat un memory stick USB (32GB), 
un mouse optic USB si un modem pt internet mobil Huawei E220


Linux-ul poate parea extrem de inaccesibil, linia de comanda este chiar demotivanta, insa totul este simplificat azi din cauza informatiei disponibile pe internet: multi au avut diverse probleme, multi au postat solutiile si deci poti rezolva aceasta demotivare simplu :)

Linux-ul foloseste fisiere in care sunt scrisi parametri diverselor procese (programe) care fac Linuxul sa functioneze intr-un anumit mod, deci pt a seta anumite lucruri in Linux e necesar sa editam acele fisiere. Editare se poate face cu vi, dar consider ca este putin cam alambicat, sa ii lasam pe adevarati sa se joace cu vi-ul, eu recomand sa fie instalat un editor relativ mai intuitiv, nano se cheama.

Asadar avem conexiune la internet, deci putem instala nano (daca nu e deja inclus in distributie):
 

sudo apt-get install nano

Pt a putea avea nano drept editor principal pt texte / fisiere, trebuie adaugata o variabila in /etc/environment (deschidem pt editare fisierul):


sudo nano /etc/environment

Adaugam variabila EDITOR va fi ca mai jos:
EDITOR="nano"

(apoi Ctrl + o si Enter pt salvare, apoi Ctrl + x pt iesire)

Daca in acest moment mod reporni BB, la repornire nu mai avem conexiune la retea, asadar pt ca la pornire (boot-are) sa fie conexiune de retea (prin cablu prin hubul USB), trebuie sa editam cu editorul nano fisierul interfaces:
 

sudo nano /etc/network/interfaces

Trebuie sa adaugam cele de mai jos (sau scoatem comentariile acestor 2 linii):
## Configurarea unei adrese IP dinamice si conectarea automata prin cablu (interfata eth0)
auto eth0
iface eth0 inet dhcp


# sau pt conectarea prin WiFi (interfata wlan0 care este un USB WiFi dongle D-Link DWA-110)
auto wlan0
iface wlan0 inet dhcp
    wpa-ssid "Numele retelei"
    wpa-psk  "parola"


Salvam (Ctrl + o, enter, Ctrl + x) si dam un sudo reboot pt a verifica daca avem conexiune la internet. Ar trebui sa avem :)

Alta cale de a avea conexiune la bootare: editam cu nano fisierul rc.local, adaugam inainte de “exit 0” urmatoarele:
 

sudo nano /etc/rc.local

# By default this script does nothing.
sudo dhclient eth0
exit 0

Recomand schimbarea parolei userului ubuntu (initiala este temppwd):
 

sudo passwd ubuntu

Atentie: in Linux conteaza literele mari (majuscule) sau mici, conteaza daca lasi un spatiu sau daca nu lasi un spatiu in anumite comenzi samd.

Pt ca BB foloseste un SD card si pt ca un SD card sau memory stick USB are cicluri limitate de scriere (adica se strica relativ repede pt ca Linux tine o gramada de loguri), e bine sa folosim o aplicatie ce scrie logurile in memoria RAM, daca pt noi nu sunt importante. Vom utiliza ramlog


Trebuie instalat inainte lsof:

sudo apt-get install lsof

Instalam ramlog - ca in descrierea de aici:
http://www.tremende.com/ramlog/index.htm#install_2



wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb
sudo dpkg -i ramlog_2.0.0_all.deb

Apoi un reboot:

sudo reboot

Verificam daca ruleaza
 

/etc/init.d/ramlog status
 

si trebuie sa raspunda: ramlog is running...

In caz de probleme, verificam logurile:
 

more /var/log/ramlog

Daca rulezi ramlog si vrei sa fi sigur ca functioneaza ok:
 * rebootam BB de 2 ori
 * verificam logul ramlog ca porneste / se opreste. Daca apare similar ca mai jos, ramlog functioneaza bine:
 

more /var/log/ramlog

si raspunsul trebuie sa fie in genul:

Saving logs to hdd:                                      [  OK  ]
Stopping ramlog:                                         [  OK  ]
Starting ramlog-tmpfs 2.0.0:                       [  OK  ]


Din cauza ca placa BeagleBoard nu are o baterie care sa tina minte timpul (data si ora), cand deconectam placa de la alimentare, setarile se vor pierde. Ubuntu are instalat un mecanism cu care isi ia ora si data din exterior cu conditia sa fie conexiune la internet - ntpdate este serviciul care vine instalat in configuratia standard si care la bootare, incearca sa gasesca ora si data corecte. Totusi este posibil ca ceasul sa o ia inainte sau sa ramina in urma pe placa BB, asa ca e bine ca sa spunem cat de des sa se faca aceasta corectie (macar zilnic) -  rulam un cron job zilnic: creeam un fisier cu nano si adaugam in fisier

sudo nano /etc/cron.daily/ntpdate

Adaugam in fiserul gol linia: "ntpdate ntp.ubuntu.com" (Ctrl + o, Enter pt salvare si Ctrl + x pt iesire din nano). Fisierele, actiunile si utilizatorii in Linux au diverse permisiuni si proprietati, astfel ca acest fisier pe care noi il dorim executat zilnic (actiunea de corectie a timpului si a datei) trebuie permisa:

sudo chmod 755 /etc/cron.daily/ntpdate

Problema e ca fusul orar nu e cel corect, ora e cu vreo 4 ore in urma:

date
 

Fri Dec 13 23:45:05 UTC 2013

Solutia pe care eu am aplicat-o este instalarea lui tzdata (time zone data):

sudo dpkg-reconfigure tzdata

Current default time zone: 'Europe/Bucharest'
Local time is now:      Sat Dec 14 01:48:08 EET 2013.
Universal Time is now:  Fri Dec 13 23:48:08 UTC 2013.




  
Deci iata schimbarea:

date
 

raspuns Sat Dec 14 01:48:56 EET 2013

Linux-ul proaspat instalat posibil sa aibe nevoie de update-uri in anumite parti, alte parti pot fi upgradate si dupa instalare ramin anumite parti care pot fi considerate un fel de reziduuri, care trebuie sa fie curatate (clean up). Urmatoarele comenzi sunt utile in acest sens (dureaza un timp mai lung executia lor):
 

sudo apt-get update
sudo apt-get upgrade
sudo apt-get clean

 
In acest moment placa BeagleBoard este gata de utilizare. Cum spuneam setarea / instalarea Linux-ului pe un SBC reprezinta partea diferita, restul operatiilor care se pot realiza cu un SBC gen BeagleBoard sunt comune la toate placile. 


PS: daca doriti sa aveti o interfata grafica, LXDE este alegerea caci BeagleBoard nu are resurse ca un computer real, iar LXDE este o interfata grafica (GUI) care nu cere multe resurse. Este utila caci anumite setari se pot face mult mai lejer cu interfata grafica decat din linia de comanda (spre exemplu accesul la reteaua mobila 3G prin dongle USB). Instalarea este simpla:

sudo apt-get install lxde

Dupa instalare, conectati un mouse si o tastatura, ar trebui sa porneasca LXDE, daca nu, rulati comanda:

startlxde

Pe monitorul conectat la BeagleBoard Rev C4 va apare o minunata interfata grafica LXDE, aveti rabdare caci se misca lent, doar aveti un computer la 600MHz :)


Cateva masuratori legate de consum: totul are un alimentator de 12Vcc care merge catre un convertor coboritor in comutatie (buck) care da cei 5 Vcc necesari placii, necesari hub-urilor USB si celorlalte periferice USB. Am masurat curentul imediat dupa alimentatorul de 12Vcc, cand estedeschid ferestre, navighez pe internet etc, trage aproape 800 mA, de vina fiind partea grafica, in rest (cand nu utilizez partea grafica), pina in 500 mA.

Adica 6W pt un SBC, ceea ce nu e rau (e drept ca la un laptop mai sunt si un panel LCD care trage si el un curent etc).

Episodul urmator: aici.

*********************************************************
English: tutorial on how to hardware setup a BeagleBoard Rev C4 (power supply, USB hubs, USB memory stick, webcam), how to install Ubuntu on a BagleBoard Rev C4 on SD card, how to connect the board to a wired internet connexion and to a wireless connection, how to install a graphic user interface (GUI) LXDE.

For more details please use Google Translate (Romanian to English) and also use the coment area below!

Niciun comentariu:

Trimiteți un comentariu