嵌入式linux系统地启动过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、分析嵌入式系统的启动过程
嵌入式系统的启动过程:
上电------->u-boot------->加载Linux内核------->挂载rootfs ---->执行应用程序
二、分析u-boot
1.什么是u-boot(是一个通用的bootloader)
U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
Universal ----------->通用的
Boot ----------------->启动,引导
Loader ----------------->加载
通用------->支持多种架构的CPU,除了支持ARM系列的处理器外,还能支持MIPS、x86、Power PC、NIOS等诸多常用系列的处理器
------->支持多种厂家的开发板,如cortex-A8,cortex-A9,cortex-A53等不同厂
家的开发板
------->支持多种嵌入式操作系统,U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持Net BSD, Vx Works, QNX, RTEMS, ARTOS, Lynx OS, android
嵌入式操作系统。
Boot -------->完成硬件的初始化,启动硬件平台。
Loader ------->当初始化硬件结束后,加载操作系统。
2.u-boot的作用
大多数BootLoader都分为stage1和stage2两大部分,U-boot也不例外。依赖于cpu体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
(1)Stage1:CPU(S5P6818-->Cortex-A53)的初始化,使用汇编语言编写。
如:初始化Cache、MMU、clock、中断、看门狗、DDR3、eMMC、...
(2)Stage2:板级初始化,使用C语言编写。
如:uart、网卡、usb、LCD、....
(3)提供了一些工具,如进入uboot的命令行模式,使用u-boot命令
(4)加载操作系统
3.U-boot的工作模式
U-Boot的工作模式有启动加载模式和下载模式。
(1)启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。
(2)下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。
4.U-boot的输出
U-Boot 2014.07 (Apr 27 2017 - 15:45:25) -------->u-boot的版本号
PLL : [0] = 800000000, [1] = 800000000, [2] = 780000000, [3] = 800000000
(0) PLL1: CPU FCLK = 800000000, HCLK = 200000000 (G0)
(7) PLL1: CPU FCLK = 800000000, HCLK = 200000000 (G1)
(2) PLL3: MEM FCLK = 800000000, DCLK = 800000000, BCLK = 400000000, PCLK = 200000000
(1) PLL0: BUS BCLK = 400000000, PCLK = 200000000
(8) PLL0: CCI4 BCLK = 400000000, PCLK = 200000000
(3) PLL0: G3D BCLK = 400000000
(4) PLL0: CODA BCLK = 400000000, PCLK = 200000000
(5) PLL0: DISP BCLK = 400000000, PCLK = 200000000
(6) PLL0: HDMI PCLK = 133333333
I2C: ready
DRAM: 1 GiB --------->内存1GB
Heap = 0x44000000~0x46000000
Code = 0x43c00000~0x43c83e48
GLD = 0x43bffeb8
GLBD = 0x43bffe68
SP = 0x43bffe68,0x43bffe48(CURR)
PC = 0x43c06640
TAGS = 0x40000100
PAGE = 0x43c90000~0x43c9c000
MACH = [4330]
VER = 0
BOARD= [x6818]
MMC: NXP DWMMC: 0, NXP DWMMC: 1, NXP DWMMC: 2
In: serial
Out: serial
Err: serial
## DCDC_MODE(0x80): DCDC1[PFM], DCDC2[PFM], DCDC3[PFM], DCDC4[PWM], DCDC5[PWM]
## STATUS(0x00) : 0xe4 0x10
## IRQ(0x48) : 0x00 0x00 0x00 0x00 0x00
## CHG_TYPE : ADP
## BAT_VOL : 0mV
## BAT_CAP : 100%
DONE: Logo bmp 300 by 300 (3bpp), len=270056
DRAW: 0x47000000 -> 0x46000000
DONE: Logo bmp 300 by 300 (3bpp), len=270056
DRAW: 0x47000000 -> 0x46000000
RGB: display.0
MIPI: display.0
DSIM_ESCMODE 1 : 0xc0
DSIM_STATUS : 0x10010f
MIPI clk: 420MHz
DSIM_ESCMODE 2 : 0x0
DSIM_STATUS : 0x10010f
## Skip BAT Animation.
## IRQ(0x48) : 0x00 0x00 0x00 0x00 0x00
## chg_type : ADP
## battery_vol : 0mV
## battery_cap : 100%
## Booting
Card did not respond to voltage select!
Net: x6818 eth init...
x6818 mac init...
dwmac.c0060000
Hit any key to stop autoboot: 0
X6818#
5.u-boot的信息
X6818# bdinfo ----------->查看硬件平台的信息
arch_number = 0x000010EA --------->u-boot针对具体硬件平台的ID boot_params = 0x40000100 ---------->u-boot传递给内存的启动参数DRAM bank = 0x00000000
-> start = 0x40000000 --------->内存的开始地址
-> size = 0x40000000 -------->内存的大小
eth0name = dwmac.c0060000
ethaddr = 00:e2:1c:ba:e8:60
current eth = dwmac.c0060000
ip_addr = 192.168.5.41
baudrate = 115200 bps
TLB addr = 0x7FFF0000