Pierwsze kroki z Raspberry Pi: jak dodać RTC?

Po wyświetleniu pseudo-graficznego interfejsu menuconfig z pośród dostępnych opcji wybieramy:

dzięki czemu nie musimy ładować modułu i2c-dev przy starcie systemu, oraz:

co zwalnia nas z potrzeby ładowania modułu rtc-ds1307 oraz zapewnia automatyczną synchornizację czasu systemowego z czasem zegara RTC przy starcie systemu.

 

 

Rys. 1. Interfejs menuconfig

 

Jeżeli preferujemy tekstową edycję pliku .config, spośród wszystkich dostępnych opcji ustawiamy sześć poniższych wpisów:

Tym samym mamy już za sobą część konfiguracji będącą odpowiednikiem dodania wpisów w pliku /etc/modules realizujących automatyczne ładowanie modułów. Teraz przyszedł czas na poinformowanie systemu o dołączonych urządzeniach i ich adresach programowych. Tak więc po zapisaniu wprowadzonych zmian i zakończeniu pracy z narzędziem menuconfig ostatnim etapem jest deklaracja odpowiednich struktur (i2c_board_info) w pliku ../arch/arm/mach-bcm2708/bcm2708.c.
W edytowanym pliku dołączamy dyrektywę:

oraz w kodzie funkcji void __init bcm2708_init(void):

Po zapisaniu zmian możemy przystąpić do właściwej kompilacji jądra systemu (w 64-bitowych systemach hosta, proces kompilacji może wymagać doinstalowania pakietów 32-bitowych: glibc.i686 oraz zlib.i686):

oraz kompilacji i instalacji modułów:

Po zakończeniu kompilacji, pliki wynikowe tego procesu kopiujemy na kartę SD z systemem Raspbian:

  • plik ../linux/arch/arm/boot/Image jako kernel.img na partycję /boot,
  • moduły systemu oraz firmware w postaci binarnej na partycję /rootfs:
    • su -c ‘cp -R ../linux/modules_temp/lib/modules/3.10.32+/ /rootfs’
    • su -c ‘cp -R ../linux/modules_temp/lib/firmware/ /rootfs’

Po umieszczeniu karty w czytniku SD Raspberry Pi i załadowaniu systemu sprawdzamy, czy zostało załadowane odpowiednie jądro systemu (zwracając szczególną uwagę na datę kompilacji):

Po ponownym uruchomieniu Raspberry Pi, w systemie plików powinno zarejestrować się również nowe urządzenie /dev/rtc0 reprezentującje podłączony zegar DS1307:

W przypadku problemów warto przeanalizować komunikaty występujące przy starcie systemu, np. w przypadku nieprawidłowo wykonanych połączeń sprzętowych:

oraz

Jeżeli nie popełniliśmy żadnych błędów zarówno na etapie połączeń sprzętowych jak i konfiguracji jądra, poniższe polecenie powinno zwrócić nam aktualnie zapisany czas zegara DS1307 (który niekoniecznie będzie już odpowiadać wartości rzeczywistej):

 

O autorze