嵌入式Linux 移植要点:
1.搭建交叉编译环境
2.bootloader的选择与移植(uboot)
3.kernel的配置、编译、移植、调试
4.制作根文件系统
1.搭建交叉编译环境
什么是交叉编译:(Kernel、Uboot、文件系统、用户app)代码在PC上开发、编译、链接出的可执行二进制文件下载(网络等多种方式)到开发板运行。
为什么需要交叉编译:
- 嵌入式系统资源有限,没有能力自己编译自己的工程再运行
- 嵌入式系统MCU体系结构和指令集不同,不同编译器生成的可执行文件需要在相应构架的设备上运行。编译器一般运行在PC机上(X86构架),需要编译出适合arm构架的程序
交叉编译环境:PC机Linux虚拟机,gnu工具集,gcc
GNU工具集:
- 编译工具:gcc
- 调试工具:gdb
- 软件工程工具:多人协助,make、CVS、Subversion
- 其他工具:用于把多个目标文件链接成可执行文件的链接器,或者格式转换工具(bin,erf等格式)
GCC编译器:
- 全称GNU GCC,可为多种硬件平台编译出可执行程序,效率高
- 是一个交叉平台编译器,适合在嵌入式领域开发编译
gcc所支持的后缀名解释 | |
.c | C源程序 |
.C/.cc/.cxx | C++源程序 |
.m | Objective-C源程序 |
.i | 已经过预处理的C源程序(预处理:头文件包含,宏展开,条件编译。) |
.ii | 已经过预处理的C++源程序 |
.s/S | 汇编语言源程序 |
.h | 头文件 |
.o | 目标文件(二进制文件,但不可运行,需要链接后才可运行) |
.a/.so | 静态库/共享库文件 |
GCC的编译流程:
1.预处理(Pre-Processing):
将.c文件预处理成为.i文件,是将头文件包含进来,将宏展开,进行条件编译。结果还是C的代码
2.编译(Compiling):
生成汇编文件
3.汇编(Assembling)
将汇编文件转为目标文件(是二进制文件,但不可运行)
4.链接(Linking):
将所有目标文件链接为可执行文件,
定位(将代码段、数据段放到不同的位置),
链接一些库文件
参考资料: