精华内容
下载资源
问答
  • ELF文件和BIN文件

    2019-03-25 15:21:11
    文件的内容: 1. BIN文件是 raw binary 文件,...所以ELF文件的体积比对应的BIN文件要大。文件的执行: 1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmlinux.bin", "...

    文件的内容:
    1. BIN文件是 raw binary 文件,这种文件只包含机器码。
    2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。

    所以ELF文件的体积比对应的BIN文件要大。

    文件的执行:
    1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
        FILE *fp = fopen("vmlinux.bin", "rb");
        fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
        ((void (*)(void))VMLINUX_START)();


    2. 执行ELF程序则需要一个ELF Loader。

    现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
    所以烧在flash上的文件只能是raw binary格式的,即镜像文件image

    文件的转换:
    1. 通过gcc编译出来的是elf文件
    2. 通过objcpy可以把elf文件转换为bin文件
     

     

    编译完uboot后生成:
         u-boot         ELF文件可用来调试
         u-boot.bin     BIN文件用来烧在Flash上

    编译linux生成:
         vmlinux          ELF文件可用来调试
         vmlinux.bin    BIN文件,没直接用过

         zImage/vmlinuz/bzimage
              将vmlinux.bin压缩,并加上一段解压代码得到的,不可和bootloader共存

         uImage         
              uboot专用的内核镜像,在zImage前加了一个64字节的头,描述内核版本、加载地址
              生成时间,文件大小等等。 其0x40后的内容和zImage一样
              它是由uboot的工具mkImage生成的。 

    uImage相对于zImage的优点在于:uImage可以和uboot共存。

    展开全文
  • uboot 下编译出来的文件,包括u-boot.elf &...所以ELF文件的体积比对应的BIN文件要大。文件的执行: 1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmlin...

    uboot 下编译出来的文件,包括u-boot.elf & u-boot.bin。 这篇文章主要介绍两个文件的区别和用途

    文件的内容:
    1. BIN文件是 raw binary 文件,这种文件只包含机器码
    2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。

    所以ELF文件的体积比对应的BIN文件要大。

    文件的执行:
    1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
        FILE *fp = fopen("vmlinux.bin", "rb");
        fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
        ((void (*)(void))VMLINUX_START)();
    2. 执行ELF程序则需要一个ELF Loader

    现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
    所以烧在flash上的文件只能是raw binary格式的,即镜像文件image。但是JTAG 调试时添加的debug information 文件为elf,因为u-boot.elf 包含符号表。

     

    例如如下举例调试

    Step1:JTAG 连接到 CPU

    /opt/arm/developmentstudio_platinum-2020.b/bin/armdbg --cdb-root /home/xianfei.zhu/developmentstudio-workspace/Hobot --cdb-entry 'Hobot::J5_Freeze::Linux Kernel Debug::Linux Kernel Debug::Cortex-A55_0::DSTREAM' --cdb-entry-param Connection=TCP:10.106.32.36 

    Step2: load u-boot.bin 0x8800000 [address] 加载image 到指定地址

    Step3:file u-boot.elf 加载debug information into the debugger

    Step4: run /c

    其他常用命令:

    1: next 用于单步调试

    2.  info registers 打印 CPU 寄存器

    3: print /x $variable 打印变量或指针内容

     

     

     



    文件的转换:
    1. 通过gcc编译出来的是elf文件
    2. 通过objcpy可以把elf文件转换为bin文件

    https://blog.csdn.net/u014426028/article/details/107848839

     

     

    展开全文
  • 文件的内容: 1. BIN文件是 raw binary 文件,这种文件只包含机器码。BIN文件中的所有数据都是机器可以执行的指令码、指令参数...ELF文件相当于是对bin文件的一个包装解释,不仅仅包含程序的机器码,还包含加载.

    原文:http://blog.chinaunix.net/uid-24148050-id-362928.html

    红色为个人注解。

     

    文件的内容:
    1. BIN文件是 raw binary 文件,这种文件只包含机器码。

    BIN文件(也叫镜像文件)中的所有数据都是机器可以执行的指令码、指令参数或者常量数据,不包含其它调试信息。加载到内存或者Nor FLASH等支持XIP(就地执行)的存储器中规定好的加载地址之后直接从规定好的运行地址开始运行即可。例如单片机中烧写的都是bin文件,以STM32为例,其片内Nor FLASH的起始地址也是代码的加载(烧写)地址为0x08000000。上电复位或者手动复位之后,程序计数器PC指向单片机的复位异常的中断向量地址0x08000004的位置,单片机从复位开始运行。


    2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
    ELF文件相当于是对bin文件的一个包装和解释,不仅仅包含程序的机器码,还包含加载地址、运行地址和调试信息等,使得运行操作系统(带MMU的CPU运行的具有虚拟地址/内存映像功能的OS,如Linux、Windows)的机器中的ELF Loader模块能够根据elf头信息创建一个新进程并加载elf文件中的机器码到该进程的虚拟内存中去。例如在Linux系统上运行ls命令,Linux系统会在环境变量中定义了的文件夹中找到可执行文件“ls”,然后系统创建一个新的进程以及映射虚拟内存空间,然后ELF Loader会将可执行文件“ls”加载到虚拟内存空间中去并开始执行开进程。(注意,虚拟地址空间也物理地址空间的寻址空间是一样的,32位CPU的有4G的寻址空间,64位的有好多G的寻址空间,但是并不是所有虚拟地址空间中的地址都能访问,MMU只会映射一部分虚拟地址空间到物理地址空间,如果访问没有映射的虚拟地址空间,就会出现内存访问错误Segmentation Fault)

    所以ELF文件的体积比对应的BIN文件要大。
    因为elf文件中包含了bin文件内容外的其它信息。


    文件的执行:
    1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
        FILE *fp = fopen("vmlinux.bin", "rb");
        fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
        ((void (*)(void))VMLINUX_START)();
    2. 执行ELF程序则需要一个ELF Loader。

    现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
    所以烧在flash上的文件只能是raw binary格式的,即镜像文件image

     


    文件的转换:
    1. 通过gcc编译出来的是elf文件
    2. 通过objcpy可以把elf文件转换为bin文件

    编译完uboot后生成:
         u-boot         ELF文件可用来调试
         u-boot.bin     BIN文件用来烧在Flash上

    编译linux生成:
         vmlinux        ELF文件可用来调试
         vmlinux.bin    BIN文件,没直接用过

    zImage/vmlinuz/bzimage
              将vmlinux.bin压缩,并加上一段解压代码得到的,不可和bootloader共存?

    uImage        
              uboot专用的内核镜像,在zImage前加了一个64字节的头,描述内核版本、加载地址
              生成时间,文件大小等等。 其0x40后的内容和zImage一样
              它是由uboot的工具mkImage生成的。

    uImage相对于zImage的优点在于:uImage可以和uboot共存。

    网上的一个图片很强大,讲解了arm平台的uImage的生成:


    ppc平台uImage有点不同,make uImage后查看源代码目录的verbose.log
    1. ........省略
    2.  
    3. make -f scripts/Makefile.build obj=arch/ppc/boot/images arch/ppc/boot/images/uImage
    4. ppc_85xx-objcopy -O binary vmlinux arch/ppc/boot/images/vmlinux.bin (第一步)
    5. gzip -f -9 < arch/ppc/boot/images/vmlinux.bin > arch/ppc/boot/images/vmlinux.gz.$ && mv arch/ppc/boot/images/vmlinux.gz.$ arch/ppc/boot/images/vmlinux.gz (第二步)
    6. rm -f arch/ppc/boot/images/uImage
    7. /bin/sh /root/project/eldk4.2/ppc_85xx/usr/src/8541-reduece-ppc-linux-2.6.24/scripts/mkuboot.sh -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 -n 'Linux-2.6.24.2' -d arch/ppc/boot/images/vmlinux.gz arch/ppc/boot/images/uImage (第三步)


    文件的调试:
    1. 我们调试一般都是使用elf文件,比如:
    1. nm elf文件         #得到符号表
    2. objdump -D elf文件 #反汇编,且汇编代码与源码混排

    2. bin文件比较杯具,里面全是机器码,所以只能反汇编
    1. objdump -b binary -m powerpc uboot.bin
    全是汇编代码......+_+
     
    展开全文
  • ELF文件和BIN文件 201

    2017-03-21 16:13:49
    文件的内容: 1. BIN文件是 raw binary 文件,这种...所以ELF文件的体积比对应的BIN文件要大。 文件的执行: 1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;  FILE *fp = fopen("vmli
    文件的内容:
    1. BIN文件是 raw binary 文件,这种文件只包含机器码。
    2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。

    所以ELF文件的体积比对应的BIN文件要大。

    文件的执行:
    1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
        FILE *fp = fopen("vmlinux.bin", "rb");
        fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
        ((void (*)(void))VMLINUX_START)();
    2. 执行ELF程序则需要一个ELF Loader。

    现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
    所以烧在flash上的文件只能是raw binary格式的,即镜像文件image

    文件的转换:
    1. 通过gcc编译出来的是elf文件
    2. 通过objcpy可以把elf文件转换为bin文件

    1. CC=ppc-gcc
    2. LD=ppc-ld
    3. OBJCOPY=ppc-objcopy

    4. $(CC) -g $(CFLAG) -c boot.S
    5. #先将boot.S文件生成boot.o

    6. $(LD) -g -Bstatic -T$(LDFILE) \
    7. -Ttext 0x12345600 boot.o \
    8. --start-group -Map boot.map -o boot.elf
    9. #再将boot.o生成boot.elf

    10. $(OBJCOPY) -O binary -R .note -R .comment -S boot.elf boot.bin
    11. #接着将 boot.elf 转换为 boot.bin
    12. #使用 -O binary (或--out-target=binary) 输出为原始的二进制文件
    13. #使用 -R .note  (或--remove-section)   输出文件中不要.note这个section,缩小了文件尺寸
    14. #使用 -S        (或 --strip-all)        输出文件中不要重定位信息和符号信息,缩小了文件尺寸
    编译完uboot后生成:
         u-boot         ELF文件可用来调试
         u-boot.bin     BIN文件用来烧在Flash上

    编译linux生成:
         vmlinux        ELF文件可用来调试
         vmlinux.bin    BIN文件,没直接用过

         zImage/vmlinuz/bzimage
              将vmlinux.bin压缩,并加上一段解压代码得到的,不可和bootloader共存?

         uImage        
              uboot专用的内核镜像,在zImage前加了一个64字节的头,描述内核版本、加载地址
              生成时间,文件大小等等。 其0x40后的内容和zImage一样
              它是由uboot的工具mkImage生成的。

    uImage相对于zImage的优点在于:uImage可以和uboot共存。

    网上的一个图片很强大,讲解了arm平台的uImage的生成:


    ppc平台uImage有点不同,make uImage后查看源代码目录的verbose.log
    1. ........省略

    2. make -f scripts/Makefile.build obj=arch/ppc/boot/images arch/ppc/boot/images/uImage
    3. ppc_85xx-objcopy -O binary vmlinux arch/ppc/boot/images/vmlinux.bin (第一步)
    4. gzip -f -9 < arch/ppc/boot/images/vmlinux.bin > arch/ppc/boot/images/vmlinux.gz.$ && mv arch/ppc/boot/images/vmlinux.gz.$ arch/ppc/boot/images/vmlinux.gz (第二步)
    5. rm -f arch/ppc/boot/images/uImage
    6. /bin/sh /root/project/eldk4.2/ppc_85xx/usr/src/8541-reduece-ppc-linux-2.6.24/scripts/mkuboot.sh -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 -n 'Linux-2.6.24.2' -d arch/ppc/boot/images/vmlinux.gz arch/ppc/boot/images/uImage (第三步)


    文件的调试:
    1. 我们调试一般都是使用elf文件,比如:
    1. nm elf文件         #得到符号表
    2. objdump -D elf文件 #反汇编,且汇编代码与源码混排

    2. bin文件比较杯具,里面全是机器码,所以只能反汇编
    1. objdump -b binary -m powerpc uboot.bin
    全是汇编代码......+_+
    展开全文
  • elf文件和bin文件区别

    2020-11-17 08:25:46
    ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File) 可执行文件(Executable) 共享库(Shared Object,...
  • ELF格式文件和BIN文件的区别

    千次阅读 2017-07-12 23:10:44
    ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File) 可执行文件(Executable) 共享库(Shared ...
  • bin文件和elf文件

    2015-04-22 09:40:00
    ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File) 可执行文件(Executable) 共享库(Shared Object...
  • ELF文件标准里面把系统中采用ELF格式的文件归为以下4类 ELF文件类型 说明 实例 可重定位文件(Relocatable) 这类文件包含了代码数据,可以用来链接成可执行文件或共享目标文件,静态链接库也属于这一类 ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 313
精华内容 125
关键字:

elf文件和bin文件