首页 > 学院 > 操作系统 > 正文

将一副图片编译进uboot

2024-06-28 13:27:23
字体:
来源:转载
供稿:网友
将一副图片编译进uboot

在uboot显示图片的时候可以将jpg图片作为uboot的一段,在程序中访问该段,实现图片。

图片: logo.jpg ,将其拷贝到common下

  • 修改u-boot.lds,添加".log"段。(u-boot.lds的路径:arch/arm/cpu/godnet/u-boot.lds)
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{    . = 0x00000000;    . = ALIGN(4);    .text    :    {        arch/arm/cpu/godnet/start.o    (.text)        *(.text)    }    . = ALIGN(4);    __logo_start = .;    .logo :    {        common/logo.o (.logo);    }    __logo_end = .;    . = ALIGN(4);    .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }    . = ALIGN(4);    .data : { *(.data) }    . = ALIGN(4);    .got : { *(.got) }    __u_boot_cmd_start = .;    .u_boot_cmd : { *(.u_boot_cmd) }    __u_boot_cmd_end = .;    . = ALIGN(4);    __bss_start = .;    .bss : { *(.bss) }    _end = .;}

  • 在common下添加logo.S文件,写入如下内容
.section .logo.incbin "./logo.jpg"
  • 添加common/cmd_logo.c ,内容如下:
    #include <common.h>#include <command.h>extern unsigned int __logo_start;extern unsigned int __logo_end;int do_logo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){    volatile char *p = (volatile char *)(&__logo_start);    int i;    unsigned int len = 0;    len = (unsigned int)&__logo_end - (unsigned int)&__logo_start;    PRintf("__logo_start = %p/n", &__logo_start);    printf("__logo_end = %p/n", &__logo_end);    printf("logo size is %x/n", len);    for (i = 0; i < len; i++)    {        if(i % 16 == 0)        {            printf("/n");        }        printf("%3x ", *p++&0xff);    }    printf("/n");    return 0;}U_BOOT_CMD(    logo,    CONFIG_SYS_MAXARGS,    1,    do_logo,    "minimal test like /bin/sh",    "[args..]");
  • 修改common/Makefile,添加如下内容:
COBJS-y += cmd_logo.oAOBJS-y += logo.oCOBJS    := $(sort $(COBJS-y))AOBJS    := $(sort $(AOBJS-y))SRCS    := $(AOBJS:.o=.S) $(COBJS:.o=.c)OBJS    := $(addprefix $(obj),$(AOBJS) $(COBJS))
  • 编译uboot

本例是将.logo段的图片数据读取并打印出来,显示图片不是重点。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表