可执行文件格式

Bin

flash上的需要直接运行的只能是raw binary格式的文件,BIN是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像,可以被CPU 运行的二进制文件。比如uboot

Elf

executable and link format,文件里面包含了符号表,汇编等;ELF格式是在有操作系统时,操作系统会根据ELF解析出代码、数据等等,最终仍是以BIN运行。由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行和GDB 调试。执行ELF程序则需要一个ELF Loader,比如kernel

Uboot

编译完成会生成elf格式的u-boot;通过OBJCOPY生成二进制文件uboot.bin;经过MKIMAGE生成uboot.img

LD      u-boot

OBJCOPY u-boot.srec

OBJCOPY u-boot-nodtb.bin

SYM     u-boot.sym

COPY    u-boot.bin

MKIMAGE u-boot.img

CFGCHK  u-boot.cfg

Kernel

vmlinux是Linux内核编译出来的原始的elf格式de 内核文件,未做压缩处理。该映像可用于定位内核问题,比如内核出现oops;可通过反汇编vmlinux判断出现问题的位置发生了社么操作;但不能直接引导Linux系统启动,会通过OBJCOPY生成二进制文件Image再通过gzipobjcopy生成zImage

LD      vmlinux

SORTEX  vmlinux

SYSMAP  System.map

OBJCOPY arch/arm/boot/Image

Kernel: arch/arm/boot/Image is ready

GZIP    arch/arm/boot/compressed/piggy_data

AS      arch/arm/boot/compressed/piggy.o

LD      arch/arm/boot/compressed/vmlinux

OBJCOPY arch/arm/boot/zImage

Kernel: arch/arm/boot/zImage is ready

用户态程序

上面说到了ubootkernel的格式问题,我们接着说下linux的应用程序的主要格式elf;中间目标文件".o"以及静态库".a"和动态链接库".so"文件都属于ELF文件;一般我们在shell中来执行我们的应用程序,比如ls,cat或者我们刚编译的测试程序,其原理就是先用fork建立子进程,子进程再通过execve系统调用运行我们的程序

posted on 2022-04-26 21:56  lzd626  阅读(400)  评论(0编辑  收藏  举报