[RK3288][Android6.0] 关于uboot中logo相关知识点小结【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/76256224

Platform: Rockchip 
OS: Android 6.0 
Kernel: 3.10.92

遇到不少网友找不到uboot logo在哪里,其实一开始我也潜意识地去u-boot目录下去找,但是后来发现是在kernel目录下 

加载顺序: 
1.uboot开机的时候会先去logo分区加载 
2.加载失败则尝试从resource分区加载 
3.加载失败则尝试从boot分区加载

限制: 
1. 只能显示偶数分辨率 
2. 只能显示位深为8bit的bmp图片 
3. 输入是24bit图片

制作: 
#convert -compress rle -colors 256 src.bmp logo.bmp

编译: 
替换编译后是在resource.img或者boot.img(包含Resource.img的情况)中

代码调用:

int rk_bitmap_from_resource(unsigned short* fb)
{
    const char* file_path = "logo.bmp";
    return show_resource_image(file_path) ? 0 : -1;
}

bool show_resource_image(const char* image_path)
{
    bool ret = false;
#ifdef CONFIG_LCD
    bmp_image_t *bmp = NULL;
    const disk_partition_t* ptn = get_disk_partition(LOGO_NAME);
    resource_content image;
    memset(&image, 0, sizeof(image));
    snprintf(image.path, sizeof(image.path), "%s", image_path);

    if (ptn) {
        printf("Find logo from partition %s\n", LOGO_NAME);
#ifdef CONFIG_DIRECT_LOGO
        bmp = lcd_get_buffer();
#else
        bmp = (void *)gd->arch.rk_boot_buf_addr;
#endif
        read_storage(ptn->start, bmp, CONFIG_MAX_BMP_BLOCKS);
        debug("bmp image at 0x%p, sign:%c%c\n", bmp, bmp->header.signature[0], bmp->header.signature[1]);
    }

    if (ptn && bmp && bmp->header.signature[0] == ‘B‘ && bmp->header.signature[1] == ‘M‘) {
        debug("%s:show logo.bmp from logo partition\n", __func__);
        lcd_display_bitmap_center((uint32_t)(unsigned long)bmp);
        ret = true;
    } else {
        if (get_content(0, &image)) {
            debug("%s:show logo from resource or boot partition\n", __func__);
            int blocks = (image.content_size + BLOCK_SIZE - 1) / BLOCK_SIZE;

            if (image.content_size > CONFIG_RK_BOOT_BUFFER_SIZE) {
                FBTERR("Failed to bmp image too large, %d\n",
                       image.content_size);
                return false;
            }

#ifdef CONFIG_DIRECT_LOGO
            image.load_addr = lcd_get_buffer();
#else
            image.load_addr = (void *)gd->arch.rk_boot_buf_addr;
#endif
            if (!load_content_data(&image, 0, image.load_addr, blocks)) {
                return false;
            }
            FBTDBG("Try to show:%s\n", image_path);
            lcd_display_bitmap_center((uint32_t)(unsigned long)image.load_addr);

            ret = true;
        } else {
            FBTERR("Failed to load image:%s\n", image_path);
        }
    }

#endif
    return ret;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

参考: 
Rockchip uboot开发指南_V3.7

时间: 2024-11-09 10:05:48

[RK3288][Android6.0] 关于uboot中logo相关知识点小结【转】的相关文章

[RK3288][Android6.0] Display驱动初始化流程小结【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/52584903 Platform: RK3288OS: Android 6.0Kernel: 3.10.92 以MIPI DSI接口的lcd为例. rk_screen.c:读取lcd timing参数.lcd_mipi.c:屏幕mipi配置信息.rk_fb.c:fb驱动.rk3288_lcdc.clcdc controller驱动.rk32_mipi_dsi.c:dsi controller

[RK3288][Android6.0] 调试笔记 --- 普通串口的添加 【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/54574073 标签: rk3288 串口添加 2017-01-16 14:52 1079人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92 uart0,1,3,4 (普通串口) 用的是同一个串口驱动.uart2(调试串口)的驱动代码嵌在fiq debugger

[RK3288][Android6.0] 调试笔记 --- 系统识别不同硬件版本方法【转】

本文转载自:http://m.blog.csdn.net/kris_fei/article/details/70226451 Platform: RockchipOS: Android 6.0Kernel: 3.10.92 需求:硬件版本不一样,通过几个gpio的高低电平来表示不同版本,u-boot/kernel/hal/framework/app层都需要用到,那么可以使用系统自身的参数传递机制以及property API来实现. 以一个gpio为例.改动:u-bootdiff --git a/

[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示.Recovery中升级完成后控制GPIO输出高电平点亮LED. 系统自带GPIO控制驱动:内核已经自带了通用GPIO驱动,可以直接在用户空间操作.路径: /sys/class/gpio[email protec

[RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: 3.10.92 由于项目的apk安装需要shareid为system的权限(不需要高权限的apk是可以正常安装的),一开始我用的是releasekey,导致签名文件不匹配无法安装,因此就替换系统默认platform签名文件. 生成新的签名文件方法参考rk3288/build/target/produ

[RK3288][Android6.0] 系统按键驱动流程分析【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/keyboard/rk_keys.c 默认支持的keys在dts中定义: 其中power key作为普通gpio,具有唤醒功能.而其他按键比如,volume up/down 可以通过adc精确读取到gpio的电压值,原理图如下:   和一般的按键一样,驱动是通过内核input子系统来将keys注册供用户

[RK3288][Android6.0] 音频调试方法小结【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/70053135 Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92 以rt5631为例,后续遇到再增加. 使用tinyalsa工具确定播放音问题是否在驱动层1|[email protected]:/data # tinycap  test.wav                                        Capturing s

[RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题【转】

本文转载自:http://blog.csdn.net/kris_fei/article/details/72783843?locationNum=9&fps=1 Platform: RockchipOS: Android 6.0Kernel: 3.10.92 现象:录音使用1K正弦波作为数据源做测试,然后比较HAL和APP层dump出来的pcm数据,发现到APP层之后相对HAL层的音量会小很多. 原因:后来发现是因为在HAL层有个叫SPEEX的降噪算法,它会固定的信号有衰减,因此音量变小了.RK

C语言中数学相关知识点

快速求幂取模 积的取余等于取余的积取余 代码如下: int pow(int a,int n,int b)//返回值是a的n次方对b取余后的值 {     int result=1;     a=a%b;//积的取余等于取余的积取余     while(n>0)     {         if(n%2==1)             result=result*a%b;//n是奇数的话就要多乘一次,原理和前面的二分求幂一样         n=n/2;//二分         a=a*a%b;/