u-boot之开机logo篇
来源:互联网 发布:工程学六零数据库 编辑:程序博客网 时间:2024/04/28 02:08
添加开机logo文件
主要思路是将logo改变成二进制文件、下载进nandflash中。在其中添加一个分区,作为bootlogo分区。只要改动文件时cmd_fastboot.c main.c cmd_mov.c 和smdkv210single.c 三个文件
目前状况 是分区可以添加,下载进去,但是logo下载进去就会黑屏。
1
Lcd 驱动
Lcd_init(){
1 设置lcd_framebuffer->lcdbase
2 取lcdbase 地址
3 清屏 lcdclear(){1 设置调色板 2 设置背景颜色}
}
取消原来的logo 主要是LCD_tunnon
主要函数文件是:fimdl.c pmic.h pmic_8937.h
logodl_config : unconfig
@$(MKCONFIG) $(@:_config=) arm pxa logodl
@rm -f $(obj)tools/bmp_logo $(obj)tools/easylogo/easylogo
2 logo显示分析
CFG_LCD_FBUFFER 0x28000000
3 main.c
void s5p_lcd_draw_boot_logo(const unsigned char * buf)
{
unsigned long* pBuffer = (unsigned long*)CFG_LCD_FBUFFER;
memcpy((void*)(pBuffer),buf,480*400*4);
printf("buf value is : 0x%lx\n",buf);
}
#ifdef SHOW_BOOT_LOGO
char run_cmd[100];
char *argv[6] = { NULL, "read", "logo", 0xc3ffecdc, CFG_LCD_FBUFFER, NULL};//无
int argc = 5;
ulong rfs_size, addr,size2;
uint start_blk, blkcnt;
uint start_blk2, blkcnt2;
unsigned char* boot_logo;
unsigned char* boot_logo2;
rfs_size = (255*1024);//???80k?? ??750 KB 1500KB ??????
boot_logo = (unsigned char*)malloc(rfs_size);
printf("boot_logo: 0x%lx\n",boot_logo);
start_blk = ((7*1024*1024)/MOVI_BLKSIZE);
blkcnt = rfs_size/MOVI_BLKSIZE + ((rfs_size&(MOVI_BLKSIZE-1)) ? 1 : 0);
//printf("%s bootlogo.. %ld, %ld, %08x ", "reading",start_blk, blkcnt,addr);
sprintf(run_cmd,"mmc %s 0 0x%lx 0x%lx 0x%lx","read",boot_logo, start_blk, blkcnt);
//do_movi(NULL, 0, argc, argv);
run_command(run_cmd,0);
extern void LCD_turnon();
memset((void*)CFG_LCD_FBUFFER, 0xFF, 480*800*4);
//LCD_turnon(0);
// LCD_turnon();
// printf("show boot logo--frank\n");
s5p_lcd_draw_boot_logo(boot_logo);
free(boot_logo);
/***************************????? *****************************************/
size2= (255*1024); //2
boot_logo2 = (unsigned char*)malloc(size2);
// printf("boot_logo2: 0x%lx\n",boot_logo2);//??
start_blk2 = start_blk+blkcnt;//??
blkcnt2 = size2/MOVI_BLKSIZE + ((size2&(MOVI_BLKSIZE-1)) ? 1 : 0);//??
//printf("%s bootlogo second frank!!!!!.. %ld, %ld\n","reading",start_blk2, blkcnt2);
sprintf(run_cmd,"mmc %s 0 0x%lx 0x%lx 0x%lx","read",boot_logo2, start_blk2, blkcnt2);
//do_movi(NULL, 0, argc, argv);
run_command(run_cmd,0);
//boot_logo2 ??
s5p_lcd_draw_boot_logo2(boot_logo2);
free(boot_logo2);
LCD_turnon();
/***************************????? end*****************************************/
#endif
0xe2700000 //看门狗电路的寄存器
ptn 1 name='bootlogo' start=N/A len=N/A (use hard-coded info. (cmd: movi))
二
1 cmd_fastboot.c 中添加分区信息
#ifdef SHOW_BOOT_LOGO //boot logo, zhf
/* bootlogo */
strcpy(ptable[pcount].name, "bootlogo");
ptable[pcount].start = 0;
ptable[pcount].length = 0;
ptable[pcount].flags = FASTBOOT_PTENTRY_FLAGS_USE_MOVI_CMD;
pcount++;
#endif
#if defined(SHOW_BOOT_LOGO)
else if(!strcmp(ptn->name, "bootlogo"))
{
printf("go to download boot logo\n");
strncpy(part,"logo", 7);
argv[4] = length;
sprintf(length, "0x%x",
((size + CFG_FASTBOOT_SDMMC_BLOCKSIZE -1)
/CFG_FASTBOOT_SDMMC_BLOCKSIZE )*CFG_FASTBOOT_SDMMC_BLOCKSIZE);
argc++;
}
2 cmd_movi.c
#ifdef SHOW_BOOT_LOGO
/* for boot logo */
image[6].start_blk = ((7*1024*1024)/MOVI_BLKSIZE);
image[6].used_blk = (2* 1024 * 1024/MOVI_BLKSIZE);
image[6].size = (2* 1024 * 1024);//2M
image[6].attribute = 0x40;
strcpy(image[6].description, "bootlogo");//--frank
printf("logo: %d\n", image[6].start_blk);
#endif
#if defined(SHOW_BOOT_LOGO)
case 'l':
if(argc != 5)
goto usage;
attribute = 0x40;
addr = simple_strtoul(argv[3], NULL, 16);
break;
#endif
#if defined(SHOW_BOOT_LOGO)
if(attribute == 0x40)
{
rfs_size = simple_strtoul(argv[4], NULL, 16);
printf(" \n ");
printf(" \n");
printf("frank argv[4]:%x, rfs_size:%x\n",argv[4],rfs_size);
for (i=0, image = raw_area_control.image; i<15; i++) {
if (image[i].attribute == attribute)
break;
}
start_blk = image[i].start_blk;
blkcnt = rfs_size/MOVI_BLKSIZE +
((rfs_size&(MOVI_BLKSIZE-1)) ? 1 : 0);
image[i].used_blk = blkcnt;
printf("%s bootlogo.. %ld, %ld, %08x ", rw ? "writing":"reading",
start_blk, blkcnt,addr);
sprintf(run_cmd,"mmc %s 0 0x%lx 0x%lx 0x%lx",
rw ? "write":"read",
addr, start_blk, blkcnt);
run_command(run_cmd, 0);
printf("completed\n");
return 1;
}
#endif
3 main.c
#ifdef SHOW_BOOT_LOGO
#include <movi.h>
void s5p_lcd_draw_boot_logo(const unsigned char * buf)
{
unsigned long* pBuffer = (unsigned long*)CFG_LCD_FBUFFER;
memcpy((void*)(pBuffer),buf,480*400*4);
printf("buf value is : 0x%lx\n",buf);
}
void s5p_lcd_draw_boot_logo2(const unsigned char * buf)
{
unsigned long* pBuffer = (unsigned long*)CFG_LCD_FBUFFER;
memcpy((void*)(pBuffer+480*400),buf,480*400*4);
}
#endif
ifdef SHOW_BOOT_LOGO
char run_cmd[100];
char *argv[6] = { NULL, "read", "logo", 0xc3ffecdc, CFG_LCD_FBUFFER, NULL};//无所谓的
int argc = 5;
ulong rfs_size, addr,size2;
uint start_blk, blkcnt;
uint start_blk2, blkcnt2;
unsigned char* boot_logo;
unsigned char* boot_logo2;
rfs_size = (255*1024);//???80k?? ??750 KB 1500KB ??????
boot_logo = (unsigned char*)malloc(rfs_size);
printf("boot_logo: 0x%lx\n",boot_logo);
start_blk = ((7*1024*1024)/MOVI_BLKSIZE);
blkcnt = rfs_size/MOVI_BLKSIZE + ((rfs_size&(MOVI_BLKSIZE-1)) ? 1 : 0);
printf("%s bootlogo.. %ld, %ld, %08x ", "reading",start_blk, blkcnt,addr);
sprintf(run_cmd,"mmc %s 0 0x%lx 0x%lx 0x%lx","read",boot_logo, start_blk, blkcnt);
//do_movi(NULL, 0, argc, argv);
LCD_turnon();
run_command(run_cmd,0);
//extern void LCD_turnon();
memset((void*)CFG_LCD_FBUFFER, 0xFF, 480*800*4);
printf("show boot logo--frank\n");
s5p_lcd_draw_boot_logo(boot_logo);
free(boot_logo);
// LCD_turnon();
#endif
<pmic_8973.h>
<fmid.c>
- u-boot之开机logo篇
- U-boot显示LOGO之LOGO篇
- U-boot开机logo的制作方法
- U-boot开机logo的制作方法
- 修改u-boot的开机logo及显示过程
- U-boot中设置开机logo的方法
- 修改u-boot的开机logo及显示过程
- 修改u-boot的开机logo及显示过程
- u-boot的开机logo及显示过程
- 修改u-boot的开机logo及显示过程
- Am335x之u-boot LOGO的增加
- u-boot显示logo
- am3359 u-boot显示logo
- u-boot logo全屏显示
- 制作u-boot LCD开机logo 及LCD字符显示错误的解决
- 天漠SOC8200(TI AM3517 ARM芯片)u-boot增加开机logo
- U-boot移植之RK-PX2开机启动打印信息
- Linux开机液晶屏Logo显示:boot-logo bigger than screen
- 求蜘蛛 蜘蛛 蛛
- 关于第十周学习心得总结
- 利用SIPp对SIP Proxy进行Register压测用到的文件
- lua学习笔记之函数
- 一些无脑的C题,CODEFORCE DIV2 266-270
- u-boot之开机logo篇
- HDU 1565 1569 方格取数(最大点权独立集)
- 顺序存储与链式存储
- NVIDIA Tesla C2050 安装显卡驱动及cuda
- Android Studio 导出APK
- 第十一周项目六-回文-素数3
- apache 一些与模块相关的异常
- Switch
- 各种求爬求蜘蛛然后再求蜘蛛