DIY 自己的GNU 交叉工具链(i386-arm) 嵌入式设备由于不具备一定的处理器能力和存储空间,程序开发一般用PC 来完成,然后将可执行文件下载到嵌入式系统中运行
这是目前嵌入式程序开发的不二选择——Host/target 模式
但这引发了一个问题:由于Host 和Target 的处理器体系结构不同,我们不能直接用PC 上既有的程序开发工具,必须使用跨平台开发工具,即在Host 上生成能在Target 上运行格式的目标文件
与在PC 上进行程序开发类似,嵌入式系统开发也需要编译器、链接器、解释程序等
本文讨论 GNU 跨平台开发工具链的建立,包括: ld, gas, ar, gcc, glibc
自己建立交叉编译环境是一件很头疼的事(处理版本的依赖性, 漫长的编译过程
),如果你不想经历这样的痛苦,可以选择网上编译好了的工具链进行安装
如果你用的是Debian/Ubuntu 的发行版, 推荐使用Emdebian
如果使用uClinux, 也可安装 arm-elf-tools
关于Emdebian 和arm-elf-tools 的更多介绍, 情看本 blog 的这篇文章
前提: 建立工作目录 在为目标板开发及定制软件的过程中, 最好将项目要用到的代码, 文档, 及生成的目标文件按一定的组织放在统一的, 结构化的目录中
这里采用《构建嵌入式Linux 系统》中推荐的项目目录安排: 目录 内容 bootldr 目标板的引导加载程序 build-tools 建立跨平台开发工具链所需要用到的包和目录 debug 调试工具及相关包 doc 项目相关的文档 images 使用在目标板上的引导加载程序和内核的二进制映像, 以及根文件系统 kernel 将在目标板上进行评估的各个内核版本 rootfs 目标板的内核在运行时看到的根文件系统 sysapps 目标板需要用到