Linux Linker Script
先推荐两个网页:
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的更多相关文章
- Linux Kernel系列三:Kernel编译和链接中的linker script语法详解
先要讲讲这个问题是怎么来的.(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么). 我在编译内核的时候,发现arch/arm/kernel目录下有 ...
- GNU linker script,ld script,GNU链接脚本
https://blog.csdn.net/itxiebo/article/details/50937412 https://blog.csdn.net/itxiebo/article/details ...
- (原创)鸟哥linux学习script shell相关笔记
在使用鸟哥linux进行script shell学习的过程中碰到一些不太明白的知识点,在这里进行一些记录 1. [root@www scripts]# vi sh03.sh #!/bin/bash # ...
- A Sample Linker Script
from:http://www.hertaville.com/a-sample-linker-script.html A sample script file that will work with ...
- 一个改动配置文件的linux shell script
不久以前,以前搜到一篇博客是读取配置文件的,http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html,用到如今,感觉十分方便.感谢作者. ...
- 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 ...
- 链接脚本(Linker Script)用法解析(一) 关键字SECTIONS与MEMORY
1.MEMORY关键字用于描述一个MCU ROM和RAM的内存地址分布(Memory Map),MEMORY中所做的内存描述主要用于SECTIONS中LMA和VMA的定义. 2.SECTIONS关键字 ...
- 链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行
将函数载入到RAM中运行需要以下三个步骤: (1)用编译器命令#pragma section "<section name>" <user functions&g ...
- 链接脚本(Linker Script)用法解析(二) clear_table & copy_table
可执行文件中的.bss段和.data段分别存放未赋初值的全局变量和已赋初值的全局变量,两者的特点分别为: (1).bss段:①无初值,所以不占ROM空间:②运行时存储于RAM:③默认初值为0 (2). ...
随机推荐
- 【Luogu】P3391文艺平衡树(Splay)
题目链接 ddosvoid和自为风月马前卒教了我这道题 他们好强啊 如果我们要反转区间[l,r] 我们首先把l的前驱旋转到根节点 再把r的后继旋转到根节点的右儿子 那么此时根节点的右儿子的左儿子所代表 ...
- HDU——2112HDU Today(SPFA+简单Hash或map+前向星)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 类 this指针 const成员函数 std::string isbn() const {return bookNo;}
转载:http://www.cnblogs.com/little-sjq/p/9fed5450f45316cf35f4b1c17f2f6361.html C++ Primer 第07章 类 7.1.2 ...
- Spring-IOC源码解读2.1-BeanDefinition的Resource定位
Spring通过ResourceLoader来处理得到的Resource.在前面我们知道容器初始化是以refresh()方法为入口的,内部的实现首先准备上下文,然后通过obtainFreshBeanF ...
- Selenium+Chrome+PhantomJS 爬取淘宝
https://github.com/factsbenchmarks/taobao-jingdong 一 简单铺垫 Selenium负责驱动浏览器与python对接 PhantomJS负责渲染解析Ja ...
- asp.net 错误 类型"xxxxx"同时存在于"xxx.dll"和"xxxx.dll" 中
http://walttoney.blog.163.com/blog/static/127685797201051112839328/错误 类型“System.Web.UI.ScriptManager ...
- 【BZOJ3991】寻宝游戏(虚树,DFS序,splay)
题意:求在树中从任意点开始,经过若干个关键点回到原点的最小距离 要求支持在线将某个点设置(取消)为关键点,以及询问答案 n,m<=100000 len[i]<=10^9 思路:显然是一个虚 ...
- 51nod1026 矩阵中不重复的元素 V2
$n \leq 500000,m \leq 500000$的矩阵,第一行第一列是$a^b,2 \leq a,b \leq 500000$,如果一个数是$i^j$那他右边是$i^{j+1}$,下面是${ ...
- Object中的wait,notify,notifyAll基本使用(转)
让线程停止运行/睡眠的方法只有两个:Thread.sleep()或者obj.wait() 记住obj.nofity()并不能停止线程运行,因为notify虽然释放了锁,但依然会急促执行完synchro ...
- c++单元测试指南:使用google test
Reference:http://www.codeproject.com/Articles/811934/Cplusplus-unit-test-start-guide-how-to-set-up-G ...