zoukankan      html  css  js  c++  java
  • Linux Linker Script

    先推荐两个网页:

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

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

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

    1 SECTIONS {  
    2     ...  
    3     secname start BLOCK(align) (NOLOAD) : AT ( ldadr )  
    4       { contents } >region :phdr =fill  
    5     ...  
    6     }

         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文本中。

  • 相关阅读:
    Flask中的CBV以及正则表达式
    Flask中的渲染变量
    Flask中的request和response
    Flask中的cookie和session
    Flask的请求扩展
    [NOIP2000] 提高组 洛谷P1018 乘积最大
    [NOIP2000] 提高组 洛谷P1017 进制转换
    洛谷P2563 [AHOI2001]质数和分解
    巴蜀4384 -- 【模拟试题】作诗(Poetize)
    [NOIP1999] 提高组 洛谷P1016 旅行家的预算
  • 原文地址:https://www.cnblogs.com/kanite/p/4171185.html
Copyright © 2011-2022 走看看