您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 嵌入式linux系统的启动过程
一、分析嵌入式系统的启动过程嵌入式系统的启动过程:上电-------u-boot-------加载Linux内核-------挂载rootfs----执行应用程序二、分析u-boot1.什么是u-boot(是一个通用的bootloader)U-Boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。Universal-----------通用的Boot-----------------启动,引导Loader-----------------加载通用-------支持多种架构的CPU,除了支持ARM系列的处理器外,还能支持MIPS、x86、PowerPC、NIOS等诸多常用系列的处理器-------支持多种厂家的开发板,如cortex-A8,cortex-A9,cortex-A53等不同厂家的开发板-------支持多种嵌入式操作系统,U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS,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-Boot2014.07(Apr272017-15:45:25)--------u-boot的版本号PLL:[0]=800000000,[1]=800000000,[2]=780000000,[3]=800000000(0)PLL1:CPUFCLK=800000000,HCLK=200000000(G0)(7)PLL1:CPUFCLK=800000000,HCLK=200000000(G1)(2)PLL3:MEMFCLK=800000000,DCLK=800000000,BCLK=400000000,PCLK=200000000(1)PLL0:BUSBCLK=400000000,PCLK=200000000(8)PLL0:CCI4BCLK=400000000,PCLK=200000000(3)PLL0:G3DBCLK=400000000(4)PLL0:CODABCLK=400000000,PCLK=200000000(5)PLL0:DISPBCLK=400000000,PCLK=200000000(6)PLL0:HDMIPCLK=133333333I2C:readyDRAM:1GiB---------内存1GBHeap=0x44000000~0x46000000Code=0x43c00000~0x43c83e48GLD=0x43bffeb8GLBD=0x43bffe68SP=0x43bffe68,0x43bffe48(CURR)PC=0x43c06640TAGS=0x40000100PAGE=0x43c90000~0x43c9c000MACH=[4330]VER=0BOARD=[x6818]MMC:NXPDWMMC:0,NXPDWMMC:1,NXPDWMMC:2In:serialOut:serialErr:serial##DCDC_MODE(0x80):DCDC1[PFM],DCDC2[PFM],DCDC3[PFM],DCDC4[PWM],DCDC5[PWM]##STATUS(0x00):0xe40x10##IRQ(0x48):0x000x000x000x000x00##CHG_TYPE:ADP##BAT_VOL:0mV##BAT_CAP:100%DONE:Logobmp300by300(3bpp),len=270056DRAW:0x47000000-0x46000000DONE:Logobmp300by300(3bpp),len=270056DRAW:0x47000000-0x46000000RGB:display.0MIPI:display.0DSIM_ESCMODE1:0xc0DSIM_STATUS:0x10010fMIPIclk:420MHzDSIM_ESCMODE2:0x0DSIM_STATUS:0x10010f##SkipBATAnimation.##IRQ(0x48):0x000x000x000x000x00##chg_type:ADP##battery_vol:0mV##battery_cap:100%##BootingCarddidnotrespondtovoltageselect!Net:x6818ethinit...x6818macinit...dwmac.c0060000Hitanykeytostopautoboot:0X6818#5.u-boot的信息X6818#bdinfo-----------查看硬件平台的信息arch_number=0x000010EA---------u-boot针对具体硬件平台的IDboot_params=0x40000100----------u-boot传递给内存的启动参数DRAMbank=0x00000000-start=0x40000000---------内存的开始地址-size=0x40000000--------内存的大小eth0name=dwmac.c0060000ethaddr=00:e2:1c:ba:e8:60currenteth=dwmac.c0060000ip_addr=192.168.5.41baudrate=115200bpsTLBaddr=0x7FFF0000relocaddr=0x46000000relocoff=0x00000000irq_sp=0x7DF6BF00spstart=0x43BFFE68DDR3的内存地址范围:0x40000000~0x7FFFFFFFX6818#printenv-----------查看u-boot的环境变量androidcrc=-411152780baudrate=115200bootargs=lcd=at070tn92tp=gslx680-linuxroot=/dev/mmcblk0p2rwrootfstype=ext4bootcmd=ext4loadmmc2:10x48000000uImage;bootm0x48000000bootdelay=5bootfile=uImageethact=dwmac.c0060000ethaddr=00:e2:1c:ba:e8:60--------网卡的mac地址ethprime=RTL8211--------网卡芯片的型号fastboot=flash=mmc,2:ubootpak:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;flash=mmc,2:bootloader:boot:0x8000,0x70000;flash=mmc,2:boot:ext4:0x00100000,0x04000000;flash=mmc,2:system:ext4:0x04100000,0x2F200000;flash=mmc,2:cache:ext4:0x33300000,0x1AC00000;flash=mmc,2:misc:emmc:0x4E000000,0x00800000;flash=mmc,2:recovery:emmc:0x4E900000,0x01600000;flash=mmc,2:userdata:ext4:0x50000000,0x0;filesize=41ee8gatewayip=192.168.5.1----------网关ipaddr=192.168.5.41---------板子的IPnetmask=255.255.255.0---------子网掩码serverip=192.168.5.40---------tftp服务器的IPstderr=serialstdin=serialstdout=serialEnvironmentsize:846/32764bytes关键的内容:(1)bootargs-------启动参数bootargs=lcd=at070tn92tp=gslx680-linuxroot=/dev/mmcblk0p2rwrootfstype=ext4lcd=at070tn92-------液晶屏的型号,800*480tp=gslx680-linux--------触摸屏的型号root=/dev/mmcblk0p2-----rootfs在哪里,告诉kernel去哪里挂载rootfs/dev/mmcblk0p2----mmcblk0(emmc电子硬盘)p2(partion2,emmc电子硬盘的第二个分区)rwrootfstype=ext4------rootfs是可读可写的,根文件系统的类型是ext4练习:如何查看emmc电子硬盘有几个分区,以及设备的详细信息答:到根目录去查看cd/dev+ls-l或者ls-l/devbrw-rw----1rootroot179,0Jan11970mmcblk0brw-rw----1rootroot179,8Jan11970mmcblk0boot0brw-rw----1rootroot179,16Jan11970mmcblk0boot1brw-rw----1rootroot179,1Jan11970mmcblk0p1brw-rw----1rootroot179,2Jan11970mmcblk0p2brw-rw----1rootroot179,3Jan11970mmcblk0p3brw-rw----1rootroot179,4Jan11970mmcblk0p4brw-rw----1rootroot179,5Jan11970mmcblk0p5brw-rw----1rootroot179,6Jan11970mmcblk0p6brw-rw----1rootroot179,7Jan11970mmcblk0p7179--------主设备号2-------次设备号,设备号=主设备号20+次设备号(2)bootcmd-------启动命令bootcmd=ext4loadmmc2:10x48000000uImage;bootm0x48000000以ext4文件系统格式去emmc的第一个分区加载Linux内核,加载到0x48000000地址上,然后在0x48000000地址上启动Linux内核。通俗的理解:bootcmd告诉u-boot去哪里加载Linux内核,bootargs告诉linux内核,去哪里挂载ro
本文标题:嵌入式linux系统的启动过程
链接地址:https://www.777doc.com/doc-7029086 .html