Intel Galileo, Yocto, Python, IC, SSH, Crosscompile

advertisement
Laboratorium 1
(Intel Galileo, Yocto, Python, I2C, SSH, Crosscompile)
Zadania do wykonania
1.
2.
3.
4.
5.
Aktualizacja firmware’u układu Galileo. (5%)
Przygotowanie obrazu systemu Yocto na karcie SD. (10%)
Połączenie i konfiguracja systemu operacyjnego Yocto. (5%)
Instalacja i konfiguracja przykładowego rozszerzeniowego modułu Pythona. (5%)
Przygotowanie infrastruktury do testowania portów układu Galileo, opracowanie testów i ich implementacja w języku Python. Należy przetestować działanie następujących elementów układu Galileo:
•
•
•
•
cyfrowe wyjścia, (10%)
cyfrowe wejścia, (10%)
analogowego wyjścia korzystając z oscyloskopu, (10%)
analogowego wejścia. (10%)
6. Obsługa wyświetlacza LCD przy pomocy Pythona. (10%)
7. Zbudowanie woltomierza, (25%)
Bonus. Kompilacja skrośna. (+0.5)
Laboratorium 2
(Intel Galileo, Debian, CRON, Gstreamer)
Zadania do wykonania
1. Przygotowanie obrazu systemu Debian na karcie SD. (10%)
2. Zwiększenie rozmiaru partycji zawierającej system plików. (15%)
3. Połączenie i konfiguracja systemu operacyjnego: (20%)
• konfiguracja systemu
• aktualizacja systemu przy pomocy menadżera pakietów
• instalacja Gstreamera
4. Cykliczne wykonywanie zadań za pomocą systemu CRON (10%)
5. Przesyłanie plików używając Gstreamera i protokołu UDP – konfiguracja w powłoce BASH (10%)
6. Strumieniowanie audio używając Gstreamera i protokołu UDP
– konfiguracja w powłoce BASH (15%)
7. Opracowanie autorskiej aplikacji cyklicznego strumieniowania audio (20%)
1
Laboratorium 1
(Intel Galileo, Yocto, Python, I2C, SSH, Crosscompile)
Zadania do wykonania
1.
2.
3.
4.
5.
Aktualizacja firmware’u układu Galileo. (5%)
Przygotowanie obrazu systemu Yocto na karcie SD. (10%)
Połączenie i konfiguracja systemu operacyjnego Yocto. (5%)
Instalacja i konfiguracja przykładowego rozszerzeniowego modułu Pythona. (5%)
Przygotowanie infrastruktury do testowania portów układu Galileo, opracowanie testów i ich implementacja w języku Python. Należy przetestować działanie następujących elementów układu Galileo:
•
•
•
•
cyfrowe wyjścia, (10%)
cyfrowe wejścia, (10%)
analogowego wyjścia korzystając z oscyloskopu, (10%)
analogowego wejścia. (10%)
6. Obsługa wyświetlacza LCD przy pomocy Pythona. (10%)
7. Zbudowanie woltomierza, (25%)
Bonus. Kompilacja skrośna. (+0.5)
1
Aktualizacja firmware’u układu Galileo
Aktualizacji układu Galileo należy dokonać przy pomocy dostarczonej aplikacji Arduino. Aplikację należy
uruchomić z uprawnieniami administratora (jako root) na komputerze laboratoryjnym. Należy się upewnić
czy został wybrany prawidłowy plik pośredniczący /dev/ttyACM0 oraz czy przewód USB jest podłączony, a
przewód zasilania odłączony. Ręczne przerwanie procesu aktualizacji lub odłączenie zasilania podczas tego
procesu grozi awarią urządzenia! Dlatego zalecane jest zachowanie szczególnej ostrożności.
Rys. 1.1. GUI – Arduino.
2
2
2.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
Pobranie obrazu systemu operacyjnego
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
# przejdź do katalogu roboczego/domowego:
cd ~
# ściagnij
˛
obraz Linuksa: SDCard.1.0.4.tar.bz2 do katalogu roboczego/domowego
wget http://downloadmirror.intel.com/24355/eng/SDCard.1.0.4.tar.bz2
# lub za pomoca˛ przegladarki
˛
internetowej z https://communities.intel.com/docs/DOC-22226
# rozpakuj archiwum do katalogu roboczego/domowego:
tar xjvf SDCard.1.0.4.tar.bz2
# zawartość znajdzie si˛
e w katalogu: image-full-galileo
# zawartość czyli:
# - jadro
˛
systemu - bzImage
# - katalog rozruchowy - boot
# - program rozruchowy - grub.efi
# - rozruchowy system plików - core-image-minimal-initramfs-clanton.cpio.gz
# - właściwy system plików - image-full-galileo-clanton.ext3
2.2
1
Przygotowanie obrazu systemu Yocto na karcie SD
Formatowanie karty SD i skopiowanie wymaganych plików
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# wszystkie polecenia wydawane przez administratora (root)
# należy wykonywać ze szczególna˛ ostrożnościa˛ - zwłaszcza polecenie dd i fdisk
# podłacz
˛
kart˛
e mikro SD do komputera, sprawdź jaki plik reprezentuje kart˛
e w systemie plików (tu np. /dev/sdc)
# można to zrobić odczytujac
˛ ostatnie komunikaty jadra
˛
systemu:
dmesg
[956173.698945] sdc: sdc1
[956173.700074] sd 14:0:0:0: [sdc] Attached SCSI removable disk
8
9
10
11
12
13
14
15
16
# usuń wszystkie dane z karty:
dd if=/dev/zero of=/dev/sdc
# procedura ta w zależności od pojemności karty może trwać dość długo,
# dlatego można ewentualnie nadpisać tylko poczatek
˛
karty:
dd if=/dev/zero of=/dev/sdc bs=512 count=1
1+0 przeczytanych rekordów
1+0 zapisanych rekordów
skopiowane 512 bajtów (512 B), 0,00264133 s, 194 kB/s
17
18
19
20
21
22
23
24
25
1
2
3
# konfiguracj˛
e tablicy partycji należy przeprowadzić programem fdisk
# prosz˛
e wcześniej przejrzeć manual programu fdisk
man fdisk
# jeżeli w systemie jest zainstalowany podr˛
ecznik, to powinna si˛
e wyświetlić dokumentacja
# należy założyć nowa˛ tablic˛
e partycji oraz utworzyć w niej jedna˛ nowa˛ partycj˛
e
fdisk /dev/sdc # przejście do edycji tablicy partycji
# Prosz˛
e si˛
e upewnić czy wybrano właściwy plik reprezentujacy
˛
kart˛
e SD
# w zależności od konfiguracji systemu może to być /dev/sdb, /dev/sdd itd.
w programie fdisk systemu Debian w komputerze laboratoryjnym
Witamy w programie fdisk (util-linux 2.25.2). # program fdisk służy do manipulowania tablica˛ partycji
Zmiany pozostana˛ tylko w pami˛
eci do chwili ich zapisania.
Przed użyciem polecenia zapisu prosimy o ostrożność.
4
5
6
7
8
9
10
11
12
13
14
15
Urzadzenie
˛
nie zawiera żadnej znanej tablicy partycji.
Created a new DOS disklabel with disk identifier 0xb4d026f0. # automatyczne utworzenie nowej tablicy partycji
# ekwiwalentnie można wykonać polecenie o
Polecenie (m wyświetla pomoc): n # tworzymy nowa˛ partycj˛
e primary obejmujac
˛ a˛ cała˛ kart˛
e SD
Typ partycji
p
główna (głównych 0, rozszerzonych 0, wolnych 4)
e
rozszerzona (kontener na partycje logiczne)
Wybór (domyślnie p): p
Numer partycji (1-4, domyślnie 1): 1
Pierwszy sektor (2048-15523839, domyślnie 2048): 2048
Ostatni sektor, +sektorów lub +rozmiarK,M,G,T,P (2048-15523839, domyślnie 15523839): 15523839
16
17
Utworzono nowa˛ partycj˛
e 1 typu ’Linux’ o rozmiarze 7,4 GiB.
18
19
20
21
22
Polecenie (m wyświetla pomoc): t # zmiana typu partycji na FAT32
Wybrano partycj˛
e 1
Kod szesnastkowy (L wyświetla list˛
e wszystkich kodów): b
Zmieniono typ partycji ’Linux’ na ’W95 FAT32’.
23
24
25
26
27
28
29
30
Polecenie (m wyświetla pomoc): p # wyświetla konfiguracj˛
e tablicy partycji
Dysk /dev/sdc: 7,4 GiB, bajtów: 7948206080, sektorów: 15523840
Jednostki: sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x9e9d9bed
31
32
33
Device
/dev/sdc1
Boot Start
End Sectors
2048 15523839 15521792
Size Id Type
7,4G b W95 FAT32
34
35
36
37
38
Polecenie (m wyświetla pomoc): w # fizyczny zapis zmian na urzadzeniu
˛
Tablica partycji została zmodyfikowana.
Wywoływanie ioctl() w celu ponownego odczytu tablicy partycji.
Synchronizacja dysków.
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# po zakończeniu programu fdisk powinien pojawić si˛
e plik /dev/sdc1 reprezentujacy
˛
nowa˛ partycj˛
e
# należy utworzyć na niej system plików FAT32:
mkfs.vfat -F 32 /dev/sdc1
mkfs.fat 3.0.27 (2014-11-12)
# nast˛
epnie utworzyć punkt montowania i zamontować t˛
e partycj˛
e
mkdir sdcard
mount /dev/sdc1 sdcard/
# w końcu kopiujemy zawartość katalogu image-full-galileo:
cp image-full-galileo/* sdcard/ -r
# synchronizujemy dyski:
sync
# i odmontowujemy kart˛
e SD:
umount sdcard
# obraz systemu jest już gotowy, wkładamy kart˛
e SD do układu Galileo
# podłaczamy
˛
zasilanie i czekamy, aż system zostanie załadowany
# proces uruchamiania systemu operacyjnego można obserwować za pośrednictwem interfejsu szeregowego
# należy podłaczyć
˛
odpowiednio przewód i uruchomić aplikacj˛
e putty:
putty
# należy ustawić pr˛
edkość równa˛ 115200 bodów na sekund˛
e
# i komunikować si˛
e za pośrednictwem pliku /dev/ttyUSB0 - choć to może być zależne od systemu operacyjnego
2.3
Nagranie przygotowanego obrazu karty SD z systemem Yocto (alternatywnie)
Niniejszy podpunkt przedstawia alternatywny sposób przygotowania karty SD korzystając z gotowego obrazu. Zaproponowano tu użycie obrazu systemu Yocto w wersji iot-devkit, który jest już skonfigurowany do
pracy z interfejsami I2 C. Wspomniany obraz należy zastosować przy obsłudze wyświetlacza LCD w dalszych
punktach niniejszego ćwiczenia lub skonfigurować system operacyjny instalując wymagane komponenty do obsługi interfejsu I2 C.
1
2
3
4
5
6
7
8
9
10
11
12
13
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# przejdź do katalogu roboczego/domowego:
cd ~
# ściagnij
˛
obraz Linuksa: Yocto (iot-devkit-latest) do katalogu roboczego/domowego
wget http://iotdk.intel.com/images/iot-devkit-latest-mmcblkp0.direct.bz2
# lub za pomoca˛ przegladarki
˛
internetowej z http://iotdk.intel.com/images/
# rozpakuj archiwum do katalogu roboczego/domowego:
bunzip2 -c iot-devkit-latest-mmcblkp0.direct.bz2 > iot-devkit-latest-mmcblkp0.direct
# plik iot-devkit-latest-mmcblkp0.direct jest obrazem kardy SD, który należy nagrać poleceniem dd
dd if=iot-devkit-latest-mmcblkp0.direct of=/dev/sdc
# nast˛
epnie wkładamy kart˛
e SD do układu Galileo
# podłaczamy
˛
zasilanie i czekamy, aż system zostanie załadowany tak, jak opisano w poprzednim podpunkcie
# opcjonalnie można monitorować post˛
ep kopiowania za pomoca˛ polecenia pv
dd if=iot-devkit-latest-mmcblkp0.direct | pv | dd of=/dev/sdc
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Połączenie i konfiguracja systemu operacyjnego Yocto
w powłoce systemu operacyjnego Yocto w układzie Galileo za pośrednictwem RS i putty (jako root)
clanton login: root
# powłoka powinna nas powitać w nast˛
epujacy
˛
sposób:
root@clanton:~#
# na poczatku
˛
prosz˛
e ustawić hasło roota:
passwd
Changing password for root
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
passwd: password changed.
# prosz˛
e zapami˛
etać ustawione hasło
# nast˛
epnie prosz˛
e sprawdzić konfiguracj˛
e połaczenia
˛
ethernetowego:
ifconfig eth0
eth0
Link encap:Ethernet HWaddr 98:4F:EE:01:75:8D
inet addr:192.168.0.23 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::9a4f:eeff:fe01:758d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:65066 errors:0 dropped:2285 overruns:0 frame:0
TX packets:72 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5062703 (4.8 MiB) TX bytes:9513 (9.2 KiB)
Interrupt:40 Base address:0xc000
# statyczny adres IP np. 192.168.0.23 z maska˛ 255.255.255.0 można ustawić nast˛
epujaco:
˛
ifconfig eth0 192.168.0.23 255.255.255.0
# aby połaczenie
˛
internetowe było konfigurowane automatycznie przy właczeniu
˛
systemu,
# należy wyedytować plik /etc/network/interfaces, np.:
auto eth0
iface eth0 inet static
address 192.168.0.23
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
# lub dla użycia dhcp:
auto eth0
iface eth0 inet dhcp
4
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
# a nast˛
epnie zrestartować połaczenie
˛
internetowe:
/etc/init.d/networking stop
Deconfiguring network interfaces... done.
/etc/init.d/networking start
Configuring network interfaces... [68481.556663] eth0: device MAC address 98:4f:ee:01:75:8d
[68481.578461] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
udhcpc (v1.20.2) started
Sending discover...
[68483.560262] libphy: stmmac-1:01 - Link is Up - 100/Full
[68483.565563] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Sending discover...
Sending select for 192.168.0.23...
Lease of 192.168.0.23 obtained, lease time 90000
ip: RTNETLINK answers: File exists
ip: RTNETLINK answers: File exists
/etc/udhcpc.d/50default: Adding DNS 153.19.48.1
/etc/udhcpc.d/50default: Adding DNS 192.168.0.1
done.
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym
# po konfiguracji sieci można zalogować si˛
e w systemie Yocto za pośrednictwem ssh
# poza logowaniem protokół ssh daje możliwość kopiowania plików na zdalny serwer np.:
echo "Jestem na komputerze laboratoryjnym." > plik.txt
scp plik.txt [email protected]:~
The authenticity of host ’192.168.0.23 (192.168.0.23)’ can’t be established.
ECDSA key fingerprint is 2c:f5:db:5d:b7:9e:87:ff:40:3f:37:60:98:90:2e:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’192.168.0.23’ (ECDSA) to the list of known hosts.
[email protected]’s password:
plik.txt
100%
37
# prosz˛
e si˛
e upewnić, czy układ Galileo jest podłaczony
˛
do sieci lokalnej
# logowanie na zdalnym układzie Galileo wyglada
˛
nast˛
epujaco:
˛
ssh [email protected]
[email protected]’s password:
root@clanton:~#
# od tej chwili jesteśmy zalogowani na płytce Galileo
w powłoce systemu operacyjnego Yocto w układzie Galileo za pośrednictwem ssh (jako root)
# prosz˛
e sprawdzić czy udało si˛
e skopiować plik.txt:
ls ~
plik.txt
cat ~/plik.txt
Jestem na komputerze laboratoryjnym.
# prosz˛
e sprawdzić czy w systemie dost˛
epny jest interpreter j˛
ezyka python:
python
Python 2.7.3 (default, Oct 16 2014, 16:04:29)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
# jeżeli pojawi si˛
e powyższy komunikat, to znaczy, że można przejść do kolejnego punktu instrukcji
3.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
0.0KB/s
Konfiguracja przy pomocy systemowego menadżera pakietów – OPKG
w powłoce systemu operacyjnego Yocto w układzie Galileo (jako root)
# dodajemy dodatkowe wpisy konfiguracyjne
echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/mraa-upm.conf
# aktualizujemy informacje o dost˛
epnych pakietach
opkg update
Downloading http://iotdk.intel.com/repos/1.1/iotdk/Packages.
Updated list of available packages in /var/lib/opkg/iotdk.
Downloading http://iotdk.intel.com/repos/1.1/intelgalactic/Packages.
Updated list of available packages in /var/lib/opkg/mraa-upm.
# list˛
e wszystkich dost˛
epnych pakietów można wyświetlić za pomoca˛ polecenia:
opkg list
# tu si˛
e powinna wyświetlić długa lista pakietów...
# sprawdzamy czy sa˛ dost˛
epne pakiety mraa i upm:
opkg list | grep mraa
libmraa0 - 0.5.4.105 - mraa built using CMake
opkg list | grep upm
upm - 0.1.8.183 - upm built using CMake
# instalujemy dodatkowe oprogramowanie - upm i mraa
# jeżeli użyto obraz systemu iot-devkit, pakiety te sa˛ już zainstalowane
opkg install libmraa0
Package libmraa0 (0.5.4.105) installed in root is up to date.
opkg install upm
Package upm (0.1.8.183) installed in root is up to date.
# dodatkowo należy zaktualizować system za pomoca˛ opkg:
opkg upgrade
Upgrading libmraa0 on root from 0.4.5-r0 to 0.5.4.105...
Downloading http://iotdk.intel.com/repos/1.1/intelgalactic/libmraa0_0.5.4.105_i586.ipk.
Removing obsolete file /usr/lib/libmraa.so.0.4.5.
libmraa0 (0.5.4.105) already install on root.
Upgrading upm on root from 0.1.8-r0 to 0.1.8.183...
Downloading http://iotdk.intel.com/repos/1.1/intelgalactic/upm_0.1.8.183_i586.ipk.
upm (0.1.8.183) already install on root.
libmraa0 (0.5.4.105) already install on root.
Configuring libmraa0.
Configuring upm.
5
00:00
3.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
Konfiguracja połączenia SSH – logowanie bez hasła
w powłoce systemu operacyjnego Yocto w układzie Galileo (jako root)
# aby z układu Galileo łaczyć
˛
si˛
e za pośrednictwem SSH bez hasła należy wygenerować i skopiować odpowiednio klucze
# generowanie kluczy
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/root/.ssh/id_rsa.
Your public key has been saved in /home/root/.ssh/id_rsa.pub.
The key fingerprint is:
6e:3b:88:fa:64:bc:7c:c3:d3:61:d8:d7:16:64:b2:90 root@quark01758d
The key’s randomart image is:
+--[ RSA 2048]----+
|
.
|
|
E . o
|
|
. =
|
|
. .
|
|
oS . .
|
|
. ..+ . o
|
|
+o +oo .
|
|
+..*.o.
|
| .o+. o..
|
+-----------------+
# przy pytaniu o hasło należy wcisnać
˛ ENTER - utworzony zostanie klucz bezhasłowy
# po wykonaniu tego polecenia, wygenerowane zostały dwa klucze:
# klucz prywatny został zapisany w pliku /home/root/.ssh/id_rsa - nie powinniśmy go udost˛
epniać nikomu
# drugi klucz, publiczny, pojawił si˛
e w pliku /home/rot/.ssh/id_rsa.pub
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako zwykły użytkownik)
cd ~
# kopiujemy wpis o kluczu publicznym z układu Galileo na komputer laboratoryjny
# Prosz˛
e pami˛
etać o sprawdzeniu adresów IP i nazw użytkowników
scp [email protected]:/home/root/.ssh/id_rsa.pub .
# wpisujemy informacj˛
e o kluczu do pliku konfiguracyjnego serwera SSH w katalogu domowym
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
# od tej chwili logowanie z Galileo na komputer laboratoryjny jako zwykły użytkownik
# nie powinno wymagać podawania hasła. Jeżeli chcemy logować si˛
e jako root,
# to informacj˛
e o kluczu publicznym należy dodać również do pliku konfiguracyjnego
# w katalogu domowym tego użytkownika
w powłoce systemu operacyjnego Yocto w układzie Galileo (jako root)
# należy sprawdzić, czy można zalogować si˛
e przez SSH z układu Galileo nie używajac
˛ hasła
# np wykonujac
˛ tam zdalnie polecenie:
ssh [email protected] ’touch ~/nowy_pusty_plik;ls -lrt’
-rw-r--r-- 1 student student
0 lut 3 18:38 nowy_pusty_plik
# tu założono, że komputer laboratoryjny ma przyporzadkowany
˛
adres IP 192.168.0.70
# wcześniej należy sprawdzić, jaki adres ma komputer w laboratorium
# założono też, że użytkownik ma nazw˛
e student
# jeśli wszystko zostało skonfigurowane poprawnie, utworzony zostanie nowy pusty plik
4
Instalacja i konfiguracja przykładowego modułu Pythona
Wokół projektu Galileo rozwinęła się społeczność, która dostarcza różne narzędzia i moduły użyteczne przy
pracy z tym układem. W ramach laboratorium wykorzystano moduł rozszerzeniowy wiring-x86. Więcej
informacji na jego temat można znaleźć na stronie domowej projektu: https://github.com/emutex/wiring-x86
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
# prosz˛
e przejść do katalogu domowego/roboczego
cd ~
# nast˛
epnie ściagn
˛ ać
˛ wymagany moduł np. za pomoca˛ aplikacji wget
wget https://github.com/emutex/wiring-x86/archive/master.zip
# rozpakowujemy ściagni˛
˛
ete archiwum
unzip master.zip
# w lokalnym katalogu powinien pojawić si˛
e nowy katalog wiring-x86-master zawierajacy
˛
omawiany moduł
# nast˛
epnie prosz˛
e skopiować go na układ Galileo na kart˛
e SD za pomoca˛ ssh - prosz˛
e wpisać właściwy adres IP
scp -r wiring-x86-master [email protected]:/media/mmcblk0p1
# oraz logujemy si˛
e na układzie Galileo:
ssh [email protected]
w powłoce systemu operacyjnego Yocto w układzie Galileo za pośrednictwem ssh (jako root)
# w pierwszej kolejności należy przenieść si˛
e do odpowiedniego katalogu
# wcześniej upewniamy si˛
e do jakiego katalogu zostały skopiowane pliki modułu
cd /media/mmcblk0p1/wiring-x86-master/
# możliwości, jakie daje konfigurator dostarczony z modułem, można sprawdzić nast˛
epujaco:
˛
python setup.py --help-commands
# powinna zostać wyświetlona lista dost˛
epnych opcji
# nast˛
epnie sprawdzamy integralność modułu
python setup.py check
running check
# budujemy moduł lokalnie
# jeżeli nie wydamy tego polecenia w tym miejscu, to zostanie ono automatycznie wywołane przy instalacji
python setup.py build
running build
running build_py
6
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
creating build
creating build/lib
copying wiringx86.py -> build/lib
# oraz wybieramy instalacj˛
e
# dzi˛
eki czemu wymagane pliki zostana˛ skopiowane do odpowiednich lokalizacji w systemie plików
python setup.py install
running install_lib
copying build/lib/wiringx86.py -> /usr/lib/python2.7/site-packages
writing byte-compilation script ’/tmp/tmpuWHagM.py’
/usr/bin/python /tmp/tmpuWHagM.py
removing /tmp/tmpuWHagM.py
running install_egg_info
Writing /usr/lib/python2.7/site-packages/Wiring_x86-1.0.0-py2.7.egg-info
# nast˛
epnie przechodzimy do katalogu z przykładami
cd examples
# przykłady sa˛ napisane dla platformy Intel Edison
# dlatego w skryptach należy zmienić nazw˛
e platformy na Intel Galileo gen. 2
cat blink.py | sed s/GPIOEdison/GPIOGalileoGen2/g > blink-galileo.py
# nast˛
epnie należy uruchomić poprawiony skrypt i obserwować diod˛
e nr 13
python blink-galileo.py
Setting up pin 13
Blinking pin 13 now...
5
Przygotowanie infrastruktury do testowania portów układu Galileo, opracowanie testów i ich implementacja w języku Python.
Na początku należy wyprowadzić zasilanie i masę na płytkę testową. Proszę o zachowanie dużej ostrożności,
aby nie dokonać zwarcia – może się to skończyć uszkodzeniem układu Galileo. Na poniższych schematach skrót
GND oznacza masę, odpowiednio 3.3 V i 5.0 V oznacza zasilanie, liczby oznaczają numery pinów. Pozostałe
oznaczenia znajdują się pod schematami, których dotyczą. Zaprezentowano przykłady układów testowych –
studenci mogą zaproponować własne, jednak proszę o zachowanie ostrożności. Szczególnie będzie oceniany
stopień skomplikowania zaimplementowanych algorytmów i inwencja twórcza.
Należy przetestować działanie następujących elementów układu Galileo:
• Cyfrowe wyjścia – należy napisać skrypt w Pythonie, który będzie sterował mruganiem diody D1
podłączonej do portu numer 13. Diody należy podłączyć z odpowiednim rezystorem R1. Oporność
przykładowego rezystora wynosi 1 kΩ – ewentualnie należy ją dobrać w zależności od użytej diody.
Rys. 1.2. Schemat.
7
• Cyfrowe wejścia – należy napisać skrypt w Pythonie, który będzie sterował mruganiem diody D1 podłączonej do portu numer 13. Diody należy podłączyć z odpowiednim rezystorem R1. Diodą należy sterować
w zależności od odczytanego stanu z portu numer 7, który można ustawić za pomocą przełącznika P1.
Oporności rezystorów R1 i R2 wynoszą po 1 kΩ – ewentualnie należy je dobrać w zależności od użytej diody.
Rys. 1.3. Schemat.
• Wyjścia PWM – do testowania wyjścia PWM (ang. pulse-width modulation; modulacja szerokości
impulsów) można zastosować schemat z Rys. 1.2. Proszę zwrócić uwagę, aby zmienić numer portu
np. na 5. Należy napisać skrypt w Pythonie, który będzie płynnie sterował jasnością świecenia diody.
Wygenerowany sygnał należy zaprezentować na oscyloskopie. Dodatkowo należy zademonstrować kilka
różnych wypełnień impulsów prostokątnych oraz częstotliwości ich występowania.
• Analogowe wejścia – należy zbudować obwód zawierający połączone szeregowo rezystory – tak jak na
schemacie na Rys. 1.4. oraz zmierzyć przy pomocy wejścia analogowego wartość napięcia na poszczególnych połączeniach rezystorów. Ćwiczenie należy wykonać podłączając układ do zasilania 3.3 oraz 5.0
V. Wyniki proszę umieścić w tabelce oraz porównać z teoretycznymi wynikami obliczonymi na podstawie
wzoru z dzielnika napięciowego:
n
P
Ri
i=0
Un = Umax N
(1)
P
Ri
i=0
Gdzie N oznacza liczbę wszystkich rezystorów, Umax napięcie zasilania, zaś n numer połączenia pomiędzy rezystorami. Dodatkowo przed połączeniem proszę obliczyć prąd płynący w układzie i tak dobrać
rezystory, żeby nie przekroczyć wydajności prądowej.
8
Rys. 1.4. Schemat.
6
Obsługa wyświetlacza LCD przy pomocy Pythona
Należy podłączyć wyświetlacz LCD (Grove – LCD RGB) za pomocą przewodu I2 C do płytki z wyprowadzeniami tych interfejsów (Grove – Base Shield). Płytka powinna być połączona z układem Galileo za pomocą pinów
rozmieszczonych w dwóch równoległych rzędach. Następnie proszę upewnić się, że wyświetlacz jest wykrywany
na magistrali I2 C i uruchomić skrypt demonstracyjny w języku Python zamieszczony poniżej.
Rys. 1.5. Base shield i wyświetlacz LED.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
w powłoce systemu operacyjnego Yocto w układzie Galileo (jako root)
# prosz˛
e sprawdzić czy wyświetlacz LCD jest wykrywany na magistrali I2C
# można si˛
e posłużyć poleceniem i2cdetect
# wcześniej prosz˛
e si˛
e upewnić, czy zainstalowano pakiet i2c-tools
# jeżeli nie, to należy go zainstalować za pomoca˛ menadżera opkg
i2cdetect -y -r 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:
-- -- -- -- -- -- -- -- -- -- -- -- -10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -20: -- -- -- -- -- UU UU UU -- -- -- -- -- -- -- -30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -40: -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- -50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -70: -- -- -- -- -- -- -- -# nast˛
epnie należy uruchomić poniższy skrypt demonstracyjny w j˛
ezyku Python
9
1
2
demonstracyjny skrypt w j˛
ezyku Python
# skrypt w pierwszej linii wyświetlacza wypisuje coraz wi˛
eksze liczby
# w drugiej linii - cyfry, które sa˛ dzielnikami tych liczb
3
4
5
import pyupm_i2clcd as i2clcd
import time
# załadowanie wymaganych modułów
def clear(display):
display.setCursor(1, 0)
lcd.write(str(16*" "))
# samodzielne zdefiniowanie funkcji czyszczacej
˛
wyświetlacz
# można tu użyć również funkcji wbudowanej w moduł
6
7
8
9
10
11
12
lcd = i2clcd.Jhd1313m1(0, 0x3E, 0x62)
lcd.setColor(0,255,0)
# podświetlenie wyświetlacza na zielono
13
14
15
16
count=1
while count<10**16:
clear(lcd)
# dlaczego akurat 10**16 ?
17
18
19
lcd.setCursor(0, 0)
lcd.write(str(count))
# ustawienie kursora na poczatku
˛
pierwszej linii
# wpisanie tam liczby
info = "dziel: "
for n in range(9):
if not count%(n+1):
info = info+str(n+1)
# utworzenie napisu w drugiej linii
lcd.setCursor(1, 0)
lcd.write(info)
# ustawienie kursora na poczatku
˛
drugiej linii
# wpisanie tam cyfr, które sa˛ dzielnikami
count+=1
time.sleep(1)
# skrypt czeka jedna˛ sekund˛
e
20
21
22
23
24
25
26
27
28
29
30
7
Zbudowanie woltomierza
Zadanie należy wykonać samodzielnie korzystając ze zdobytej dotąd wiedzy oraz z dokumentacji. Skrypty
mają być napisane w języku Python. Opracowany system pomiarowy powinien:
• działać w zakresie od zera do pięciu woltów,
• umożliwiać pomiar napięcia przy pomocy wejść analogowych układu Galileo,
• pomiaru powinno się dokonywać uruchamiając odpowiedni skrypt,
• woltomierz powinien być wyposażony w wyświetlacz LCD podłączony przez interfejs I2 C,
• wynik pomiaru powinien być pokazywany na wyświetlaczu LCD,
• początkowe pomiary powinny być zweryfikowane przez dodatkowy pomiar oscyloskopem lub profesjonalnym multimetrem,
• wynik pomiaru powinien być zapisywany na zdalnym hoście (serwerze centralnym) – adres i sposób autoryzacji zostanie podany na zajęciach,
• należy zapisać: wartość pomierzonego napięcia, datę i godzinę pomiaru, adres IP układu Galileo, z którego
zapisywane są dane oraz imię i nazwisko operatora (studenta),
• należy wykonać kilka przykładowych pomiarów, np. wykorzystując połączenie szeregowe rezystorów.
Wszystkie wykonane pomiary powinny być widziane na stronie internetowej udostępnianej z serwera centralnego.
Bonus. Kompilacja skrośna
1
2
3
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# najpierw prosz˛
e przygotować system plików, który posłuży do zbudowania programu
# do nowo utworzonej lokalizacji:
mkdir -p /opt/clanton-tiny/1.4.2/sysroots
4
5
6
7
8
1
2
3
4
5
6
# prosz˛
e skopiować z Arduino odpowiednie katalogi:
cd /where/you/extracted/the/archive/arduino-1.5.3/hardware/tools/sysroots
cp -R i586-poky-linux-uclibc /opt/clanton-tiny/1.4.2/sysroots/
cp -R x86_64-pokysdk-linux /opt/clanton-tiny/1.4.2/sysroots/
demonstracyjny program w j˛
ezyku C o nazwie /home/student/test.c
/* prosty demonstracyjny program - hello world */
#include <stdio.h>
int main(int argc, char const* argv[]){
printf("Hello, World!\,n");
return 0;
}
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
# kolejnym krokiem powinno być przygotowanie pliku Makefile
# prosz˛
e pobrać jego wzór z repozytoium GIT - jest tam również dost˛
epny demonstracyjny program:
git clone https://github.com/tokoro10g/galileo-makefile.git
cp galileo-makefile/Makefile /home/student
cd /home/student
# prosz˛
e dostosować plik Makefile, jeżeli jest to konieczne:
emacs Makefile
# a nast˛
epnie skompilować program:
make
/opt/clanton-tiny/1.4.2/sysroots/x86_64-pokysdk-linux//usr/bin/i586-poky-linux-uclibc/i586-poky-linux-uclibc-g++
-O2 -pipe -g -feliminate-unused-debug-types -fpermissive -Wall -I /opt/clanton-tiny/1.4.2/sysroots/i586-poky-lin
ux-uclibc//usr/include -I /opt/clanton-tiny/1.4.2/sysroots/i586-poky-linux-uclibc//usr/include/c++ -I /opt/clant
on-tiny/1.4.2/sysroots/x86_64-pokysdk-linux//usr/lib/i586-poky-linux-uclibc/gcc/i586-poky-linux-uclibc/4.7.2/inc
lude
-m32 -march=i586 --sysroot=/opt/clanton-tiny/1.4.2/sysroots/i586-poky-linux-uclibc/ -c -o test.o
test.c
/opt/clanton-tiny/1.4.2/sysroots/x86_64-pokysdk-linux//usr/bin/i586-poky-linux-uclibc/i586-poky-linux-uclibc-g++
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -L /opt/clanton-tiny/1.4.2/sysroots/i586-poky-linux-uclibc//lib -L
/opt/clanton-tiny/1.4.2/sysroots/i586-poky-linux-uclibc//usr/lib -L /opt/clanton-tiny/1.4.2/sysroots/i586-pokylinux-uclibc//usr/lib/i586-poky-linux-uclibc/4.7.2 -lstdc++ -m32 -march=i586 --sysroot=/opt/clanton-tiny/1.4.2/
sysroots/i586-poky-linux-uclibc/ test.o -o test
demonstracyjny plip Makefile dla kompilacji programu /home/student/test.c
SHELL = /bin/sh
DISTRO = clanton-tiny
TARGET_NAME = i586-poky-linux-uclibc
NATIVE_NAME = x86_64-pokysdk-linux
GCC_VERSION = 4.7.2
6
7
8
9
TARGET_BIN
TARGET_ARCH
INCLUDE_DIRS
10
11
12
LIBRARY_DIRS
13
14
15
COMPILE_OPTS
= test
= -m32 -march=i586 --sysroot=$(SYSROOT_TARGET)
= -I $(SYSROOT_TARGET)/usr/include \
-I $(SYSROOT_TARGET)/usr/include/c++ \
-I $(SYSROOT_NATIVE)/usr/lib/$(TARGET_NAME)/gcc/$(TARGET_NAME)/$(GCC_VERSION)/include
= -L $(SYSROOT_TARGET)/lib \
-L $(SYSROOT_TARGET)/usr/lib \
-L $(SYSROOT_TARGET)/usr/lib/$(TARGET_NAME)/$(GCC_VERSION)
= -O2 -pipe -g -feliminate-unused-debug-types -fpermissive -Wall $(INCLUDE_DIRS)
16
17
18
SYSROOT_TARGET = /opt/$(DISTRO)/1.4.2/sysroots/$(TARGET_NAME)/
SYSROOT_NATIVE = /opt/$(DISTRO)/1.4.2/sysroots/$(NATIVE_NAME)/
19
20
TOOLDIR = $(SYSROOT_NATIVE)/usr/bin/$(TARGET_NAME)
21
22
23
24
25
26
27
28
29
CC
=
CXX
=
AS
=
LD
=
AR
=
CFLAGS =
CXXFLAGS=
LDFLAGS =
$(TOOLDIR)/i586-poky-linux-uclibc-g++
$(CC)
$(CC)
$(CC)
$(TOOLDIR)/i586-poky-linux-uclibc-ar
$(COMPILE_OPTS)
$(COMPILE_OPTS)
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed $(LIBRARY_DIRS) -lstdc++
30
31
all: target
32
33
34
target: $(patsubst %.c,%.o,$(wildcard *.c)) $(patsubst %.cpp,%.o,$(wildcard *.cpp))
$(LD) $(LDFLAGS) $(TARGET_ARCH) $^ -o $(TARGET_BIN)
35
36
37
clean:
rm -f $(TARGET_BIN) *.o
11
Laboratorium 2
(Intel Galileo, Debian, CRON, Gstreamer)
Zadania do wykonania
1. Przygotowanie obrazu systemu Debian na karcie SD. (10%)
2. Zwiększenie rozmiaru partycji zawierającej system plików. (15%)
3. Połączenie i konfiguracja systemu operacyjnego: (20%)
• konfiguracja systemu
• aktualizacja systemu przy pomocy menadżera pakietów
• instalacja Gstreamera
4. Cykliczne wykonywanie zadań za pomocą systemu CRON (10%)
5. Przesyłanie plików używając Gstreamera i protokołu UDP – konfiguracja w powłoce BASH (10%)
6. Strumieniowanie audio używając Gstreamera i protokołu UDP
– konfiguracja w powłoce BASH (15%)
7. Opracowanie autorskiej aplikacji cyklicznego strumieniowania audio (20%)
1
Przygotowanie obrazu systemu Debian na karcie SD
System operacyjny Debian Wheezy z jądrem Linuksa w wersji 3.8.7 dedykowany dla platformy Intel Galileo
(w tym gen. 2) jest udostępniony na wolnej licencji. Projekt zawiera obraz systemu oraz cały system plików,
który posłużył do zbudowania tego obrazu. Dzięki czemu możliwe jest przygotowanie własnej dedykowanej
dystrybucji Debiana. W omawianym projekcie udostępniono tzw. minimalny obraz, który jednak można rozbudować po instalacji przy pomocy menadżera pakietów APT bez konieczności dodatkowej kompilacji – w ramach
projektu zostało utworzone repozytorium kompatybilne z menadżerem APT.
1
2
3
4
5
6
7
8
9
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
# uwaga wst˛
epna:
# jeżeli jakikolwiek program wymagany do przeprowadzenia tego ćwiczenia,
# jest niedost˛
epny to należy go zainstalować za pomoca˛ menadżera pakietów:
apt-get update
apt-get install parted
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
parted jest już w najnowszej wersji.
10
11
12
13
14
# właściwa˛ nazw˛
e
apt-cache search
gparted - Edytor
parted - Program
pakietu można odszukać za pomoca:
˛
parted
partycji dla GNOME
do zarzadzania
˛
partycjami dyskowymi
15
16
17
18
19
20
21
22
23
24
# przy okazji prosz˛
e docenić poczucie humoru twórców oprogramowania open source:
apt-get moo
(__)
(oo)
/------\/
/ |
||
* /\---/\
~~
~~
..."Have you mooed today?"...
25
26
27
28
29
30
31
# zaleca si˛
e zapoznanie również z innym popularnym/konkurencyjnym menażdżerem pakietów typu APT
# o nazwie aptitude:
aptitude search parted
i
gparted
- Edytor partycji dla GNOME
i
parted
- Program do zarzadzania
˛
partycjami dyskowymi
# twórcy zalecaja˛ używanie jednego menażdżera APT
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Prosz˛
e rozpoczać
˛ ten punkt od przejścia do katalogu roboczego/domowego:
cd ~
# pełen system plików systemu można ściagn
˛ ać
˛ z repozytorium git:
git clone git://git.code.sf.net/p/galileodebian/code galileodebian-code
# wcześniej prosz˛
e si˛
e upewnić czy narz˛
edzie git jest dost˛
epne
# podczas laboratorium zalecane jest ściagni˛
˛
ecie tylko wypreparowanego obrazu karty SD:
wget http://sourceforge.net/projects/galileodebian/files/SD%20card%20Image/galileo-1.2.img.gz
# lub przez przegladark˛
˛
e internetowa˛ ze strony:
# https://sourceforge.net/projects/galileodebian/files/
# prosz˛
e wybrać najnowsza˛ wersj˛
e obrazu
# kolejnym krokiem, jaki należy wykonać, jest rozpakowanie obrazu:
gunzip galileo-1.2.img.gz
# jeżeli nie wystapiły
˛
żadne bł˛
edy, powinien pojawić si˛
e plik z obrazem: galileo-1.2.img
12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# należy podłaczyć
˛
kart˛
e SD do komputera laboratoryjnego
# i sprawdzić, który plik specjalny w katalogu /dev/ reprezentuje t˛
e kart˛
e
# można to zrobić odczytujac
˛ ostatnie komunikaty jadra
˛
systemu:
dmesg
[125999.757685] sdc: sdc1 sdc2
[125999.758993] sd 4:0:0:0: [sdc] Attached SCSI removable disk
# kolejna˛ czynnościa˛ jest skopiowanie obrazu bezpośrednio na kart˛
e SD
# wcześniej można jeszcze usunać
˛ wszystkie dane znajdujace
˛
si˛
e na karcie:
dd if=/dev/zero of=/dev/sdc
# kopiowanie obrazu na kart˛
e:
dd if=galileo-1.2.img of=/dev/sdc
1843200+0 przeczytanych recordów
1843200+0 zapisanych recordów
skopiowane 943718400 bajtów (944 MB), 297,821 s, 3,2 MB/s
15
16
17
18
19
20
# nast˛
epnie prosz˛
e podłaczyć
˛
kart˛
e SD do układu Galileo i podłaczyć
˛
zasilanie
# jednocześnie prosz˛
e obserwować informacje przesyłane do komputera za pomoca˛ interfejsu szeregowego:
putty
# parametry połaczenia
˛
należy ustawić tak, jak na loratorium 1: pr˛
edkość równa˛ 115200 bodów na sekund˛
e
# i komunikować si˛
e za pośrednictwem pliku /dev/ttyUSB0 - choć to może być zależne od systemu operacyjnego
21
22
23
24
25
26
27
28
1
# Program rozruchowy GRUB powinien wyświetlić poniższe menu:
|Debian GNU/Linux, with Linux 3.8.7
|
|Debian GNU/Linux, with Linux 3.8.7 (recovery mode)
|
|Debian GNU/Linux, with Linux 3.2.0-4-486
|
|Debian GNU/Linux, with Linux 3.2.0-4-486 (recovery mode)
|
# należy wybrać pierwsza˛ opcj˛
e: Debian GNU/Linux, with Linux 3.8.7 (jest to domyślny wybór)
# i uruchomić system operacyjny
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem RS i putty (jako root)
Debian GNU/Linux 7 galileo ttyS1
2
3
4
5
6
galileo login: root
Password:
# domyślnym hasłem jest: root
# ale powinno ono być zmienione
7
8
9
10
11
12
13
# wcześniej jednak prosz˛
e sprawdzić ilość dost˛
epnego miejsca na dysku np.
df | grep -i -e mmcblk -e available
Filesystem
1K-blocks
Used Available Use% Mounted on
/dev/mmcblk0p2
810940 391228
378520 51% /
# domyślnie jest ona stosunkowo niewielka
# dlatego należy rozszerzyć t˛
e partycj˛
e
2
1
2
3
4
5
6
7
8
9
10
11
Zwiększenie rozmiaru partycji zawierającej system plików
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# obraz jest zgrany z karty SD o rozmiarze około 1 GB, dlatego należy zaktualizować informacj˛
e
# o dost˛
epnej przestrzeni fizycznego nośnika
parted /dev/sdc print
Warning: Not all of the space available to /dev/sdc appears to be used,
you can fix the GPT to use all of the space (an extra 13680640 blocks) or continue with the current setting?
Fix/Ignore? F
Model: Mass Storage Device (scsi)
Disk /dev/sdc: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
12
13
14
15
Number
1
2
Start
17,4kB
100MB
End
100MB
944MB
Size
100MB
844MB
File system
fat16
ext3
Name
Flags
boot, esp
msftdata
16
17
18
19
20
21
22
# nast˛
epnie należy ustalić docelowy rozmiar modyfikowanej partycji (czyli partycji numer 2):
# maksymalny rozmiar partycji zależy od wielkości dost˛
epnej przestrzeni na karcie SD
# można je odczytać z komunikatu wyświetlonego po wykonaniu polecenia: parted /dev/sdc print
parted /dev/sdc resizepart 2
End? [7940MB]? 7948MB
Information: You may need to update /etc/fstab.
23
24
25
26
27
28
# prosz˛
e sprawdzić czy napewna wykonana operacja odniosła efekt:
parted /dev/sdc print
Number Start
End
Size
File system Name Flags
1
17,4kB 100MB
100MB
fat16
boot, esp
2
100MB
7948MB 7848MB ext3
msftdata
29
30
31
32
33
# ewentualnie należy dodać dziennik do systemu plików ext3:
tune2fs -j /dev/sdc2
tune2fs 1.42.12 (29-Aug-2014)
System plików już ma kronik˛
e.
34
35
36
37
38
39
# prosz˛
e uzupełnić system plików na całej partycji:
resize2fs /dev/sdc2
resize2fs 1.42.12 (29-Aug-2014)
Zmiana rozmiaru systemu plików /dev/sdc2 na 1916011 (4k) bloków.
System plików na /dev/sdc2 ma teraz 1916011 (4k) bloków.
13
1
2
3
4
5
6
7
8
9
10
11
12
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# zarówno zaraz po nagraniu minimalnego obrazu na kart˛
e SD,
# jak i na końcu, prosz˛
e sprawdzić poprawność systemu pliku:
e2fsck -f /dev/sdc2
e2fsck 1.42.12 (29-Aug-2014)
/dev/sdd2: odtwarzanie z kroniki
Przebieg 1: Sprawdzanie i-w˛
ezłów, bloków i rozmiarów
Przebieg 2: Sprawdzanie struktury katalogów
Przebieg 3: Sprawdzanie łaczności
˛
katalogów
Przebieg 4: Sprawdzanie liczników odwołań
Przebieg 5: Sprawdzanie sumarycznych informacji o grupach
Bł˛
edna liczba wolnych bloków (1790842, naliczono 1790791).
Poprawić<t>? tak
13
14
15
1
2
3
4
5
/dev/sdd2: ***** SYSTEM PLIKÓW ZMODYFIKOWANY *****
/dev/sdd2: 18945/434240 plików (3.4% nieciagłych),
˛
125220/1916011 bloków
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem RS i putty (jako root)
# o prawidłowym wykonaniu zadania b˛
edzie świadczyło to czy w systemie operacyjnym uruchomionym na układzie Galileo
# zmodyfikowana partycja b˛
edzie miała wi˛
ekszy rozmiar:
df | grep -i -e mmcblk -e available
Filesystem
1K-blocks
Used Available Use% Mounted on
/dev/mmcblk0p2
7554940 391776
6779996
6% /
2.1
Zwiększenie rozmiaru partycji za pomocą Gparted (alternatywnie)
• Po uruchomieniu programu Gparted może pojawić się komunikat z ostrzeżeniem o tym, że cała przestrzeń
dysku nie jest dostępna rys. 2.1. Aplikacja może automatycznie rozwiązać ten problem. Proszę kliknąć
Napraw lub Fix (dla anglojęzycznego interfejsu).
Rys. 2.1. Zrzut ekranu – program gparted.
• W panelu głównym programu Gparted należy wybrać właściwy plik reprezentujący kartę SD – w prezentowanym przykładzie jest to plik /dev/sdd. Jak widać na poniższym rysunku (rys. 2.2.) po nagraniu
minimalenego obrazu niewykorzystanych pozostaje ponad 6.5 GB przestrzeni dyskowej.
Rys. 2.2. Zrzut ekranu – program gparted.
14
• Należy zmienić rozmiar drugej partycji klikając na nią prawym przyciskiem myszy (dla trybu praworęcznego) i wybierajac z menu kontekstowego Zmień rozmiar / przenieś. Powinno pojawić się okno
analogiczne do tego przedstawionego poniżej na rys. 2.3. Następnie proszę przesunąć prawą krawędź
prostokąta symbolizującego rozmiar partycji maksymalnie do prawej strony.
Rys. 2.3. Zrzut ekranu – program gparted.
• Następnie proszę zatwierdzić tę operację – w tym celu proszę wybrać z menu Edycja przycisk Zastosuj
wszystkie działania. Po zapisaniu zmian na karcie SD układ partycji powinien wyglądać tak jak na
poniższym rysunku (rys.2.4).
Rys. 2.4. Zrzut ekranu – program gparted.
• Podczas zapisywania zmian na karcie SD powinno pojawić się analogiczne okno, jak poniżej.
Rys. 2.5. Zrzut ekranu – program gparted.
15
1
2
3
4
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem RS i putty (jako root)
# Pozostaje już tylko sprawdzić dost˛
epne miejsce w systemie działajacym
˛
na układzie Galileo
df | grep -i -e mmcblk -e available
Filesystem
1K-blocks
Used Available Use% Mounted on
/dev/mmcblk0p2
7554116 391776
6779212
6% /
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem RS i putty (jako root)
# w pierwszej kolejności po ustawieniu hasła roota, należy skonfigurować połaczenie
˛
internetowe
# domyślna˛ konfiguracja˛ systemu jest ustawienie interfejsu eth0 w tryb dhcp
ifconfig eth0
eth0
Link encap:Ethernet HWaddr 98:4f:ee:01:75:8d
inet addr:192.168.0.23 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::9a4f:eeff:fe01:758d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15642 errors:0 dropped:0 overruns:0 frame:0
TX packets:162 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1157343 (1.1 MiB) TX bytes:15025 (14.6 KiB)
Interrupt:40
# aby zmienić t˛
e konfiguracj˛
e np. w celu ustawienia stałego adresu IP
# należy wyedytować odpowiednio plik /etc/network/interfaces
# prosz˛
e wzorować si˛
e na przykładzie podanym na poprzednim laboratorium przy okazji konfiguracji systemu Yocto
# domyślna˛ konfiguracja˛ interfejsu eth0 jest tryb dhcp:
cat /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
3.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Połączenie i konfiguracja systemu operacyjnego
Konfiguracja przy pomocy systemowego menadżera pakietów – ATP
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem RS i putty (jako root)
# kolejnym etapem konfiguracji systemu jest jego aktualizacja za pomoca˛ menażdżera pakietów APT
# prosz˛
e sprawdzić aktualne ustawienia repozytoriów, powinny one wygladać
˛
jak poniżej
cat /etc/apt/sources.list
deb http://ftp.us.debian.org/debian wheezy main contrib non-free
deb http://ftp.us.debian.org/debian wheezy-updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
# nast˛
epnie prosz˛
e zaktualizować wpisy znanym nam już menażdżerem:
apt-get update
# oraz zaktualizować system:
apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
apt apt-utils base-files bash cpio debian-archive-keyring krb5-locales
libapt-inst1.5 libapt-pkg4.12 libc-bin libc6 libgcrypt11 libgssapi-krb5-2
libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libssl1.0.0 libtasn1-3
linux-image linux-image-3.2.0-4-486 multiarch-support ntpdate perl-base
rsyslog tzdata wget
27 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 46.3 MB of archives.
After this operation, 509 kB disk space will be freed.
Do you want to continue [Y/n]? Y
# ten proces może potrwać kilka minut
# jeżeli zostały zaktualizowane elementy jadra
˛
systemu lub został wygenerowany nowy plik initrd.img
# powinno si˛
e zrestartować układ:
reboot
28
29
30
31
32
33
34
35
36
37
38
# dodatkowo prosz˛
e sprawdzić czy jest zainstalowany serwer ssh
apt-cache search openssh | grep server
gesftpserver - sftp server submodule for OpenSSH
openssh-server - secure shell (SSH) server, for secure access from remote machines
# jeżeli nie to prosz˛
e go zainstalować
apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
openssh-server is already the newest version.
3.2
Konfiguracja połączenia SSH – logowanie bez hasła
Po konfiguracji sieci, ustawieniu hasła oraz aktualizacji systemu należy zalogować się w systemie na układzie
Galileo za pośrednictwem SSH. W ramach konfiguracji należy wygenerować i skopiować odpowiednio klucze
SSH, tak aby możliwe było zdalne logowanie nie używając hasła. Opis tej procedury był przedstawiony w
instrukcji do poprzedniego laboratorium.
16
3.3
Instalacja środowiska GStreamer
GStreamer to projekt open source (rozpowszechniany na zasadzie licencji LGPL) – jest to środowisko przeznaczone do tworzenia aplikacji multimedialnych. Pełni funkcję silnika przetwarzającego strumienie multimedialne oraz udostępnia interfejs dla wyższych warstw aplikacji głównie graficznego interfejsu użytkownika.
GStreamer działa na zasadzie systemu wtyczek, które tworzą struktury i potokowo przetwarzają dane. Zostały
opracowane interfejsy w różnych językach programowania m.in. w języku python, które ułatwiaja budowę aplikacji wykorzystujące GStreamer. Więcej informacji na ten temat można uzyskać na wykładach do niniejszego
przedmiotu oraz na stronie projektu: http://gstreamer.freedesktop.org/.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem SSH (jako root)
# kolejnym etapem jest instalacja środowiska GStreamer
apt-get install gstreamer-tools libgstreamer0.10-0
The following extra packages will be installed:
gstreamer0.10-tools libclass-isa-perl libffi5 libglib2.0-0 libglib2.0-data libpcre3 libswitch-perl
libxml2 perl perl-modules pkg-config sgml-base shared-mime-info xml-core
Suggested packages:
gstreamer0.10-plugins-base perl-doc libterm-readline-gnu-perl libterm-readline-perl-perl make
libpod-plainer-perl sgml-base-doc debhelper
The following NEW packages will be installed:
gstreamer-tools gstreamer0.10-tools libclass-isa-perl libffi5 libglib2.0-0 libglib2.0-data libgstreamer0.10-0
libpcre3 libswitch-perl libxml2 perl perl-modules pkg-config sgml-base shared-mime-info xml-core
0 upgraded, 16 newly installed, 0 to remove and 0 not upgraded.
Need to get 15.5 MB of archives.
After this operation, 50.1 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
16
17
18
19
# dodatkowo menażdżer pakietów zaleca instalacj˛
e dodatkowych paczek m.in. gstreamer0.10-plugins-base,
# który zawiera zbiór podstawowych wtyczek, należy je także zainstalować wraz z zależnościami:
apt-get install gstreamer0.10-plugins-base
20
21
22
23
# dodatkowo prosz˛
e zainstalować paczk˛
e gstreamer0.10-plugins-good:
apt-get install gstreamer0.10-plugins-good
# może to zajać
˛ dłużdsza˛ chwil˛
e...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# spis zainstalowanych wtyczek można uzyskać za pomoca˛ polecenia gst-inspect
# do przeprowadzenia laboratorium b˛
eda˛ potrzebne m.in. nast˛
epujace wtyczki:
# audiotestsrc, udpsink, filesrc, filesink
# prosz˛
e sprawdzić czy sa˛ one dost˛
epne w systemie:
gst-inspect | grep audiotestsrc
gst-inspect | grep udpsink
gst-inspect | grep -e filesrc -e filesink
# szczegóły dotyczace
˛
konfiguracji poszczególnych wtyczek można wyświetlić
# podajac
˛ nazw˛
e wtyczki jako argument polecenia gst-inspect np.:
gst-inspect udpsink
Factory Details:
Long name:
UDP packet sender
Class:
Sink/Network
Description:
Send data over the network via UDP
Author(s):
Wim Taymans <[email protected]>
...
4
Cykliczne wykonywanie zadań za pomocą systemu CRON
CRON to system (demon) przeznaczony do cyklicznego wykonywania zadań. Jego konfiguracji można dokonać za pomocą tabel crontab. System przeszukuje m.in. następujące lokalizacje /var/spool/cron/crontabs/,
/etc/crontab oraz /etc/cron.*/. Tabele programu cron posiadają specjalny format: pierwsze pięć pozycji oddzielone spacją lub tabulatorem jest deskryptorem częstości wykonywania polecenia, które występuje na miejscu
szóstym tej tabeli.
1
2
3
demonstracyjny skrypt w j˛
ezyku BASH o nazwie /root/test.sh
# na poczatku
˛
prosz˛
e utworzyć prosty skrypt, który b˛
edzie cyklicznie wywoływany przez system CRON
# prosz˛
e ustalić nazw˛
epliku do logowania w katalogu /tmp:
logfile=/tmp/mylog
4
5
6
7
# skrypt powinien zapisać najpierw dat˛
e i godzin˛
e do pliku logowania:
echo ">> new log <<" >> $logfile
date >> $logfile
8
9
10
# a nast˛
epnie wpisać do niego 10 procesów, które najbardziej obcia˛żaja˛ procesor:
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> $logfile
11
12
13
14
15
# oraz sprawdzić dost˛
epność wybranego hosta w sieci:
ping 192.168.0.70 -c 3 >> $logfile
echo " " >> $logfile
echo " " >> $logfile
16
17
18
# prosz˛
e zapoznać si˛
e ze wszystkimi opcjami przekazanymi do wywoływanych aplikacji
# np. man ps
17
1
2
3
4
5
6
1
2
3
4
5
6
7
8
9
10
11
demonstracyjny plik konfiguracyjny systemu CRON o nazwie /root/test.cron
# nast˛
epnie prosz˛
e utworzyć plik-tabel˛
e kompatybilna˛ z systemem CRON
# odpowiednio liczby wpisane na poszczególnych pozycjach oznaczaja˛
# minut˛
e godzin˛
e dzień miesiaca
˛
miesiac
˛
dzień tygodnia
polecenie
# (0-59) (0-23)
(1-31)
(1-12 or Jan-Dec) (0-6 or Sun-Sat) /bin/bash /root/test.sh
*/15 * * * * /bin/bash /root/test.sh
# powyższy wpis oznacza że skrypt /root/test.sh b˛
edzie wykonywany co 15 minut
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem SSH (jako root)
# aby dodać wpis odpowiedzialny za wywoływanie danego polecenia należy skorzystać z programu crontab
# crontab z opcja˛ -l listuje tabel˛
e zadań dla danego użytkownika wymienionego w argumencie opcji -u
crontab -l -u root
no crontab for root
# aby dodać wpis prosz˛
e podać nazw˛
e pliku konfiguracyjnego jako argument, tak jak poniżej
crontab -u root /root/test.cron
# odpowiedni wpis powinien teraz być wyświetlany przez polecenie crontab -l
crontab -lu root
*/15 * * * * /bin/bash /root/test.sh
# na koniec prosz˛
e si˛
e upewnić czy polecenie jest wykonywane cyklicznie, jeżeli tak to prosz˛
e wyczyścić tabel˛
e
crontab -r -u root
5
Przesyłanie plików używając Gstreamera i protokołu UDP
– konfiguracja w powłoce BASH
W niniejszym punkcie należy przetestować działanie Gstreamera i sprawdzić jego przydatność pod kątem
przesyłania plików tekstowych za pomocą protokołu UDP. Zadanie to proszę wykonać za pomocą narzędzi
pochodzących z pakietu gst-tools: gst-inspect i gst-launch oraz postępując zgodnie z poniższymi wskazówkami.
1
2
3
4
5
6
7
# na samym
# używajac
˛
gst-launch
Ustawianie
Potok jest
Ustawianie
New clock:
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
poczatku
˛
należy zestawić tor odbiorczy
wtyczek udpsrc oraz filesink
udpsrc port=5088 ! filesink location=plik-rec.txt
potoku na PAUZOWANIE...
na żywo i nie wymaga PRZEWINIECIA...
˛
potoku na ODTWARZANIE...
GstSystemClock
8
9
# po wydaniu takiego polecenia tor odbiorczy b˛
edzie oczekiwał na przesłanie danych
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
#
#
#
#
#
#
#
gst-launch to aplikacja, która pozwala szybko uruchomić łańcuch wtyczek
każdej wtyczce można ustawić jej tzw. właściwości, spis wszystkich właściwości można uzyskać
za pomoca˛ polecenia gst-inspect
wtyczka udpsrc pozwala na ustawienie m.in. numeru portu, na którym b˛
edzie prowadzony nasłuch
wtyczka filesink - nazwy pliku na dysku, do którego b˛
edzie prowadzony zapis
należy użyć znaku równości do ustawienia poszczególnych właściwości
oraz znaku wykrzyknika do połaczenia
˛
poszczególnych wtyczek
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem SSH (jako root)
# analogicznie (komplementarnie) należy zestawić tor nadawczy na układzie Galileo
# najpierw prosz˛
e wygenerować plik tekstowy do przesłania
i=0
while [[ $i -lt 16 ]]; do
i=$[$i+1];
echo "$i linia w pliku";
done > plik.txt
# prosz˛
e upewnić si˛
e co zawiera wygenerowany plik:
cat plik.txt
1 linia w pliku
2 linia w pliku
...
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# nast˛
epnie zestawić tor nadawczy:
gst-launch filesrc location=plik.txt ! udpsink host=192.168.0.70 port=5088
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 9281999 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
27
28
29
30
31
1
2
3
4
5
#
#
#
#
wtyczka filesrc pozwala na ustawienie m.in. nazwy czytanego pliku - za pomoca˛ właściwości location
dla poprawnego działania należy ustawić dwie właściwości wtyczki udpsink:
port - numer portu na którym prowadzony jest nasłuch
host - adres ip docelowej maszyny
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako root)
# finalnie należy sprawdzić, czy udało si˛
e przesłać zawartość pliku z układu Galileo na komputer laboratoryjny
cat plik-rec.txt
1 linia w pliku
2 linia w pliku
...
18
6
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
Strumieniowanie audio używając Gstreamera i protokołu UDP
– konfiguracja w powłoce BASH
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
# najpierw prosz˛
e upewnić si˛
e czy wtyczki obsługujace
˛
system ALSA sa˛ zainstalowane:
apt-get update
apt-get install gstreamer1.0-alsa
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
gstreamer1.0-alsa jest już w najnowszej wersji.
# jeżeli nie, to prosz˛
e je zainstalować
w powłoce systemu operacyjnego Debian w komputerze laboratoryjnym (jako student)
# nast˛
epnie prosz˛
e przełaczyć
˛
si˛
e na zwykłego użytkownika (student)
# oraz zestawić tor odbiorczy:
gst-launch udpsrc port=5088 ! audio/x-raw-float,rate=4000,width=64,channels=1,endianness=1234 /
! audioconvert ! alsasink
Ustawianie potoku na PAUZOWANIE...
Potok jest na żywo i nie wymaga PRZEWINIECIA...
˛
Ustawianie potoku na ODTWARZANIE...
New clock: GstSystemClock
9
10
11
12
# tor odbiorzy powinien teraz oczekiwać na przesłanie strumienia audio na port nr 5088
# Gstreamer posiada wbudowany mechanizm negocjacji formatu przesyłanych danych
# jednak czasem może wystapić
˛
potrzeba wymuszenia alternatywnego formatu
13
14
15
# kolorem purpurowym oznaczono tzw. CAPS - jest to skrót od Capabilities
# CAPS wykorzystuje si˛
e do wymuszenia właściwego formatu strumienia danych multimedialnych
16
1
2
3
4
5
6
7
8
9
w powłoce systemu operacyjnego Debian w układzie Galileo za pośrednictwem SSH (jako root)
# sygnał dźwi˛
ekowy prosz˛
e wyemitować za pomoca˛ układu Intel Galileo i wtyczki audiotestsrc
# komplementarny tor nadawczy można zrealizować w nast˛
epujacy
˛
sposób:
gst-launch audiotestsrc freq=500 ! audio/x-raw-float,rate=4000,width=64,channels=1,endianness=1234 /
! udpsink host=192.168.0.70 port=5088
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
10
11
12
13
14
15
#
#
#
#
#
tor nadawczy powinien emitować ciagły
˛
sygnal jednotonowy o cz˛
estotliwości 500 Hz
tu wymuszony został taki sam format strumienia danych jak w torze odbiorczym
zawsze prosz˛
e upewnić si˛
e, czy zadany format danych jest dost˛
epny dla danej wtyczki
sygnał audio powinien być przesyłany za pomoca˛ prodokołu UDP na adres podany jako host
do portu karty sieciowej określonej przez numer przypisany właściwości port
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# aby określić czas trwania sygnału, należy ustawić właściwość num-buffers
gst-launch audiotestsrc freq=500 num-buffers=3 ! audio/x-raw-float,rate=4000,width=64,channels=1,endianness=1234 /
! udpsink host=192.168.0.70 port=5088
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 765127542 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
30
31
# o jakiej najwi˛
ekszej cz˛
estotliwości ton można przesyłać przy zadanym formacie danych?
32
33
34
# tor nadawczy można uruchamiać wiele razy,
# tymczasem tor odbiorczy powinien odtwarzać kolejno otrzymane sygnały
7
Opracowanie aplikacji cyklicznego strumieniowania audio
Zadanie należy wykonać samodzielnie korzystając ze zdobytej dotąd wiedzy oraz z dokumentacji. Aplikacja
może być napisana jako skrypty BASH lub w języku Python. Opracowany system powinien:
• przesyłać strumienie audio za pomocą frameworka Gstreamer,
• przesyłać zróżnicowane sygnały dźwiękowe (czas trwania, częstotliwość),
• sygnały powinny być dobierane np. ze względu na godzinę lub napięcie występujące na portach GPIO,
• być synchronizowany przez system CRON,
• wykrywać wyłączenie toru odbiorczego i automatyczne go włączać,
• może przesyłać do odtwarzania pliki audio np. w formacie WAV.
19
Download