关于嵌入式设备上的Linux 系统开发
[11-20 15:52:47] 来源:http://www.88dzw.com arm嵌入式 阅读:8998次
文章摘要:工具链由一套用于编译、汇编和链接内核及应用程序的组件组成。 这些组件包括:Binutils ― 用于操作二进制文件的实用程序集合。它们包括诸如 ar 、 as 、 objdump 、 objcopy 这样的实用程序。Gcc― GNU C 编译器。Glibc― 所有用户应用程序都将链接到的 C 库。避免使用任何 C 库函数的内核和其它应用程序可以在没有该库的情况下进行编译。构建工具链建立了一个交叉编译器环境。 本地编译器编译与本机同类的处理器的指令。 交叉编译器运行在某一种处理器上,却可以编译另一种处理器的指令。重头设置交叉编译器工具链可不是一项简单的任务:它包括下载源代码、修补补丁、配置、编译
关于嵌入式设备上的Linux 系统开发,标签:arm嵌入式系统,arm系统,http://www.88dzw.com工具链由一套用于编译、汇编和链接内核及应用程序的组件组成。 这些组件包括:
Binutils ― 用于操作二进制文件的实用程序集合。它们包括诸如 ar 、 as 、 objdump 、 objcopy 这样的实用程序。
Gcc― GNU C 编译器。
Glibc― 所有用户应用程序都将链接到的 C 库。避免使用任何 C 库函数的内核和其它应用程序可以在没有该库的情况下进行编译。
构建工具链建立了一个交叉编译器环境。 本地编译器编译与本机同类的处理器的指令。 交叉编译器运行在某一种处理器上,却可以编译另一种处理器的指令。重头设置交叉编译器工具链可不是一项简单的任务:它包括下载源代码、修补补丁、配置、编译、设置头文件、安装以及很多很多的操作。另外,这样一个彻底的构建过程对内存和硬盘的需求是巨大的。如果没有足够的内存和硬盘空间,那么在构建阶段由于相关性、配置或头文件设置等问题会突然冒出许多问题。
因此能够从因特网上获得已预编译的二进制文件是一件好事(但不太好的一点是,目前它们大多数只限于基于 ARM 的系统,但迟早会改变的)。一些比较流行的已预编译的工具链包括那些来自 Compaq(Familiar Linux )、LART(LART Linux)和 Embedian(基于 Debian 但与它无关)的工具链 ― 所有这些工具链都用于基于 ARM 的平台。
内核设置
Linux 社区正积极地为新硬件添加功能部件和支持、在内核中修正错误并且及时地进行常规改进。这导致大约每 6 个月(或 6 个月不到)就有一个稳定的 Linux 树的新发行版。不同的维护者维护针对特定体系结构的不同内核树和补丁。当为一个项目选择了一个内核时,您需要评估最新发行版的稳定性如何、它是否符合项目要求和硬件平台、从编程角度来看它的舒适程度以及其它难以确定的方面。还有一点也非常重要:找到需要应用于基本内核的所有补丁,以便为特定的体系结构调整内核。
内核布局
内核布局分为特定于体系结构的部分和与体系结构无关的部分。内核中特定于体系结构的部分首先执行,设置硬件寄存器、配置内存映射、执行特定于体系结构的初始化,然后将控制转给内核中与体系结构无关的部分。系统的其余部分在这第二个阶段期间进行初始化。内核树下的目录 arch/ 由不同的子目录组成,每个子目录用于一个不同的体系结构(MIPS、ARM、i386、SPARC、PPC 等)。每一个这样的子目录都包含 kernel/ 和 mm/ 子目录,它们包含特定于体系结构的代码来完成象初始化内存、设置 IRQ、启用高速缓存、设置内核页面表等操作。一旦装入内核并给予其控制,就首先调用这些函数,然后初始化系统的其余部分。
根据可用的系统资源和引导装载程序的功能,内核可以编译成 vmlinux、Image 或 zImage。vmlinux 和 zImage 之间的主要区别在于 vmlinux是实际的(未压缩的)可执行文件,而 zImage是或多或少包含相同信息的自解压压缩文件 ― 只是压缩它以处理(通常是 Intel 强制的)640 KB 引导时间的限制。有关所有这些的权威性解释,请参阅 Linux Magazine的文章“Kernel Configuration: dealing with the unexpected”(请参阅 参考资料)。
内核链接和装入
一旦为目标系统编译了内核后,通过使用引导装载程序(它已经被装入到目标的闪存中),内核就被装入到目标系统的内存(在 DRAM 中或者在闪存中)。通过使用串行、USB 或以太网端口,引导装载程序与主机通信以将内核传送到目标的闪存或 DRAM 中。在将内核完全装入目标后,引导装载程序将控制传递给装入内核的地址。
内核可执行文件由许多链接在一起的对象文件组成。对象文件有许多节,如文本、数据、init 数据、bass 等等。这些对象文件都是由一个称为 链接器脚本的文件链接并装入的。这个链接器脚本的功能是将输入对象文件的各节映射到输出文件中;换句话说,它将所有输入对象文件都链接到单一的可执行文件中,将该可执行文件的各节装入到指定地址处。 vmlinux.lds是存在于 arch/<target>/ 目录中的内核链接器脚本,它负责链接内核的各个节并将它们装入内存中特定偏移量处。典型的 vmlinux.lds 看起来象这样:
清单 2. 典型的 vmlinux.lds 文件
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
《关于嵌入式设备上的Linux 系统开发》相关文章
- › 关于嵌入式设备上的Linux 系统开发
- 在百度中搜索相关文章:关于嵌入式设备上的Linux 系统开发
- 在谷歌中搜索相关文章:关于嵌入式设备上的Linux 系统开发
- 在soso中搜索相关文章:关于嵌入式设备上的Linux 系统开发
- 在搜狗中搜索相关文章:关于嵌入式设备上的Linux 系统开发