先推荐两个网页:

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. 【Luogu】P1972HH的项链(链表+树状数组)

    题目链接 难题,所以会讲得细一些. 首先我们想如何统计区间[l,r]内不同贝壳的个数. 第一个思路就是线段树/树状数组,query(1,r)-query(1,l-1)对不对? 然而这样是不对的. 然后 ...

  2. Docker镜像分层技术

    Docker镜像管理 1.镜像分层技术 2.创建镜像 3.下载镜像到主机 4.删除镜像 5.上传镜像到registry docker镜像: 早在集装箱没有出现的时候,码头上还有许多搬运的工人在搬运货物 ...

  3. 【2018.10.4】CXM笔记(图论)

    .1.给你一个无向图,问这张图的最小割是否唯一.输出yes或no. 跑一边最大流,那么最小割的那些正向边一定满流(也就是过不了了).所以在残余网络上,从S到T和从T到S各广搜找一组最小割的边(即正向边 ...

  4. GFS, HDFS, Blob File System架构对比

    分布式文件系统很多,包括GFS,HDFS,淘宝开源的TFS,Tencent用于相册存储的TFS (Tencent FS,为了便于区别,后续称为QFS),以及Facebook Haystack.其中,T ...

  5. 栅格网络流(cogs 750)

    [问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决,于是他想尝试一个简单点的:栅格网络中的最大流问题,这个虽说简单了一点,但对 Bob 来说依旧太难,现在他有个麻烦需要你帮忙:给你一 ...

  6. Mysql 实现篮球比赛赛程中两支队伍的查询

    表结构如下: 查询两支队伍的比赛情况,sql语句如下: SELECT t1.team_name,g.team1_score,g.team2_score,t2.team_name,g.gametime ...

  7. Codeforces963D. Frequency of String

    $n \leq 100000$的一文本串,给$m \leq 100000$个询问,每次问一小串在文本串的哪一个最短的子串里出现指定次数.注意,询问串互不相同,且总长度$\leq 100000$. 比赛 ...

  8. 关于代码调试de那些事

    原文出处:http://www.wklken.me/posts/2014/11/23/how-to-debug.html 关于代码调试de那些事 1.你得明白你在做什么, 保持清醒 2.想清楚了再写代 ...

  9. Yii 之控制器创建使用

    在根目录下的controllers目录下创建控制器HelloController.php: <?php namespace app\controllers; use yii\web\Contro ...

  10. docker-nginx-标记一下

    拉取nginx镜像 然后启动容器: docker run -p : --name mynginx -d -v $PWD/nginx.conf:/etc/nginx/conf.d/default.con ...