详细的 jz2440-uboot移植学习笔记总结

参考资料:

Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解):https://www.cnblogs.com/80scd/p/5872373.html

比较详细的jz2440移植:https://blog.csdn.net/lizuobin2/article/details/52054293   推荐

uoot star.s分析: http://blog.chinaunix.net/uid-22891435-id-380150.html

时钟图解析:https://blog.csdn.net/czg13548930186/article/details/75425759

uboot的功能

1  引导模式 : 引导启动内核

2  下载模式 : 负责下载程序到开发板

uboot 工程源码目录分析

来源:https://blog.csdn.net/ccccdddxxx/article/details/6800135

1、版本号变化:

2008年8月及以前

按版本号命名:u-boot-1.3.4.tar.bz2(2008年8月更新)

2008年8月以后均按日期命名。

例如:u-boot-2011.06.tar.bz2(2011年6月更新)

标红的部分一般为移植过程的目录文件

2008年以前的uboot

├── api                存放uboot提供的接口函数
├── board              根据不同开发板定制的代码,代码也不少
├── common             通用的代码,涵盖各个方面,已命令行处理为主
├── cpu                与体系结构相关的代码,uboot的重头戏
├── disk                磁盘分区相关代码
├── doc                文档,一堆README开头的文件
├── drivers            驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples           示例程序
├── fs                 文件系统,支持嵌入式开发板常见的文件系统
├── include            头文件,已通用的头文件为主
├── lib_【arch】        与体系结构相关的通用库文件
├── nand_spl           NAND存储器相关代码
├── net                网络相关代码,小型的协议栈
├── onenand_ipl
├── post               加电自检程序
└── tools              辅助程序,用于编译和检查uboot目标文件

 

1、从u-boot-2010.06版本开始把体系结构相关的内容合并,原先的cpu与lib_arch内容全部纳入arch中,并且其中增加inlcude文件夹;分离出通用库文件lib。

2、移植工作最主要的是看对应的处理器和开发板代码,2010.06版本以后处理器相关的代码集中在arch、board目录。(以前版本主要在cpu和board目录)

u-boot-2010.06及以后版本

├── api                存放uboot提供的接口函数
├── arch               与体系结构相关的代码,uboot的重头戏
├── board              根据不同开发板定制的代码,代码也不少
├── common             通用的代码,涵盖各个方面,已命令行处理为主
├── disk                磁盘分区相关代码
├── doc                文档,一堆README开头的文件
├── drivers            驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples           示例程序
├── fs                 文件系统,支持嵌入式开发板常见的文件系统
├── include            头文件,已通用的头文件为主
├── lib                通用库文件
├── nand_spl           NAND存储器相关代码
├── net                网络相关代码,小型的协议栈
├── onenand_ipl
├── post               加电自检程序
└── tools              辅助程序,用于编译和检查uboot目标文件

先看一下arch目录:
arch
├── arm
├── avr32
├── blackfin
├── i386
├── m68k
├── microblaze
├── mips
├── nios2
├── powerpc
├── sh
└── sparc

arch/arm
├── cpu      //把cpu合并到此处
├── include
└── lib

                                            

uboot启动流程

start.s分析:https://blog.csdn.net/shenlong1356/article/details/87914380 

uboot.lds分析   :     https://blog.csdn.net/shenlong1356/article/details/87911595

      从uboot.lds分析:   可以看出uboot从start.s文件的start开始执行

 

                   reset       //完成芯片相关初始化:进入SVC模式,关闭看门狗,关闭中断,设置时钟频率 ,

                        ↓

                cpu_init_crit  --->  lowlevel_init ()              //清楚I/D Cache  ,  禁止MMU和CACHE,  配置memory control

                        ↓

                   relocate                     //重定位:如果代码不在指定的地址上需要把uboot从当前位置copy到RAM指定位置上

                        ↓

                stack_setup             //建立堆栈,为进入C函数做准备   清0 .bss段

                        ↓

               start_armboot()            //第二阶段启动,第一个c函数

                        ↓

             init_sequence[]          //

                        ↓

                  getenv()

                        ↓

                 main_loop()

 

uboot  makefile文件分析

 

uboot的编译烧写


 

你可能感兴趣的:(linux驱动开发)