LINUX.ORG.RU

bpi m2 berry/ultra и rtc

 bpi m2 berry, , v40


0

1

Всем добра.

Ситуация такая.
Есть сабжевая плата. На ней висит сервер. Все работает нормально.
Но достает одно. В soc v40/r40 есть rtc, но батарейки нет и соответственно толку с него только при перезагрузке. По i2c прикрутил ds1307. Нарисовал overlay. Поцепился как /dev/rtc1.
hwclock работает нормально.

root@nas:/mnt/nas/work/dtb/dtb# hwclock -r -f /dev/rtc
2019-08-26 20:11:57.687139+0300

Через udev сделал его /dev/rtc.
SUBSYSTEM=="rtc", KERNEL=="rtc1", SYMLINK+="rtc", OPTIONS+="link_priority=-100"

Но как и ожидалось при загрузке система синхронизируется в rtc от soc и кладет на ds1307.
Aug 26 15:17:07 nas kernel: [    2.684768] sun6i-rtc 1c20400.rtc: registered as rtc0
Aug 26 15:17:07 nas kernel: [    2.684775] sun6i-rtc 1c20400.rtc: RTC enabled
--------
Aug 26 15:17:07 nas kernel: [    3.308375] sun6i-rtc 1c20400.rtc: setting system clock to 1970-01-01T00:0
0:11 UTC (11)
--------
Aug 26 15:17:07 nas kernel: [    4.358985] rtc-ds1307 3-0068: registered as rtc1

Как вообще отрубить внутренний sun6i-rtc 1c20400.rtc?
Наколхозил вот такой dts:
/dts-v1/;
/plugin/;


/ {
        compatible = "allwinner,sun8i-r40-rtc", "allwinner,sun8i-h3-rtc";

/* <rtc@1c20400>; */

        fragment@0 {
                target-path = "/aliases";
                __overlay__ {
                        rtc = "/soc@1c00000/rtc@1c20400";
                };
        };

        fragment@1 {
                target = <&rtc>;
                __overlay__ {
                                status = "disabled";
                        };
                };

};

Не помогает. Может я здесь чего накосячил?
Кто силен в armовых делах. Ткните как решить проблему.
Неужели никто не имел дело с v40?

★★★★★

Ответ на: комментарий от anonymous

И убери бесполезное правило udev - время выставляет ядро и берет его из rtc0 по умолчанию во время инициализации - никакого удава там еще нет. Кстати можно через конфиг ядра указать ядру чтобы брало из rtc1 и пересобрать ядро не трогая dts - смотря что тебе удобней (драйвер ds1307 должен юыть слинкован статически разумеется)

anonymous
()
Ответ на: комментарий от anonymous

Примерно тоже-самое я и пытаюсь сделать.
То что предлагаешь ты - это понятно, по придется перекомпилять ядро - что не канает.
Нужно сделать через overlay-user, что-бы после обнов опять все не отваливалось.

hbars ★★★★★
() автор топика
Ответ на: комментарий от hbars

То что предлагаешь ты - это понятно, по придется перекомпилять ядро - что не канает.

нифига не понял - DTS собирается отдельно от ядра своим компилятором dtc, на выходе бинарный файл .dtb, Никакое ядро перекомпилять не надо. Можешь сделать свой DTS, вложить туда например

/dts-v1/; #include «sun8i-r40-bananapi-m2-ultra.dts»

и исправлять/добавлять что тебе нужно. Что за дичь у тебя там с оверлеями.

anonymous
()
Ответ на: комментарий от anonymous

Кстати можно через конфиг ядра указать ядру чтобы брало из rtc1 и пересобрать ядро не трогая dts - смотря что тебе удобней (драйвер ds1307 должен юыть слинкован статически разумеется)

Драйвер модулем. Даже если я его в Initrd запихну, оно после обновления отвалится. Ну и пусть синхронизируется после его загрузки.
А вот если можно ядру сказать с чем синхронизировать то и особо вооще ничего не нужно было-бы делать.
Но такого параметра не нашел.

hbars ★★★★★
() автор топика
Ответ на: комментарий от hbars

[qoute] Но такого параметра не нашел.

это не параметр а конфиг

make ARCH=arm menuconfig

Device Drivers  --->
[*] Real Time Clock  --->
[*]   Set system time from RTC on startup and resume
---> (rtc0)  RTC used to set the system time
anonymous
()
Ответ на: комментарий от hbars

Нужно сделать через overlay-user, что-бы после обнов опять все не отваливалось.

в общем не сразу понял - у тебя какой-то дистрибутив и тебе надо прозрачно для его обновлений делать. В оверлее ноду не удалить, можно только добавлять, почему status = disabled не работает хз - есть еще вариант кроме оверлеев - налету редактировать из убута dtb

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841676/U-Boot Flatten...

можно совсем удалить этот rtc

anonymous
()
Ответ на: комментарий от hbars

Драйвер модулем.

тогда ничего не сделаешь, даже если отключишь встроенный RTC системное время будет иметь начальное значение 1970 год как это принято в юниксах. Тебе надо просто вставить в системе инициализации (не знаю что у тебя там - systemd или другой инит) синхонизацию системного времени с rtc1

hwclock работает нормально

anonymous
()

Костыль - тупо в rc.local (если он пускается), естественно без переименования с в udev: hwclock -f /dev/rtc1 --hctosys

anonymous
()
Ответ на: комментарий от anonymous

Ну и по выключению делать --systohc
ntpd время то потом все-равно правит.
Костыль конечно. Но хоть так.

ps: Не знаю писал ли раньше. :) Все это на armbian.

hbars ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.