当前位置: 首页 > wzjs >正文

兰州公司网站制作上海免费注册公司官网

兰州公司网站制作,上海免费注册公司官网,如何利用网站做淘宝客,深圳做网站 肖先生bl31.ld.S分析 通过链接脚本 bl31.ld.S,可得知整个镜像的内存布局: 镜像起始运行地址- BL31_BASE;镜像入口函数-bl31_entrypoint(); 前言 芯片所有的软硬件资源都能够在 NXP 官网找到,本文档也是对 NXP 开源 LSDK …

bl31.ld.S分析

通过链接脚本 bl31.ld.S,可得知整个镜像的内存布局:

  • 镜像起始运行地址- BL31_BASE
  • 镜像入口函数-bl31_entrypoint()

前言

芯片所有的软硬件资源都能够在 NXP 官网找到,本文档也是对 NXP 开源 LSDK 代码工程的学习与分析。
官网链接如下:
LSDK 软件资料
LX2160 芯片资料

1.链接脚本生成流程

通读 atf 工程 makefile 框架后得知,链接脚本通过 MAKE_BL 宏函数生成,简化后如下:

define MAKE_BL# 省略$(eval DEFAULT_LINKER_SCRIPT_SOURCE := $($(call uppercase,$(1))_DEFAULT_LINKER_SCRIPT_SOURCE))$(eval DEFAULT_LINKER_SCRIPT := $(call linker_script_path,$(DEFAULT_LINKER_SCRIPT_SOURCE)))# BL2 与 BL31 只使用了默认链接脚本,下面的变量为自定义变量,指向自定义连接脚本$(eval LINKER_SCRIPT_SOURCES := $($(call uppercase,$(1))_LINKER_SCRIPT_SOURCES))$(eval LINKER_SCRIPTS := $(call linker_script_path,$(LINKER_SCRIPT_SOURCES)))# 省略# Generate targets to preprocess each required linker script
# 生成链接脚本 ld 文件
$(eval $(foreach source,$(DEFAULT_LINKER_SCRIPT_SOURCE) $(LINKER_SCRIPT_SOURCES), \$(call MAKE_LD,$(call linker_script_path,$(source)),$(source),$(1))))# 省略endef

链接脚本通过下述命令生成:

$(eval $(call MAKE_LD,$(LINKERFILE),$(BL_LINKERFILE),$(1)))

其中:

  • $(1))_DEFAULT_LINKER_SCRIPT_SOURCEbl31/bl31.ld.S
  • 生成链接脚本文件为: release/bl31/bl31.ld. (bl2.ld 文件生成的代码同理)

2.bl31.ld 分析

bl31.ld 与 bl31.ld.S 的区别是使用了 gcc 编译器对一些宏进行扩展,让整个内存布局地址更明确, 通过生成的 bl31.ld, 我们可以更明确的知道地址分配,源码如下:

OUTPUT_FORMAT("elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
ENTRY(bl31_entrypoint)
MEMORY {RAM (rwx): ORIGIN = (0x80000000 + 0x80000000 - ((64 * 1024 * 1024) + (2 * 1024 * 1024))), LENGTH = ((0x80000000 + 0x80000000 - ((64 * 1024 * 1024) + (2 * 1024 * 1024))) + (0x200000)) - (0x80000000 + 0x80000000 - ((64 * 1024 * 1024) + (2 * 1024 * 1024)))
}
SECTIONS {RAM_REGION_START = ORIGIN(RAM);RAM_REGION_LENGTH = LENGTH(RAM);. = (0x80000000 + 0x80000000 - ((64 * 1024 * 1024) + (2 * 1024 * 1024)));ASSERT(. == ALIGN(((1) << (12))),"BL31_BASE address is not aligned on a page boundary.")__BL31_START__ = .;.text . : {__TEXT_START__ = .;*bl31_entrypoint.o(.text*)*(SORT_BY_ALIGNMENT(SORT(.text*)))*(.vectors)__TEXT_END_UNALIGNED__ = .;. = ALIGN(((1) << (12)));__TEXT_END__ = .;} >RAM.rodata . : {__RODATA_START__ = .;*(SORT_BY_ALIGNMENT(.rodata*)). = ALIGN(8); __RT_SVC_DESCS_START__ = .; KEEP(*(.rt_svc_descs)) __RT_SVC_DESCS_END__ = .; . = ALIGN(8); __FCONF_POPULATOR_START__ = .; KEEP(*(.fconf_populator)) __FCONF_POPULATOR_END__ = .; . = ALIGN(8); __PMF_SVC_DESCS_START__ = .; KEEP(*(.pmf_svc_descs)) __PMF_SVC_DESCS_END__ = .; . = ALIGN(8); __PARSER_LIB_DESCS_START__ = .; KEEP(*(.img_parser_lib_descs)) __PARSER_LIB_DESCS_END__ = .; . = ALIGN(8); __CPU_OPS_START__ = .; KEEP(*(.cpu_ops)) __CPU_OPS_END__ = .; . = ALIGN(8); __GOT_START__ = .; *(.got) __GOT_END__ = .;. = ALIGN(8);
__pubsub_psci_cpu_on_finish_start = .; KEEP(*(.__pubsub_psci_cpu_on_finish)); __pubsub_psci_cpu_on_finish_end = .;
__pubsub_psci_suspend_pwrdown_start_start = .; KEEP(*(.__pubsub_psci_suspend_pwrdown_start)); __pubsub_psci_suspend_pwrdown_start_end = .;
__pubsub_psci_suspend_pwrdown_finish_start = .; KEEP(*(.__pubsub_psci_suspend_pwrdown_finish)); __pubsub_psci_suspend_pwrdown_finish_end = .;
__pubsub_cm_entering_secure_world_start = .; KEEP(*(.__pubsub_cm_entering_secure_world)); __pubsub_cm_entering_secure_world_end = .;
__pubsub_cm_exited_secure_world_start = .; KEEP(*(.__pubsub_cm_exited_secure_world)); __pubsub_cm_exited_secure_world_end = .;
__pubsub_cm_entering_normal_world_start = .; KEEP(*(.__pubsub_cm_entering_normal_world)); __pubsub_cm_entering_normal_world_end = .;
__pubsub_cm_exited_normal_world_start = .; KEEP(*(.__pubsub_cm_exited_normal_world)); __pubsub_cm_exited_normal_world_end = .;__RODATA_END_UNALIGNED__ = .;. = ALIGN(((1) << (12)));__RODATA_END__ = .;} >RAMASSERT(__CPU_OPS_END__ > __CPU_OPS_START__,"cpu_ops not defined for this platform.")__RW_START__ = . ;.data . : ALIGN(1) { __DATA_START__ = .; *(SORT_BY_ALIGNMENT(.data*)) __DATA_END__ = .; } >RAM.rela.dyn : ALIGN(8) { __RELA_START__ = .; *(.rela*) __RELA_END__ = .; } >RAM.stacks (NOLOAD) : { __STACKS_START__ = .; *(.tzfw_normal_stacks) __STACKS_END__ = .; } >RAM.bss (NOLOAD) : ALIGN(16) { __BSS_START__ = .; *(SORT_BY_ALIGNMENT(.bss*)) *(COMMON) . = ALIGN(64); __BAKERY_LOCK_START__ = .; __PERCPU_BAKERY_LOCK_START__ = .; *(.bakery_lock) . = ALIGN(64); __PERCPU_BAKERY_LOCK_END__ = .; __PERCPU_BAKERY_LOCK_SIZE__ = ABSOLUTE(__PERCPU_BAKERY_LOCK_END__ - __PERCPU_BAKERY_LOCK_START__); . = . + (__PERCPU_BAKERY_LOCK_SIZE__ * (8 * 2 - 1)); __BAKERY_LOCK_END__ = .; ASSERT((__PERCPU_BAKERY_LOCK_SIZE__ == 0) || (__PERCPU_BAKERY_LOCK_SIZE__ == (1 * 64)), "PLAT_PERCPU_BAKERY_LOCK_SIZE does not match bakery lock requirements"); . = ALIGN(64); __PMF_TIMESTAMP_START__ = .; KEEP(*(.pmf_timestamp_array)) . = ALIGN(64); __PMF_PERCPU_TIMESTAMP_END__ = .; __PERCPU_TIMESTAMP_SIZE__ = ABSOLUTE(. - __PMF_TIMESTAMP_START__); . = . + (__PERCPU_TIMESTAMP_SIZE__ * (8 * 2 - 1)); __PMF_TIMESTAMP_END__ = .; . = ALIGN(16); __BASE_XLAT_TABLE_START__ = .; *(.base_xlat_table) __BASE_XLAT_TABLE_END__ = .; __BSS_END__ = .; } >RAM.xlat_table (NOLOAD) : { __XLAT_TABLE_START__ = .; *(.xlat_table) __XLAT_TABLE_END__ = .; } >RAM__RW_END__ = .;__BL31_END__ = .;ASSERT(. <= ((0x80000000 + 0x80000000 - ((64 * 1024 * 1024) + (2 * 1024 * 1024))) + (0x200000)), "BL31 image has exceeded its limit.")RAM_REGION_END = .;/DISCARD/ : {*(.dynsym .dynstr .hash .gnu.hash)}
}

编译过程中,会生成bl31.map 文件,结合 map 文件,可以更明确的知道段分配,每一个段内的成员地址,链接脚本定义的段变量地址。
生成的链接脚本请自行阅读。


文章转载自:

http://CR1JzD5B.mkpky.cn
http://QKgwvbot.mkpky.cn
http://P2NzUFai.mkpky.cn
http://PJcqnspi.mkpky.cn
http://DkFT8uzs.mkpky.cn
http://0g9HW5Op.mkpky.cn
http://C4tW3vA9.mkpky.cn
http://aRgiC4It.mkpky.cn
http://PYrEzvs6.mkpky.cn
http://nNW78IMI.mkpky.cn
http://hNOwzq0p.mkpky.cn
http://wMHmjfUG.mkpky.cn
http://E4UdEtR6.mkpky.cn
http://71zOIhUB.mkpky.cn
http://EKvJ5kCC.mkpky.cn
http://ev25RQZg.mkpky.cn
http://y6TOl4lX.mkpky.cn
http://auwmI6Jy.mkpky.cn
http://m1EKmcNk.mkpky.cn
http://YogZM5N2.mkpky.cn
http://4WVaXuT7.mkpky.cn
http://9bOVjctr.mkpky.cn
http://HXllGyun.mkpky.cn
http://pKX2uCKb.mkpky.cn
http://5RgcDOLL.mkpky.cn
http://IPbydXaE.mkpky.cn
http://lNELDkEb.mkpky.cn
http://ZrDHvJMi.mkpky.cn
http://T1ZVnCBh.mkpky.cn
http://RDETfJWb.mkpky.cn
http://www.dtcms.com/wzjs/657732.html

相关文章:

  • 企业网站建设营销优化方案建设网站服务器自营方式
  • 网站开发软件 论文 摘要wordpress 好用插件推荐
  • 网站后台建设编辑器中企动力是国企还是央企
  • 青岛做公司网站的多吗做空比特币的网站
  • 外贸网站购买云服务器多少钱宁夏自治区建设厅网站
  • 成都交易网站建设做职业背景调查的网站
  • 沧州网站seo公司天津建设工程信息网专家登录
  • 网站开发项目对自身的意义河北网站制作
  • 做二手房怎找房源网站网站开发建设费用包括那些
  • 广州南沙区建设和交通局网站完成网站集约化建设
  • 兰州网站seo技术厂家wordpress默认插件
  • 淮北建投网站wordpress能放视频
  • 沙坪坝网站建设哪家好网钛cms做的网站
  • 腾讯云 网站备案友情链接的检查方法
  • 安徽建设局网站怎么查证件信息国外网站推广平台有哪些?
  • 洛浦县网站建设成都有哪十大装饰公司
  • 内蒙古城乡建设网站大型商家进驻网站开发
  • 广东科技网站建设做同行的旅游网站
  • 什么网站可以做引文分析网站建设内容策划
  • 想换掉做网站的公司aspcms做双语网站修改配置
  • 关于企业网站建设的相关思考seo怎么优化方案
  • 尔雅网站开发实战如何做一个宣传链接
  • 门户网站建设工作室关键词排名提高方法
  • 企业注册网站虚拟机wordpress安装教程视频
  • 网站建设作推广思路
  • 帝国做的网站怎么上传两个女孩子怎么做网站
  • 大庆医院网站建设怎样做软件网站建设
  • 装饰网站建设方案织梦dedecms5.6 网站搬家详细教程
  • 手机网站自动适配代码义乌网站建设
  • 学院评估 网站建设整改台州网站建设公司.