本文转载自: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

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

  1. [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...

  2. [RK3288][Android6.0] U-boot 启动流程小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/52536093 Platform: RK3288OS: Android 6.0Version: ...

  3. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  4. [RK3288][Android6.0] 调试笔记 --- 移除uboot和kernel开机logo【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/71600690 Platform: RockchipOS: Android 6.0Kernel ...

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

    本文转载自:http://blog.csdn.net/kris_fei/article/details/52584903 Platform: RK3288OS: Android 6.0Kernel: ...

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

    本文转载自:http://blog.csdn.net/kris_fei/article/details/54574073   标签: rk3288 串口添加 2017-01-16 14:52 1079 ...

  7. [RK3288][Android6.0] TS-ADC驱动流程小结【转】

    本文转载自:https://blog.csdn.net/kris_fei/article/details/55045936 Platform: RK3288OS: Android 6.0Kernel: ...

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

    本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...

  9. [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...

随机推荐

  1. 根据不同的产品id获得不同的下拉选项 (option传多值)

    <td> 没有 value 所以要在<td>里面加上input  同时text 为hidden这样就不会显示value的值 <td><select id='g ...

  2. 最近的一些JAVA基础知识

    1,关于判断两个值是否相等 equal 和==是有区别到 2,判断一个数组集合 List是否为空 这个不能用"==null或者equal"要用isEmpty() , 对于不等于加一 ...

  3. Device eth0 does not seem to be present,delaying initialization问题

    1.打开/etc/udev/rules.d/70-persistent-net.rules: cat /etc/udev/rules.d/70-persistent-net.rules 文件内容如图: ...

  4. MyISAM和InnoDB索引实现对比

    MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.如图:  这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引 ...

  5. Google JavaScript代码风格指南

    Google JavaScript代码风格指南 修正版本 2.28 Aaron Whyte Bob Jervis Dan Pupius Eric Arvidsson Fritz Schneider R ...

  6. JSP中使用<c:forEach>标签循环遍历元素

    转载:http://blog.csdn.net/hero_cheng/article/details/51924577

  7. CDOJ 1217 The Battle of Chibi

    The Battle of Chibi Time Limit: 6000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Othe ...

  8. F题

    Problem F Codeforces 16E 这道题是一道数位Dp将鱼的死活列为0两种状态然后找DP关系 •题意:有n(n<=18)条鱼,接下来的n-1天,每天会有一对鱼(a,b)相遇,每天 ...

  9. 洛谷P4219 - [BJOI2014]大融合

    Portal Description 初始有\(n(n\leq10^5)\)个孤立的点,进行\(Q(Q\leq10^5)\)次操作: 连接边\((u,v)\),保证\(u,v\)不连通. 询问有多少条 ...

  10. 【dp】E. Selling Souvenirs

    http://codeforces.com/contest/808/problem/E 题意:给定n个重量为可能1,2,3的纪念品和各自的价值,问在背包总重量不超过m的条件下总价值最大为多少. 其中1 ...