以下基于宋宝华老师的《Linux设备驱动开发详解》
GNU
通常使用GNU工具链编译Bootloader
、内核和应用程序
GCC
:https://gcc.gnu.org/
GDB
:https://www.gnu.org/software/gdb
glibc
:https://www.gnu.org/software/libc
Blinutils
: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的浮点处理可以采用如下