Linux原型系统选择与工具准备
最终的嵌入式Linux系统来源都是完整的Linux操作系统。在开发时,对原型Linux系统的选择及前期开发工具的准备对整个开发的效率及成果都有很大影响。
选择原型系统时,首先要从体系架构及设备兼容性进行分析,先找出满足功能要求的版本及补丁,然后根据硬件实际性能及存储容量决定最终系统版本。
前期工具准备包括2类工具的选择:开发用工具和系统工具。前者只在开发过程中起作用,多为宿主机平台工具。后者则是在最终的嵌入式Linux系统中使用,多为目标平台工具。
Linux交叉开发环境建立
Linux交叉开发环境基本都是由GNU开源工具链搭建,工具链同样存在版本选择的问题。针对所开发的目标平台选择相应编译器及调试器等,同时对应原型Linux的版本、工具链版本需与其配合以保证工具可正常使用,具体版本相关性请参考 kernel.org及GNU给出的说明文档。
将原型Linux及交叉开发环境都保存于宿主机上,使用串口或网口等连接设备将宿主机与目标机连接在一起,安装好宿主机和目标机的通讯工具及服务;安装TFTP服务器,为目标机从主机上下载文件提供服务;启动Telnet服务;安装串口通讯工具minicom,一个交叉编译环境就基本建立完成了。然后即可在宿主机上用交叉工具链对原型Linux及其他目标机用软件进行交叉编译、调试,并使用通讯工具将编译好的目标代码传至目标机运行。
内核及根文件系统开发
一个完整的嵌入式Linux系统包括两大部分:内核及根文件系统。
内核
内核开发移植完整过程包括:编写针对特定处理器的任务调度、中断处理等代码;编写针对特定硬件平台的引导和初始化代码;编写针对特定外设的设备驱动程序代码;交叉编译内核。
前两个步骤在开源社区中基本能找到现成可用资源,第三个步骤目前也有很多典型设备驱动代码可供使用,因此现今的开发过程已大大简化,所做工作基本是对现有资源的整理及补充,如需编写代码,则可能涉及到汇编工具及C代码编写工具的使用。
最后一步交叉编译生成按照需求配置好的内核镜像。完成这一任务的工具是安装于宿主机上的GNU交叉工具链,其具体工具主要是gcc编译器、ld链接器的目标平台架构版本。
首先安装对应目标平台的工具链,将工具链的二进制程序路径输出为PATH环境变量,将其依赖的库文件路径输出为LD_LIBRARY_PATH变量,然后执行内核配置命令make menuconfig,根据实际系统需求对内核模块进行裁剪配置并保存配置文件;然后执行编译命令make bzImage进行交叉编译生成所需内核镜像,执行编译模块命令生成内核所需模块。
根文件系统
对于根文件系统的开发,重点在于针对不同应用交叉编译相应库文件,并搭配适当系统命令和应用程序,完成整个系统的运作支持。一个最基本的根文件系统一般包括以下几个部分:
系统命令:完成如文件查看、挂载、系统进程查看等基本工作的Linux命令集合。在对系统体积要求较高的嵌入式Linux系统开发中,最常用的是busybox工具。
配置文件:保存系统服务,应用程序等的配置信息。一般可参考完整Linux系统上的配置文件。
设备文件:系统中使用的设备,以文件形式存放于/dev下,一般装有udev工具即可动态生成设备文件。
库:内核模块、应用程序等各程序运行所需库文件。具体库文件包含的内容应根据实际运行的程序来决定,可用ldd命令辅助查找程序所需库。
应用程序:完成系统应用所需的应用程序。如手持终端中常用的QT图形程序。
程序开发及GDB调试模式
嵌入式上层应用软件的开发及调试可使用本地调试和远程调试两种方法。
本地调试:将所需的调试器移植到目标系统中,然后直接在目标机上运行调试器来调试应用程序。
远程调试:移植一个调试服务器到目标系统中,并通过它与宿主机上的调试器共同完成应用程序的调试。在嵌入式Linux系统开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb,在建立远程调试硬件层服务的基础上进行调试。
整体系统测试
对整个系统的测试主要分为功能测试和性能测试两部分。
功能测试:测试系统在完成指定应用时的正确性、操控性等指标。具体测试标准视应用而定,由测试人员执行应用程序完成测试。
性能测试:测试系统运行时的稳定性、效率等指标。具体测试工具可使用LTP、LMBench等行业通用开源测试套件,测试结果标准也可参照上述工具给出,由测试人员执行测试用例脚本等方式完成测试。
声明:LUPA开源社区刊登此文只为传递信息,并不表示赞同或者反对。




