内核启动后,lcd显示logo失败

针对-s5pv210,但对其他平台也使用

lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印“Start display and show logo”,但是LCD屏没有显示

[    0.833071] s3cfb s3cfb: [fb2] dma: 0x465ab000, cpu: 0xe1000000, size: 0x005dc000
[    0.845112] FIMD src sclk = 166750000
[    0.965701] s3cfb s3cfb: registered successfully
[    0.965744] Start display and show logo

原因:LCD驱动有问题。

第一步:在arch/arm/mach-s5pv210/mach-smdkc110.c当中,约712行,将之前的LCD初始化删掉,并修改如下:

#ifdef CONFIG_FB_S3C_LTE480WV
static struct s3cfb_lcd wvga_s70 = {

        .width = 800,
        .height = 480,
        .p_width = 154,
        .p_height = 96,
        .bpp = 32,
        .freq = 65,

        .timing = {
                .h_fp = 80,
                .h_bp = 36,
                .h_sw = 10,
                .v_fp = 22,
                .v_fpe = 1,
                .v_bp = 15,
                .v_bpe = 1,
                .v_sw = 8,
        },
        .polarity = {
                .rise_vclk = 0,
                .inv_hsync = 1,
                .inv_vsync = 1,
                .inv_vden = 0,
        },
};

static void lcd_cfg_gpio(struct platform_device *pdev)
{
    int i;

    for (i = 0; i < 8; i++) {
        s3c_gpio_cfgpin(S5PV210_GPF0(i), S3C_GPIO_SFN(2));
        s3c_gpio_setpull(S5PV210_GPF0(i), S3C_GPIO_PULL_NONE);
    }

    for (i = 0; i < 8; i++) {
        s3c_gpio_cfgpin(S5PV210_GPF1(i), S3C_GPIO_SFN(2));
        s3c_gpio_setpull(S5PV210_GPF1(i), S3C_GPIO_PULL_NONE);
    }

    for (i = 0; i < 8; i++) {
        s3c_gpio_cfgpin(S5PV210_GPF2(i), S3C_GPIO_SFN(2));
        s3c_gpio_setpull(S5PV210_GPF2(i), S3C_GPIO_PULL_NONE);
    }

    for (i = 0; i < 4; i++) {
        s3c_gpio_cfgpin(S5PV210_GPF3(i), S3C_GPIO_SFN(2));
        s3c_gpio_setpull(S5PV210_GPF3(i), S3C_GPIO_PULL_NONE);
    }

    /* mDNIe SEL: why we shall write 0x2 ? */
    writel(0x2, S5P_MDNIE_SEL);

    /* drive strength to max */
    writel(0xaaaaaaaa, S5PV210_GPF0_BASE + 0xc);
    writel(0xaaaaaaaa, S5PV210_GPF1_BASE + 0xc);
    writel(0xaaaaaaaa, S5PV210_GPF2_BASE + 0xc);
    writel(0x000000aa, S5PV210_GPF3_BASE + 0xc);
}

#define S5PV210_GPD_0_0_TOUT_0  (0x2)
#define S5PV210_GPD_0_1_TOUT_1  (0x2 << 4)
#define S5PV210_GPD_0_2_TOUT_2  (0x2 << 8)
#define S5PV210_GPD_0_3_TOUT_3  (0x2 << 12)
static int lcd_backlight_on(struct platform_device *pdev)
{
    int err;

    err = gpio_request(S5PV210_GPD0(3), "GPD0");

    if (err) {
        printk(KERN_ERR "failed to request GPD0 for "
            "lcd backlight control\n");
        return err;
    }

    gpio_direction_output(S5PV210_GPD0(3), 1);

    s3c_gpio_cfgpin(S5PV210_GPD0(3), S5PV210_GPD_0_3_TOUT_3);

    gpio_free(S5PV210_GPD0(3));
    return 0;
}

static int lcd_backlight_off(struct platform_device *pdev, int onoff)
{
    int err;

    err = gpio_request(S5PV210_GPD0(3), "GPD0");

    if (err) {
        printk(KERN_ERR "failed to request GPD0 for "
                "lcd backlight control\n");
        return err;
    }

    gpio_direction_output(S5PV210_GPD0(3), 0);
    gpio_free(S5PV210_GPD0(3));
    return 0;
}

static int lcd_reset_lcd(struct platform_device *pdev)
{
    int err;

    err = gpio_request(S5PV210_GPH0(6), "GPH0");
    if (err) {
        printk(KERN_ERR "failed to request GPH0 for "
                "lcd reset control\n");
        return err;
    }

    gpio_direction_output(S5PV210_GPH0(6), 1);
    mdelay(100);

    gpio_set_value(S5PV210_GPH0(6), 0);
    mdelay(10);

    gpio_set_value(S5PV210_GPH0(6), 1);
    mdelay(10);

    gpio_free(S5PV210_GPH0(6));

    return 0;
}

static struct s3c_platform_fb lte480wv_fb_data __initdata = {
    .hw_ver    = 0x62,
    .nr_wins = 5,
    .default_win = CONFIG_FB_S3C_DEFAULT_WINDOW,
    .swap = FB_SWAP_WORD | FB_SWAP_HWORD,
       .lcd = &wvga_s70,
    .cfg_gpio    = lcd_cfg_gpio,
    .backlight_on    = lcd_backlight_on,
    .backlight_onoff    = lcd_backlight_off,
    .reset_lcd    = lcd_reset_lcd,
};
#endif

第二步:使用make menuconfig,去配置当前显示的windows,请配置为windows0

Device Drivers
  -->Graphics support
     --> Support for frame buffer devices
        --> (2)     Default Window (0-4) 

修改为

Device Drivers
  -->Graphics support
      --> Support for frame buffer devices
         --> (0)     Default Window (0-4)
时间: 2024-08-06 22:11:34

内核启动后,lcd显示logo失败的相关文章

STM32F103 ucLinux开发之四(内核启动后的调试)

Stm32-uclinux启动后的调试 1.  修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后,下面两个宏定义,导致计算错误,从而Backtrace的. #define __pfn_to_page(pfn)     (mem_map + ((pfn) - ARCH_PFN_OFFSET)) #define __page_to_pfn(page)  ((unsigned long)((page

启动后再显示状态栏Status Bar

三步即可实现启动程序时不显示状态栏,启动后显示 1. 在Info.plish文件中,Key的最后一项,选择把View controller-based status bar appearance设置为NO 2. 在AppDelegate.m文件中写如下代码 1 // 此方法在启动完毕后调用 2 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchO

通过JTAG对比内核启动后text/rodata段内容

关键词:vmlinux.strip.dump._text.__end_rodata等等. 在日常的调试中,可能会在某些情况下踩到内核重要的数据,比如代码段或者rodata之类. 这种情况下,需要确认这些数据是否异常. 所谓的异常就是从DDR中读出的数据能否和vmlinux对上. 1. 准备vmlinux数据 原始的vmlinux文件,需要strip: strip vmlinux -o vmlinux_stripped 然后去掉vmlinux的0x1000头部. dd if=vmlinux_str

自定义内核启动后的Logo

1.使用图像GIMP工具 2.详细步骤如下: A.将800x480的图片导入到GIMP工具. B.选中GIMP菜单栏进行以下操作 图像 -->模式 -->索引 .在弹出的窗口当中,选中调色板,最大颜色值修改为224. .点击[转换]按钮,退出. C.将文件"Export As"文件类型为ppm格式,并且文件名为:logo_linux_clut224.ppm,输出格式为ASCII,最后进行保存. D.将logo_linux_clut224.ppm拷贝到内核目录当中的drive

qt designer启动后不显示界面问题的原因与解决办法

Qt 5.6.1无论是在vs里双击ui文件还是直接启动designer.exe都一直无法显示界面,但任务管理器中可以看到该进程是存在的.前几天还正常的,但昨天加了一块NVIDIA的显卡(机器自带核显),可能与此有关.幸好还可以通过QtCreator打开ui文件进行编辑. 找到了对应Qt bug但还是打开状态...地址如下:https://bugreports.qt.io/browse/QTBUG-53984 根据bug描述应该是在win10 64位系统并且是双显卡的情况下,Qt5WebEngin

Linux内核启动中显示的logo的修改

1.配置内核 使内核启动时加载logo,在源代码的主目录下make menuconfig Device Drivers  ---> Graphics support  ---> 选上 并 进入 Bootup logo --> 选上 Standard 224-color Linux logo [ * ] 代表选中 [   ]代表未选中 [M]代表编译成模块,使用空格键切换 make重新编译内核,这样启动是就会加载启动logo了. 2.然后就是处理开机图片了. 修改"drivers

I.MX6Q(TQIMX6Q/TQE9)学习笔记——内核启动与文件系统挂载

经过前面的移植,u-boot已经有能力启动内核了,本文主要来看下如何通过之前移植的u-boot来启动内核.如果按照前面的文章完成了LTIB 的编译,那么,Linux的内核应该就会出现rpm/BUILD/目录下,接下来,我们就开始移植这个3.0.35版本的内核到TQIMX6Q. 内核的编译 为了简化内核编译的过程,可以在内核目录下创建编译脚本,命名为build.sh,内容如下: [cpp] view plaincopy #!/bin/sh export ARCH=arm export CROSS_

Linux内核启动及根文件系统载入过程

上接博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令,就进入Linux内核启动阶段.与u-boot类似,普通Linux内核的启动过程也能够分为两个阶段,但针对压缩了的内核如uImage就要包含内核自解压过程了.本文以linux-2.6.37版源代码为例分三个阶段来描写叙述内核启动全过程.第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等,而第三阶段则主要为

Linux内核启动及文件系统加载过程

上接博文<u-boot之u-boot-2009.11启动过程分析> 当u-boot开始执行bootcmd命令,就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也可以分为两个阶段,但针对压缩了的内核如uImage就要包括内核自解压过程了.本文以项目中使用的linux-2.6.37版源码为例分三个阶段来描述内核启动全过程.第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作