Linux链接脚本:理解符号赋值语句与输入section描述

需积分: 45 50 下载量 132 浏览量 更新于2024-08-06 收藏 534KB PDF 举报
本文主要讨论了Linux下链接器脚本中的重要概念和技术,特别是针对Rockchip RK3399Pro芯片的datasheet中的链接配置。文章首先回顾了符号赋值语句,这是一种在链接脚本中用于指定输入文件中哪些section应被包含在输出文件中的指令。在输入section的描述部分,作者解释了基本的语法结构,例如`FILENAME([EXCLUDE_FILE ... SECTION ...])`,其中FILENAME可以是具体文件名或模式,SECTION是特定section名或模式。 链接器通过输入section描述来决定如何组织和组合输入文件的section,比如`*(.text)`表示所有`.text` section,而`*(.text .data)`则指定了多个文件的`.text`和`.data` section的顺序。此外,文章还提到链接器会根据输入命令行和`INPUT`指令查找文件,并支持文件名中的通配符,如*、?和[CHARS]。 在链接配置文件中,关键的概念包括输入文件、输出文件、目标文件的section及其属性(loadable和allocatable)、以及VMA和LMA这些地址概念。链接器脚本不仅规定section在输出文件中的位置,还能影响输出文件的地址空间布局。通过`-T`选项,用户可以选择自定义链接脚本来进一步定制链接过程。 值得注意的是,这里的链接器主要指的是静态链接器,且讨论的内容适用于GCC等工具链。理解这些链接规则对于开发基于Rockchip RK3399Pro的嵌入式系统或者处理类似架构的程序至关重要,因为正确的链接配置能够确保代码的正确加载和内存管理。 总结来说,本文的核心知识点包括: 1. 符号赋值语句在链接脚本中的应用。 2. 输入section的描述语法和作用。 3. 链接器查找文件和处理通配符的机制。 4. 目标文件和输出section的基本属性,如loadable和allocatable。 5. 使用链接脚本控制输出文件的地址空间布局。 6. 如何通过链接选项调整链接行为,如自定义链接脚本和链接器的默认行为。 掌握这些知识对于编写和优化Linux下的链接脚本,尤其是处理嵌入式系统开发,有着重要的实践指导意义。

分析 x Symbol: SND_SOC_ROCKCHIP_I2S [=n] x x Type : tristate x x Prompt: Rockchip I2S Device Driver x x Location: x x -> Device Drivers x x -> Sound card support (SOUND [=y]) x x -> Advanced Linux Sound Architecture (SND [=y]) x x (6) -> ALSA for SoC audio support (SND_SOC [=y]) x x -> ASoC support for Rockchip (SND_SOC_ROCKCHIP [=n]) x x Defined at sound/soc/rockchip/Kconfig:18 x x Depends on: SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && CLKDEV_LOOKUP [=y] && SND_SOC_ROCKCHIP [=n] x x Selects: SND_SOC_GENERIC_DMAENGINE_PCM [=n] x x Selected by [n]: x x - SND_SOC_ROCKCHIP_MAX98090 [=n] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SND_SOC_ROCKCHIP [=n] && I2C [=y] && GPIOLIB [=y] && CLKDEV_LOOKUP [=y] x x - SND_SOC_ROCKCHIP_RT5645 [=n] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SND_SOC_ROCKCHIP [=n] && I2C [=y] && GPIOLIB [=y] && CLKDEV_LOOKUP [=y] x x - SND_SOC_ROCKCHIP_RT5651 [=n] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SND_SOC_ROCKCHIP [=n] && I2C [=y] && GPIOLIB [=y] && CLKDEV_LOOKUP [=y] x x - SND_SOC_ROCKCHIP_RT5651_RK628 [=n] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SND_SOC_ROCKCHIP [=n] && I2C [=y] && GPIOLIB [=y] && CLKDEV_LOOKUP [=y] x x - SND_SOC_RK3288_HDMI_ANALOG [=n] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SND_SOC_ROCKCHIP [=n] && I2C [=y] && GPIOLIB [=y] && CLKDEV_LOOKUP [=y] x x - SND_SOC_RK3399_GRU_SOUND [=n] && SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && SND_SOC_ROCKCHIP [=n] && I2C [=y] && GPIOLIB [=y] && CLKDEV_LOOKUP [=y] && SPI [=y] x

2023-07-20 上传