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