31 Mayıs 2019 Cuma

ORANGE PI RTC(REAL TIME CLOCK) -2

ORANGE PI RTC - II


Bir önceki RTC yazımızda, RTC ile ilgili temel bilgileri verdik. Bunun yanında, bağlantı ve gerekli yüklemeleri inceledik. Ayrıca yazının sonunda, yaşadığımız birkaç sorundan ve RTC'nin asıl kullanım amacından bahsettik.

Bağladığımız harici RTC'nin ana görevi, olabilecek her durumda güncel saati tutmak. İnternet olmayabilir, Orange pi'ye güç gitmeyebilir. Burada bağladığımız bağladığımız RTC sayesinde üzerindeki pil bitene kadar güncel saati okuyabiliriz.


İnternetsiz Ortamda RTC Kullanımı 


Orange pi kapandığında sistem saati durur. Açtığımızda ise saatin internet sayesinde güncellenmesi lazım. Normalde Orange pi sistem saati, internete bağlı olduğu durumlarda "NTP" protokolü sayesinde, internet üzerinden saati güncel saate senkronize edebiliyor. İnternet olmadığında ise doğru saati kesintisiz tutabilmesi için harici bir RTC'ye ihtiyaç duyarız.

Linux Systemd 



Systemd, en basit tanımıyla Linux çekirdeği için başlatıcı ve sistem yönetim aracıdır. Ana Linux dağıtımlarının bir çoğu systemd kullanır. Init sistem olarak adlandırılan başlatıcı sistemin temel işlevi, önyükleme(boot) esnasında Linux çekirdeğinin(kernel) yüklenmesinden sonra gerçekleştirilen kullanıcı safhası(userland) elemanlarının başlatılması ve kullanımının yönetilmesidir.

Systemd için gerçekleştirilecek işlemlerin çoğu unit adı verilen elemanlarla ilgilidir. Unit elemanları, systemd'nin anlayacağı şekilde yapılandırılmış dosyalardır. Her bir unit elemanı, sonuna nokta(.) işaretinden sonra verilen işlev ile ilgili uzantı kullanılarak gruplandırılır. Bu sayede bir unit elemanının hangi işlev ile ilgili olduğu temsil edilir.

Örneğin; aşağıda "/lib/systemd/system/" dizini altındaki unit dosyalara bakabilirsiniz. "mount", "service", "socket" ve "timer" gibi işlev uzantılarını görebilirsiniz. 



Systemd komut satırından systemctl ile yönetilir. Bir servisi aktif ederken systemctl komutunu kullanırız. Örneğin; aplication servisini başlatmak isteğimizde systemctl start application.service komutunu kullanırız. Bunun dışında durdurma(stop), tekrar başlatma(restart), aktif-pasif hale getirme(enable-disable) gibi işlemleri de systemctl ile yaparız.


Sistem Saatini Otomatik Harici RTC'den Almak 


İnternet olmadığında karşılaştığımız sorunlardan bahsettik. Bunun yanında harici RTC'yi, Orange pi her yeniden açıldığında tekrardan aktif etmek gerektiğini de hatırlayalım. Şimdi bunların çözümüne geçelim.

İlk önce RTC'yi her yeniden açılışta el ile aktif etmemek ve bu işi otomatik bir şekle dönüştürmek gerekiyor. Bunun için ileride inceleyeceğimiz rc.local, .bashrc gibi alternatiflerin olduğu dosyalara başlangıçta çalıştırmak istediğimiz kodları giriyoruz. Bu yazıda bu işlemleri rc.local dosyasını kullanarak yapacağız. Rc.local dosyasına hem harici RTC'yi tanıtmak için gerekli olan komutu hem de harici RTC'deki saati okuyup sistem saatine atacak olan komutu yazacağız.

nano /etc/rc.local yazarak rc.local dosyasının içine giriyoruz.

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device

hwclock -s -f /dev/rtc1
satırlarının rc.local dosyasının en altına yazıyoruz ve daha sonra dosyayı kaydedip çıkıyoruz.



Normalde internet olmayacağı kesin olan ortamlarda yukarıdaki işlemi yapmak yeterli. Fakat biz bu durumun nasıl çalıştığını görmek için saatin internet üzerinden senkronize olmasını kapatalım ve yaptığımız işlemlerin işe yarayıp yaramadığına bakalım.

Bu işlemlere geçmeden önce timedatectl komutundan bahsetmek istiyorum. Timedatectl, sistem tarihi ve saatini kontrol ettiğimiz bir komut. Ayrıca bu komutla birlikte ağ-zaman senkronizasyonunu sağlayan servisleri de kontrol edebiliyoruz. Timedatectl bu verileri "system-timesyncd.service" üzerinden kontrol eder.





Saatin internet üzerinden senkronizsayonunu kapatmak için ister systemctl ile ister de timedatectl komut ile işlem yapabiliriz. Systemctl komut ile ilk önce servisi kapatıp daha sonra başlangıçta çalışmaması için pasif yaparken, aynı işlemleri timedatectl ile tek seferde halledebiliyoruz.

systemctl stop systemd-timesyncd.service
systemctl disable systemd-timesyncd.service
diyerek servisi durdurup, pasif hale getiriyoruz.
timedatectl set-ntp off diyerek de aynı şekilde sistemi durdurup pasif hale getirebiliyoruz.

Bu şekilde saatin senkronize olmaması için servisi kapattığımızda, sanki internet yokmuş gibi saat güncellenmeyecek.


Yukarıdaki resimde görebileceğiniz gibi, servisi kapattıktan sonra tarihi değiştirdiğimde otomatik olarak tarih güncellenmiyor. Aşağıdaki resimde servisi tekrar açıyorum ve tarih otomatik güncelleniyor.



Tarih/saat senkronizasyon servisini kapattıktan sonra, artık sistem saatinin harici RTC üzerinden otomatik olarak okunması sağlayabiliriz. Bunu anlamak için harici RTC saatini hwclock --set --date "10/26/2017 10:05:20" -f /dev/rtc1 komutuyla Ekim 2017'ye ayarlıyorum. Daha sonra rc.local dosyasına, harici RTC'yi etkinleştirmek ve sistem saatine atmak için olan komutları yazıyorum. Son olarak da "systemd-timesyncd.service" servisini kapatıyorum ve sistemi tekrar başlatıyorum. Orange pi açıldığında herhangi bir şey yapmamama rağmen aşağıdaki resimde sistem saati ile harici RTC'nin aynı olduğu görülüyor.





Tarih/saat senkronizasyonunu tekrardan aktif etmek için systemctl enable systemd-timesyncd.service veya timedatectl set-ntp on komutlarını kullanıp, Orange pi'yi tekrar başlatabiliriz.

RTC ile ilgili paylaşacağım yazı dizisinin ikincisi bu yazıydı. Bu yazıda genel olarak RTC modülünü sistem başlangıcında otomatik olarak tanıtmayı ve otomatik olarak harici RTC'deki saat/tarih değerinin sistem saatine yazdırılmasını inceledik. Konuyu daha iyi anlatmak için gerektiği kadar Linux sistem bilgisi ile ilgili de bazı konulara değindik. Bir sonraki yazıda RTC üzerinden, başlangıçta otomatik bir işlem yaptırmak için ne gibi yollara başvurabileceğimize değineceğiz.

Konu ile ilgili işlemleri sizlere sade ve anlaşılır bir biçimde anlatmaya çalıştım. Gerek gördükçe görsellerle bunu destekledim. Yazıda anlaşılmayan veya yanlış olduğunu düşündüğünüz kısımları iletişim adreslerinden bizelere bildirebilir ve öğretici yazıların daha kaliteli olması için destek verebilirsiniz. Herkese iyi çalışmalar.

Hiç yorum yok:

Yorum Gönder

Öne Çıkan Yayın

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART Python kurulum  yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra  Python Gpio  yazısında gir...