• u-boot.lds分析


    OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*指定输出的格式是32bits ARM 小端*/
    /*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")指定输出的格式是32bits ARM 小端。
    OUTPUT_FORMAT原型为 OUTPUT_FORMAT(default, big, little),在链接的时候,如果使用了-EB的命令行参数,则使用这里的big参数指定的字节序,
    如果使用了-EL的命令行参数,则使用这里的little参数指定的字节序,如果没有使用任何命令行参数,则使用这里的default参数指定的字节序。
    由uboot.lds中的定义可见,不管在链接的时候使用了何种命令行参数,输出的目标文件都是使用elf32-littlearm方式的字节序。
    * OUTPUT_ARCH(arm)/*指出输出可执行文件的平台是arm*/ ENTRY(_start)/*指定输出可执行文件的起始代码段是_start,_start在cpu/arm920t/Start.S,
    正的启动运行地址段在编译时在u-boot-1.1.6oard100ask24x0config.mk中由CONFIG_SYSTEXT_BASE宏定义,即TEXT_BASE = 0x33F80000
    查看Makefile中的LDFLAGS变量,发现一条指令LDFLAGS += -Ttext $(TEXT_BASE) 
    其中TEXT_BASE 是在u-boot根目录的board文件夹的对应的开发板名字的子目录下的config.mk文件中定义的0x33F80000*/
    SECTIONS {
    /*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地址,通常都是修改此处来完成*/ .
    = 0x00000000;/*这里的点”.”,是定位器符号(GNU风格的一个典型),把定位器符号置为0x00000000 (若不指定, 则该符号的初始值为0)。
    指定系统启动从偏移地址零处开始。注意这只是个代码地址偏移值,真正的起始地址是由编译时指定的LDFLAGS指定的。实际中改动这个值对输出没有影响
    */ . = ALIGN(4);/*调整定位符号,使其4字节对齐*/ .text :/*.text为段名,这段脚本的意思是将所有输入文件的.text section,
    以及cpu/arm920t/start.o、 board/100ask24x0/boot_init.o 合并成一个.text section,该section的地址由定位器符号的值指定
    */
    { cpu
    /arm920t/start.o (.text) board/100ask24x0/boot_init.o (.text) *(.text) } . = ALIGN(4);/*修改当前定位寄存器,使的下面的.rodata输出节与4bytes对齐,定义.rodata输出节为所有文件的.rodata输入节,*表示通配符,(.rodata*)为所有rodata开头的段。*/ .rodata : { *(.rodata) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); .got : { *(.got) }/*指定got段, got段是uboot自定义的一个段, 非标准段*/ . = .; __u_boot_cmd_start = .;/*把__u_boot_cmd_start赋值为当前位置, 即起始位置*/ .u_boot_cmd : { *(.u_boot_cmd) } /*指定u_boot_cmd段, uboot把所有的uboot命令放在该段.*/ __u_boot_cmd_end = .; /*把__u_boot_cmd_end赋值为当前位置,即结束位置*/ . = ALIGN(4); __bss_start = .; /*把__bss_start赋值为当前位置,即bss段的开始位置*/ .bss : { *(.bss) } _end = .;/*把_end赋值为当前位置,即bss段的结束位置*/ }
    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    vue-loader介绍和单页组件介绍
    webpack的插件 http-webpack-plugin。 webpack-dev-server
    webpack的介绍
    Axios 的基本使用
    如何使用 re模块的, spilt.
    为 JS 的字符串,添加一个 format 的功能。
    另一种分页器 不依赖Paginator模块的方法
    Socket初识
    网络协议
    双下方法补充以及异常处理
  • 原文地址:https://www.cnblogs.com/Rainingday/p/7685811.html
Copyright © 2020-2023  润新知