嵌入式系统启动
BL0(bootloader)将 u-boot 加载到开发板内存,然后 u-boot 加载系统镜像、设备树和根文件系统。最后,开发板上电后,系统启动并进入命令行界面。
u-boot 中已经实现网络功能,在开发板和主机构成的局域网中,可以使用一些命令行(例如:ping,tftp,nfs)。其中,tftp是一种网络传输协议,可以在主机和开发板之间互传文件;nfs是网络文件系统,能够在不同主机间共享文件夹。
之前在公司工作时,每次将可执行文件在主机上编译好后,都采用手动拔插SD卡的方式进行文件传输。与这种方法相比就好像是在坦克前面放了辆玩具车——降维打击。
因为有以上这些功能,系统镜像、设备树和根文件系统,可以放在开发板的EMMC中,也可以放在主机指定的文件夹下面。如果将根文件系统通过nfs在Host与Target之间进行共享,通过交叉编译工具链在Host共享根文件系统中编译,因为是共享目录,编译产物不需再次copy,直接就能够在Target对应目录下使用。
交叉编译工具链
通过指定的交叉编译工具链,可以编译出适用于不同平台的可执行文件(ELF)或二进制文件(机器码)。
常用命令:
file:查看文件格式。
nm:查看带符号可执行文件中的函数映射(函数名->地址)。
objdum:反汇编,将机器码转换成汇编代码。
objcopy:将 ELF 文件转成机器码 .bin 文件(裸机可执行)。
strip:去除 ELF 文件中的地址映射表。作用:1. 减小文件体积 2. 软件安全
内核镜像 uImage
包含系统架构、进程管理、驱动管理、文件系统、内存管理和网络相关内容。
设备树 deviceTree
设备相关信息包含在设备树中,内核加载时,通过读取设备树与驱动逻辑代码相结合,启动系统。
根文件系统 rootFileSystem
rfs中放置一些常用的系统命令(如:ls,cd等)、设备信息 ( /dev)和 配置文件(/etc)。系统命令通过软连接到 busybox 来实现。