加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

Bootloader移植概括

发布时间:2021-11-22 09:51:56 所属栏目:教程 来源:互联网
导读:1、Bootloader移植 A、引导过程 三星的S5PC100为例 (1)、片内是有固化的程序负责第一级引导 bootloader也在外存上,首先得解决其运行的问题。片内是有固化的程序负责必要的硬件初始化工作,并把外部NANDFLASH或是NORFLASH、SD卡及其他设备上的bootloader的

1、Bootloader移植
A、引导过程
三星的S5PC100为例
(1)、片内是有固化的程序负责第一级引导
bootloader也在外存上,首先得解决其运行的问题。片内是有固化的程序负责必要的硬件初始化工作,并把外部NANDFLASH或是NORFLASH、SD卡及其他设备上的bootloader的第一阶段代码运行起来。
 
(2)、Bootloader需要的必要功能
由于片内内存较小,所以得实现自搬移,搬移内核,并执行内核。
 
B、作用
(1)作必要的硬件初始化工作
CPU(SOC片子:设置时钟、屏蔽中断、关MMU等)
内存(外部内存,程序需要上内存才能运行,BOOLOADER必须能够正确读写内存)
外存(BOOLOADER的工作是搬内核上内存,所以需要能够读写外存)
(2)自搬移并搬移内核并给内核传参
bootloader在外存上,其运行由片内固化程序引导,一般片内程序能读写的外存区域不大,所以bootloader仅仅有一部分能够运行起来,这个先运行起来的代码负责搬其他代码上内存(其他代码之于自搬移代码是数据)。bootloader真正的工作代码上了内存,就接管芯片,并把外存上的内核搬到内存上并执行,并传参数给内核(bootloader 结束时要传三个值给内核,通过r0 r1 r2三个寄存器。r0:CPUid,R1机器码,r3:内核参数链表;r2必须有,r0一般u-boot是0,不用,r3也不用)。BOOLOADER传给内核的启动参数一般是写死在内存偏移0x100的位置(ARM内核代码写死的),所以BOOLOADER负责向内存偏移0x100的位置写入内核启动参数。
 
C、ARM主流开源bootloader
u-boot、vivi、reboot等
 
D、u-boot两个阶段代码
第一阶段代码:自搬移(必要的硬件初始化,完成对外存读内核代码到内存,移植难点,必须对硬件很熟悉,一般是汇编编写的)
第二阶段代码:初始化相应设备及逻辑层代码(命令、协议等,U-BOOT还支持文件系统),C代码
 
第一阶段代码位置
S5PC100,u-boot-2012.10为例
archarmcpuarmv7start.S(有一定注释,这个是移植时候的重点,不熟悉硬件不行)
链接脚本archarmcpuarmv7u-boot.lds(这个说明那些是代码段,哪些代码先放到数据段——被其自搬移,如果第一阶段代码添加了代码,链接脚本也要改下)
 
第二阶段代码
archarmlibboard.c
这个就是u-boot自己把自己搬到内存上以后的代码,C写的,C入口函数随着版本变化在变,这个版本的是board_init_f,从第一阶段代码可以看到,第一阶段把u-boot其他代码搬上内存后,就会跳转到C入口,开始执行。
 
E、具体移植步骤
(1)选平台(一般芯片公司已经移植了主流bootloader代码,只需要根据实际板子情况来修改相应代码,主要是外存和外部内存)
顶层目录下有个boards.cfg,向里面添加:
板子名称        体系平台    ARM核    板子名称    公司名称    SOC芯片
 
fsc100            arm            armv7      fsc100        samsung    s5pc1xx
 
上面就是在指定如下目录需要编译:
 
 
cpu/arm目录
 
cpu/arm/arnv7目录
 
 
cpu/arm/arnv7/s5pc1xx目录
 
board/samsung/fsc100目录
 
 
也可以写进顶层目录下的Makefile,示例如下:
fsc100_config:    unconfig
    @$(MKCONFIG) $(@:_config=) arm armv7 fsc100 samsung s5pc1xx
 
在U-BOOT顶层目录执行
#make fsc100_config
这样就是在决定应该编译那些目录,配置基本平台相关的目录。
 
这时候就可以编译一下了,目的如下:
(a)、检验环境(交叉编译工具链安装及相应的一些库支持,u-boot不需要第三方库支持,可能会涉及一些工具及相应编译环境的库缺失);
(b)、验证平台选择

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读