嵌入式linux系统的启动过程.docx
《嵌入式linux系统的启动过程.docx》由会员分享,可在线阅读,更多相关《嵌入式linux系统的启动过程.docx(11页珍藏版)》请在冰点文库上搜索。
嵌入式linux系统的启动过程
1、分析嵌入式系统的启动过程
嵌入式系统的启动过程:
上电------->u-boot------->加载Linux内核------->挂载rootfs---->执行应用程序
2、分析u-boot
1.什么是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-Boot(Apr272017-15:
45:
25)-------->u-boot的版本号
PLL:
[0]=0,[1]=0,[2]=0,[3]=0
(0)PLL1:
CPUFCLK=0,HCLK=0(G0)
(7)PLL1:
CPUFCLK=0,HCLK=0(G1)
(2)PLL3:
MEMFCLK=0,DCLK=0,BCLK=0,PCLK=0
(1)PLL0:
BUSBCLK=0,PCLK=0
(8)PLL0:
CCI4BCLK=0,PCLK=0
(3)PLL0:
G3DBCLK=0
(4)PLL0:
CODABCLK=0,PCLK=0
(5)PLL0:
DISPBCLK=0,PCLK=0
(6)PLL0:
HDMIPCLK=3
I2C:
ready
DRAM:
1GiB--------->内存1GB
Heap=0x~0x
Code=0x43c00000~0x43c83e48
GLD=0x43bffeb8
GLBD=0x43bffe68
SP=0x43bffe68,0x43bffe48(CURR)
PC=0x43c06640
TAGS=0x
PAGE=0x43c90000~0x43c9c000
MACH=[4330]
VER=0
BOARD=[x6818]
MMC:
NXPDWMMC:
0,NXPDWMMC:
1,NXPDWMMC:
2
In:
serial
Out:
serial
Err:
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=270056
DRAW:
0x->0x
DONE:
Logobmp300by300(3bpp),len=270056
DRAW:
0x->0x
RGB:
MIPI:
DSIM_ESCMODE1:
0xc0
DSIM_STATUS:
0x10010f
MIPIclk:
420MHz
DSIM_ESCMODE2:
0x0
DSIM_STATUS:
0x10010f
##SkipBATAnimation.
##IRQ(0x48):
0x000x000x000x000x00
##chg_type:
ADP
##battery_vol:
0mV
##battery_cap:
100%
##Booting
Carddidnotrespondtovoltageselect!
Net:
x6818ethinit...
x6818macinit...
Hitanykeytostopautoboot:
0
X6818#
5.u-boot的信息
X6818#bdinfo----------->查看硬件平台的信息
arch_number=0x000010EA--------->u-boot针对具体硬件平台的ID
boot_params=0x---------->u-boot传递给内存的启动参数
DRAMbank=0x00000000
->start=0x--------->内存的开始地址
->size=0x-------->内存的大小
eth0name=
ethaddr=00:
e2:
1c:
ba:
e8:
60
currenteth=
ip_addr=
baudrate=115200bps
TLBaddr=0x7FFF0000
relocaddr=0x
relocoff=0x00000000
irq_sp=0x7DF6BF00
spstart=0x43BFFE68
DDR3的内存地址范围:
0x~0x7FFFFFFF
X6818#printenv----------->查看u-boot的环境变量
androidcrc=-0
baudrate=115200
bootargs=lcd=at070tn92tp=gslx680-linuxroot=/dev/mmcblk0p2rwrootfstype=ext4
bootcmd=ext4loadmmc2:
10xuImage;bootm0x
bootdelay=5
bootfile=uImage
ethact=
ethaddr=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:
0x,0x1AC00000;flash=mmc,2:
misc:
emmc:
0x4E000000,0x00800000;flash=mmc,2:
recovery:
emmc:
0x4E900000,0x01600000;flash=mmc,2:
userdata:
ext4:
0x,0x0;
filesize=41ee8
gatewayip=---------->网关
ipaddr=--------->板子的IP
netmask=--------->子网掩码
serverip=--------->tftp服务器的IP
stderr=serial
stdin=serial
stdout=serial
Environmentsize:
846/32764bytes
关键的内容:
(1)bootargs------->启动参数
bootargs=lcd=at070tn92tp=gslx680-linuxroot=/dev/mmcblk0p2rwrootfstype=ext4
lcd=at070tn92------->液晶屏的型号,800*480
tp=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/dev
brw-rw----1rootroot179,0Jan11970mmcblk0
brw-rw----1rootroot179,8Jan11970mmcblk0boot0
brw-rw----1rootroot179,16Jan11970mmcblk0boot1
brw-rw----1rootroot179,1Jan11970mmcblk0p1
brw-rw----1rootroot179,2Jan11970mmcblk0p2
brw-rw----1rootroot179,3Jan11970mmcblk0p3
brw-rw----1rootroot179,4Jan11970mmcblk0p4
brw-rw----1rootroot179,5Jan11970mmcblk0p5
brw-rw----1rootroot179,6Jan11970mmcblk0p6
brw-rw----1rootroot179,7Jan11970mmcblk0p7
179-------->主设备号2------->次设备号,设备号=主设备号<<20+次设备号
(2)bootcmd------->启动命令
bootcmd=ext4loadmmc2:
10xuImage;bootm0x
以ext4文件系统格式去emmc的第一个分区加载Linux内核,加载到0x地址上,然后在0x地址上启动Linux内核。
通俗的理解:
bootcmd告诉u-boot去哪里加载Linux内核,bootargs告诉linux内核,去哪里挂载rootfs。
(3)修改启动延时时间
#setenvbootdelay3
#saveenv
3、分析linux内核
1.linux的作用
(1)进程管理和进程通信:
进程的创建和删除,进程的优先级抢占,进程的时间片轮转,进程间的通信机制
(2)内存管理:
内存分配算法,每个进程的内存空间
(3)内核支持的文件系统:
#cat/proc/filesystems
(4)设备管理:
------>linux驱动---->字符设备,块设备,网络设备,中断,内核时钟
(5)网络协议:
如tcp/ip协议
2.GEC6818开发板------>输出信息
GEC-------GuangdongEmbeddedCenter
(1)u-boot加载内核
##BootingkernelfromLegacyImageat...
ImageName:
--------------------->linux内核版本
ImageType:
ARMLinuxKernelImage(uncompressed)
DataSize:
5533496Bytes=MiB
LoadAddress:
------------------->DDR3内存的地址
EntryPoint:
VerifyingChecksum...OK
LoadingKernelImage...OK
Startingkernel...
(2)Linux内核启动
[]BootingLinuxonphysicalCPU0
(3)Linux内存管理
[]Memory:
1024MB=1024MBtotal
[]Memory:
810800k/810800kavailable,237776kreserved,272384Khighmem
[]Virtualkernelmemorylayout:
[]vector:
0xffff0000-0xffff1000(4kB)
[]fixmap:
0xfff00000-0xfffe0000(896kB)
[]vmalloc:
0xef800000-0xfee00000(246MB)
[]lowmem:
0xc0000000-0xef600000(758MB)
[]pkmap:
0xbfe00000-0xc0000000(2MB)
[]modules:
0xbf000000-0xbfe00000(14MB)
[].text:
0xc0008000-0xc0a54188(10545kB)
[].init:
0xc0a55000-0xc0a92100(245kB)
[].data:
0xc0a94000-0xc0b2e488(618kB)
[].bss:
0xc0b2e4ac-0xc0d0e1c8(1920kB)
[]SLUB:
Genslabs=11,HWalign=64,Order=0-3,MinObjects=0,CPUs=8,Nodes=1
(4)设备管理
[]usbcore:
registerednewinterfacedriverusbfs
[]i2c-gpio:
usingpins99(SDA)and98(SCL)
[]s3c-i2c:
i2c-1:
S3CI2Cadapter
[]s3c-i2c:
slaveaddress0x10
[]s3c-i2c:
busfrequencysetto195KHz
[]s3c-i2c:
i2c-2:
S3CI2Cadapter
[]s3c-i2c:
slaveaddress0x10
[]s3c-i2c:
busfrequencysetto195KHz
[]Linuxvideocaptureinterface:
[]axp22_ldo1:
3000mV
[]DisplayLCDregisteroperation
[]DisplayLVDSregisteroperation
[]DisplayMiPiregisteroperation
(5)网络协议
[]NET:
Registeredprotocolfamily2
[]IProutecachehashtableentries:
32768(order:
5,131072bytes)
[]TCPestablishedhashtableentries:
131072(order:
8,1048576bytes)
[]TCPbindhashtableentries:
65536(order:
8,1572864bytes)
[]TCP:
Hashtablesconfigured(established131072bind65536)
[]TCP:
renoregistered
[]UDPhashtableentries:
512(order:
3,32768bytes)
[]UDP-Litehashtableentries:
512(order:
3,32768bytes)
[]NET:
Registeredprotocolfamily1
(6)挂载rootfs
[]EXT4-fs(mmcblk0p2):
mountedfilesystemwithordereddatamode.Opts:
(null)
[]VFS:
Mountedroot(ext4filesystem)ondevice179:
2.
[]devtmpfs:
mounted
[]Freeinginitmemory:
244K
[]Writeprotectingthekerneltextsectionc0008000-c0a1e000
[]rodata_test:
attemptingtowritetoread-onlysection:
[]writetoread-onlysectiontrapped,success
[]EXT4-fs(mmcblk0p2):
re-mounted.Opts:
data=ordered
根文件系统在emmc的第2个分区上,根文件系统的格式是:
ext4
4、分析rootfs(根文件系统)
1.什么是rootfs
Linux内核挂载的第一个文件系统,根文件系统是挂载到根目录下的文件系统。
rootfs是一个”包”,里面包含:
[root@GEC6818/]#ls
IOTetclost+foundrootsysusr
binlibmntrunvar
devlinuxrcprocsbintmp
这些内容是什么
5、执行应用程序
GEC6818平台--------->IOT(InternetofThings)
rootfs挂载后-------->自动执行脚本/etc/rcS-------->自动执行/etc/profile------------>安装驱动------------>执行应用程序
vi/etc/profile,注释掉最后三行精心搜集整理,只为你的需要