Прошивка sk_min_defconfig + armbian bullseye
Всё собрано, прошито, работает.
Потребовалось использовать внешний rtc. Подключили pcf8563 на на i2c-2, поставил i2c-tools, адрес 0x51 появился.
после команды:
echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-2/new_device
вроде появляется само новое устройство в /sys/class/... , но в /dev/ устройство rtc1 не добавляется.. погуглил, вроде нужны модули i2c-dev и rtc-pcf8563. i2c-dev даже вроде грузится через modprobe, наверно есть в ядре. А на rtc-pcf8563 ругается при попытке загрузить. Вопрос, как его собрать и что нужно для этого модуля ?
В процессоре есть встроенный RTC и после загрузки сим.ссылка /dev/rtc0 указывает как раз на него. А внешний rtc 8563 становится /dev/rtc1
Можно ли их поменять, чтоб 8563 стал rtc0, и система использовала его для чтения записи времени ? Или только руками, при загрузке считывать время скриптом, при синхронизации тоже скриптом сохранять ?
В процессоре есть встроенный RTC и после загрузки сим.ссылка /dev/rtc0 указывает как раз на него. А внешний rtc 8563 становится /dev/rtc1
Можно ли их поменять, чтоб 8563 стал rtc0, и система использовала его для чтения записи времени ?
можно указать чтобы ядро при старте брало время из rtc1 а не rtc0 - это в самом начале меню конфига ядра где вы включали драйвер своего rtc
[*] Set system time from RTC on startup and resume (rtc1) RTC used to set the system time
скопировать на первый раздел emmc полученное ядро и dtb - zImage, sun8i-a40i-sk.dtb из директории
buildroot-2022.08.4-sk-a40i/output/images
В процессоре есть встроенный RTC и после загрузки сим.ссылка /dev/rtc0 указывает как раз на него. А внешний rtc 8563 становится /dev/rtc1
Можно ли их поменять, чтоб 8563 стал rtc0, и система использовала его для чтения записи времени ? Или только руками, при загрузке считывать время скриптом, при синхронизации тоже скриптом сохранять ?
Попробовал проделать подключение rtc подобным образом к плате SK-A40i-SODIMM. Нам нужно подключить к этому устройству этот же rtc и eeprom (на плате NANO2E это работает)
Правил dts файл
buildroot-2022.08.4-sk-a40i/output/build/linux-custom/arch/arm/boot/dts/sun8i-a40i-sodimm-hdmi-sk.dts :
&i2c3 {
status = "okay";
pcf8563: rtc@51 {
compatible = "nxp,pcf8563";
reg = <0x51>;
};
};
Пересобрал, перепрошил, запустилось, но устройства на i2c недоступны. Стал смотреть i2cdetect, а на i2c3 сидит hdmi...
root@bananapim2ultra:~# i2cdetect -l
i2c-1 i2c mv64xxx_i2c adapter I2C adapter
i2c-2 i2c DesignWare HDMI I2C adapter
i2c-0 i2c mv64xxx_i2c adapter I2C adapter
Вопрос, можно ли как то отключить hdmi ? Или как грамотно подключить мои rtc и eeprom к i2c на SK-A40i-SODIMM ?
Правил dts файл
Пересобрал, перепрошил, запустилось, но устройства на i2c недоступны.
устройства надо подключить физически тогда будут доступны, вы их прописали на i2c3 - этот интерфейс так и обозначен на схеме модуля, пины у него PI0, PI1
Стал смотреть i2cdetect, а на i2c3 сидит hdmi...
root@bananapim2ultra:~# i2cdetect -l
i2c-1 i2c mv64xxx_i2c adapter I2C adapter
i2c-2 i2c DesignWare HDMI I2C adapter
i2c-0 i2c mv64xxx_i2c adapter I2C adapter
в данном случае шина i2c3 по схеме это интерфейс i2c-1, ядро присваивает номера интерфейсам по порядку инициализации динамически, чтобы не путаться и сделать статическое соответствие можно дописать алиасы для i2c в начале DTS платы
устройства надо подключить физически тогда будут доступны, вы их прописали на i2c3 - этот интерфейс так и обозначен на схеме модуля, пины у него PI0, PI1
если устройства подключены физически к PI0/PI1, даже если они не прописаны в DTS они должны быть видны на интерфейсе, если алиасы не прописаны
устройства надо подключить физически тогда будут доступны, вы их прописали на i2c3 - этот интерфейс так и обозначен на схеме модуля, пины у него PI0, PI1
если устройства подключены физически к PI0/PI1, даже если они не прописаны в DTS они должны быть видны на интерфейсе, если алиасы не прописаны
i2cdetect -a 1
если прописать алиасы то сканировать шину 3
i2cdetect -a 3
Устройства физически подключены, альясы не прописаны.
На указанной вами шине их не вижу, кстати на ней очень медленно идет опрос адресов и ничего нет.
root@bananapim2ultra:~# i2cdetect -a 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x00-0x7f.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
а вот на шине 2, которая я полагал и есть i2c3 (так было на плате NANO2E), вот что:
root@bananapim2ultra:~# i2cdetect -a 2
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-2.
I will probe address range 0x00-0x7f.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 32 -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 -- -- -- -- -- 58 59 5a 5b 5c 5d 5e 5f
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
root@bananapim2ultra:~# i2cdetect -a 2
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-2.
I will probe address range 0x00-0x7f.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 32 33 34 35 36 -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
С каждым новым запросом на ней разные адреса устройств...я предположил, так работает hdmi. На ней периодически появляются и пропадают и адреса моих устройств, 0x50 и 0x51, но они не доступны для подключения.
Сам опрос тут проходит быстро
а вот на шине 2, которая я полагал и есть i2c3 (так было на плате NANO2E), вот что:
на обоих платах одно и тоже ядро, только название интерфейсов разное - но это один и тотже физический интерфейс, никакой роли эти названия не играют и HDMI не может влиять - это отдельный интерфейс, проверьте физическое подключение.
а вот на шине 2, которая я полагал и есть i2c3 (так было на плате NANO2E), вот что:
на обоих платах одно и тоже ядро, только название интерфейсов разное - но это один и тотже физический интерфейс, никакой роли эти названия не играют и HDMI не может влиять - это отдельный интерфейс, проверьте физическое подключение.
Разобрались с подключением и нумерацией i2c. Но все равно не заработало, как надо.
Вкратце: плата SK-A40i-SODIMM+armbian bullsey, прописал в .dts свой rtc:
&i2c3 {
status = "okay";
pcf8563: rtc@51 {
compatible = "nxp,pcf8563";
reg = <0x51>;
};
};
добавил свой драйвер: make linux-menuconfig
Device Drivers --->
[*] Real Time Clock --->
<*> Philips PCF8563/Epson RTC8564
указал, чтоб при старте брать из моего устройства время:
[*] Set system time from RTC on startup and resume
(rtc1) RTC used to set the system time
Альясы пока не прописывал
после загрузки адрес устройства 0x51 не появляется...
При этом шина i2c читается нормально, устройство на адресе 0x50 (это eeprom, его в dts не прописывал) доступно и читается.
Смотрели i2c сниффером, при загрузке линукса с i2c устройством 0x51 происходит валидный обмен, где то с 5-й секунды после включения. После окончания загрузки устройства нет, вместо адреса UU. Соответственно /dev/rtc1 тоже не появляется