BIN文件和ELF文件
文件的内容
1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
所以ELF文件的体积比对应的BIN文件要大。
文件的执行
1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
2. 执行ELF程序则需要一个ELF Loader。
现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
所以烧在flash上的文件只能是raw binary格式的,即镜像文件image
2. 通过objcpy可以把elf文件转换为bin文件
FILE *fp = fopen("vmlinux.bin", "rb"); fread(VMLINUX_START, 1, VMLINUX_SIZE, fp); ((void (*)(void))VMLINUX_START)();
现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
所以烧在flash上的文件只能是raw binary格式的,即镜像文件image
文件的转换
1. 通过gcc编译出来的是elf文件2. 通过objcpy可以把elf文件转换为bin文件
CC=ppc-gcc LD=ppc-ld OBJCOPY=ppc-objcopy $(CC) -g $(CFLAG) -c boot.S #先将boot.S文件生成boot.o $(LD) -g -Bstatic -T$(LDFILE) \ -Ttext 0x12345600 boot.o \ --start-group -Map boot.map -o boot.elf #再将boot.o生成boot.elf $(OBJCOPY) -O binary -R .note -R .comment -S boot.elf boot.bin #接着将 boot.elf 转换为 boot.bin #使用 -O binary (或--out-target=binary) 输出为原始的二进制文件 #使用 -R .note (或--remove-section) 输出文件中不要.note这个section,缩小了文件尺寸 #使用 -S (或 --strip-all) 输出文件中不要重定位信息和符号信息,缩小了文件尺寸
编译完uboot后生成:
u-boot ELF文件可用来调试 u-boot.bin BIN文件用来烧在Flash上
编译linux生成:
vmlinux ELF文件可用来调试 vmlinux.bin BIN文件,没直接用过 zImage/bzimage 将vmlinux.bin压缩,并加上一段解压代码得到的 uImage 专用内核镜像(uboot使用),在zImage前加了一个64字节的头,描述内核版本、加载地址生成时间,文件大小等等,它是由uboot的工具mkImage生成的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律