海思Hi35xx uboot启动分析总结
liwen01 2019.12.09
前言
在嵌入式linux设备中,uboot的最终目的就是启动kernel。对于uboot而言,没有人把它引导起来,所以uboot首先需要把自己加载起来,然后再去引导kernel的启动,这也就可以大致的分为Uboot启动的第一阶段和第二阶段。
(一)start.S第一阶段启动总结
在海思hi3251a官方的《Hi3521A_PINOUT_CN》手册上有上电锁存管脚BOOTROM_SEL,这个是引脚用来定义是从BOOTROM启动还是从spi flash启动 。
(1)BOOTROM启动
当启动模式为从 BOOTROM 启动时,海思的BOOTROM的程序会去初始化串口,然后与海思的HiBurn工具建立通信
如果能建立通信,则启动HiBurn升级uboot程序流程,如果不能与HiBurn建立连接,等待一段时间之后它就转去从外部的spi flash启动
(2)HiBurn 烧入原理
HiBurn烧入的基本原理是,HiBurn工具与BOOTROM程序建立连接之后,先下载uboot程序的开始4KB数据到海思芯片的内部RAM
然后通过下载的那一小部分uboot代码去初始化外部的DDR,如果DDR初始化成功,HiBurn再将剩下的uboot程序下载到外部的DDR中去
最后是在DDR中启动uboot,如果要进行烧入操作,是通过DDR中的Uboot程序,发送uboot命令将DDR中的uboot程序烧入到外部的flash中去,这样就实现了uboot程序的升级。
(3)spi flash启动
海思的hi3521a芯片支持从 SPI NOR Flash 和 SPI NAND Flash 直接启动,它的启动也就是我们start.s中的大部分实现。主要做的工作有:
初始化CPU相关功能(关缓存,关MMU,设置SVC模式等)将异常中断向量表重定向到内部RAM将uboot代码重定向到外部DDR中设置栈空间清空BSS段最后调用C语言接口去执行C语言代码实现第二阶段的启动。第一阶段在执行之后,在DDR中的映射空间的数据分布如下:(二)start_armboot第二阶段启动总结
在uboot的启动的第二阶段,主要做的是:
初始化变量和结构体重定向环境变量初始化堆管理器初始化环境变量进入命令处理循环在命令处理循环中,默认Uboot是超时等待用户命令输入
如果有检测到命令的输入,则执行相应的命令,如果超时没有命令输入,uboot默认执行的bootm命令进行kernel启动引导。
这里涉及到两个比较总要的点:环境变量的重定向和uboot命令处理。
(1)环境变量重定向
在uboot第二阶段的时候,uboot会去检测flash中环境变量的地址中环境变量是否有效,如果有效,则使用flash中的环境变量值来初始化uboot运行中的环境变量,如果flash中的环境变量无效,则使用默认的环境变量来初始化运行中的uboot。
在uboot的用户命令操作过程中,如果有对环境变量进行修改,都是修改的内存中的那一份环境变量,如果要将修改的环境变量保存到flash中去,则需要运行命令saveenvuboot在flash的分布如下:
uboot.bin烧入到flash的0地址位置,boot.bin里面的数据就是按我们连接脚本中的数据那样分布。在0x80000(512KB)开始的位置就是环境变量的在flash的位置,其大小为256KB。
(2)uboot命令处理
在启动的最后阶段,就是执行uboot的bootm命令,主要就是uboot将kernel程序从flash中复制到内存去,然后就是检验kernel镜像文件的有效性,设置uboot传递给kernel的参数,设置kernel启动的环境(比如关缓存,关中断,CPU处于SVC模式等)
最后就是通过一个函数指针指向kernel的启动地址,调用该函数实现uboot到kernel的运行。
在这个过程中,启动参数和机器码同时传递给kernel,关于参数传递,实际在这里是通过寄存器间参数的地址传递给了kernel。
(3)参数传递
C语言进行函数调用的时候,常常会传递给被调用的函数一些参数,对于这些C语言级别的参数,被编译器翻译成汇编语言的时候,就要找个地方存放一下,并且让被调用的函数能够访问,否则就没发实现传递参数了。对于找个地方放一下,分两种情况。
一种情况是,本身传递的参数就很少,就可以通过寄存器传送参数。因为在前面的保存现场的动作中,已经保存好了对应的寄存器的值,那么此时,这些寄存器就是空闲的,可以供我们使用的了,那就可以放参数,而参数少的情况下,就足够存放参数了,比如参数有2个,那么就用r0和r1存放即可。另外一种情况是,如果参数太多,寄存器不够用,那么就得把多余的参数堆栈中了。即,可以用堆栈来传递所有的或寄存器放不下的那些多余的参数。--------------End--------------
如需获取更多内容
请关注公众号 liwen01
深耕NAND Flash领域 佰维助力国产手机厂商存储芯片国产化
2018年11月15日,第二届重庆·国际手机展在重庆·(南坪)国际会议展览中心隆重开幕。佰维存储携旗下全系列存储芯片解决方案出席这一国际盛会,佰维以“佰维存储,囊括需求”为主题,向外界展示了其全系嵌入式存储解决方案。
除了常规的的eMMC,eMCP,nMCP,SPI,LPDDR3/4/4X等芯片外,一起亮相的还有:基于UFS和LPDDR4的下一代移动存储解决方案的uMCP,高性能、大容量的智能终端存储解决方案的旗舰机专用eMCP(最大支持128GB+32Gb)等产品,从低端到旗舰,精准定位并给出各大手机厂商的多样化的存储方案。
自1995年成立起,佰维存储一直坚持深耕NAND Flash存储领域,积累了包括原厂合作、技术研发、产能与品质保证、平台验证、技术服务等核心优势,不断加强自身的存储平台型优势,周全的客制化服务与产品质量保证也为BIWIN沉淀了如中兴通迅,TCL,康佳,传音,天珑,百立丰,易景,华勤,沃特沃德,伟创立,创维等等优质的客户资源。立足未来,佰维将一如既往为我们的终端手机厂商提供更具竞争优势的存储产品和方案。
佰维uMCP:基于UFS和LPDDR4的下一代移动存储解决方案
随着智能手机的快速更新迭代,对存储芯片性能与容量需求日趋增大,佰维的UMCP芯片(64GB+32Gb/128GB+32Gb)在提供了高达800MB/s、260MB/s读写速度的同时,容量更是支持到128GB。
除此之外,佰维的UFS2.1产品,确保性能强劲的同时,可以提供32GB-512GB容量,且均通过高通835和高通845平台的验证。
佰维LPDDR:广泛应用于移动电子设备的低功耗、小体积的内存芯片
佰维最新推出的LPDDR4/4X产品,可提供高达1600MHz的频率,同时具备更低的功耗和更低的工作电压(1.1V/0.6V)。产品较上一代LPDDR 3产品有高达2倍以上的性能提升,从而最大化的让智能设备在性能稳定的前提下,续航能力更持久。
佰维LPDDR产品为客户提供了从高性能到高性价比的RAM解决方案,且通过了主流方案平台如展讯、MTK、高通、海思、瑞芯微等平台验证,可广泛应用于智能手机、平板电脑、机顶盒等移动电子设备。
佰维nMCP:基于NAND Flash和LPDDR2/3的高性价比的移动存储解决方案
佰维推出体积小、更具成本优势的nMCP存储解决方案,可更好的满足手机、教育电子等手持式智能设备的存储要求,为客户提供2Gb+1Gb和4Gb+2Gb的容量组合,工作频率为533MHz,可实现较高的性能密度、更好的集成度、更低的功耗、更大的灵活性以及更小的成本,并通过了展讯SC9820E、SC9820A、高通8905、9X07等平台的验证。
佰维SPI NAND:支持SPI接口的NAND型闪存存储解决方案
随着电子产品小型化的需求越来越强烈,并且对于方案成本的要求越来越高,SPI NAND Flash这种高性价比的存储器外设方案越来越受到市场的追捧。佰维SPI NAND产品支持从1Gbits到4Gbits的容量,采用LGA 8 封装,尺寸小至8×6×0.8 mm,可广泛应用于手机、机顶盒、光猫、路由器、数码相机、通讯设备等领域。通过的平台验证有:MT7526; MT7525; ZX279127; ZX279128……
BIWIN立足国内市场,开拓国际市场,整合产业上下游资源,不断强化自身的存储平台型企业优势,为客户提供包括移动终端、工规应用等全系列嵌入式存储解决方案。
佰维此次应邀参展的第二届重庆国际手机展,展位位于5号馆B088号(生物识别&摄像头展区),精彩继续,邀您见证!届时欢迎各位手机厂商前往佰维展台参观交流,体验丰富多元的存储产品与服务,感受群“芯”闪耀的佰维,一同见证佰维存储平台助力中国手机厂商存储芯片国产化进程,感受佰维为广大手机厂商提供的最贴心的方案定制服务。
图片声明:文章图片均来源于佰维存储。
相关问答
Arduino,C51,STM32和ARM等有什么联系和区别?先说ARM吧,最开始ARM是由乔布斯资助的,苹果一家公司就占了43%,这里面ARM的格局也是最大的,Arduino和51与ARM相比,真是小巫见大巫,或者说他们根本没有可比性...AR...
学单片机对嵌入式有哪些帮助吗?学习单片机对学习嵌入式的帮助是全方位的,因为单片机本身就是嵌入式的一部分。既然说到了单片机和嵌入式系统,今天我们就来简单了解一下单片机与嵌入式系统的...
上海 海思 芯片费用多少?[回答]利尔达科技集团股份有限公司总部位于杭州。,是一家提供物联网系统、智能产品解决方案的高科技企业。国家重点领域高新技术企业,十余年来致力于物联...