作者drag (京都念慈庵,贾诩念费翔)
看板LinuxDev
标题Re: [问题] uboot的开机顺序
时间Mon Oct 13 17:05:45 2014
※ 引述《zelkova (*〞︶〝*)》之铭言:
: 最近在自修uboot开机流程
: google看过一些资料之後 我的理解是这样
: 1. 上电之後
: cpu会到flash或rom位置0x0(看cpu脚位设定), 复制uboot程序到ram中
: 2. uboot拷贝完成後
: 进行driver跟memory的初始化(暂存器), 以及设备的基本测试(看功能是不是正常)
: 3. uboot对装置初始化完成之後
: uboot会对软硬体的环境变数进行设置, 最後执行bootm去载入kernel, 离开uboot
: 身边没有人可以讨论
: 想请各位前辈确认我的理解是不是正确的 谢谢
简略解说,其实开机方式有很多种,
暂时就依你所认知的作补充,板上强者很多,如有讹误请不吝指教~
开机之前先区分一下软硬体部分,通常如下:
HW: 1)SOC(CPU+SRAM)
2)DRAM(SD,DDR或LPDDR等等)
3)其他周边(UART,LCD等)
SW: 1)OBL(Original Bootloader? On-chip Bootloader?也有人说RomCode,
认知上是写死在SOC内部的最早loader,也有听说过用硬体实现的)
2)U-Boot(其实不一定只能用uboot,也有其他各有特色的bootloader可使用,
只要你会porting)
3)kernel(uImage,zImage等,有时候还会有个rootfs,
没有的话可能是用ramdisk方式与kernel image绑在一起)
我使用过的平台来说
SRAM是内建的,开机通常不需要初始化,可直接存取,容量很小(64KB,128KB,256KB等)
DRAM通常是外挂,需要初始化(通常是MB等级,64MB,128MB...等,要几G有几G,
老板和HW同事说了算XD)
依据你的理解
CPU本身只会预设到最开始的位置0去跑(这要参阅各SOC datasheet)
通常那边会安排OBL存放
OBL跑起来(XIP,储存媒体可能是NOR flash在SOC)
去NAND或是SD卡(取决於硬体jumper设定--如果有的话)找第一block或是u-boot档名
把资料load到SRAM上面去
接着PC(program counter)跳过去开始U-boot执行,
通常会作下面几件事情
1. CPU/Clock init:设定CPU倍频,clock来源(内部震荡或是外部等等),倍率等
2. DRAM init: 设定DRAM特性 (例:填SOC register告诉Dram Interface你的DRam是CL几?
有无支援Burst mode?要不要slow slew rate?)
3. UART colsole init:至少debug用的UART要会动才能对U-boot下command
4. bootargs: 设定好kernel开机所需要用到的环境变数
5. loading kernel:把zImage或uImage从NAND或是SD捞出来,
放在启动的DRam上面,验证image合法後才把PC跳过去
driver的初始化,其实每个阶段都会作
OBL如果要UART console秀字,内建就会顺便初始UART(其实是直接填register)
U-boot因为本身的泛用性
基本上自己要有UART driver去初始console,
但也有人要用tftpboot,要用到网路,U-boot就需自带net PHY的driver
也有人要在U-boot阶段就点亮LCD,就需要自带LCD driver
但最重要的是CPU以及DRAM的初始化
而以上其他周边的driver,
在kernel启动之後,一样会重挂driver(LCD,UART,NAND,SD卡等)
至於CPU跟DRAM的初始倒是不会再动了
(本体在DRAM上面再去init DRAM-->鸡蛋的问题?)
我知道比较新的硬体以及kernel版本有支援动态变频,这方面的知识我没有,抱歉了~
对了,为什麽说顺着你的理解讲呢?
目前我所知道的流程有以下几种
OBL-->U-boot-->kernel
OBL-->MLO-->U-boot-->kernel (Linaro好像是这样的?)
OBL-->OBL2-->U-boot-->kernel (有的U-boot还有分身)
OBL-->OBL2-->kernel
等等等...取决於硬体限制以及软体支援度
这边只分享开机而已
这东西是一翻两瞪眼,(开机vs无法开机)
更重要的事情是在开机之後所要作的事情,
如有错误还请各位大大开示了! Orz
--
明月几时有?把酒问青天,不知天上宫阙,今夕是何年?
我欲乘风归去,惟恐琼楼玉宇,高处不胜寒;
起舞弄清影,何似在人间。
转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?
人有悲欢离合,月有阴晴圆缺,此事古难全。
但愿人长久,千里共婵娟。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.230.97.154
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1413191147.A.F28.html
※ 编辑: drag (61.230.97.154), 10/13/2014 17:08:54
1F:推 zelkova: 感谢drag大大的分享 很受用 之後会找板子来玩玩看<(_ _)> 10/13 21:43
2F:推 askacis: MLO好处是够小,chip内的bootcode 不用花太多搬他 10/13 23:30
3F:→ askacis: 因为这个阶段的bootcode能用的资源很有限,像我用过的SOC 10/13 23:31
4F:→ askacis: TI在这个阶段只能用1bit mode去读SD卡,有些chip甚至 10/13 23:32
5F:→ askacis: 甚至只能读资料到register,缩小第一阶段的bootloader 10/13 23:33
6F:→ askacis: 就有很多好处了~ 10/13 23:34
7F:→ drag: 通常MLO主要作CPU/DRAM init,这取决於u-boot放在哪,能放多大 10/14 16:58