一.飞凌核心板,imx6dl,双核800M,1G内存,linux4.1.15
下载uboot-2016.tar.bz2
链接: https://pan.baidu.com/s/1SflUVtHt8bhwBzlb5QFR1w 密码: ki2v
二.修改默认显示方式LVDS,三菱AA121XN11液晶屏,12.1”XGA,1024x768,每个像素8位颜色显示
目前烧写官方提供的镜像烧写后启动时默认的屏幕为LCD屏,分辨率1024x600,部分客户需要默认启动其他类型的屏幕,故将修改方法总结如下:
2.1 linux4.1.15:
修改 ./uboot-2016/include/configs/mx6sabre_common.h
修改约P74:
#define MXC_FB0 "mxcfb0=video=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB24,bpp=16,int_clk\0"
2.1.1 LVDS屏改为:
#define MXC_FB0 "mxcfb0=video=mxcfb0:dev=ldb,LDB-XGA,if=RGB24,bpp=16,int_clk\0"
2.1.2 HDMI屏改为:
#define MXC_FB0 "mxcfb0=video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=16\0"
2.1.3 mipi屏改为:
#define MXC_FB0 "mxcfb0=video=mxcfb0:dev=mipi_dsi,TRULY-EK79007-WVGA,if=RGB24,bpp=16\0"
约P154:
#define CONFIG_EXTRA_ENV_SETTINGS \
CONFIG_MFG_ENV_SETTINGS \
MXC_FB0 \
MXC_FB1 \
LDBMODE \
后加:
"panel=TRULY-EK79007-WVGA\0" \
注:mipi屏与其他屏幕不同,有两处修改
2.1.4 修改./uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
struct display_info_t displays[]结构体中增加显示方式"LDB-XGA"
{
.bus = -1,
.addr = 0,
.pixfmt = IPU_PIX_FMT_RGB24,
.detect = NULL,
.enable = enable_lvds,
.mode = {
.name = "LDB-XGA",
.refresh = 60,
.xres = 1024,
.yres = 768,
.pixclock = 15385,
.left_margin = 320,
.right_margin = 80,
.upper_margin = 38,
.lower_margin = 80,
.hsync_len = 32,
.vsync_len = 4,
.sync = FB_SYNC_EXT,
.vmode = FB_VMODE_NONINTERLACED
} }
.pixfmt = 24; //24位颜色
.refresh = 60; //刷新率
.name = "LDB-XGA";//LCD 名字,要和环境变量中的 panel 相等
.xres = 1024; //液晶屏X 轴像素数量
.yres = 768; //液晶屏Y 轴像素数量
.pixclock = 15385; //像素时钟,每个像素时钟周期的长度,单位为皮秒,
//DCLK=65MHz -》.pixclock = 1/65×1000000 = 15385皮秒
.left_margin = 160; //HBP(horizontal back porch),水平同步后肩
.right_margin = 160; //HFP(horizontal front porch),水平同步前肩
.hsync_len = 60; //HSPW(horizontal sync pulse width),行同步脉宽
.upper_margin = 16; //VBP(vertical back porch),垂直同步后肩
.lower_margin = 16; //VFP(vertical front porch),垂直同步前肩
.vsync_len = 6; //VSPW(vertical sync pulse width),垂直同步脉宽
.sync = FB_SYNC_EXT; //同步极性设置,可以根据需要设置,external sync,
FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效)
.vmode = FB_VMODE_NONINTERLACED; //大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描
三菱AA121XN11显示时序表B1:
ITEM | SYMBOL | MIN. | TYP. | MAX. | UNIT | ||
DCLK | Frequency | fCLK | 50 | 65 | 80 | MHz | |
Period | tCLK | 12.5 | 15.4 | 20 | ns | ||
DENA | Horizontal | Active Time | tHA | 1024 | 1024 | 1024 | tCLK |
Blanking Time | tHB | 30 | 320 | -- | tCLK | ||
Frequency | fH | 42.4 | 48.4 | 60 | kHz | ||
Period | tH | 16.6 | 20.7 | 23.6 | us | ||
Vertical | Active Time | tVA | 768 | 768 | 768 | tH | |
Blanking Time | tVB | 3 | 38 | -- | tH | ||
Frequency | fV | 55 | 60 | 75 | Hz | ||
Period | tV | 13.3 | 16.7 | 18.2 | ms |
tHB = 320 //推荐值
tHB = .left_margin+.right_margin+.hsync_len = 320
.left_margin = 130
.right_margin = 130
.hsync_len = 60
tVB = 38 //推荐值
tVB = .upper_margin+.lower_margin+.vsync_len = 38
.upper_margin = 16
.lower_margin = 16
.vsync_len = 6
display_info_t 定义在文件 arch/arm/include/asm/imx-common/video.h 中,定义如下:
struct display_info_t {
int bus;
int addr;
int pixfmt;
int (*detect)(struct display_info_t const *dev);
void (*enable)(struct display_info_t const *dev);
struct fb_videomode mode;};
结构体display_info_t还有个mode成员变量,此成员变量也是个结构体,为fb_videomode,定义在文件 include/linux/fb.h 中,定义如下:
struct fb_videomode {
const char *name; /* optional */
u32 refresh; /* optional */
u32 xres;
u32 yres;
u32 pixclock;
u32 left_margin;
u32 right_margin;
u32 upper_margin;
u32 lower_margin;
u32 hsync_len;
u32 vsync_len;
u32 sync;
u32 vmode;
u32 flag;};
结构体fb_videomode里面的成员变量为LCD的参数,这些成员变量函数如下:
name :LCD 名字,要和环境变量中的 panel 相等
xres 、yres :LCD X 轴和 Y 轴像素数量
pixclock:像素时钟,每个像素时钟周期的长度,单位为皮秒
left_margin :HBP(horizontal back porch),水平同步后肩
right_margin :HFP(horizontal front porch),水平同步前肩
upper_margin:VBP(vertical back porch),垂直同步后肩
lower_margin:VFP(vertical front porch),垂直同步前肩
hsync_len :HSPW(horizontal sync pulse width),行同步脉宽
vsync_len:VSPW(vertical sync pulse width),垂直同步脉宽
vmode :大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描。
2.2 Linux 3.0.35:
vi uboot2009/include/configs/mx6q_sabresd.h(6dl则修改mx6dl_sabresd.h P73)
约P68:
//#define CONFIG_UBOOT_KERNEL_LVDS
#define CONFIG_UBOOT_KERNEL_LCD
//#define CONFIG_UBOOT_KERNEL_MIPI
想开机默认哪个屏就打开哪个
经验证,综上方法在6x-c和6x-s3系列开发板上均适用。文中标注的行数只是个大概值,方便定位,可能不太准确,但也基本上就是那片范围。
三.启动倒计时3修改成0
修改./uboot-2016/include/configs/mx6_common.h
#ifndef CONFIG_BOOTDELAY
#define CONFIG_BOOTDELAY 0
#endif
四.编译uboot
cd ./uboot-2016
./build-6dl.sh
build-6dl.sh内容如下:
#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=/opt/gcc-linaro-7.4.1-2020.09-arm-linux4.1.15-gnueabi/bin/arm-cortexa9-linux-gnueabi-
make distclean
make mx6dl-c-sabresd_defconfig
make -j4