Raspberry_Pi_14.pdf

(1946 KB) Pobierz
Na warsztacie
Raspberry Pi (14)
Raspberry Pi to typowe „zwierzę” sieciowe. Napędzane przez Linuksa umożliwia
korzystanie z wielu usług internetowych. W znakomity sposób zwiększają one
liczbę potencjalnych zastosowań. Gdy jednak zabraknie dostępu do Internetu,
wychodzą na jaw pewne kompromisy poczynione na etapie projektowania,
spowodowane przyjętymi ograniczeniami rozmiarów i kosztów. Jednym
z nich jest brak wbudowanego zegara czasu rzeczywistego. W rezultacie,
odłączone od Sieci Raspberry nie umie aktualizować czasu systemowego
do rzeczywistego. W niektórych zastosowaniach może to sprawiać problemy.
Pokażę Wam, jak je rozwiązać.
Podstawowym celem fundacji, która stworzyła
minikomputer Raspberry Pi (RPi), było udostępnie-
nie go jak największej liczbie użytkowników. Jednym
z głównych atutów miała tu być cena urządzenia.
Poczynione oszczędności umożliwiły obniżenie
kosztu RPi do poziomu nawet 20 dol. (za model A+,
w Polsce od 120 zł). Jest to znacznie poniżej ceny
podobnych rozwiązań stosowanych przez innych
producentów, jak chociażby tych z układami Intela
czy Freescale.
Ofiarą cięć padły jednak nie tylko np. niektóre
kodeki (wymagają dodatkowych opłat licencyjnych,
można je dokupić osobno), pamięć flash (obecna
na pokładzie np. BeagleBone Black), ale i układ
zegara czasu rzeczywistego. Zegary takie, wyposa-
żone we własną baterię (lub kondensator o dosta-
tecznie dużej pojemności), zapewniają urządzeniom
odniesienie czasu działające nawet wtedy, gdy
sama jednostka główna na dłużej wyłączona jest
z prądu. Dzięki podobnym układom, przy każdym
uruchomieniu Wasz komputer zna aktualny czas
i datę. Brak takiego odniesienia może mieć bardzo
różne konsekwencje. Negatywnie wpłynie na pra-
cę wszystkich programów, które polegają na do-
kładnym czasie – od systemu plików, logowania
błędów, tworzenia kopii zapasowych, baz danych
– aż po różne mechanizmy związane z ochroną i po-
ufnością (włącznie z zarządzaniem certyfikatami).
W poniższym artykule, kolejnym w naszej serii, przed-
stawię podstawowe koncepcje z zakresu generowania
czasu dla Raspberry Pi. Dowiecie się, jak RPi radzi sobie
z tym zadaniem, gdy jest odłączony od Internetu.
Eksperyment
Do tego eksperymentu
odłączcie Raspberry
od Internetu.
Zastosujemy lokalną konfigurację,
w której Raspberry nie korzysta z dobrodziejstw
Sieci. Będziecie potrzebowali:
• Raspberry Pi B, B+, Pi2 – dowolnego modelu
z portem ethernetowym; ja użyję B+;
• karty SD ze świeżo zainstalowaną wersją
Raspbiana z maja 2015 r. (lub nowszą); uwaga:
chodzi o obraz Rasbiana dopiero co wypalony
na karcie, jeszcze nie używany w Raspberry;
• komputer stacjonarny z Windows i portem
Ethernet (na kabel sieciowy z wtyczką RJ-45);
• kabel ethernetowy RJ-45 do bezpośredniego pod-
łączenia Raspberry do komputera.
Szczegóły podłączania Raspberry do komputera za
pomocą kabla ethernetowego znajdziecie w poprzed-
nich odcinkach tej serii (zob. [1]). W skrócie (zakła-
dając, że używacie Windows 8,wyłączcie WiFi), dla
świeżej karty z Raspbianem:
• ustawcie na RPi stały adres IP: na karcie SD od-
najdźcie plik „cmdline.txt”; dodajcie w nim wpis:
ip=169.254.1.1:::255.255.0.0
gdzie „169.254.1.1” będzie nowym adresem IP
Maliny, a 255.255/16 – maską podsieci (możecie
użyć np. notatnika);
• przełóżcie kartę do RPi, połączcie ją i komputer
kablem ethernetowym;
• włączcie zasilanie RPi (uwaga: pierwsze urucho-
mienie może trwać dłużej niż zwykle);
• sprawdźcie, czy połączenie działa na poziomie
fizycznym, co symbolizuje świecąca się dioda
Poziom tekstu: średnio trudny
99
Zegar czasu rzeczywistego
SZKOŁA
To już 14-ty odcinek kursu Raspberry Pi. Numery archiwalne MT
z poprzednimi odcinkami można kupić na www.ulubionykiosk.pl
Na warsztacie
Odczytajcie teraz czas systemowy poleceniem:
$ date
Thu May 7 01:37:40 CEST 2015
Zauważcie, że zwrócona data i czas mają niewiele
wspólnego z aktualnym. Jest to raczej czas stworze-
nia obrazu systemu, który właśnie zainstalowaliście
(plus minuty spędzone na restarty i konfigurację).
Jeżeli użyliście nowszej wersji Raspbiana niż ja,
data ta będzie odpowiednio bliższa teraźniejszości.
Powtórzcie odczyt daty w odstępach co kilka minut.
$ date
Thu May 7 01:43:40 CEST 2015
$ date
Thu May 7 01:44:36 CEST 2015
Zauważcie, że czas się zmienia. Dzieje się tak,
gdyż RPi sam go zlicza od ostatniego znanego mu
momentu. Jeszcze raz wyświetlcie czas poleceniem
„date” i zapamiętajcie go. Następnie zastopujcie RPi:
$ date
Thu May 7 01:46:44 CEST 2015
$ sudo halt
Broadcast message from...
Odczekajcie, aż zielona dioda ACT regularnie
mignie 10 razy – oznacza to, że RPi się zatrzymał.
Odłączcie zasilanie na dobrych kilkanaście minut
(znacząco dłużej od czasu potrzebnego na zatrzy-
manie i ponowne wystartowanie RPi). Następnie
podłączcie z powrotem zasilanie, zalogujcie się
i sprawdźcie aktualny czas:
$ date
Thu May 7 01:47:55 CEST 2015
RPi wydaje się więc, że czas zmienił się jedynie
o minuty, podczas gdy w rzeczywistości upłynęło go
znacznie więcej. Możecie powtórzyć doświadczenie,
zostawiając wyłączone RPi przez noc. Efekt będzie
podobny – dla RPi minie pewnie jedna czy dwie
minuty (czas potrzebny na start systemu).
Poziom tekstu: średnio trudny
SZKOŁA
1. „Uzyskaj adres IP automatycznie” i „Uzyskaj
adres serwera DNS automatycznie” – ustawione
na Windows 8
LNK na płytce RPi B lub na gnieździe etherneto-
wym B+/Pi2; jeżeli nie – jeszcze raz sprawdźcie,
czy wtyczki mocno siedzą w gniazdach i kabel
jest sprawny;
• upewnijcie się, że karta sieciowa w Waszym
komputerze ma zaznaczone „Uzyskaj adres IP
automatycznie”: na ekranie startowym wpiszcie
do wyszukiwania „Wyświetl połączenia sieciowe”;
w otwartym okienku odnajdźcie ikonkę opisaną
„Ethernet”, prawym klawiszem otwórzcie menu
podręczne i wybierzcie „Właściwości”; następnie
w liście wybierzcie „Protokół internetowy w wer-
sji 4” i wciśnijcie przycisk „Właściwości” (wymaga
uprawnień administratora); zaznaczcie opcję
„Uzyskaj adres IP automatycznie” i „Uzyskaj adres
serwera DNS automatycznie” (ilustr.
1);
• teraz możecie uruchomić Putty, logując się
przez SSH do „169.254.1.1” (login: pi; hasło:
raspberry).
Dociekliwi Czytelnicy na pewno zadadzą sobie
tutaj pytanie: dlaczego by nie zastosować przejściów-
ki UART-do-USB? Wystarczy przecież podłączyć
dosłownie trzy kabelki (fizyczny pin 8 i 10 Raspberry
do RxD/TxD przejściówki+masę, np. z pinu 6),
a już można dostać się do Raspberry przez konsolę
szeregową… Odpowiedź na to pytanie znajdziecie
w kolejnej części tego tekstu, a będzie związana
z podłączaniem GPS.
Mając otwarte połączenie przez SSH, zacznij-
cie od konfiguracji strefy czasowej. Uruchomcie
raspi-config:
$ sudo raspi-config
Z menu „Internationalisation Options” wybierzcie
„Change Timezone”, a następnie „Europe” i „Warsaw”.
Standardowo powinniście również rozszerzyć system
plików na całą kartę – przyda nam się trochę miejsca
(opcja „Extend Filesystem”). Po tym wymagany będzie
restart RPi. Pozwólcie mu na to (rozszerzenie systemu
plików może zająć nawet kilka minut). Potem jeszcze
raz zalogujcie się przez Putty.
fake-hwclock
Powodem tego swoistego zapętlenia w czasie jest
to, że Raspberry Pi nie ma wewnętrznego zegara
czasu rzeczywistego. Gdy zabraknie Internetu, nie
ma możliwości rejestrowania upływu czasu podczas
okresów, kiedy jest wyłączony. Zamiast tego odmie-
rza sobie czas od znanych mu zdarzeń, np. ostatnie-
go kontrolowanego zamknięcia systemu komendą
„halt”. W konfiguracji poza siecią za zapisywanie
takich momentów i wymuszanie zmiany czasu przy
starcie systemu odpowiedzialny jest pakiet o nazwie
fake-hwclock
(dosłownie: udawany zegar sprzętowy).
Zagłębmy się teraz na chwilę w pewne szcze-
góły startu Linuksa (dokładniej opisałem je w [2]).
Inicjujący się system uruchomia szereg programów.
Postępuje zgodnie z ustalonym harmonogramem, za-
pisanym w skryptach startowych. Skrypty te znajdu-
ją się w katalogach /etc/rcS oraz /etc/rcX, gdzie X jest
numerem tzw. poziomu uruchamiania (ang.
runle-
vel).
Skrypty z katalogu /etc/rcS uruchamiane są jako
pierwsze. Po nich wykonywane są kolejne z katalogu
100
m.technik – www.mt.com.pl – nr 9/2015
e-suplement
odpowiadającego poziomowi uruchamiania. Takich
poziomów jest kilka. Domyślnym poziomem startu
jest 2. Zobaczmy teraz, kiedy
fake-hwclock
jest
wywoływany:
$ ls -l /etc/rc*/*fake*
lrwxrwxrwx 1 root root 22 May 7 00:36 /
etc/rc0.d/K01fake-hwclock -> ../init.d/
fake-hwclock
lrwxrwxrwx 1 root root 22 May 7 00:36 /
etc/rc1.d/K01fake-hwclock -> ../init.d/
fake-hwclock
lrwxrwxrwx 1 root root 22 May 7 00:36 /
etc/rc6.d/K01fake-hwclock -> ../init.d/
fake-hwclock
lrwxrwxrwx 1 root root 22 May 7 00:36 /
etc/rcS.d/S01fake-hwclock -> ../init.d/
fake-hwclock
Skrypty zaczynające się od „S” wywoływane
są z parametrem „start” – skrypty „K” z parametrem
„stop”. Widać stąd, że /init.d/fake-hwclock urucha-
miany jest przy starcie systemu (poziom S, ostatni
z wpisów) oraz przy zamykaniu systemu poleceniem
halt
(poziom 0), przy restartcie poleceniem
reboot
(poziom 6) i w trybie awaryjnym (poziom 1).
Co więcej, ślady pakietu
fake-hwclock
znajdziecie
również w harmonogramie
cron’a:
$ ls -l /etc/cron.*/*fake*
-rwxr-xr-x 1 root root 191 Oct 1 2014
/etc/cron.hourly/fake-hwclock
Program
cron
umożliwia wywoływanie zadań
w określonych momentach – np. zawsze o 11.00 lub
co pięć minut. W tym wypadku dotyczy to zapisy-
wania na karcie SD daty i czasu co godzinę. Wartości
przechowywane są w specjalnym pliku znajdującym
się na karcie: /etc/fake-hwclock.data.
$ cat /etc/fake-hwclock.data
2015-05-06 23:46:52
Zauważcie, że czas ten jest przesunięty w sto-
sunku do tego, który uzyskaliśmy od systemu zaraz
po restarcie za pomocą komendy
date.
Dzieje się tak,
ponieważ w pliku fake-hw.clock.data zapisywany jest
czas uniwersalny (UTC), a polecenie
date
wyświetla
czas systemowy – uwzględniający ustawioną przez
użytkownika strefę czasową (za pomocą
raspi-config).
Spróbujmy teraz trochę oszukać RPi i wybierzmy
się w przeszłość:
$ sudo date --set=”22 August 2002 21:00”
$ sudo fake-hwclock save force
$ cat /etc/fake-hw.clock.data
2002-08-22 19:00:13
Poczekajcie kilka minut i:
$ date
Thu Aug 22 21:01:19 CEST 2002
$ sudo reboot
Zalogujcie się ponownie:
$date
Thu Aug 22 21:02:01 CEST 2002
$ cat /etc/fake-hw.clock.data
2002-08-22 19:01:27
więcej na www.mt.com.pl/e-suplement
Widać stąd, że zawartość pliku fake-hwclock.data
została uzupełniona w trakcie operacji zamykania
systemu.
Zegar czasu rzeczywistego
dla Raspberry
W wielu zastosowaniach takie potraktowanie od-
mierzania czasu nie jest wystarczające. Powiedzmy,
że Wasz Raspberry mierzy temperaturę i zapisuje jej
wartości co kilka minut w bazie danych. Nawet jeżeli
na dwa dni zabraknie prądu, wpisy w bazie będą
sugerowały jej ciągły pomiar.
Na szczęście istnieje kilka rozwiązań, które mogą
dostarczyć Raspberry odpowiednie źródło czasu rze-
czywistego. W sprzedaży znajdziecie wiele różnych
układów scalonych tego typu. Większość z nich jest
obsługiwana przez Raspberry. Żeby sprawdzić, które
są wspierane, w linii komend wpiszcie:
$ modprobe rtc-
Zamiast klawisza [Enter], po „–” wciśnijcie raz-
-dwa razy klawisz [Tab]. Pod linią komend pojawi się
cała lista znanych Raspbianowi modułów RTC (ang.
real-time clock).
Jest ich ponad 30:
rtc-bq32k
rtc-ds3234
rtc-m41t93
rtc-pcf8563
rtc-rx8025
rtc-ds1305
rtc-em3027
rtc-m41t94
rtc-pcf8583
rtc-rx8581
...
Są to scalaki stosunkowo tanie, niewymagają-
ce wielu dodatkowych elementów. Zapewniają
dokładności rzędów wystarczających dla większości
rozwiązań.
Spróbujmy samodzielnie zbudować i uruchomić
taki zegar w oparciu o kość PCF8563 (ilustr.
2).
Układ jest bardzo prosty, ma zaledwie osiem nóżek
i wymaga jedynie dwóch dodatkowych elementów:
• oscylatora kwarcowego 32KHZ;
• kondensatora ceramicznego 15pF.
Razem z samym zegarem całkowity koszt elemen-
tów elektronicznych tego zestawu to niewiele więcej
niż 6 zł. Zamiast od razu lutować, możecie najpierw
zmontować wszystko na płytce stykowej z użyciem
kilku zworek lub przewodów łączących. Dla wygody
połączenia z Raspberry możecie użyć opisywanej już
na stronach MT PiProto Side Plus ([4]).
Podstawowy schemat połączeń znajdziecie
na ilustr.
3
(na podstawie [5], [6] i [7]). Zaznaczyłem
na nim numery fizycznych pinów Rasppberry,
do których należy podłączyć poszczególne nóżki
PCF’a.
2. Wyprowadzenia PCF8563
101
Na warsztacie
linię wolną. Musicie więc uważać na łączenie różnych
urządzeń za pomocą tej szyny. Niektóre z nich, jak
Raspberry, mogą podciągać SDA/SCL do 3,3 V a inne
– jak Arduino – do 5 V. Dla Raspberry rezystory pod-
ciągające na liniach SDA/SCL włączone są domyślnie,
nie musicie ich już dodawać w układzie.
SZKOŁA
I
2
C
na Raspberry
3. Podstawowa konfiguracja PCF8563
dla Raspberry
Wyłączcie Raspberry, podłączcie układ jak
na ilustr.
3
i uruchomcie RPi (uwaga: nigdy nie
podłączajcie nic do GPIO Raspberry włączonego
do prądu – grozi to uszkodzeniem komputerka).
Zauważcie piny opisane jako SDA/SCL. Są to linie
komunikacyjne protokołu I
2
C.
Protokół I
2
C
Zanim zagłębimy się w szczegóły instalacji i obsługi
naszego zegara, zatrzymajmy się na chwilę nad I
2
C.
Jest to protokół komunikacyjny opracowany przez
firmę Philips. „Protokół komunikacyjny” można
tu zdefiniować jako pewną umowę, która pozwala
komponentom elektronicznym wymieniać między
sobą informacje. Żeby wszystkie połączone kompo-
nenty mogły się nawzajem rozumieć, muszą postępo-
wać dokładnie według specyfikacji protokołu.
Do działania, I
2
C wymaga linii danych (SDA), linii
zegarowej (SCL), zasilania oraz masy. Komunikacja
opiera się na wystawianiu danych i podawaniu impul-
sów zegarowych. Odbiorniki I
2
C czekają na odpowied-
ni sygnał zegarowy na linii SCL i wtedy czytają dane
z linii SDA. Dla porównania, inny popularny standard
„1-wire” (np. czujnik temperatury DS18b20) opiera się
na długości impulsu (np. „zero” trwa 60 ms).
I
2
C umożliwia łączenie wielu urządzeń na jednej
linii. Każdy z podłączonych komponentów musi
mieć więc swój własny, unikalny adres. Zazwyczaj
składa się on z dwóch części. Jedna z nich jest cha-
rakterystyczna dla układu i zaprogramowana przez
producenta. Nie można jej zmienić. Druga część
adresu opiera się na odpowiednio konfigurowanych
wyjściach układu. Podłączenie odpowiedniej nóżki
scalaka do masy daje logiczne „0” na wyznaczonym
bicie adresu urządzenia. Podłączenie nóżki do zasi-
lania daje „1”. Możemy więc mieć wiele elementów
tego samego typu podłączonych do jednej magistra-
li. W ten sposób dodaje się np. EEPROMy z serii
24Cxxx czy rozszerzenia portów PCF8574AP. Akurat
w przypadku PCF8563 nie mamy wpływu na adre-
sację. Nie ma również takiej potrzeby – więcej niż
jeden układ zegara nie jest zazwyczaj potrzebny.
PCF8563 przyjmuje najczęściej adres 0x51.
Linie SDA i SCL są aktywne w stanie niskim.
Muszą być podłączone do napięcia poprzez rezystory
podciągające (ang.
pull-up).
Jest to związane ze specy-
fiką samego I
2
C, gdzie wysoki sygnał uważany jest za
I
2
C nie jest domyślnie uruchamiane na Raspbianie.
Co więcej, udostępnienie obsługi I
2
C na jego ostat-
nich wersjach wymaga trochę innego podejścia niż
w przypadku tych z 2014 r. (dyskusję na temat „drze-
wa urządzeń” znajdziecie poniżej). Zacznijcie więc
od uruchomienia programu raspi-config i włączenia
I
2
C w menu „Advanced options>I2C” (na wszystkie
pytania odpowiadajcie „ok” i „yes”). Przy wyjściu
z raspi-config („Finish” w głównym menu) powstrzy-
majcie się jeszcze z restartem.
W pliku /etc/modules dodajcie linijkę i2c_dev:
$ sudo nano /etc/modules
#...
i2c_dev
Pozostaje zainstalowanie narzędzi I
2
C:
$ sudo apt-get install i2c-tools
Ale – ale… przecież jesteśmy
off-line!
Nie ma
problemu: mimo wszystko wydajcie to polecenie,
a domyślny konfigurator zwróci Wam plik, którego
brakuje:
$ sudo apt-get install i2c-tools
Reading package lists... Done
...
The following NEW packages will be
installed:
i2c-tools
0 upgraded, 1 newly installed, 0
to remove and 0 not upgraded.
...
Failed to fetch
http://mirrordirector.
raspbian.org/raspbian/pool/main/i/
i2c-tools/i2c-tools_3.1.0-2_armhf.deb
Something wicked happened resolving
‘mirrordirector.raspbian.org:http’ (-5 -
No address associated with hostname)
E: Unable to fetch some archives,
maybe run apt-get update or try with
--fix-missing?
Zastopujcie teraz Raspberry (sudo
halt),
wyłącz-
cie zasilanie (zawsze, kiedy wyciągacie kartę SD!),
przełóżcie ją do komputera z dostępem do Sieci
i nagrajcie na nią pakiet spod adresu: http://goo.gl/
HXZSyx (lub nowszy, jak wskazano na konsoli).
Przełóżcie kartę z powrotem do RPi i uruchomcie.
Partycja widoczna pod Windows zostanie podmonto-
wana przez Raspberry jako /boot. Teraz wystarczy:
$ sudo dpkg -i /boot/i2c-tools_3.1.0-2_
armhf.deb
… i pakiet zostanie dodany. Nie jest to rozwiązanie
eleganckie, zawsze w miarę możliwości powinniście
używać apt-get.
Poziom tekstu: średnio trudny
102
m.technik – www.mt.com.pl – nr 9/2015
Więcej o Raspberry Pi w miesięczniku
Elektronika Praktyczna.
– http://goo.gl/WSU4H6
Wydanie bieżące i numery archiwalne można przejrzeć i kupić na www.ulubionykiosk.pl
Raspberry powinien znaleźć nasz zegar na liście
urządzeń I
2
C:
$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a
b c d e f
00:
-- -- -- -- -- -- -- -- -- -- -- -- --
...
50: -- 51 -- -- -- -- -- -- -- -- --
-- -- -- -- --
...
Wiemy stąd, że I
2
C widzi nasz zegar i znajdu-
je się pod adresem 0x51. Co więcej, poleceniem
i2cdump
możecie sprawdzić, czy zwraca on jakieś
wartości:
$ sudo i2cdump -y 1 0x51
No size specified (using byte-data
access)
0 1 2 3 4 5 6 7 8 9 a
b c d e f
0123456789abcdef
00: 08 48 41 38 51 67 46 46 15 56 49
67 66 c0 43 0e
?HA8QgFF?VIgf?C?
10: 08 48 41 38 51 67 46 46 15 56 49
67 66 c0 43 0e
?HA8QgFF?VIgf?C?
Powtórzcie tę komendę kilka razy. Widzicie,
że kolumna (2) zmienia się co sekundę? Czy coś
Wam to przypomina?
Raspbian zobaczył już naszego scalaka jako urzą-
dzenie I
2
C. Teraz trzeba mu powiedzieć, że jest
to zegar czasu rzeczywistego, napędzany przez
konkretny układ. W tym celu otwórzcie plik /boot/
config.txt (znowu „drzewo urządzeń”!) i dodajcie:
$ sudo nano /boot/config.txt
dtoverlay=i2c-rtc,pcf8563
Uwaga: używajcie tylko małych liter! A teraz
porządki: usuńcie
fake-hwclock:
$ sudo dpkg --purge fake-hwclock
$ ls /etc/rc*/*fake*
ls: cannot access /etc/rc*/*fake*: No
such file or directory
Dodajcie uruchamianie skryptu
hwclock.sh
przy
starcie systemu. Ustawi on czas zgodnie z zegarem
czasu rzeczywistego, a przy zamykaniu uzupełni
czas zegara o wskazania Raspberry (w nowszych
wersjach Raspbiana jest włączony domyślnie):
$ sudo update-rc.d hwclock.sh enable
Zrestartujcie Raspberry (sudo
reboot).
Po po-
nownym uruchomieniu komenda
lsmod
pokaże,
że załadowano moduł naszego zegara:
$ lsmod | grep rtc
rtc_pcf8563
3049 0
Również log systemowy wskazuje na sukces:
$ dmesg | grep rtc-pcf8563
[
27.119234] rtc-pcf8563 1-0051:
chip found, driver version 0.4.3
[
27.121666] rtc-pcf8563 1-0051: rtc
core: registered rtc-pcf8563 as rtc0
Wygląda na to, że jesteśmy na dobrej drodze
do uruchomienia naszego zegara.
Errata do 
hwclock
Rejestracja zegara w systemie
W momencie pisania tego tekstu najnowszą dostępną
wersją Raspbiana była ta, która ukazała się 5 maja
2015 r. Od lutego 2015 r. Raspbian przeszedł jednak
znaczącą zmianę. Wtedy to wprowadzono do niego
wspomniane tzw. drzewa urządzeń (ang.
device tree).
Drzewo urządzeń to struktura, która pozwala na opi-
sywanie konkretnych komponentów wchodzących
w skład sprzętu. Poszczególne moduły czy sterowni-
ki dodawane są do jądra przy starcie w miarę potrzeb
i zgodnie z opisem w „drzewie urządzeń”. Nie trzeba
już więc kompilować systemu dla konkretnego
sprzętu. Pozwala to tworzyć bardziej uniwersalne
rozwiązania.
„Drzewo urządzeń” jest powszechnie stosowane
w rozwiązaniach desktopowych. W dziedzinie SoC
z ARM pozostaje jednak stosunkową nowością. I jak
to w przypadku nowości – nie działa jeszcze stabilnie
dla wszystkich możliwych przypadków. Jednym z ta-
kich wyjątków jest omawiany w następnym rozdziale
pakiet
hwclock.
Pakiet
hwclock
służy do obsługi zegarów czasu
rzeczywistego. Umożliwia on czytanie czasu z zegara
(sudo
hwclock -r),
kopiowanie czasu z zegara do sys-
temu (np. przy starcie:
sudo hwclock --hctosys)
lub
ustawianie go zgodnie z czasem systemowym (sudo
hwclock --systohc).
Istnieje duże prawdopodobieństwo, że gdy
czytacie ten tekst, wszystkie problemy zostały już
rozwiązane. Jeżeli nie – będziecie musieli odrobinę
„poprawić”
hwclocka.
Jeżeli wywołanie go skończy
się komunikatem:
$ sudo hwclock -r
hwclock: select() to /dev/rtc0 to wait
for clock tick timed out: No such file or
directory
...będziecie musieli wprowadzić kilka zmian w jego
kodzie źródłowym, co samo w sobie jest ciekawym
ćwiczeniem. Szczegóły znajdziecie w dyskusji [3]
– tutaj zamieszczę jedynie skrót wymaganych opera-
cji. Najpierw pobierzcie pakiet
util-linux
(w którym
znajduje się
hwclock).
Jeżeli Wasz RPi jest podłączony
do Sieci, będąc w katalogu domowym (cd
~):
$ wget https://www.kernel.org/pub/
linux/utils/util-linux/v2.26/util-linux-
2.26.2.tar.gz --no-check-certificate
W przypadku off-line możecie po prostu pobrać
util-linux-2.26.2.tar.gz
ze strony https://www.kernel.
org/pub/linux/utils/util-linux/ na kartę SD, podobnie
jak to zrobiliśmy powyżej dla narzędzi I
2
C. Następnie
przekopiujcie archiwum do katalogu domowego
poleceniem:
$ cd ~
$ cp /boot/util-linux-2.26.2.tar.gz .
Możecie przy okazji sprawdzić, czy na tej stronie
nie znajdziecie nowszej wersji niż użyta przeze mnie
103
Zgłoś jeśli naruszono regulamin