Поддержка 1920x720 в mxc_edid.c, встраиваемый Linux - PullRequest
0 голосов
/ 25 сентября 2019

Я работаю на плате встроенного Linux с Apalis Imx6, использую экран с разрешением 1920x720p.

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

Вам необходимо отредактировать конструктор "fb_videomode mxc_cea_mode [64]".Возможно, вам потребуется обратиться к таблице данных монитора, чтобы ввести в файл частоту обновления, разрешение и т. Д.

http://git.toradex.com/cgit/linux-toradex.git/tree/drivers/video/fbdev/mxc/mxc_edid.c?h=toradex_4.9-2.3.x-imx

У меня есть таблица данных монитора и все, мой монитор поддерживает необходимое разрешениеа также.

Мне просто нужно знать, как я могу отредактировать mxc_edid.c и сохранить его, а затем перекомпилировать ядро, чтобы заставить мой экран работать.

любая помощь действительно приветствуется.

Спасибо ..

1 Ответ

1 голос
/ 25 сентября 2019

Общие рекомендации по перекомпиляции ядра Linux на модулях Toradex описаны в следующей статье на веб-сайте разработчика Toradex : Сборка U-Boot и ядра Linux из исходного кода

Сначала необходимо установить набор инструментов для кросс-компиляции, как описано в Сборка U-Boot и ядра Linux из исходного кода - Набор инструментов

Специально для вашего случая использования вы должныклонировать правильную ветвь ядра iMX6, как указано в таблице из Сборка ядра U-Boot и Linux из исходного кода - Исходный код - модули на основе i.MX 6 (Apalis / Colibri iMX6) .По ссылке, которую вы указали в своем вопросе, она выглядит как toradex_4.9-2.3.x-imx.Затем для получения исходного кода ядра выполните Сборка U-Boot и ядра Linux из исходного кода - Исходный код ядра

После этого вам необходимо настроить ядро ​​для Apalis iMX6, используя apalis_imx6_defconfig, как описано в Сборка ядра U-Boot и Linux из исходного кода - Конфигурация ядра - модули на основе i.MX 6

Настало время внести изменения в исходный код.код драйвера файла / video / fbdev / mxc / mxc_edid.c.

После того, как вы закончите, пришло время компилировать ядро, как описано в Сборка U-Boot и ядра Linux из исходного кода - KernelКомпиляция - ядро ​​i.MX 6 (Apalis / Colibri iMX6) .Вам также может понадобиться перекомпилировать модули ядра, как описано в Сборка U-Boot и ядра Linux из исходного кода - Компиляция модулей ядра, все модули .

Наконец обновите ядро ​​до платы, как описанов Сборка ядра U-Boot и Linux из исходного кода - обновление ядра .

Повторение процесса edit source code -> re-build the kernel -> re-deploy the kernel -> test changes до тех пор, пока вы его не прибьете.


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

Основное руководство для этого - Настройка дерева устройств .В основном источник дерева устройств поставляется с исходным кодом ядра, а Build U-Boot и ядро ​​Linux из исходного кода также предоставляют информацию о том, как скомпилировать дерево устройств.

Вот выделение фрагмента кодасоответствующие изменения:

timing_wide: 1920x720 {
+                clock-frequency = <104600000>;
+                hactive = <1920>;
+                vactive = <720>;
+                hback-porch = <24>;
+                hfront-porch = <24>;
+                vback-porch = <8>;
+                vfront-porch = <57>;
+                hsync-len = <32>;
+                vsync-len = <5>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };

После того, как вы адаптируете его к своему дисплею, соберите и разверните его на устройстве, как описано в Сборка U-Boot и ядра Linux из исходного кода .

Как только дерево устройств развернуто в модуле, вам просто нужно установить правильные vidargs в U-Boot:

env set vidargs video=mxcfb0:dev=ldb,1920x720M@60,if=RGB666 ldb=sin0 fbmem=32M
env save
reset

Обратите внимание, что вам не требуется для восстановления U-boot.Вы должны иметь доступ к терминалу модуля через:

1) отладку UART, или последовательную консоль или;2) К модулю подключены монитор и USB-клавиатура.

После перезагрузки или выключения питания необходимо нажать любую клавишу (из приложения эмулятора последовательного терминала на вашем компьютере, если используется 1) или непосредственно на модуле, еслииспользуя 2)) для доступа к среде U-Boot, в которой вы выполняете команды, описанные выше.


Для справки о настройке дерева устройств ниже приведен diff соответствующего файла дерева устройств для поддержкипользовательский дисплей LVDS (который не является вашим дисплеем, но может использоваться в качестве примера):

diff --git a/arch/arm/boot/dts/imx6qdl-apalis.dtsi b/arch/arm/boot/dts/imx6qdl-apalis.dtsi
index cfaaa571c158..b3c92314367b 100644
--- a/arch/arm/boot/dts/imx6qdl-apalis.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-apalis.dtsi
@@ -89,8 +89,8 @@
    mxcfb1: fb@0 {
        compatible = "fsl,mxc_sdc_fb";
        disp_dev = "ldb";
-       interface_pix_fmt = "RGB666";
-       default_bpp = <16>;
+       interface_pix_fmt = "RGB24";
+       default_bpp = <24>;
        int_clk = <0>;
        late_init = <0>;
        status = "disabled";
@@ -507,123 +507,135 @@
 };

 &ldb {
-   status = "okay";
-// split-mode;
-// dual-mode;
-
-   lvds-channel@0 {
-       reg = <0>;
-       fsl,data-mapping = "spwg"; /* "jeida"; */
-       fsl,data-width = <18>;
-       crtc = "ipu2-di1";
-       primary;
-       status = "okay";
-
-       display-timings {
-           native-mode = <&timing_xga>;
-           /* LDB-AM-800600LTNQW-A0H */
-           timing_svga: 800x600 {
-               clock-frequency = <55000000>;
-               hactive = <800>;
-               vactive = <600>;
-               hback-porch = <112>;
-               hfront-porch = <32>;
-               vback-porch = <3>;
-               vfront-porch = <17>;
-               hsync-len = <80>;
-               vsync-len = <4>;
-               hsync-active = <0>;
-               vsync-active = <0>;
-               pixelclk-active = <0>;
-           };
-           /* Standard XGA timing */
-           timing_xga: 1024x768 {
-               clock-frequency = <65000000>;
-               hactive = <1024>;
-               vactive = <768>;
-               hback-porch = <160>;
-               hfront-porch = <24>;
-               vback-porch = <29>;
-               vfront-porch = <3>;
-               hsync-len = <136>;
-               vsync-len = <6>;
-               hsync-active = <0>;
-               vsync-active = <0>;
-               pixelclk-active = <0>;
-           };
-           timing_wxga: 1280x800 {
-               clock-frequency = <68930000>;
-               hactive = <1280>;
-               vactive = <800>;
-               hback-porch = <64>;
-               hfront-porch = <64>;
-               vback-porch = <5>;
-               vfront-porch = <5>;
-               hsync-len = <40>;
-               vsync-len = <6>;
-               hsync-active = <0>;
-               vsync-active = <0>;
-               pixelclk-active = <0>;
-           };
-           /* LTTD1280800101-L4WH-CT1, note that it needs
-              fsl,data-mapping = "spwg"; fsl,data-width = <24>; */
-           timing_wxga1: 1280x800-1 {
-               clock-frequency = <71100000>;
-               hactive = <1280>;
-               vactive = <800>;
-               hback-porch = <60>;
-               hfront-porch = <60>;
-               vback-porch = <7>;
-               vfront-porch = <7>;
-               hsync-len = <40>;
-               vsync-len = <9>;
-               hsync-active = <0>;
-               vsync-active = <0>;
-               pixelclk-active = <0>;
-           };
-           timing_fullhd: 1920x1080 {
-               clock-frequency = <138500000>;
-               hactive = <1920>;
-               vactive = <1080>;
-               hback-porch = <80>;
-               hfront-porch = <48>;
-               vback-porch = <23>;
-               vfront-porch = <3>;
-               hsync-len = <32>;
-               vsync-len = <5>;
-               hsync-active = <0>;
-               vsync-active = <0>;
-               pixelclk-active = <0>;
-           };
-       };
-   };
-
-   lvds-channel@1 {
-       reg = <1>;
-       fsl,data-mapping = "spwg";
-       fsl,data-width = <18>;
-       crtc = "ipu1-di0";
-       status = "okay";
-
-       display-timings {
-/*         native-mode = <&timing_svga_ch2>;*/
-           /* LDB-AM-800600LTNQW-A0H */
-           timing_svga_ch2: 800x600 {
-               clock-frequency = <55000000>;
-               hactive = <800>;
-               vactive = <600>;
-               hback-porch = <112>;
-               hfront-porch = <32>;
-               vback-porch = <3>;
-               vfront-porch = <17>;
-               hsync-len = <80>;
-               vsync-len = <4>;
-               hsync-active = <0>;
-               vsync-active = <0>;
-               pixelclk-active = <0>;
-           };
-       };
-   };
+    status = "okay";
+     split-mode; // split mode on
+//    dual-mode;
+
+    lvds-channel@0 {
+        reg = <0>;
+        fsl,data-mapping = "spwg"; /* "jeida"; */
+        fsl,data-width = <24>;
+        crtc = "ipu2-di1";
+        primary;
+        status = "okay";
+
+        display-timings {
+            native-mode = <&timing_wide>;
+            /* LDB-AM-800600LTNQW-A0H */
+            timing_svga: 800x600 {
+                clock-frequency = <55000000>;
+                hactive = <800>;
+                vactive = <600>;
+                hback-porch = <112>;
+                hfront-porch = <32>;
+                vback-porch = <3>;
+                vfront-porch = <17>;
+                hsync-len = <80>;
+                vsync-len = <4>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+            /* Standard XGA timing */
+            timing_xga: 1024x768 {
+                clock-frequency = <65000000>;
+                hactive = <1024>;
+                vactive = <768>;
+                hback-porch = <160>;
+                hfront-porch = <24>;
+                vback-porch = <29>;
+                vfront-porch = <3>;
+                hsync-len = <136>;
+                vsync-len = <6>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+            timing_wxga: 1280x800 {
+                clock-frequency = <68930000>;
+                hactive = <1280>;
+                vactive = <800>;
+                hback-porch = <64>;
+                hfront-porch = <64>;
+                vback-porch = <5>;
+                vfront-porch = <5>;
+                hsync-len = <40>;
+                vsync-len = <6>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+            timing_fullhd: 1920x1080 {
+                clock-frequency = <138500000>;
+                hactive = <1920>;
+                vactive = <1080>;
+                hback-porch = <80>;
+                hfront-porch = <48>;
+                vback-porch = <23>;
+                vfront-porch = <3>;
+                hsync-len = <32>;
+                vsync-len = <5>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+            timing_wide: 1920x720 {
+                clock-frequency = <104600000>;
+                hactive = <1920>;
+                vactive = <720>;
+                hback-porch = <24>;
+                hfront-porch = <24>;
+                vback-porch = <8>;
+                vfront-porch = <57>;
+                hsync-len = <32>;
+                vsync-len = <5>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+        };
+    };
+
+    lvds-channel@1 {
+        reg = <1>;
+        fsl,data-mapping = "spwg";
+        fsl,data-width = <18>;
+        crtc = "ipu1-di0";
+        status = "okay";
+
+        display-timings {
+            native-mode = <&timing_wide_ch2>;
+            /* LDB-AM-800600LTNQW-A0H */
+            timing_svga_ch2: 800x600 {
+                clock-frequency = <55000000>;
+                hactive = <800>;
+                vactive = <600>;
+                hback-porch = <112>;
+                hfront-porch = <32>;
+                vback-porch = <3>;
+                vfront-porch = <17>;
+                hsync-len = <80>;
+                vsync-len = <4>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+            timing_wide_ch2: 1920x720 {
+                clock-frequency = <104600000>;
+                hactive = <1920>;
+                vactive = <720>;
+                hback-porch = <24>;
+                hfront-porch = <24>;
+                vback-porch = <8>;
+                vfront-porch = <57>;
+                hsync-len = <32>;
+                vsync-len = <5>;
+                hsync-active = <0>;
+                vsync-active = <0>;
+                pixelclk-active = <0>;
+            };
+        };
+    };
 };
...