https://www.cnblogs.com/minyue33/p/8072571.html
開発プラットフォーム:Xunwei iTOP-4418 / 6818開発ボード
4418&6818画面の変更では、ubootとカーネルをそれぞれ変更する必要があります。まず、ubootを変更します。
1.最初にAndroidソースコードディレクトリを入力します。
4418プラットフォームの場合、変更が必要なubootファイルは次のとおりです。u-boot/ board / s5p4418 / drone2 /board.c。viコマンドを使用してこのファイルを開きます。画面のデフォルトパラメータは49行目から93行目に設定されています。 、以下に示すように:
図2
4418は、9.7インチ、7インチ、および4.3インチの画面を一時的にサポートし、次の図に示すように、それらの設定はこのファイルにあります。
画像3
上図のコードの機能は、最初にubootの環境変数から現在使用されている画面を読み取り、次に画面の種類に応じて対応するブランチ設定を選択することです。たとえば、画面の幅、高さ、リフレッシュレートなどです。ユーザーが他の画面を使用している場合は、ここで変更する必要があります(図2のデフォルト変数は、独自の画面パラメーターに従って変更する必要があります)( 6818は次のとおりです:u-boot / board / s5p6818 / dronel / board.c、方法は上記と同じです)
2. Linuxカーネル部分の変更:
1つ目はファイルkernel / arch / arm / plat-s5p4418 / topeet / include / cfg_main.hです(6818に対応するファイルはkernel / arch / arm / plat-s5p6818 / topeet / include / cfg_main.hです)
このファイルで定義されている画面関連のマクロのグループは次のとおりです。
/ * ------------------------------------------------ ------------------------------
*ディスプレイ(DPCおよびMLC)
* /
/ *プライマリ* /
#define CFG_DISP_PRI_SCREEN_LAYER 0
#define CFG_DISP_PRI_SCREEN_RGB_FORMAT MLC_RGBFMT_A8R8G8B8
#define CFG_DISP_PRI_SCREEN_PIXEL_BYTE 4
#define CFG_DISP_PRI_SCREEN_COLOR_KEY 0x090909
#define CFG_DISP_PRI_VIDEO_PRIORITY 2 // 0、1、2、3
#define CFG_DISP_PRI_BACK_GROUND_COLOR 0x000000
#define CFG_DISP_PRI_MLC_INTERLACE CFALSE
#define CFG_DISP_PRI_LCD_WIDTH_MM 154
#define CFG_DISP_PRI_LCD_HEIGHT_MM 85
/ * cym20150811で変更* /
#if 0
#define CFG_DISP_PRI_RESOL_WIDTH 1024 // X解像度
#define CFG_DISP_PRI_RESOL_HEIGHT 600 // Y解像度
#そうしないと
#define CFG_DISP_PRI_RESOL_WIDTH 800 // 1024 // X解像度
#define CFG_DISP_PRI_RESOL_HEIGHT 1280 // 768 // Y解像度
#endif
/ *削除を終了します* /
#define CFG_DISP_PRI_HSYNC_SYNC_WIDTH 20
#define CFG_DISP_PRI_HSYNC_BACK_PORCH 160
#define CFG_DISP_PRI_HSYNC_FRONT_PORCH 160
#define CFG_DISP_PRI_HSYNC_ACTIVE_HIGH CTRUE
#define CFG_DISP_PRI_VSYNC_SYNC_WIDTH 3
#define CFG_DISP_PRI_VSYNC_BACK_PORCH 23
#define CFG_DISP_PRI_VSYNC_FRONT_PORCH 12
#define CFG_DISP_PRI_VSYNC_ACTIVE_HIGH CTRUE
#define CFG_DISP_PRI_CLKGEN0_SOURCE DPC_VCLK_SRC_PLL2
#define CFG_DISP_PRI_CLKGEN0_DIV 12 //除算さえ
#define CFG_DISP_PRI_CLKGEN0_DELAY 0
#define CFG_DISP_PRI_CLKGEN0_INVERT 0
#define CFG_DISP_PRI_CLKGEN1_SOURCE DPC_VCLK_SRC_VCLK2
#define CFG_DISP_PRI_CLKGEN1_DIV 1
#define CFG_DISP_PRI_CLKGEN1_DELAY 0
#define CFG_DISP_PRI_CLKGEN1_INVERT 0
#define CFG_DISP_PRI_CLKSEL1_SELECT 0
#define CFG_DISP_PRI_PADCLKSEL DPC_PADCLKSEL_VCLK / * VCLK = CLKGEN1、VCLK12 = CLKGEN0 * /
#define CFG_DISP_PRI_PIXEL_CLOCK 800000000 / CFG_DISP_PRI_CLKGEN0_DIV
#define CFG_DISP_PRI_OUT_SWAPRB CFALSE
#define CFG_DISP_PRI_OUT_FORMAT DPC_FORMAT_RGB888
#define CFG_DISP_PRI_OUT_YCORDER DPC_YCORDER_CbYCrY
#define CFG_DISP_PRI_OUT_INTERLACE CFALSE
#define CFG_DISP_PRI_OUT_INVERT_FIELD CFALSE
#define CFG_DISP_LCD_MPY_TYPE 0
/ * ------------------------------------------------ ------------------------------
* LVDS
* /
/ * cym20150811で変更* /
#if 0
#define CFG_DISP_LVDS_LCD_FORMAT LVDS_LCDFORMAT_VESA
#そうしないと
#define CFG_DISP_LVDS_LCD_FORMAT LVDS_LCDFORMAT_JEIDA
#endif
/ *変更を終了します* /
次に、ファイルがあります:kernel / arch / arm / plat-s5p4418 / topeet / device.c(6818対応するファイル:kernel / arch / arm / plat-s5p6818 / topeet / device.c)
次のように、このファイルで関数setup_width_height_paramを見つけます。
/ * cym20151128で追加* /
#if 1
static int __init setup_width_height_param(char * str)
{{
if(!strncasecmp( "9.7"、str、3)){
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
#if defined(CONFIG_TOUCHSCREEN_FT5X0X)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
ft5x0x_pdata.screen_max_x = 768;
ft5x0x_pdata.screen_max_y = 1024;
#endif
#定義されている場合(CONFIG_FB_NXP)
#定義されている場合(CONFIG_FB0_NXP)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
fb0_plat_data.x_resol = 1024;
fb0_plat_data.y_resol = 768;
#endif
#endif
}
else if(!strncasecmp( "7.0"、str、3))
{{
#if defined(CONFIG_TOUCHSCREEN_FT5X0X)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
ft5x0x_pdata.screen_max_x = 800;
ft5x0x_pdata.screen_max_y = 1280;
#endif
#定義されている場合(CONFIG_FB_NXP)
#定義されている場合(CONFIG_FB0_NXP)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
fb0_plat_data.x_resol = 800;
fb0_plat_data.y_resol = 1280;
#endif
#endif
}
/ * cym20160222で追加* /
#if 1
else if(!strncasecmp( "4.3"、str、3))
{{
#定義されている場合(CONFIG_FB_NXP)
#定義されている場合(CONFIG_FB0_NXP)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
fb0_plat_data.x_resol = 480;
fb0_plat_data.y_resol = 272;
#endif
#endif
}
#endif
/ *追加の終了* /
/ * cymで追加20170810 * /
#if 1
else if(!strncasecmp( "1024x600"、str、8))
{{
#if defined(CONFIG_TOUCHSCREEN_FT5X0X)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
ft5x0x_pdata.screen_max_x = 600;
ft5x0x_pdata.screen_max_y = 1024;
ft5x0x_i2c_bdi.irq = PB_PIO_IRQ(CFG_IO_TSC2007_TOUCH_PENDOWN_DETECT);
ft5x0x_pdata.gpio_irq = CFG_IO_TSC2007_TOUCH_PENDOWN_DETECT;
tsc2007_i2c_bdi.irq = NULL; // PB_PIO_IRQ(CFG_IO_TOUCH_PENDOWN_DETECT);
#endif
#定義されている場合(CONFIG_FB_NXP)
#定義されている場合(CONFIG_FB0_NXP)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
fb0_plat_data.x_resol = 1024;
fb0_plat_data.y_resol = 600;
#endif
#endif
}
#endif
/ *追加の終了* /
/ * cym20161104で追加* /
#if 1
else if(!strncasecmp( "hdmi"、str、3))
{{
#定義されている場合(CONFIG_FB_NXP)
#定義されている場合(CONFIG_FB0_NXP)
// printk( "fun:%s、line =%d(lcdtype:%s)\ n"、__ FUNCTION __、__ LINE __、str);
fb0_plat_data.x_resol = 1920;
fb0_plat_data.y_resol = 1080;
#endif
#endif
}
#endif
/ *追加の終了* /
// printk( "fun:%s、line =%d \ n"、__ FUNCTION __、__ LINE__);
}
Early_param( "lcdtype"、setup_width_height_param);
#endif
/ *追加の終了* /
この関数は、ubootによって渡されたlcdtypeに従って、対応する画面の設定を選択します。ここでは、主に画面の解像度を変更します。他の画面を使用する場合は、対応する解像度を変更できます。
次に、ファイル:kernel / arch / arm / mach-s5p4418 / dev-display.c(6818に対応するファイル:kernel / arch / arm / mach-s5p4418 / dev-display.c)があります。
また、次のように、このファイルで関数setup_width_height_paramを見つけます。
/ * cym20151128で追加* /
#if 1
static int __init setup_width_height_param(char * str)
{{
if(!strncasecmp( "9.7"、str、3)){
#定義されている場合(CONFIG_NXP_DISPLAY_LCD)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lcd_vsync.h_active_len = 1024;
__lcd_vsync.v_active_len = 768;
__lcd_vsync.clk_div_lv0 = 14;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_LVDS)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lvds_vsync.h_active_len = 1024;
__lvds_vsync.v_active_len = 768;
__lvds_vsync.clk_div_lv0 = 14;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_MIPI)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__mipi_vsync.h_active_len = 1024;
__mipi_vsync.v_active_len = 768;
__mipi_vsync.clk_div_lv0 = 14;
#endif
#endif
}
else if(!strncasecmp( "7.0"、str、3))
{{
#定義されている場合(CONFIG_NXP_DISPLAY_LCD)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lcd_vsync.h_active_len = 800;
__lcd_vsync.v_active_len = 1280;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_LVDS)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lvds_vsync.h_active_len = 800;
__lvds_vsync.v_active_len = 1280;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_MIPI)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__mipi_vsync.h_active_len = 800;
__mipi_vsync.v_active_len = 1280;
#endif
#endif
}
/ * cym20160222で追加* /
#if 1
else if(!strncasecmp( "4.3"、str、3))
{{
#定義されている場合(CONFIG_NXP_DISPLAY_LCD)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lcd_vsync.h_active_len = 480;
__lcd_vsync.v_active_len = 272;
__lcd_vsync.clk_div_lv0 = 24;
__lcd_vsync.clk_div_lv1 = 2;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_LVDS)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lvds_vsync.h_active_len = 480;
__lvds_vsync.v_active_len = 272;
__lvds_vsync.clk_div_lv0 = 24;
__lvds_vsync.clk_div_lv1 = 2;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_MIPI)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__mipi_vsync.h_active_len = 480;
__mipi_vsync.v_active_len = 272;
__mipi_vsync.clk_div_lv0 = 24;
__mipi_vsync.clk_div_lv1 = 2;
#endif
#endif
}
#endif
/ *追加の終了* /
/ * cymで追加20170810 * /
#if 1
else if(!strncasecmp( "1024x600"、str、8))
{{
#定義されている場合(CONFIG_NXP_DISPLAY_LCD)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lcd_vsync.h_active_len = 1024;
__lcd_vsync.v_active_len = 600;
//__lcd_vsync.clk_div_lv0 = 24;
//__lcd_vsync.clk_div_lv1 = 2;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_LVDS)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lvds_vsync.h_active_len = 1024;
__lvds_vsync.v_active_len = 600;
//__lvds_vsync.clk_div_lv0 = 24;
//__lvds_vsync.clk_div_lv1 = 2;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_MIPI)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__mipi_vsync.h_active_len = 1024;
__mipi_vsync.v_active_len = 600;
//__mipi_vsync.clk_div_lv0 = 24;
//__mipi_vsync.clk_div_lv1 = 2;
#endif
#endif
}
#endif
/ *追加の終了* /
/ * cym20161104で追加* /
#if 1
else if(!strncasecmp( "hdmi"、str、3))
{{
#定義されている場合(CONFIG_NXP_DISPLAY_LCD)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lcd_vsync.h_active_len = 1920;
__lcd_vsync.v_active_len = 1080;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_LVDS)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__lvds_vsync.h_active_len = 1920;
__lvds_vsync.v_active_len = 1080;
#endif
#endif
#定義されている場合(CONFIG_NXP_DISPLAY_MIPI)
#if defined(CFG_DISP_PRI_RESOL_WIDTH)&& defined(CFG_DISP_PRI_RESOL_HEIGHT)
__mipi_vsync.h_active_len = 1920;
__mipi_vsync.v_active_len = 1080;
#endif
#endif
}
#endif
/ *追加の終了* /
// printk( "fun:%s、line =%d \ n"、__ FUNCTION __、__ LINE__);
}
Early_param( "lcdtype"、setup_width_height_param);
#endif
/ *追加の終了* /
この関数は、ubootから渡されたlcdtypeに従って、対応する画面の設定を選択します。ここでは、主に画面の解像度とリフレッシュレートを変更します。他の画面を使用する場合は、対応する解像度を変更できます。
画面設定に関しては、主に上記のファイルを変更することです