今日在阅读uboot中关于显示开机logo的代码。图片以rle格式与uboot源码放在一起,如图片文件为my_test.rle
发现在往LCD framebuffer倒入数据时使用两个外部数组:
extern char const my_test_rle_start[];
extern char const my_test_rle__end[];
source insight 搜索一圈没发现以上两个数组的定义。于是查看图片文件所在目录下的makefile,发现有如下编译项:
OBJS
my_test.o:
于是查阅关于OBJCOPY的东东,得到如下资料:
将图像编译到可执行文件内
Q: 如何将一个二进制文件,比如图片,词典一类的东西做为.o文件,直接链接到可执行文件内部呢?
A:
$ objcopy -I binary -O elf32-i386 -B i386 14_95_13.jpg image.o
$ gcc image.o tt.o -o tt
$ nm tt | grep 14_95
0805d6c7 D _binary_14_95_13_jpg_end
00014213 A _binary_14_95_13_jpg_size
080494b4 D _binary_14_95_13_jpg_start
$ objcopy -I binary -O elf32-i386 -B i386 14_95_13.jpg image.o
$ gcc image.o tt.o -o tt
$ nm tt | grep 14_95
0805d6c7 D _binary_14_95_13_jpg_end
00014213 A _binary_14_95_13_jpg_size
080494b4 D _binary_14_95_13_jpg_start
再于是写了此文以便以后斟酌。