LINUX.ORG.RU

Как рестартануть /dev/fb1 ???

 ,


0

2

Приветствую.

Через /dev/fb1 с одноплатника реализовано подключение lcd экрана, который зараза по необъяснимым причинам иногда белеет.

Может есть способ не ребутить убунту для «сброса» внешнего устройства? В идеале бы еще узнать текущее состояние конечно.

Полагаю оно прячется где то в прерываниях, но как найти с которым связано?

cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
 16:          0          0          0          0     GICv2  25 Level     vgic
 17:          0          0          0          0     GICv2  50 Level     /soc/timer@01c20c00
 18:          0          0          0          0     GICv2  29 Level     arch_timer
 19:   90547909  139451125  142656932  143202842     GICv2  30 Level     arch_timer
 20:          0          0          0          0     GICv2  27 Level     kvm guest timer
 22:          0          0          0          0     GICv2 120 Level     1ee0000.hdmi, dw-hdmi-cec
 24:          0          0          0          0     GICv2 118 Level     1c0c000.lcd-controller
 25:          0          0          0          0     GICv2  82 Level     1c02000.dma-controller
 26:         25          0          0          0     GICv2  92 Level     sunxi-mmc
 27:      79801          0          0          0     GICv2  94 Level     sunxi-mmc
 28:          1          0          0          0     GICv2 103 Level     musb-hdrc.4.auto
 29:          0          0          0          0     GICv2 104 Level     ehci_hcd:usb1
 30:          0          0          0          0     GICv2 105 Level     ohci_hcd:usb2
 31:          0          0          0          0     GICv2 106 Level     ehci_hcd:usb3
 32:          0          0          0          0     GICv2 107 Level     ohci_hcd:usb6
 33:          0          0          0          0     GICv2 108 Level     ehci_hcd:usb4
 34:          0          0          0          0     GICv2 109 Level     ohci_hcd:usb7
 35:   85647492          0          0          0     GICv2 110 Level     ehci_hcd:usb5
 36:          0          0          0          0     GICv2 111 Level     ohci_hcd:usb8
 39:     624264          0          0          0     GICv2  63 Level     1c25000.ths
 41:     305355          0          0          0     GICv2 114 Level     eth0
 42: 3951995844          0          0          0     GICv2  97 Level     sun6i-spi
 45:        432          0          0          0     GICv2  32 Level     ttyS0
 46:     177618          0          0          0     GICv2  33 Level     ttyS1
 49:          0          0          0          0     GICv2  38 Level     mv64xxx_i2c
 50:          0          0          0          0     GICv2  39 Level     mv64xxx_i2c
 51:          0          0          0          0     GICv2  40 Level     mv64xxx_i2c
 52:          0          0          0          0     GICv2  72 Level     1f00000.rtc
106:          1          0          0          0  sunxi_pio_edge  44 Edge      usb0-id-det
129:          1          0          0          0  sunxi_pio_edge   3 Edge      k1
IPI0:          0          0          0          0  CPU wakeup interrupts
IPI1:          0          0          0          0  Timer broadcast interrupts
IPI2:   90852252  258982397  266588110  269015295  Rescheduling interrupts
IPI3:        760        582        624        629  Function call interrupts
IPI4:          0          0          0          0  CPU stop interrupts
IPI5:      88146      26774      27729      28640  IRQ work interrupts
IPI6:          0          0          0          0  completion interrupts
Err:          0
★★★

Последнее исправление: wolverin (всего исправлений: 2)

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

Что то не хочет так

# echo 0 > /sys/class/graphics/fb1/blank
bash: echo: write error: Invalid argument

поскольку сама инициализация драйвера проходит в /etc/rc.local как

modprobe fbtft_device name=flexfb gpios=reset:203,dc:1,cs:67 speed=40000000
modprobe flexfb width=480 height=480 buswidth=8 init=\
-1,0x01,\
-2,120,\
-1,0x36,0xE8,\
-1,0x3A,0x66,\
-1,0x21,\
-1,0x11,\
-2,120,\
-1,0x29,\
-2,20,\
-1,0x13,\
-3

есть подозрение что надо что то записать в

/sys/bus/platform/drivers/flexfb/bind
/sys/bus/platform/drivers/flexfb/unbind

иба так горячее подключение флешки делаю, но вот что хз

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

пока удалось определить следующую последовательность действий

  1. отпускаем /dev/fb1
  2. sudo modprobe -r fbtft_device && sudo modprobe fbtft_device name=flexfb gpios=reset:203,dc:1,cs:67 speed=40000000
  3. используем

еще бы через api ядра такое бы провернуть, чтоб можно было из бинарника выполнить не через modprobe

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

Возможно вместо выгрузки/загрузки драйвера можно делать его unbind+bind от конретного экземпляра устройства https://lwn.net/Articles/143397/

(если драйвер конечно не синглетонный и отличает операцию подклчения к устройсву от загрузки/выкрузки)

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

да это было бы идеально, но в unbind+bind нужно во-первых найти какой драйвер (у fbtft_device не нашел), во-вторых знать какое устройство туда писать

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)