先推荐两个网页:

http://blog.csdn.net/muyuyuzhong/article/details/7755291

http://www.cnblogs.com/liulipeng/archive/2013/10/14/3368938.html

链接脚本的核心部分Section定义如下:

 SECTIONS {
...
secname start BLOCK(align) (NOLOAD) : AT ( ldadr )
{ contents } >region :phdr =fill
...
}

secname 定义段名称。

start 指定运行地址。

BLOCK(align) 指定块对齐。比如前一个段从0x3000_000到0x3000_03f1,此处标记ALIGN(4),表示此处最小占用4Byte,即使下一个段是紧挨这个段,那么下一个段的起始地址(也就是运行地址)为0x3000_03f4。看内核的链接脚本vmlinux.lds(arch/arm/kernel/vmlinux.lds)中会出现很多ALIGN(1<<12)或者ALIGN(8192)等,指定下一段的地址地址原理也是一样的。

NOLOAD 告诉加载器,程序运行时不加载这一段。这个字段告诉我一个重要信息,有加载器这个东西。程序从FLASH搬到SDRAM中运行时,是用到了加载器这个东西。

AT(ldaddr):指定这个段在编译出来的印象文件中的地址--加载地址。在推荐的第一个网页中,cnblog网友关于加载地址和运行地址的解释很不好理解,他将加载地址理解为存储在FLASH中的地址。但问题是,NANDFLASH是挂在CPU总线系统之上的,怎么确定NANDFLASH的地址呢,只能说某段相对整个可执行文件起点的相对位置。在韦东山的书中,关于这点的解释是“通过这个选项,可以控制各段分别保存输出文件中不同的位置,便于把文件保存在单板上:A段放在A处、B段放在B处,运行前再把A、B端分别读出来组装成一个完整的执行程序。”这也是看得很模糊,先留着,以后再表。

关于链接脚本的例子,参见cnblog网友的例子。

两个重要的工具指令: arm-linux-objdump -h vmlinux > vmlinux.txt  输出linux内核段信息到vmlinux.txt文本中。

arm-linux-objdump -f vmlinux > sec_symbol.txt输出内核段信息和符号到sec_symbol.txt文本中。

Linux Linker Script的更多相关文章

  1. Linux Kernel系列三:Kernel编译和链接中的linker script语法详解

    先要讲讲这个问题是怎么来的.(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么). 我在编译内核的时候,发现arch/arm/kernel目录下有 ...

  2. GNU linker script,ld script,GNU链接脚本

    https://blog.csdn.net/itxiebo/article/details/50937412 https://blog.csdn.net/itxiebo/article/details ...

  3. (原创)鸟哥linux学习script shell相关笔记

    在使用鸟哥linux进行script shell学习的过程中碰到一些不太明白的知识点,在这里进行一些记录 1. [root@www scripts]# vi sh03.sh #!/bin/bash # ...

  4. A Sample Linker Script

    from:http://www.hertaville.com/a-sample-linker-script.html A sample script file that will work with ...

  5. 一个改动配置文件的linux shell script

    不久以前,以前搜到一篇博客是读取配置文件的,http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html,用到如今,感觉十分方便.感谢作者. ...

  6. openMSP430之Custom linker script

    The use of the -mmcu switch is of course NOT mandatory. It is simply a convenient way to use the pre ...

  7. 链接脚本(Linker Script)用法解析(一) 关键字SECTIONS与MEMORY

    1.MEMORY关键字用于描述一个MCU ROM和RAM的内存地址分布(Memory Map),MEMORY中所做的内存描述主要用于SECTIONS中LMA和VMA的定义. 2.SECTIONS关键字 ...

  8. 链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行

    将函数载入到RAM中运行需要以下三个步骤: (1)用编译器命令#pragma section "<section name>" <user functions&g ...

  9. 链接脚本(Linker Script)用法解析(二) clear_table & copy_table

    可执行文件中的.bss段和.data段分别存放未赋初值的全局变量和已赋初值的全局变量,两者的特点分别为: (1).bss段:①无初值,所以不占ROM空间:②运行时存储于RAM:③默认初值为0 (2). ...

随机推荐

  1. 【数位DP】HDU 6156 Palindrome Function

    http://acm.hdu.edu.cn/showproblem.php?pid=6156 [AC] #include<bits/stdc++.h> using namespace st ...

  2. 【2018.10.20】noip模拟赛Day3 二阶和

    今年BJ省选某题的弱化版…… 这看起来就没那么难了,有几种方法维护,这里提两种. 第一种(傻逼的我写的) 维护 一维&二维前缀和. 对于一个长度为$m$的序列$b_1,b_2,...,b_m$ ...

  3. 洛谷试炼场 提高模板-nlogn数据结构

    树状数组-区间求和 P3374 [模板]树状数组 1 /*by SilverN*/ #include<algorithm> #include<iostream> #includ ...

  4. Perl语言入门--1--perl的包安装

    A.  手工安装 从CPAN下载了DBI模块1.13版的压缩文件DBI-1.13.tar.gz.假设放在/usr/local/src(一般需要编译安装的软件,都放在此目录下安装). # cd /usr ...

  5. ActivityGroup中监听返回按键

    如果你想使用ActivityGroup来统一管理Activity的话,当然首先这是一种很好的方法,但是如果你想在ActivityGroup里面拦截返回按键来进行统一管理的话,直接覆写onKeyDown ...

  6. Spring基于Setter函数的依赖注入(DI)

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-setter-based-dependenc ...

  7. centos安装配置nginx,ssl生产和配置教程

    [一]nginx安装nginx安装带ssl扩展: cd /usr/local/src #进入用户目录wget http://nginx.org/download/nginx-1.15.0.tar.gz ...

  8. 最新的hustoj搭建姿势

    试着照某度上的教程搭了一下hustoj,出了一些问题,之前的搭建姿势很多已经不适用了,重新整理一下思路,方法二简单粗暴: 方法一: 首先虚拟机安装了Elementory OS (基于Ubuntu的衍生 ...

  9. [WASM Rust] Create and Publish a NPM Package Containing Rust Generated WebAssembly using wasm-pack

    wasm-pack is a tool that seeks to be a one-stop shop for building and working with Rust generated We ...

  10. C语言宏定义技巧——多次包括头文件内容不同

    1.  头文件定义例如以下: /* declears in "funcs.h" */ FUNC_1(ID_FUN1_001) FUNC_1(ID_FUN1_002) FUNC_2( ...