Architektura Systemów Wbudowanych

Transkrypt

Architektura Systemów Wbudowanych
Architektura Systemów Wbudowanych
LABORATORIUM 8
May 28, 2015
IMI† I NAZWISKO (NR INDEKSU):
IMI† I NAZWISKO (NR INDEKSU):
IMI† I NAZWISKO (NR INDEKSU):
1
Uruchomienie Raspberry Pi
1. Uruchom komputer Raspberry Pi (zasilanie z komputera hosta poprzez kabel USB). Wcze±niej upewnij si¦, »e na pªytce
zamontowana zostaªa karta SD (z systemem operacyjnym Raspbian).
2. Zaloguj si¦ przez ssh do systemu operacyjnego na Raspberry Pi (RPi):
login:
pi
hasªo:
raspberry
W systemie Raspbian zainstalowane s¡ narz¦dzia niezb¦dne do dalszej pracy: python i git. Mo»na równie» korzysta¢ z
polecenia sudo.
2
Przygotowanie konta Google i arkusza kalkulacyjnego na dysku Google
1. Zaloguj si¦ do konta Google. Informacj¦ o koncie (login i hasªo) otrzymasz od nauczyciela.
2. Przejd¹ do konsoli programisty Google:
https://console.developers.google.com/project
i utwórz nowy projekt. Nast¦pnie przejd¹ do menu APIs & auth -> Credentials i wygeneruj nowy ID klienta (Create new
Client ID). Jako typ aplikacji wybierz Installed application. Przejd¹ do konguracji Consent screen. Wpisz adres email
oraz nazw¦ programu (dowoln¡) w odpowiednie pola i zapisz zmiany.
3. Wró¢ do menu APIs & auth -> Credentials i pobierz na dysk komputera hosta plik JSON z informacj¡ uwierzytelniaj¡c¡
(Download JSON) - b¦dzie ci ona potrzebna. Na dysku hosta zmie¢ nazw¦ pliku na client_secret.json.
4. Na dysku Google utwórz nowy arkusz kalkulacyjny. Trzy pierwsze kolumny nazwij (wpisz w pierwszym wierszu) odpowiednio: date, time i value. W adresie URL arkusza znajduje si¦ jego identykator, np.:
https://docs.google.com/spreadsheets/d/1Fe4-Wu_rzVPpAm_YjVdoNiZL0lEvWrKXYPDXxRidFyE/edit#gid=0
B¦dzie ci on potrzebny.
3
Przechowywanie danych w chmurze - Google Spreadsheets
1. Do napisania programu Python do komunikacji z Google Spreadsheet potrzebnych b¦dzie kilka specjalnych moduªów.
Pierwszym z nich jest
google-api-python, który nale»y pobra¢ z repozytorium na github:
git clone git://github.com/google/google-api-python-client
™ródªa moduªu mo»na pobra¢ do katalogu domowego lub jednego z katalogów systemowych (np. /opt). Wówczas jednak
nale»y uruchomi¢ git z uprawnieniami root-a (sudo).
Po zako«czeniu pobierania wejd¹ do katalogu google-api-python-client i zanistaluj biblioteki w systemie:
sudo python setup.py install
1
Je±li w odpowiedzi dostaniesz od systemu hosta komunikat:
ImportError: No module named setuptools
doinstaluj pakiet setuptools:
sudo apt-get install setuptools
i ponownie:
sudo python setup.py install
2. Kolejnym potrzebnym moduªem jest
oauth2client:
https://github.com/google/oauth2client
podobnie jak w przypadku poprzedniego moduªu potrzebna jest instalacja bibliotek w systemie:
sudo python setup.py install
3. Otwórz skrypt
sheet_test.py. Jego kod jest inspirowany programem ze strony:
#http://stackoverow.com/questions/20248555/list-of-spreadsheets-gdata-oauth2/29157967#29157967
Przeanalizuj skrypt. Program ten zawiera procedur¦ autoryzacji i uwierzytelniania za pomoc¡ tzw. listów uwierzytelniaj¡cych (Credentials). Potrzebne informacje czyta z pliku client_secret.json (obejrzy go po pobraniu na maszyn¦ hosta!),
w którym znajduj¡ si¦ informacje widoczne w konsoli programisty Google: Client ID i Client Secret.
4. Uruchom skrypt
sheet_test.py. Je±li uruchomienie nie powiedzie si¦ i wy±wietlony zostanie komunikat:
ImportError: cannot import name tools
skopiuj moduª
tools do katalogu z twoim programem:
cp $KATALOG_MODULY/oauth2client/oauth2client/tools.py $TWOJ_KATALOG
a w kodzie programu zmie« lini¦:
from oauth2client.tools import tools
na:
import tools
Uruchom program.
5. Podczas pierwszej próby nawi¡zania ª¡czno±ci z usªug¡ Google zostaniesz poproszony o potwierdzenie autoryzacji. Je±li to
zrobisz, w katalogu z programem na maszynie hosta zostanie zapisana informacja tzw. tokenu dost¦pu (plik
cres.dat).
sheet_test.py zatrzyma si¦ przy próbie importu moduªów do zarz¡dzania arkuszem kalkulacyjnym
gdata.spreadsheet.service i gdata.service. Moduªy te nale»y pobra¢ w formie pakietu gdata-pythonclient z repozytorium: https://github.com/google/gdata-python-client i zainstalowa¢:
6. Wykonywanie skryptu
Google Sheet:
sudo python setup.py install
Tym razem uruchomienie programu powinno zako«czy¢ si¦ sukcesem :)
7. Zwró¢ uwag¦, »e w kodzie wyst¦puj¡ jawnie:
(a) nazwa pliku z informacj¡ uwierzytelniaj¡c¡ client_secret.json
(b) warto±¢ zmiennej reprezentuj¡cej identykator arkusza kalkulacyjnego (spreadsheet_key).
Te informacje powinny by¢ aktualizowane za ka»dym razem, gdy nast¡pi zmiana konta Google lub arkusza kalkulacyjnego.
8. Odkomentuj ko«cow¡ cz¦±¢ skryptu (poni»ej linii 30) i ponownie go uruchom. Sprawd¹ co si¦ dzieje z arkuszem kalkulacyjnym.
PUNKTY (MAX 2):
2
4
Kompilacja programu C dla Raspberry Pi
Opis procedur w tym rozdziale zostaª opracowany na podstawie:
http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-compiler/
1. Do kompilacji skro±nej programów dla Raspberry Pi na maszynie hosta potrzebny jest system plików systemu operacyjnego
RPi. System plików wraz z potrzebnymi narz¦dziami (tzw. toolchain) mo»na pobra¢ z repozytorium:
git clone git://github.com/raspberrypi/tools.git
Katalog ten powinien znajdowa¢ sie na dysku komputera w laboratorium w katalogu
(a) Przejd¹ do katalogu:
/opt/rpi.
tools/arm-bcm2708. Znajduj¡ si¦ tam cztery podkatalogi. Sprawd¹, jaka wersja systemu
operacyjnego jest na komputerze hosta:
uname -a
Je±li jest to wersja 64-bitowa, wªa±ciwy toolchain znajduje si¦ w katalogu gcc-linaro-arm-linux-gnueabihf-raspbian-x64.
(b) Dopisz ±cie»k¦ do tego katalogu do zmiennej ±rodowiskowej PATH (najlpiej w pliku .bashrc):
cd ~
nano .bashrc
export PATH=$PATH:opt/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
wykonaj skrypt:
source .bashrc
Sprawd¹, czy teraz masz dost¦p do toolchaina z bie»¡cej ±cie»ki:
arm-linux-gnueabihf-gcc -v
2. Uruchom ±rodowisko Eclipse:
cd /opt/eclipse
./eclipse &
(a) Utwórz nowy projekt C++. Rodzaj projektu - Hello World dla Cross GCC. Wpisz nazw¦ i przejd¹ dalej a» do okienka
Cross GCC Command. Tam nale»y zdeniowa¢:
Cross compiler prex: arm-linux-gnueabihf-
Cross compiler path: /opt/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/
(b) Skompiluj program.
3. Znajd¹ plik wykonywalny na dysku.
Znajduje si¦ on w ±cie»ce: workspace/nazwa_projektu/Debug/.
Sprawd¹, jakiego
rodzaju jest to plik:
le plik_wykonywalny
(a) Skopiuj plik wykonywalny na RPi:
scp plik_wykonywalny pi@nrIP:.
(b) Poª¡cz si¦ z RPi za pomoc¡ ssh i uruchom program.
4. Kopiowanie i uruchamianie pliku na maszynie docelowej jest równie» mo»liwe z poziomu ±rodowiska Eclipse.
(a) Wybierz z menu Window->Show View->Other. Nast¦pnie: Remote Systems i Remote Systems Details. W nowo
otwartym oknie kliknij prawym przyciskiem myszy i wybierz "New-> Connection" w celu zdeniowania poª¡czenia
SSH z RPI (SSH only). Wprowad¹ numer IP pªytki.
(b) Po zako«czeniu konguracja poª¡czenia z RPI pojawi sie w oknie Remote Systems. Po klikni¦ciu prawym przyciskiem
myszy mo»na si¦ poª¡czy¢ z RPI (Connect).
(c) Ponownie kliknij na RPi prawym przyciskiem myszy (w Remote System Details) i wybierz Show in Remote Systems
View. Otwarte zostanie drzewo katalogów dla RPi.
(d) Skopiuj plik wykonywalny na RPi: kopiuj z katalog Debug projektu i wklej do katalogu domowego RPi.
(e) Kliknij prawym przyciskiem myszy na SSH terminal w katalogu Raspberry Pi. Wybierz Launch Terminal. Zobaczysz
terminal maszyny docelowej.
3
(f ) W terminalu maszyny docelowej nadaj atrybut wykonywalno±ci skopiowanemu plikowi binarnemu:
chmod +x plik_wykonywalny
i uruchom program:
./plik_wykonywalny
PUNKTY (MAX 2):
5
Moduªy C w Python-ie
Projekty dla systemów wbudowanych maj¡ zªo»on¡ funkcjonalno±¢. Oprogramowanie powinno jednocze±nie obsªugiwa¢ interfejsy
komputera, ª¡czy¢ si¦ z sieci¡ (w szczególno±ci - z chmur¡) i analizowa¢ gromadzone dane. Je±li analiza danych wymaga zªo»onych
obliczeniowo operacji, warto napisa¢ t¡ cz¦±¢ programu w j¦zyku C. Jednak komunikacj¦ sieciow¡ ªatwiej zrealizowa¢ w j¦zyku
Python lub Java. Poni»ej znajduje si¦ procedura przygotowania biblioteki w j¦zyku C jako moduªu wykorzystywanego przez
program napisany w Python-ie.
1. Pod adresem:
http://en.wikibooks.org/wiki/Python_Programming/Extending_with_C
znajduje si¦ opis dwóch procedur przygotowania moduªu C dla Python.
Podczas ¢wiczenia laboratoryjnego zostanie
wykorzystana druga z nich, oparta na programie SWIG (Simplied Wrapper and Interface Generator), sªu»¡cym do ª¡czenia
bibliotek C/C++ z j¦zykami skryptowymi.
2. Na maszynie hosta nale»y zainstalowa¢ nast¦puj¡ce narz¦dzia:
sudo apt-get install swig python-dev
3. Napisz funkcj¦ C zwracaj¡c¡ wynik mno»enia dwóch liczb caªkowitych. Deklaracja funkcji:
int multiply(int, int);
Zapisz j¡ w pliku o nazwie
4. Utwórz plik
mtplmodule.c.
mtpl.i z informacj¡ dla SWIG:
/*mtpl.i*/
%module mtpl
extern int multiply(int a, int b);
5. Uruchom SWIG:
swig -python mtpl.i
W bie»¡cym katalogu powinny powsta¢ pliki: mtpl.py i mtpl_wrap.c
6. Skompiluj ¹ródªa:
gcc -fpic -c mtplmodule.c mtpl_wrap.c -I/usr/include/python2.X/
W miejsce X wstaw nr odpowiedni¡ liczb¦ - sprawd¹ jak nazywa si¦ katalog w twoim systemie plików.
7. Linkowanie do pliku biblioteki wspóªdzielonej:
gcc -shared mtplmodule.o mtpl_wrap.o -o _mtpl.so
8. Uruchom lini¦ polece« Python i sprawd¹, czy biblioteka dziaªa:
python
>>> import mtpl
>>> print mtpl.multiply(2,3)
ZADANIE 1. Powtórz caª¡ procedur¦ kompilacji moduªu C dla Python-a na maszynie docelowe
(RPi)!
PUNKTY (MAX 2):
4
ZADANIE 2. Napisz program, który:
•
Wypeªnia dwa bufory (tablice jednowymiarowe) kolejnymi liczbami pseudolosowymi z przedziaªu 1-100. W ka»dej iteracji
do ka»dego z buforów zapisywana jest jedna nowa liczba.
•
Oblicza wspóªczynnik korelacji liniowej (Pearsona) mi¦dzy danymi w buforach. W ka»dej iteracji wynikiem tej operacji
jest jedna liczba.
(patrz: Wspóªczynnik korelacji Pearsona w Wikipedii)
•
Zapisuje wspóªczynniki korelacji w arkuszu kalkulacyjnym Google w formacie: kolumna1: data, kolumna2: czas, kolumna3:
korelacja
Program powienien wykonywa¢ przynajmniej 50 iteracji powy»szej procedury. Program powinien by¢ napisany w j¦zyku
Python oraz w j¦zyku C.
PUNKTY (MAX 2):
5