先来了解一下这两种文件:
elf文件:Executable and Linking Format
这种文件包含的信息:调试信息(就是gcc编译时有使用“-g”选项),注释符等等,这种文件在嵌入式开发的过程中主要是调试用的
二进制镜像文件:
去除了调试信息和注释符之类不必要的信息,这种文件是要下载到Flash上或者是RAM上面运行的,就是可以直接在计算机上面执行的二进制文件
在Linux上用gcc编译的时候:arm-linux-objcopy -O binary -S project_elf project.bin
只要是使用了“binary”选项,对应生成的文件的名字是什么都已经不再重要,如果不信,你可以测试一下,将上一条命令改为:
arm-linux-objcopy -O binary -S project_elf project.abc
生成的文件依旧是镜像文件,一样可以下载到机器上面直接运行(当然这要求你的代码本身就没有问题)
进入今天的主题:内核镜像生成过程经历过哪些文件类型的转换?
一、vmImage-->Image
vmImage:编译出来的最原始的内核文件,4M左右,他们都是elf可执行文件,这种文件只能在具备了Linux操作系统之后才是可以运行的
在Linux内核编译过程中是将vmlinux文件中的调试信息、符号表除去之后生成一个Image的镜像文件<
elf文件:Executable and Linking Format
这种文件包含的信息:调试信息(就是gcc编译时有使用“-g”选项),注释符等等,这种文件在嵌入式开发的过程中主要是调试用的
二进制镜像文件:
去除了调试信息和注释符之类不必要的信息,这种文件是要下载到Flash上或者是RAM上面运行的,就是可以直接在计算机上面执行的二进制文件
在Linux上用gcc编译的时候:arm-linux-objcopy -O binary -S project_elf project.bin
只要是使用了“binary”选项,对应生成的文件的名字是什么都已经不再重要,如果不信,你可以测试一下,将上一条命令改为:
arm-linux-objcopy -O binary -S project_elf project.abc
生成的文件依旧是镜像文件,一样可以下载到机器上面直接运行(当然这要求你的代码本身就没有问题)
进入今天的主题:内核镜像生成过程经历过哪些文件类型的转换?
一、vmImage-->Image
vmImage:编译出来的最原始的内核文件,4M左右,他们都是elf可执行文件,这种文件只能在具备了Linux操作系统之后才是可以运行的
在Linux内核编译过程中是将vmlinux文件中的调试信息、符号表除去之后生成一个Image的镜像文件<