Skip to content

Bytemem Blog

  • Home
  • Kernel Developers
  • Contact
  • About

Bytemem Blog

Stuffs about linux

GCC目标三元组(Target Triplet)

07/06/2020 by changbin

如果只开发x86平台的软件,通常不需要关心Target Triplet,但是对于嵌入式开发,必须要理解什么是Target Triplet,从而才能选择正确版本的GCC交差编译器。


Target Triplet是Autoconf的概念,用于描述最终代码运行的目标平台。GCC本身也采用Autoconf构建,因此最终生成的编译器命令也是这种方式命名,比如x86_64-unknown-linux-gnu,arm-none-eabi,arm-none-linux-eabi,aarch64-linux-gnu,riscv64-unknown-linux-gnu,riscv64-unknown-elf等。通过命令gcc -dumpmachine可以查看。

Target triplet由三个字段组成,格式如下:

          CPU-vendor-operatingsystem

其中:
  • machine:目标CPU family/model,比如riscv64、x86_64、aarch64。
  • vendor:一般32-bit x86是pc,其他的是’unknown’或’none’。vendor字段不重要,有时会省略。
  • operatingsystem:目标操作系统,其差异在于编译器提供的用户态环境,如标准头文件和运行时库。其格式为[KERNEL]-OS,KERNEL字段可省略,比如linux-gnu,表示目标平台为linux内核的gnu系统。有时operatingsystem字段为elf,表示生成的代码与OS无关,适用于开发bare metal的软件,如BootLoader、kernel。ARM平台该字段会使用目标ABI名称,比如eabi表示采用EABI并且和OS无关(即适用于bare metal开发),linux-gnueabi表示采用EABI并且是基于Linux内核的gnu系统。

由于operatingsystem可能包含两个子字段,而vendor又可省略,所以解读Target Triplet时要注意区分。

在编译GCC时,configure的–target=参数接受一个目标平台的配置,不同的配置会影响编译器的行为和生成的目标代码。所有的target config列在contrib/config-list.mk中,比如riscv64-unknown-linux-gnu。

参考链接:
https://wiki.osdev.org/Target_Triplet
https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html

Post Views: 629

Post navigation

Previous Post:

什么是匿名内存

Next Post:

Rust语言学习材料

发表评论 取消回复

电子邮件地址不会被公开。

近期文章

  • 关于编程语言的思考
  • Rust语言学习材料
  • GCC目标三元组(Target Triplet)
  • 什么是匿名内存
  • 操作系统架构概述

近期评论

  • 12 USA America Proud Rubber Bracelets July 4th Red White Blue Patriotic Girl发表在《什么是匿名内存》
  • generic cialis no prescription发表在《Ubuntu各版本国内阿里云源列表》
  • buy cialis online us发表在《Ubuntu各版本国内阿里云源列表》

文章归档

  • 2020年八月
  • 2020年七月
  • 2020年六月
  • 2020年五月
  • 2020年二月
  • 2019年七月
  • 2019年六月
  • 2019年五月

分类目录

  • DevTools
  • Linux Kernel
  • 未分类

标签

ftrace gdb NMI中断 PCIe rust Ubuntu X86 内核 阿里云

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org
© 2021 Bytemem Blog | WordPress Theme by Superbthemes