Общие рекомендации по перекомпиляции ядра 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>;
+ };
+ };
+ };
};