İşte bunu nasıl çalıştırdım.
Buradaki hemen hemen her şeyin süper kullanıcı olarak yapılması gerekiyor, bu yüzden 'sudo bash' kullanın veya her şeyin önüne sudo koyun (daha önce gösterilmediyse).
Aşağıdaki temel adımlar gereklidir:
- 'i2c' sürücülerinin mevcut olmasa bile mevcut olmasını sağlayın;
- ek bir sürücü var rtc_ds1307 için
- fake-hwclock'u kaldırın. Bu, normalde zamanı sağlayacak bir ağınız olmadığında kullanılacak bir alt sistemdir; sistem kapatıldığında sistem saatini bir dosyaya kaydeder ve başlangıçta aynı dosyadan yükler. Yani zaman doğru değil, ama en azından her yeniden başlattığınızda sıfıra (1 Ocak 1970) dönmüyor. RTC kuruluyken, ağ olmasa bile zaman makul ölçüde doğru başlayacaktır.
- sistemin, başlangıçta RTC'den saati okumasını ayarlayın.
Lütfen bunun bir rev 2.0 'Pi 1' ve genişletme konektörüne takılı bir ds1307 rtc üzerindeki 2015-05-05-raspian-wheezy görüntüsü için olduğunu unutmayın. Bazıları veya çoğu diğer durumlar için geçerli olmalıdır (ancak muhtemelen daha yaşlı ahududu için değil). Bozulan RTC ile ilgili sorunun ds1307 sürücüsüne özgü olması olasıdır, bu nedenle diğer yongalar için daha basit olabilir. Ve bu sorun gelecekteki bir sürümde çözülebilir.
Ayrıca, bu talimatlar I2C veri yolu # 1'in kullanımda olduğu model 2 PCB için yazılmıştır. Rev1 PCB'niz varsa (P1'e yakın 8 pimli 'P5' konektörüne sahip olmayan) RTC'yi I2C veri yolu # 0'a bağlayacaksınız. Bu nedenle, aşağıda / i2c-1 /
gördüğünüzde, bunun yerine / i2c-0 /
kullanın.
Önce raspi-config'i çalıştırın, ve 'gelişmiş seçenekler' altında, I2C'yi ve I2C sürücülerini yüklemeyi etkinleştirmek için bir ayar bulacaksınız. Onları etkinleştirin.
Şimdi, prensip olarak, /boot/config.txt
: dtoverlay = i2c-rtc, ds1307
'nin altına bir satır ekleyebilirsiniz, ds1307 sürücüsü; ancak - birçoğunun bulduğu gibi - sürücünün yüklenmesi saatin içeriğini bozarak amacını bozacaktır. Neden olduğuna dair hiçbir fikrim yok, ancak sürücü kaynağına baktım ve başlangıçta saati okuduğunu ve beğenmediği şeyleri bulursa (24 yerine 12 saatlik format gibi) buldum. bu ayarları yazmalarla 'düzeltir'. Bu yüzden, I2C başladıktan hemen sonra sürücünün yüklenmesi ve belki de saatlerin düzgün ayarlanmamış olması ve iletişimin bozuk olabileceğinden şüpheleniyorum. Her durumda, bu benim sahip olduğum yapılandırmayla çalışmıyor ve bu nedenle sürücünün daha sonra yüklenmesine neden olacağız.
Bu noktada, yeniden başlatabilir ve lsmod | grep i2c
i2c_bcm2708
sürücüsünün yüklendiğini görmelisiniz (raspi-config'de sorulduğu gibi).
Ardından, şu komutu çalıştırın:
echo ds1307 0x68 > / sys / class / i2c-adapter / i2c-1 / new_device
veya (zaten süper kullanıcı değilse):
sudo sh -c 'echo ds1307 0x68 > / sys / class / i2c-adapter / i2c-1 / new_device'
( sudo echo
şu tarihten beri çalışmıyor >
, süper kullanıcı olması gereken şeydir).
Bu, rtc_ds1307
sürücüsünün yüklenmesine neden olur ve bir / dev aygıt oluşturur / rtc0
. Artık hwclock
:
sudo hwclock -r
çalıştırabilmelisiniz ... Bu, RTC. Saatiniz henüz düzgün şekilde başlatılmadığından bir hata oluşturabilir. Her durumda, şimdi ayarlayacağız.
(1) sistem saatinin tarih
kullanılarak ayarlandığından emin olun. Bir ağ üzerindeyseniz, önceden ayarlanmış olmalıdır; değilse, telefonunuzu veya cep saatinizi çıkarın ve
sudo date -s '18 kasım 2015 22:20:24 '
gibi bir şey deneyin
sistem saatini doğru bir şekilde ayarladığınızda - saat dilimi için doğru ayarlamaya dikkat ederek - yapabilirsiniz
sudo hwclock -w
bunu RTC'ye kopyalar.
Ve sonra hwclock -r
çalışmalı, zamanı RTC'de göstermeli ve okursanız ilerlediklerini görmelisiniz birden fazla.
18 Kasım 2015 Çar 22:48:41 EST -0.181329 saniye 18 Kasım 2015 Çarşamba 22:48:53 EST -0.013721 saniye
Not: saat değeri UTC saat dilimine göre saklanır, ancak yerel saatte görüntülenir.
Sonraki adım: sahte hwclock'u kaldırın. Önce onu devre dışı bırakın ve hwclock.sh'nin etkinleştirildiğinden emin olun:
sudo update-rc.d hwclock.sh ,udo update-rc.d fake-hwclock removeesudo apt-get remove fake-hwclocksudo rm /etc/cron.hourly/fake-hwclocksudo rm /etc/init.d/fake-hwclock
hwclock.sh
başlangıçta hiçbir şey yapmaz - udev'in varlığını algılar ve udev'in başlatma işini yaptığını varsayar - ancak yararlı bir şey yapar, bu da sistem saatinin çalıştırma sırasında RTC'ye yazılmasına neden olur. Dolayısıyla, bir ağa bağlandığınızda, Pi zamanı ağa senkronize olur ve kapattığınızda RTC kayması düzeltilir.
Geriye bir şey kaldı - RTC'yi okumayı ayarlamamız gerekiyor. açıldığında, sistem saati ayarlanacaktır. udev'in içinde bunu yapmaya çalışan, ancak RTC sürücüsü yüklenmediği için başarısız olacak veya atlanacak bir şey var.
Bunu ayarladığım yol, bu dört /etc/rc.local
üstündeki satırlar (sağ üstte, yorumların altında):
echo 'RTC'echo ds1307 0x68 > / sys / class / i2c-adapter / i2c-1 / new_devicesleep 0.5hwclock -s
Bu, sürücünün yüklenmesini ve sistem her başlatıldığında donanım saatinden sistem saatinin ayarlanmasını sağlar. 'Sleep 0.5' orada çünkü hwclock
komutunun o olmadan çalışmayacağını buldum - eylem / sys / class / i2c-adapter / i2c-1 / yazarak tetiklendi new_device
(/ dev / rtc0'ı oluşturmak dahil) görünüşe göre biraz zaman alıyor (muhtemelen 0,5 saniyenin çok altında).
İşte bu kadar. Bu /etc/rc.local
kullanımından gerçekten memnun değilim - rc.local öncesinde birçok şey olduğu için çok daha erken kurulmasını tercih ederim code> çalıştırılır ve bu şeyler çalışmadan önce saatin ayarlanması çok daha iyi olur. Ama benim için çalışıyor. Daha iyi bir yol bulursam bu yanıtı güncelleyeceğim.
Referanslar https://www.raspberrypi.org/forums/viewtopic.php?t=97314 https://www.raspberrypi.org/forums/viewtopic.php?p=842661 https://www.raspberrypi.org/forums/viewtopic.php?t=85683 https://www.raspberrypi.org/blog/upcoming-board-revision/