随想录(我们从uboot学什么)
2017-02-28 22:32
169 查看
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
uboot的基本结构不复杂,主要就是一个裸循环的结构。但是,uboot包含的东西很多,有很多我们值得学习的东西。下面,我们就按照arm基本上电流程,看看一个soc芯片初始化到运行,需要完成哪些工作。
(1)cpu/arm920t/start.S
start.S包含了uboot进入c之间进行操作的地方,相关工作主要是关开门狗、关中断、设置pll、清cache、关mmu、初始化ddr寄存器、relocate code、准备sp、清bss,为进入start_armboot做准备。
(2)board/smdk2410/lowlevel_init.S
这个文件非常重要,它直接决定了ddr是否可以初始化成功,关系到后面是否把代码从norflash或者nandflash搬到ddr中继续运行。
(3)lib_arm/board.c
这是所有arm体系的soc最终都要到达的文件,也就是所有的soc初始化好之后都需要进入这个文件。除了进行一些设备的初始化之后,后面它就是等待命令、执行命令了。
(4)common/cmd_*.c
此处为command解析执行的地方,如果需要添加自己的命令,也是在这里完成的。
(5)drivers/*.c
这里是uboot驱动设置的地方,如果需要uboot识别自己额外添加的硬件,可以在这里添加自己的驱动代码。
补充:
所有uboot代码中,个人觉得最难以理解的代码就是pll和ddr初始化代码,基本没什么技巧,直接看着手册硬编。大家只能靠自己慢慢体会了。:-)
uboot的基本结构不复杂,主要就是一个裸循环的结构。但是,uboot包含的东西很多,有很多我们值得学习的东西。下面,我们就按照arm基本上电流程,看看一个soc芯片初始化到运行,需要完成哪些工作。
(1)cpu/arm920t/start.S
start.S包含了uboot进入c之间进行操作的地方,相关工作主要是关开门狗、关中断、设置pll、清cache、关mmu、初始化ddr寄存器、relocate code、准备sp、清bss,为进入start_armboot做准备。
(2)board/smdk2410/lowlevel_init.S
这个文件非常重要,它直接决定了ddr是否可以初始化成功,关系到后面是否把代码从norflash或者nandflash搬到ddr中继续运行。
(3)lib_arm/board.c
这是所有arm体系的soc最终都要到达的文件,也就是所有的soc初始化好之后都需要进入这个文件。除了进行一些设备的初始化之后,后面它就是等待命令、执行命令了。
(4)common/cmd_*.c
此处为command解析执行的地方,如果需要添加自己的命令,也是在这里完成的。
(5)drivers/*.c
这里是uboot驱动设置的地方,如果需要uboot识别自己额外添加的硬件,可以在这里添加自己的驱动代码。
补充:
所有uboot代码中,个人觉得最难以理解的代码就是pll和ddr初始化代码,基本没什么技巧,直接看着手册硬编。大家只能靠自己慢慢体会了。:-)
相关文章推荐
- NorFlash和NandFlash有什么区别?为什么一般我们的Uboot要从NorFlash启动呢?
- 随想录(大学给了我们什么)
- 我们工作到底为了什么(这篇文章很重要)
- MyEclipse中,当我们写一个类实现一个接口时,会自动生成重写该接口的方法,但是,方法的参数提示不够好,是什么原因导致的呢?该如何解决呢?
- 我们所期待的WPF/E到底是什么样子?
- 笔记本,我们真正需要的是什么?
- C#3.0 为我们带来什么——目录
- 从BlackHat2013中我们收获了什么
- 当我们说Go语言的时候,我们在说些什么?
- iOS7时代我们用什么来追踪和识别用户?
- [译] Web Components 是什么?它为什么对我们这么重要?
- 我们丢了什么
- ping域名怎么用?通过ping域名我们能看见什么?
- EJB3,我们究竟得到了什么 (3)
- Unity3D白皮书(四) Unity3D在渲染方面都帮我们做了什么?
- 我们的工作到底是为了什么?
- iPhone实战:在开发过程中我们要注意什么
- 当我们谈 SQL 优化时在谈些什么?
- 信息化能给我们带来什么?