以下基于宋宝华老师的《Linux设备驱动开发详解》
GNU
通常使用GNU工具链编译Bootloader、内核和应用程序
GCC:https://gcc.gnu.org/GDB:https://www.gnu.org/software/gdbglibc:https://www.gnu.org/software/libcBlinutils:https://www.gnu.org/software/binutils
建立交叉工具链
一般通过类似crosstool-ng这样的工具来做crosstool-ng:http://www.crosstool-ng.org/
用法
下载编译并安装后,运行ct-ng menuconfig进行配置即可
第三方免费开源、已编译好的
http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/:针对ARM、MIPS、高通Hexagon、Altera Nios II、Intel、AMD64等处理器的工具链http://www.linaro.org/downloads:针对ARM的工具链(趋向)
一些包含
一个ARM Linux工具链包含arm-linux-gnueabihf-gcc(后续工具省略了前缀)、strip、gcc、objeump、ld、gprof、nm、readelf、addr2line等
strip:可以删除可执行文件中的符号表和调试信息等来实现缩减程序体积的目的gprof:在编译过程中在函数入口处插入计数器以收集每个函数的被调用情况和被调用次数,检查程序计数器并在分析时找出与程序计数器对应的函数来统计函数的占用时间objeump:反汇编工具nm:显示关于对象文件、可执行文件以及对象文件库里的符号细腻些- 前缀中的
hf表示该工具链是完全的硬浮点- Linux的浮点处理可以采用如下
- 具体的
ABI(应用程序二进制接口):通过-mfloat-abi=指定。 - 完全软浮点(soft):整型寄存器
- 与软浮点兼容,但是使用FPU硬件的softfp(softfp):整型寄存器只用来传递函数参数
- 完全硬浮点(hard):直接使用FPU的寄存器传递参数
- 一个含有浮点运算的程序,如果使用
hard ABI会比softfp ABI快
- 具体的
- Linux的浮点处理可以采用如下
本文介绍了如何使用GNU工具链编译Bootloader、内核和应用程序,包括使用crosstool-ng创建交叉工具链,推荐了第三方如SourceryCodebench和Linaro提供的预编译版本,特别关注了ARM架构的浮点处理ABI选项。
1189

被折叠的 条评论
为什么被折叠?



