编译与链接
文章平均质量分 85
Liuqz2009
不念过去不畏将来,全心活在当下!
寒窗二十载,人生再出发!
展开
-
深度探索Linux操作系统 —— Linux图形原理探讨
本质上,谈及图形原理必会涉及渲染和显示两部分。但是显示过程比较简单和直接,而渲染过程要复杂得多,更重要的是,渲染牵扯到操作系统内部的组件更多,因此,本章我们主要讨论渲染过程。我们不想只浮于理论,结合具体的GPU进行讨论更有助于深度理解计算机的图形原理。相比于 NV 及 ATI 的 GPU ,我们选择相对更开放一些的Intel的 GPU 进行讨论。Intel 的 GPU 也在不断的演进,本书写作时主要针对的是用在和Ivy Bridge架构上的。原创 2023-12-14 10:25:48 · 486 阅读 · 0 评论 -
深度探索Linux操作系统 —— 构建桌面环境
计算机领域中的桌面环境()其实是一种比喻的说法,即图形用户界面就像物理书桌一样,其上可以放置文件夹、文档等。桌面最初用来特指个人计算机(PC),但是现在不只个人计算机有图形界面环境,服务器、嵌入式设备等基本都提供桌面环境。桌面环境包括窗口管理器、任务条等基本组件,除了这些基本的组件外,有的桌面环境还提供文件管理器、控制面板等。桌面环境是操作系统中人机交互的关键部分,理解它的基本运作原理,无论是对理解操作系统,还是对开发应用程序,都有极大的帮助。原创 2023-12-13 09:05:47 · 390 阅读 · 0 评论 -
深度探索Linux操作系统 —— 构建根文件系统
在第 3 章中,我们通过手工的方式展示了从零构建根文件系统的过程。在本章中,我们将构建一个相对完善的根文件系统,但是我们不再从零开始,毕竟一旦熟悉了原理后,余下的就是简单的重复了。第 2 章编译工具链时曾通过参数 “” 指定了目标系统的文件安装的目录,后续所有的为目标系统编译的文件全部安装到了这个目录下。因此,在本章中,我们就基于这个目录下的文件构建运行在真实系统上的根文件系统。原创 2023-12-12 14:35:56 · 295 阅读 · 0 评论 -
深度探索Linux操作系统 —— 从内核空间到用户空间
因为某些文件系统的一些特性或者一些修复文件系统的操作,有可能导致文件系统中的文件所在的扇区发生改变。其他模块完全可以存储在文件系统上,通过文件系统的接口访问这些模块,避开了因为如修复文件系统而引起文件所在扇区的变化而带来的风险。为简单起见,我们只讨论典型的从硬盘加载操作系统的过程,所以后续的讨论全部是针对从硬盘启动的情况。嵌入到这个区域也不是必须的,但是因为这个相对安全的原因,GRUB 的开发人员推荐将 GRUB 嵌入到这个区域。在嵌入的映像中包含硬件及文件系统的驱动,因此,一旦嵌入的映像载入内存,原创 2023-12-10 17:33:42 · 230 阅读 · 0 评论 -
深度探索Linux操作系统 —— 构建initramfs
一般而言,桌面、服务器等通用系统都使用initramfs。部分嵌入式系统中,也会使用 initramfs,甚至有的使用 initramfs 作为最终的根文件系统。那么什么是 initramfs 呢?很难用一句话将 initramfs 的作用描述清楚,或许可以将initramfs定位为内核通往根文件系统的桥梁。原创 2023-12-08 09:53:52 · 750 阅读 · 0 评论 -
深度探索Linux操作系统 —— 构建内核
内核的构建系统kbuild基于GNU Make,是一套非常复杂的系统。对于编译内核而言,一条make命令就足够了。因此,构建内核最困难的地方不是编译,而是编译前的配置。配置内核时,通常我们都能找到一些参考。比如,对于桌面系统,可以参考主流发行版的内核配置。但是,这些发行版为了能够在更多的机器上运行,几乎选择了全部的配置选项,编译了全部的驱动,不仅增加了内核的体积,还降低了内核的运行速度。再比如,对于嵌入式系统,BSP。原创 2023-12-07 11:49:46 · 263 阅读 · 0 评论 -
深度探索Linux操作系统 —— 构建工具链
《深度探索Linux系统:系统构建和原理解析》笔记——2.工具链构建 深度探索Linux操作系统 —— 编译过程分析深度探索Linux操作系统 —— 构建工具链 编译过程分为4个阶段,分别是:编译预处理、编译、汇编以及链接。每个阶段都涉及了若干工具,GNU将这些工具分别包含在3个软件包中:Binutils、GCC、Glibc。Binutils:GNU将凡是与二进制文件相关的工具,都包括在软件包Binutils中。Binutils就是 Binary utilities 的简写,其中主要包括生成目标文原创 2023-12-06 10:20:10 · 269 阅读 · 0 评论 -
深度探索Linux操作系统 —— 编译过程分析
在链接时,对于模块中引用的外部符号,链接器将根据符号表进行符号的重定位。如果我们将符号表删除了,那么链接器在链接时将找不到符号的定义,从而不能进行正确的符号解析。比如,代码中以 “.cfi” 开头的伪指令是辅助汇编器创建栈帧(stack frame)信息的。,而该函数体中也只有区区一行代码,但为什么产生的汇编代码如此之长?中的符号表删除,再次进行链接,则链接器将因找不到符号定义而终止链接,如下所示。的缩写,表示符号 foo2、foo2_func 是未定义的。来说是外部符号,没有在任何一个段中,所以在列。原创 2023-12-05 10:28:42 · 283 阅读 · 0 评论 -
Gcc 链接文件
【代码】GCC lds 文件。原创 2023-11-24 10:19:18 · 327 阅读 · 0 评论 -
Linux Section
【代码】section。原创 2023-11-23 18:27:53 · 182 阅读 · 0 评论 -
程序员的自我修养:链接、装载与库阅读
一、在线编码查看查看UTF-8,UTF-16编码汉字字符集编码查询参考字符编码方式对ELF显示的影响原创 2020-11-06 09:49:14 · 726 阅读 · 2 评论 -
ELF文件的动态链接器 原理 设计和代码
为了保持简洁,本文省去了对部分细节的描述,例如weak型变量,和GOT等重定位类型。本文假设读者了解ELF文件格式。代码在附件中。如果论坛不支持附件,可以发邮件给我要1 ELF文件的装载在ELF文件中,使用section和program两种结构描述文件的内容。通常来说,ELF可重定位文件采用section,ELF可执行文件使用program,可重链接文件则两种都用。装载转载 2015-02-03 13:51:54 · 731 阅读 · 0 评论 -
ELF可执行文件格式的理解
ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是构成众多xNIX系统的基础之一,所以作为嵌入式Linux系统乃至内核驱动程序开发转载 2015-02-03 11:32:39 · 1103 阅读 · 0 评论 -
实例分析ELF文件静态链接
1.ELF文件格式概貌readelf -h查看elf文件头部信息可以看到Type值有三种:REL,EXEC,DYN。REL文件是只被编译没有被链接过的文件,其格式属于左边一种,elf header+section1,2,3...+section header table,每个section对应一个section header table entry,section he转载 2015-02-03 10:53:27 · 740 阅读 · 0 评论