一、嵌入式Linux的4个基本要素:
1、工具链(toolchain)
2、引导加载程序()bootloader
3、内核(kernel)
4、根文件系统(root filesystem)

一、工具链

GNU工具链三个主要组件组成:Binutils,GNU编译器集合(GCC),C库

CPU架构,工具链必须根据目标CPU的能力来构建:
1、CPU架构,
2、大端操作或者小端操作,
3、浮点支持,
4、应用程序二进制接口(ABI):函数调用之间传递参数的调用条约

C库的选择
glibc:标准GNU C库
musl libc:嵌入式C库,小型
uclibc-ng:uclinux才使用

构建工具链的个人或组织:
1、SOC或电路板供应商。
2、linaro组织。
3、第三方Linux工具供应商。Mentor Graphics、TimeSYS 或Monta Vista
4、基于嵌入式构建工具之一生成的二进制SDK,yocto
5、基于桌面Linux发行版的跨平台工具包,Debain发行版具有ARM MIPIS目标的交叉编译包。

构建工具链的整个过程
Cross Linux From Scratch
https://trac.clfs.org

使用crosstool-NG构建工具链

sysroot,库和头文件
工具链sysroot是一个目录,其中包含库,头文件和其他配置文件的子目录。该目录可以在通过--with-sysroot=配置工具链时进行设置,
也可以在--sysroot=命令行中进行设置。
可以使用--print-sysroot查看默认sysroot的位置:
$arm-linux-gcc -print-sysroot

C库的组件
C库不是单个库文件,它由共同实现POSIX API的4个主要部分组成:
libc:可移植的操作系统接口函数
libm:数学函数
libpthread:pthread开头的POSIX的线程函数
librt:POSIX的试试扩展,共享内存和异步I/O。