范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

uboot的SPL框架

  比较杂,因为每天只发5篇,所以这一个相当于工作学习日志,记事本。各位勿怪,BIC
  BIC―――――位清除指令
  指令格式:
  BIC{cond}{S} Rd,Rn,operand2
  BIC指令将Rn 的值与操作数operand2 的反码按位逻辑"与",结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。
  6.
  lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。   7.Program Counter程序计数器,用于指示当前将要执行的下一条机器指令的内存地址。在IBM PC计算机中所用的INTEL CPU中,它被称为 IP (Instruction Pointer指令指针)   8.adr r0, _start 得到的是_start的当前执行位置,由 pc+offset 决定的 得到有效地址   ldr r0, =_start 得到的是绝对的地址,链接时决定;   9.bss段:   bss段(bss segment) 通常是指用来存放程序中未初始化的全局变量的一块内存区域。   bss是英文Block Started by Symbol的简称。   bss段属于静态内存分配。   data段:   数据段(data segment) 通常是指用来存放程序中已初始化的全局变量的一块内存区域。   数据段属于静态内存分配。   text段:   代码段(code segment/text segment) 通常是指用来存放程序执行代码的一块内存区域。   这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。   在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。   堆(heap):   堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。   当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);   当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。   栈(stack):    栈又称堆栈,是用户存放程序临时创建的局部变量,   也就是说我们函数括弧"{}"中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。   除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。   由于栈的先进先出(FIFO)特点,所以栈特别方便用来保存/恢复调用现场。   从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。   一个程序本质上都是由 bss段、data段、text段三个组成的。   这样的概念,不知道最初来源于哪里的规定,但在当前的计算机程序设计中是很重要的一个基本概念。   而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。   在采用段式内存管理的架构中(比如intel的80x86系统),bss段通常是指用来存放程序中未初始化的全局变量的一块内存区域,   一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。   比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。   text和data段都 在可执行文件中 (在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;   而bss段 不在可执行文件中 ,由系统初始化。【例】   两个小程序如下:   程序1: int ar[30000]; void main() { ...... }   程序2: int ar[300000] = {1, 2, 3, 4, 5, 6 }; void main() { ...... }   发现程序2编译之后所得的.exe文件比程序1的要大得多。当下甚为不解,于是手工编译了一下,并使用了/FAs编译选项来查看了一下其各自的.asm,   发现在程序1.asm中ar的定义如下:   _BSS SEGMENT   ?ar@@3PAHA DD 0493e0H DUP (?) ; ar   _BSS ENDS   而在程序2.asm中,ar被定义为:   _DATA SEGMENT   ?ar@@3PAHA DD 01H ; ar   DD 02H   DD 03H   ORG $+1199988   _DATA ENDS   区别很明显,一个位于.bss段,而另一个位于.data段,两者的区别在于:   全局的未初始化变量存在于.bss段中,具体体现为一个占位符;   全局的已初始化变量存于.data段中;   而函数内的自动变量都在栈上分配空间;   .bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);   .data却需要占用,其内容由程序初始化。因此造成了上述情况。   bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小;   bss段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。   data段(已手动初始化的数据)则为数据分配空间,数据保存在目标文件中;   data段包含经过初始化的全局变量以及它们的值。当这个内存区进入程序的地址空间后全部清零。   包含data段和bss段的整个区段此时通常称为数据区。   10、1.uboot SPL架构简介   在uboot-2011之后的版本中多了一个叫SPL的架构,这个架构有什么用呢?在uboot-2011的/doc/README.spl文件有简单的介绍:Generic SPL framework ===================== Overview -------- To unify all existing implementations for a secondary program loader (SPL) and to allow simply adding of new implementations this generic SPL framework has been created. With this framework almost all source files for a board can be reused. No code duplication or symlinking is necessary anymore. 为了统一所有现有实现第二段的程序加载程序(SPL)并允许简单地添加新的实现这个,一个通用SPL框架已创建。用这个框架板的几乎所有的源文件可以重用。没有代码重复或符号链接是必要的了。 How it works ------------ There is a new directory TOPDIR/spl which contains only a Makefile. The object files are built separately for SPL and placed in this directory. The final binaries which are generated are u-boot-spl, u-boot-spl.bin and u-boot-spl.map. During the SPL build a variable named CONFIG_SPL_BUILD is exported in the make environment and also appended to CPPFLAGS with -DCONFIG_SPL_BUILD. Source files can therefore be compiled for SPL with different settings. ARM-based boards have previously used the option CONFIG_PRELOADER for it. For example: ifeq ($(CONFIG_SPL_BUILD),y) COBJS-y += board_spl.o else COBJS-y += board.o endif COBJS-$(CONFIG_SPL_BUILD) += foo.o #ifdef CONFIG_SPL_BUILD foo(); #endif The building of SPL images can be with: #define CONFIG_SPL Because SPL images normally have a different text base, one have to be configured by defining CONFIG_SPL_TEXT_BASE. The linker script have to be defined with CONFIG_SPL_LDSCRIPT. To support generic U-Boot libraries and drivers in the SPL binary one can optionally define CONFIG_SPL_XXX_SUPPORT. Currently following options are supported: CONFIG_SPL_LIBCOMMON_SUPPORT (common/libcommon.o) CONFIG_SPL_LIBDISK_SUPPORT (disk/libdisk.o) CONFIG_SPL_I2C_SUPPORT (drivers/i2c/libi2c.o) CONFIG_SPL_GPIO_SUPPORT (drivers/gpio/libgpio.o) CONFIG_SPL_MMC_SUPPORT (drivers/mmc/libmmc.o) CONFIG_SPL_SERIAL_SUPPORT (drivers/serial/libserial.o) CONFIG_SPL_SPI_FLASH_SUPPORT (drivers/mtd/spi/libspi_flash.o) CONFIG_SPL_SPI_SUPPORT (drivers/spi/libspi.o) CONFIG_SPL_FAT_SUPPORT (fs/fat/libfat.o) CONFIG_SPL_LIBGENERIC_SUPPORT (lib/libgeneric.o)   移植过uboot的都知道,uboot的启动其实是分为BL0,BL1,BL2三个阶段的,即:ROM->SPL->uboot.img.而这个SPL架构将可以编译产生一个uboot-spl.bin。即BL1的代码。也就是说SPL结构其实做的工作就是uboot的BL1阶段的工作。2.SPL结构是如何工作的   cd 进入spl目录,从编译文件看这个架构都包括了什么文件: 我们先来看该目录Makefile: 当CONFIG_SPL_BUILD := y driver下设备驱动和arch/arm与cup相关的东东将被编译。 CONFIG_SPL_BUILD := y export CONFIG_SPL_BUILDinclude $(TOPDIR)/config.mk # We want the final binaries in this directory obj := $(OBJTREE)/spl/ HAVE_VENDOR_COMMON_LIB := $(shell [ -f $(SRCTREE)/board/$(VENDOR)/common/Makefile ] && echo y || echo n) START := $(CPUDIR)/start.o LIBS-y += arch/$(ARCH)/lib/lib$(ARCH).o LIBS-y += $(CPUDIR)/lib$(CPU).o ifdef SOC LIBS-y += $(CPUDIR)/$(SOC)/lib$(SOC).o endif LIBS-y += board/$(BOARDDIR)/lib$(BOARD).o LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/lib$(VENDOR).o LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/libcommon.o LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/libdisk.o LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/libi2c.o LIBS-$(CONFIG_SPL_GPIO_SUPPORT) += drivers/gpio/libgpio.o LIBS-$(CONFIG_SPL_MMC_SUPPORT) += drivers/mmc/libmmc.o LIBS-$(CONFIG_SPL_SERIAL_SUPPORT) += drivers/serial/libserial.o LIBS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/libspi_flash.o LIBS-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/libspi.o LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/fat/libfat.o LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/libgeneric.o   接下来是连接到一个脚本,u-boot-spl.lds # Linker Script ifdef CONFIG_SPL_LDSCRIPT # need to strip off double quotes LDSCRIPT := $(addprefix $(SRCTREE)/,$(subst ",,$(CONFIG_SPL_LDSCRIPT))) endif ifeq ($(wildcard $(LDSCRIPT)),) LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-spl.lds endif ifeq ($(wildcard $(LDSCRIPT)),) LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-spl.lds endif ifeq ($(wildcard $(LDSCRIPT)),) $(error could not find linker script) endif   在arm/cpu/armv7目录下找到u-boot-spl.lds 这个连接脚本MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE, LENGTH = CONFIG_SPL_MAX_SIZE } MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, LENGTH = CONFIG_SPL_BSS_MAX_SIZE } OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { .text : { __start = .; arch/arm/cpu/armv7/start.o (.text) *(.text*) } >.sram . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram . = ALIGN(4); .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram . = ALIGN(4); __image_copy_end = .; _end = .; .bss : { . = ALIGN(4); __bss_start = .; *(.bss*) . = ALIGN(4); __bss_end__ = .; } >.sdram }   其实这个连接脚本最后连接到还是arch/arm/cpu/armv7/start.S ,作为他的入口。   (reset) (b lowlevel_init: arch/arm/cpu/armv7/lowlevel_init.S) (b _main) –> (bl board_init_f) –> (board_init_r) –> (jump_to_image_no_args去启动u-boot) 到此SPL的生命周期结束。   12/   . gd_t : global data数据结构定义,位于文件 include/asm-arm/global_data.h。其成员主要是一些 全局的系统初始化参数 。需要用到时用宏定义:DECLARE_GLOBAL_DATA_PTR ,指定占用寄存器R8 。   2. bd_t : board info数据结构定义,位于文件 include/asm-arm/u-boot.h。 保存板子参数。

只需要两款测试仪,就可判断苹果充电器和快充线真伪做这个测试的背景是这样的最近买了个移动电源,商家宣称是MFi的,看了下头确实是C94的镀铑,可连iPad就是弹框。然后就想到了两种可能C94头是仿冒的,但是都标注MFi了,而且头看家庭教育新篇章大力智能助力家长打造自主自信有爱的披风少年家庭教育是人生的第一课,是所有教育的起点和基础。在结束不久的全国两会中,有代表提出为家庭教育立法,家庭教育的相关话题也越来越受到社会广泛的关注。在515国际家庭日来临之际,为探讨家拒绝躺赢锐意破局为什么ThinkBook敢于喊出新青年的反卷态度?在PC界,也许只有以思考重构世界的ThinkBook能把一场发布会办成思想碰撞会。6月1日下午1500,联想ThinkBook夏季新品发布会在全网直播。衔接去年新青年,新前途的品牌京东618全面启动1000个新品类增长超100碳排放同比降低55月20日,在第18个京东618来临之际,以让热爱不止于消费为主题的2021京东618,18周年庆启动暨趋势发布会在北京举行,国内外数百名知名品牌商家合作伙伴代表与京东共同开启20家生活战略延展升级国美携手打扮家开创透明家装新格局国美家生活战略2。0阶段又推出重要落子。4月29日下午两点,BIM智能装修平台国美X打扮家家居家装战略暨APP上线发布会在北京雁栖湖国际会议中心隆重举行。来自行业协会的领导供应链伙致敬时代先锋ThinkPad家族系列新品正式发布,引领商务笔电新方向4月22日,联想以你好先锋为主题,在北京正式召开了ThinkPadFamily2021春季新品发布会。在这场堪称PC行业盛典的发布会上,ThinkPad推出了备受瞩目的至薄之刃X1酷开科技发布新品这是一块从体验出发真正打破边界的屏在各个平台都积蓄了海量收藏却从不回顾?每每要分享信息却受限于系统差异无法互通?这些日常生活工作中随处可见的场景,在互联网蓬勃发展多年之后仍然是痛点问题,体验与多年之前无异,打通大小科技创新持续加码高途集团重新定义教育场景4月22日,在线教育上市公司跟谁学在北京国家会议中心召开媒体发布会,宣布更名为高途集团。更名后,高途集团K12在线教育品牌为高途课堂,成人在线教育品牌为高途学院。高途集团是中国第一做微信小程序开发为什么选得有店?细数这六大原因自从微信小程序出世至今,做微信小程序开发的公司越来越多,在那么多开发公司中,对于没有专业技术的商家该如何选择?得有店又有什么优势值得商家选择?1,得有店操作简单得有店,可视化操作,网装时代正当时土巴兔率先缔造网装时代2。0小红书平台作为KOC高发聚集地,近两年可以算是以种草抢尽了风头。不仅用户活性大,也被称为素人最易发家的平台之一。而家装话题则更占据了小红书热门话题的半壁江山,很多不到万粉的萌新博主2021上海国际广告节开启酷开科技缘何成为OTT独家合作媒体?7月21日,2021上海国际广告节暨数字广告高峰论坛正式开幕。今年的广告节主题是引领行业数字化转型,涵盖高峰论坛颁奖典礼展览展示和新锐挑战营四大板块。数字化转型,这看起来是一个近年
为何手机市场缩水严重?国内云科技ToDesk市场空间不敢想象1月29日,StrategyAnalytics的最新研究显示,2021年全年中国智能手机出货量为3。293亿部,同比下滑2。相对几年前移动智能设备的爆发式增长,目前手机市场已经进入堵不住了!力通通信破冰5G射频芯片,打压华为的后果显现点击关注,每天精彩不断!导读堵不住了!力通通信破冰5G射频芯片,打压华为的后果显现!对于现代科技领域的发展来说,半导体集成电路芯片无疑是十分重要的而华为公司的任正非早在2004年就IDC数据起争议,vivo第一没问题,荣耀排第几才是关键近一段时间全球各大调研公司的数据出现一个井喷期,其中大家最期待的是IDC的数据。因为一般情况之下行业都认为IDC的数据是最权威的,那么今天我们就来解读下IDC发布的2021年国内全FF自曝真实订单数据1。4万辆预订中仅300辆为付费预订澎湃新闻记者范佳来法拉第未来(FaradayFuture,以下简称FF)公布了FF91的付费预订数据300台。2月9日,FF相关负责人告诉澎湃新闻记者,FF的预订包含收费预订单和免孝道科技完成数千万元的首轮融资36氪获悉,安全玻璃盒孝道科技近日宣布完成数千万元的首轮融资。本轮融资由国内安全上市公司安恒信息主投。本轮融资后,公司将把资金将用于DevSecOps软件供应链安全及云原生应用安全全球芯片设计巨头或独立上市,券商称产业链设备有望超万亿台此前ARM芯片出货量高达250亿颗。今日重要性据经济观察网报道,当地时间周一,软银以660亿美元将英国芯片企业ARM出售给英伟达的交易以失败告终,另外软银开始寻求推动ARM独立上市喜报!极光(JG。US)荣获2021中国软件和信息服务业年度SaaS行业领军企业近日,2021第五届中国软件和信息服务业年度风云榜评选结果正式发布。中国领先的开发者服务提供商,极光(AuroraMobile,纳斯达克股票代码JG)凭借2021年在SaaS行业取好物推荐11期戴森都怕的吸尘器HiFi手机解码耳放减压啪啪牌包罗万象,各种好物科技指南帮你搜一搜,这期好物推荐为大家推荐三款不同类型的产品石头H7无线手持吸尘器,有些细节戴森都赶不上给手机音乐加上个小尾巴,音质提升更明显,山灵UA5小尾巴H25003000元段手机型推荐,有拍照够用性能有质感,看有适合的吗1。小米10s基本信息1。CPU。搭载高通骁龙870处理器(对比骁龙888,骁龙8)功耗发热要好点,2相机。一亿像素增加细节,3音质。哈曼卡顿调教对称式杨声器听着更爽,4充电。303000元内8256手机推荐?3000元内8256手机推荐?作为女生用,小米civi5G的价格为2469元钱,是2021年9月份上市的一款手机,就掌握的信息分析,这款新机应该是主打女性消费者市场,正所谓颜值在线你手机里有没有一张拍的特别有家乡韵味的照片?新兴农业讯猛发展,农村土地50被能人承包,统一管理机械化,无人机正在给小麦打药,三个人一天打上百亩,省心,省力,省倒伏,最省的是钱。土地有了生机,农民有了安居,后继有人,祖国昌盛!