您的位置 首页 FPGA

GNU ARM汇编–(十九)u-boot-nand-spl发动进程剖析

在理解bootloader后,花些时间重新学习了开源软件的makefile和相关脚本之后,自己的u-boot移植工作也比较顺利的完成了:移植

在了解bootloader后,花些时刻重新学习了开源软件的makefile和相关脚本之后,自己的u-boot移植作业也比较顺利的完结了:

移植环境:

ubuntu 12.04

U-Boot 2012.07 (Nov 28 2012 – 20:05:48)
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q1-203) 4.3.3
GNU ld (Sourcery G++ Lite 2009q1-203) 2.19.51.20090205

我移植的uboot只支撑nand flash,原因是手头没办法烧写nor flash,所以不敢去动.支撑tftp下载各种镜像文件.

给出patch下载的地址:http://download.csdn.net/detail/dndxhej/4833784

由于是选用的nand_spl方法从nand flash发动,将前面4K的镜像履行进程和后边252K巨细的镜像履行进程做一个大约的描述性的剖析,不想写的过于具体,由于知道进程后和必备的常识后,假如哪里出了问题,那时候也能够一句一句代码的查问题.

前面4K代码在内部sram中履行的进程是:

1.设置cpu为svc形式

2.封闭开门狗和中止

3.初始化体系时钟

4.禁用MMU和Cache

5.初始化sdram控制器

6.设置sp,跳到方才说到的nand_boot.c里边的nand_boot函数,这个函数初始化nand的控制器,并将4K之后的u-boot.bin image从nand中load到sdram中,然后跳转到u-boot.bin image的开端处持续后续的作业

后边252K代码在sdram中履行的进程是:

1.依旧是从start.S汇编开端call_board_init_f,设置好sp后跳到arch/arm/lib/board.c中的board_init_f函数

2.board_init_f完结部分初始化作业后跳转到汇编写的relocate_code

3.relocate_code完结重定位作业后跳转到board_init_r

4.board_init_r函数完结后续的初始化作业后跳转到main_loop,依据延时进入引导os的进程,假如打断这个进程,就进入uboot的命令行形式

简略的剖析到这儿了,对uboot移植做一个小结:

首要,要有决心处理移植进程中遇到的各种问题

其次,要具有处理各种问题的常识关键,大约罗列有makefile,shell脚本,简略的正则表达式,编译链接和链接脚本的写法,arm体系结构和汇编语言,仔细阅读相关的datasheet.

尽管uboot移植成功了,可是uboot作为一款强壮的bootloader,还有许多有意思的东西值得咱们去学习,比如说:

1.hush的完成,uboot的命令行形式便是根据hush完成的,linux下的shell也是根据这个的,这个处理仍是适当杂乱的.

2.uboot下的网络完成了物理层(DM9000),网络层(ICMP),传输层(UDP)和应用层(tftp)的具体完成,今后要深化学习网络,能够从uboot完成的简略网络协议栈下手,再深化到linux下的网络.

还有许多值得说道的当地,就不具体说了,路漫漫,可是路在脚下

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/258029.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部