Поддержка русскоязычных пользователей

Нужно добавлять в драйвер HDMI нужные разрешения и тайминги, и пересобирать ядро.
Разработчики не будут этим заниматся, да и тайминги им подбирать нужно будет имея все дисплеи на руках, а это им не интересно и не выгодно.
Как придет мой Vim, сразу этим буду заниматься, как и для всех бывших у меня плат Radxa, radxa2, Firefly-rk3288, geekbox.

А вообще автомобильная тема на соответствующем форуме pccar.ru вся пережевана.

Надо попробовать утилиту fbset . С ее помощью можно выставить любые разрешения на HDMI, на которые хватит возможностей чипа и размера выделенной памяти под framebuffer. Память под fremebuffer выделяется в dts (см. mesonfb)

Да и еще, ядро пересобирать не надо, достаточно откомпилять khadas.dts с помощью утилиты dtc, которая, в свою очередь, собирается во время сборки ядра и собранная однажды будет доступна вам для отладки готовой dtb.

fbset для линукс может и поможет, но в андроид (раз нужны автомобильные мониторы) не работает. Да и зачем нужна лишняя прокладка между драйвером и оболочкой, которая еще не понятно как преобразовывает в новые разрешения. Это как fakesize = 800x480 в bould.prop прописывать - растягивает или сжимает исходную картинку до указанного разрешения. И в итоге получается убогая картинка и лишняя нагрузка на проц.

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

pccar.ru читаю активно и давно. Ваши посты читал все и слежу за проектами, оттуда про данную плату и узнал.
По платам odroid и raspberry попадался мануал по изменению разрешения на 800*480 под продающуюся к ним матрицу. Значит придется научиться пересобирать ядро.

Приедет плата, буду разбираться c разрешением и USB-gps

1 Like

Так решение с gps я уже давно написал How to use USB GPS reciver on android M6?

О, точно, видел же!
Спасибо что ткнули носом! pl2303.ko не понадобится? у меня globalsat bu-353s4

понадобится pl2303 - это драйвер UART - USB преобразователя в кернел, по ссылке выше это библиотека (HAL драйвер) для андроид, а не ядра.

1 Like

Причем тут прослойка?

fbset - это не драйвер, а простоая утилита настройки framebuffer, кроме того вам понадобится указать ядру через sysfs, что именно вы хотите от драйвера. Вот почитайте (scale и axis здесь разумеется не верные, просто copy-paste, но уверяю Вас они будут работать когда вы замените 1279 719 на 639 479):

#
# rc.mesonfb - initial set up meson framebuffer
#
hdmimode=1080p60hz

# Parse command line arguments
for arg in $(cat /proc/cmdline); do
  case $arg in
    hdmimode=*)
      hdmimode="${arg#*=}"
      ;;
  esac
done

outputmode=$hdmimode

/bin/echo $outputmode > /sys/class/display/mode

# Enable framebuffer device
/bin/echo 0 > /sys/class/graphics/fb0/blank

# Blank fb1 to prevent static noise
/bin/echo 1 > /sys/class/graphics/fb1/blank

# Disable framebuffer scaling
/bin/echo 0 > /sys/class/graphics/fb0/free_scale
/bin/echo 0 > /sys/class/graphics/fb1/free_scale


/bin/echo 1 > /sys/class/graphics/fb0/freescale_mode

case $outputmode in
  480*)
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/free_scale_axis
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/window_axis
    ;;

  576*)
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/free_scale_axis
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/window_axis
    ;;

  720*)
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/free_scale_axis
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/window_axis
    ;;

  1080*)
    /bin/echo 0 0 1919 1079 > /sys/class/graphics/fb0/free_scale_axis
    /bin/echo 0 0 1919 1079 > /sys/class/graphics/fb0/window_axis
    ;;

  4k2k*)
    /bin/echo 0 0 1919 1079 > /sys/class/graphics/fb0/free_scale_axis
    /bin/echo 0 0 1919 1079 > /sys/class/graphics/fb0/window_axis
    ;;

  *)
    # outputmode = 720p
    /bin/echo 720p > /sys/class/display/mode
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/free_scale_axis
    /bin/echo 0 0 1279 719 > /sys/class/graphics/fb0/window_axis
    ;;
esac


# Set framebuffer geometry to match the resolution
case "$hdmimode" in
  720*)
    /usr/sbin/fbset -fb /dev/fb0 -a -g 1280 720 1280 1440 32
    ;;
  1080*)
    /usr/sbin/fbset -fb /dev/fb0 -a -g 1920 1080 1920 3240 32
    ;;
esac
/usr/sbin/fbset -fb /dev/fb1 -g 32 32 32 32 32

# Include deinterlacer into default VFM map
/bin/echo rm default > /sys/class/vfm/map
/bin/echo add default decoder ppmgr deinterlace amvideo > /sys/class/vfm/map

################################################################
#
# If HDMI cable is connected during kernel start and the new
# outputmode is equal to current hdmimode then the screen is
# black.
#
# To wake up the monitor, we must reset outputmode.
# Only in this case, the driver will wake the display up.
#
# Instead we will have to reconnect hdmi cable.
#
outputmode=$(cat /sys/class/display/mode)
hpdstate=$(cat /sys/class/amhdmitx/amhdmitx0/hpd_state)

if [ "$hpdstate" = "1" ]; then
  # Blank fb0 to prevent static noise
  /bin/echo 1 > /sys/class/graphics/fb0/blank
    case $outputmode in
      720*)
        /bin/echo 1080p60hz > /sys/class/display/mode
        /bin/echo $outputmode > /sys/class/display/mode
        ;;

      1080*)
        /bin/echo 720p60hz > /sys/class/display/mode
        /bin/echo $outputmode > /sys/class/display/mode
        ;;
      *)
        # probably nobody asks 480cvbs
        /bin/echo 480cvbs > /sys/class/display/mode
        /bin/echo $outputmode > /sys/class/display/mode
        ;;
    esac
  # Enable framebuffer device
  /bin/echo 0 > /sys/class/graphics/fb0/blank
fi
#
# End of HDMI cable reconnect trick.
#
################################################################

echo 0x10001 > /sys/class/graphics/fb0/free_scale
echo 0 > /sys/class/graphics/fb1/free_scale

Для управления драйвером вам дается khadas.dts, параметры ядра (которые передает загрузчик [переменная bootargs]), ну и sysfs. А ваш Андроид как раз и рисует все во FrameBuffer, параметры которого установлены перечисленными выше способами.

Да и еще, скачайте buildroot от Amlogic и посмотрите на скрипты загрузки.

А все необходимые вам разрешения уже поддерживаются драйвером ядра. Разве что могут немного глючить, но это вы поправите если что.

Андрей К.

1 Like

Чтото не видно нужных разрешений 1280800, 1024600, 800480, 1366768 в драйвере ядра
https://github.com/khadas/linux/blob/Vim/drivers/amlogic/hdmi/hdmi_common/hdmi_parameters.c

Читайте drivers/amlogic/display/osd - это и есть драйвер FB от Amlogic, с него все и валится в HDMI

а файлы include/linux/amlogic/hdmi_tx/ для разрешений, не предусмотренных компанией Amlogic, так или иначе придется изучать и править.

Можно подсмотреть еще у ODROID C2, но у них измененный OSD, однако, разрещений больше введено.

вот тут почитайте как и что править и как тайминги считать Rock/Hdmi Resolution - Radxa Wiki

Все тайминги в соответствующей авто теме уже посчитаны и работают несколько лет у пользователей.

нет такого dts в андроид исходниках.

Скажите, daveemf, а вот такая утилита пригодна для чтения EDID ? http://www.polypux.org/projects/read-edid/

Не могу знать, считываю windows утилитой.

dts в ядре arch/arm64/boot/dts/khadas.dts

Да, я в курсе где лежат dts, поэтому и говорю в андройде нет khadas.dts

Ну она в принципе работает. Я просто Windows не имею, но иногда нужно прочитать и распарсить. Ну да лдно.

На сколько я понимаю в андроиде для приготовления образа используется андроидная утилита типа mkimage но с наворотами и она обычно прицепляет dtb в хвост ядру. Так что можно ее достать и перевести в dts с помощью dtc.

Может я и не прав, но без параметров, ядру будет грустно.

Поищите ведь ядро Amlogic одно и то же, что у Андроид, что у Linux. Различия в основном касаются взглядов на разделы флешей. Может название файла другое, но без dtb никак. Во всех прошивках есть DTB. Я доставал и сравнивал настройки разных андроидных прошивок для таких боксов как NEXBOX A95X, ENYBOX X2?, …

Если хотите пороюсь у себя на диске.

Так я выделил, в андроид это kvim.dts