摘要:
官网 https://github.com/riscv-collab/riscv-gnu-toolchain 编译器 基于RISC-V交叉编译器包括32bit和64bit两种类型,其中每种类型又包括裸机版本(newlib)和动态链接库版本(linux glibc) newlib ./configur 阅读全文
摘要:
astyle https://astyle.sourceforge.net/ 一篇比较好的中文介绍 https://blog.csdn.net/weixin_39950873/article/details/131635456 总结的一套配置 style_format: @find (dir) \ 阅读全文
摘要:
C语言运行库 任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的函数集合。当然,它还理应包括各种标准库函数的实现。 这样的一个代码集合称之为运行时库(Runtime Library)。而C语言的运行库,即被称为C运行库( 阅读全文
摘要:
链接脚本由一系列语句组成,语句分两种,一种是命令语句,另外一种是赋值语句。链接脚本语法像C语言,主要有如下几点相似之处。 语句之间使用分号";"作为分割符。 原则上讲语句之间都要以";"作为分割符,但是对于命令语句来说也可以使用换行来结束该语句,对于赋值详吾句来说必须以";"结束 表达式与运算符 脚 阅读全文
摘要:
弱符号与强符号 说明 对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号。我们也可以通过GCC的"__attribute__((weak))"来定义任何一个强符号为弱符号。注意,强符号和弱符号都是针对定义来说的,不是针对符号的引用。 比如我们有下面这段程序 阅读全文
摘要:
为了学习使用objdump和size命令,以simple_section.c为例进行分析。 编译环境是x86 ubuntu下的交叉编译arm指令: 首先编译这个文件。 arm-none-eabi-gcc -c simple_section.c 命令解释 objdump 作用:分析二进制文件的内容信息 阅读全文
摘要:
为了学习使用objdump和size命令,以simple_section.c为例进行分析。 编译环境是x86 ubuntu,首先编译这个文件。 gcc -c simple_section.c 命令解释 objdump 作用:分析二进制文件的内容信息 objdump --help Usage: obj 阅读全文
摘要:
linux 资料 对i2c和smbus的协议进行了总结提炼 https://docs.kernel.org/i2c/index.html i2c和smbus的时钟和电气特性差异 https://www.totalphase.com/support/articles/200349186-differe 阅读全文
摘要:
gnu解释 https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html 从最终可执行镜像中删除未使用的function和data,是由链接器来完成的。需要以下几个步骤 function和data编译成单独的section,使用编译 阅读全文
摘要:
编译基础概念 为了描述链接器脚本语言,我们需要定义一些基本概念和词汇。 链接器干的主要事情就是把输入文件整合成一个输出文件。那么输入是什么?输出是什么?怎么整合?整合的是什么信息? 输入和输出文件都是object文件格式。它们都称为目标文件。输出文件又称为可执行文件。它们的内容格式类似,都有很多的s 阅读全文