LINUX.ORG.RU

Периодическая перезагрузка Rockchip RK3568

 , , , ,


0

1

Добрый день. Собрано ядро и минимальная rootfs с busybox (через buildroot) для SOM Rockchip RK3568. Загружается, но существует периодическая перезагрузка. В логах uboot причиной перезагрузки стоит

boot reason : watchdog boot

На борту SOM существует два watchdog’а, в дереве устройств описаны. Собственно, вопрос: как обычно реализован сброс watchdog’а в Linux? Это ядро делае, или что-то из busybox (в моем случае) или какой-то внешний сервис?

Увидел, что в busybox есть сервис watchdog. Но он принимает на вход время и адрес устройства. А вот в /dev файла watchdog нет. Причем, нет в моей сборке (в дереве устройств присутствует), нет и в оригинальной ОС, которая, естественно, не перезагружается просто так.

kriptonus
() автор топика

Собрано ядро и минимальная rootfs с busybox (через buildroot) для SOM Rockchip RK3568.

Учитывая, что такой камень берут для боле мощных задач. То после подгонки defconfig ядра переходи на Yocto. Сэкономишь кучу времени на пересборке тяжёлых пакетов.

AlexVR ★★★★★
()

Это ядро делае, или что-то из busybox (в моем случае) или какой-то внешний сервис?

Обычно это сервис. Хотя и ядро может дёргать.

Например, один watchdog-gpio - не управляемый (нельзя остановить/запустить). Второй на камне. В dts:

	aliases {
		watchdog0 = &wdt;
		watchdog1 = &watchdog_gpio;
	};

	watchdog_gpio: watchdog-gpio {
		compatible = "linux,wdt-gpio";
		...
		always-running;
	};

Тогда ядро будет само дёргать GPIO. А сервис управлять другим.

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

Самое интересное, перепроверил, драйвер должен собираться, в конфиге ядра стоит галочка

<*>   Synopsys DesignWare watchdog 

В дереве тоже, совместимое устройство описано

watchdog@fe600000 {
		compatible = "snps,dw-wdt";
		reg = <0x00 0xfe600000 0x00 0x100>;
		clocks = <0x1f 0x116 0x1f 0x115>;
		clock-names = "tclk\0pclk";
		interrupts = <0x00 0x95 0x04>;
		status = "okay";
		phandle = <0x1c9>;
	};

А вот в директории dev ничего с watchdog нет.

# ls /dev
bus                 mtdblock4           tty37
console             mtdblock5           tty38
cpu_dma_latency     mtdblock6           tty39
crypto              net                 tty4
fd                  network_latency     tty40
full                network_throughput  tty41
fuse                null                tty42
gpiochip0           port                tty43
gpiochip1           ppp                 tty44
gpiochip2           ptmx                tty45
gpiochip3           pts                 tty46
gpiochip4           ram0                tty47
gpiochip5           random              tty48
hwrng               rtc0                tty49
i2c-0               shm                 tty5
i2c-1               spidev0.0           tty50
i2c-2               spidev1.0           tty51
i2c-4               spidev2.0           tty52
i2c-5               spidev3.0           tty53
input               stderr              tty54
kmsg                stdin               tty55
log                 stdout              tty56
loop-control        tee0                tty57
loop0               teepriv0            tty58
loop1               tty                 tty59
loop2               tty0                tty6
loop3               tty1                tty60
loop4               tty10               tty61
loop5               tty11               tty62
loop6               tty12               tty63
loop7               tty13               tty7
mem                 tty14               tty8
memory_bandwidth    tty15               tty9
mmcblk0             tty16               ttyFIQ0
mmcblk0boot0        tty17               ttyS3
mmcblk0boot1        tty18               ttyS8
mmcblk0p1           tty19               ubi_ctrl
mmcblk0rpmb         tty2                uinput
mtd0                tty20               urandom
mtd0ro              tty21               usbmon0
mtd1                tty22               usbmon1
mtd1ro              tty23               usbmon2
mtd2                tty24               usbmon3
mtd2ro              tty25               usbmon4
mtd3                tty26               vcs
mtd3ro              tty27               vcs1
mtd4                tty28               vcsa
mtd4ro              tty29               vcsa1
mtd5                tty3                vcsu
mtd5ro              tty30               vcsu1
mtd6                tty31               vendor_storage
mtd6ro              tty32               vga_arbiter
mtdblock0           tty33               zero
mtdblock1           tty34               zram0
mtdblock2           tty35
mtdblock3           tty36
kriptonus
() автор топика

Стоп.

А что за ядро ты собираешь?

В Mainline

commit 0edcfec3fafa1fe58fd9a3be727742881ec340c3
Author: Liang Chen <cl@rock-chips.com>
Date:   Tue Jun 22 12:29:07 2021 +0200

    arm64: dts: rockchip: add watchdog to rk3568
    
    Add the watchdog node to rk3568.
    
    Signed-off-by: Liang Chen <cl@rock-chips.com>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://lore.kernel.org/r/20210622102907.99242-2-heiko@sntech.de

diff --git a/arch/arm64/boot/dts/rockchip/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
index 4bddf8de4f51..322971318d5a 100644
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
@@ -592,6 +592,14 @@ i2c5: i2c@fe5e0000 {
                status = "disabled";
        };
 
+       wdt: watchdog@fe600000 {
+               compatible = "rockchip,rk3568-wdt", "snps,dw-wdt";
+               reg = <0x0 0xfe600000 0x0 0x100>;
+               interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cru TCLK_WDT_NS>, <&cru PCLK_WDT_NS>;
+               clock-names = "tclk", "pclk";
+       };
+
        uart1: serial@fe650000 {
                compatible = "rockchip,rk3568-uart", "snps,dw-apb-uart";
                reg = <0x0 0xfe650000 0x0 0x100>;

Ешё год назад в Mainline ядре было всё что нужно. Я вяленого запускал на этом камне без проблем.

Далее.

Это не внешний watchdog. Что дёргает тебя.

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

Нафига это старьё?

Ты можешь спокойно:

И в путь. Mainline u-boot и linux kernel камень поддерживают. Примеров плат в них дофига.

Отладил u-boot и linux. Перешёл на yocto. Слой meta-rockchip от yocta-project содержит достаточно примеров.

В Yocto тебя ждёт уже полный фарш по библиотекам, утилитам и языкам программирования современных версий. Добавил SWupdate и в прод.

На гнилых обргрызках далеко не уйдёшь. SoM-то взяли для нормальных задач небось.

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

mainline для rk3568 действительно хорош, но к сожалению поддерживает далеко не всё, например интерфейса камеры нет. Даже CAN долгое время не было, только недавно добавили.

Дописывал к нему LVDS, но ядерные разработчики попросили переделать, но мне увы пока некогда таким заниматься.

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

mainline для rk3568 действительно хорош, но к сожалению поддерживает далеко не всё, например интерфейса камеры нет. Даже CAN долгое время не было, только недавно добавили.

Общая боль при работе с Allwinner и Rockchip. Сидеть мониторить patchwork, форумы и прочее. Собирая набор патчей для себя.

Дописывал к нему LVDS, но ядерные разработчики попросили переделать, но мне увы пока некогда таким заниматься.

Даже за упоминание на Patchwork многие будут благодарны.

AlexVR ★★★★★
()