嵌入式linux系统地启动过程.docx
- 文档编号:3687656
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:10
- 大小:27.88KB
嵌入式linux系统地启动过程.docx
《嵌入式linux系统地启动过程.docx》由会员分享,可在线阅读,更多相关《嵌入式linux系统地启动过程.docx(10页珍藏版)》请在冰豆网上搜索。
嵌入式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-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=133333333
I2C:
ready
DRAM:
1GiB--------->存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:
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:
0x47000000->0x46000000
DONE:
Logobmp300by300(3bpp),len=270056
DRAW:
0x47000000->0x46000000
RGB:
display.0
MIPI:
display.0
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...
dwmac.c0060000
Hitanykeytostopautoboot:
0
X6818#
5.u-boot的信息
X6818#bdinfo----------->查看硬件平台的信息
arch_number=0x000010EA--------->u-boot针对具体硬件平台的ID
boot_params=0x40000100---------->u-boot传递给存的启动参数
DRAMbank=0x00000000
->start=0x40000000--------->存的开始地址
->size=0x40000000-------->存的大小
eth0name=dwmac.c0060000
ethaddr=00:
e2:
1c:
ba:
e8:
60
currenteth=dwmac.c0060000
ip_addr=192.168.5.41
baudrate=115200bps
TLBaddr=0x7FFF0000
relocaddr=0x46000000
relocoff=0x00000000
irq_sp=0x7DF6BF00
spstart=0x43BFFE68
DDR3的存地址围:
0x40000000~0x7FFFFFFF
X6818#printenv----------->查看u-boot的环境变量
androidcrc=-411152780
baudrate=115200
bootargs=lcd=at070tn92tp=gslx680-linuxroot=/dev/mmcblk0p2rwrootfstype=ext4
bootcmd=ext4loadmmc2:
10x48000000uImage;bootm0x48000000
bootdelay=5
bootfile=uImage
ethact=dwmac.c0060000
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:
0x33300000,0x1AC00000;flash=mmc,2:
misc:
emmc:
0x4E000000,0x00800000;flash=mmc,2:
recovery:
emmc:
0x4E900000,0x01600000;flash=mmc,2:
userdata:
ext4:
0x50000000,0x0;
filesize=41ee8
gatewayip=192.168.5.1---------->网关
ipaddr=192.168.5.41--------->板子的IP
netmask=255.255.255.0--------->子网掩码
serverip=192.168.5.40--------->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:
10x48000000uImage;bootm0x48000000
以ext4文件系统格式去emmc的第一个分区加载Linux核,加载到0x48000000地址上,然后在0x48000000地址上启动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加载核
##BootingkernelfromLegacyImageat48000000...
ImageName:
Linux-3.4.39-gec--------------------->linux核版本
ImageType:
ARMLinuxKernelImage(uncompressed)
DataSize:
5533496Bytes=5.3MiB
LoadAddress:
40008000------------------->DDR3存的地址
EntryPoint:
40008000
VerifyingChecksum...OK
LoadingKernelImage...OK
Startingkernel...
(2)Linux核启动
[0.000000]BootingLinuxonphysicalCPU0
(3)Linux存管理
[0.000000]Memory:
1024MB=1024MBtotal
[0.000000]Memory:
810800k/810800kavailable,237776kreserved,272384Khighmem
[0.000000]Virtualkernelmemorylayout:
[0.000000]vector:
0xffff0000-0xffff1000(4kB)
[0.000000]fixmap:
0xfff00000-0xfffe0000(896kB)
[0.000000]vmalloc:
0xef800000-0xfee00000(246MB)
[0.000000]lowmem:
0xc0000000-0xef600000(758MB)
[0.000000]pkmap:
0xbfe00000-0xc0000000(2MB)
[0.000000]modules:
0xbf000000-0xbfe00000(14MB)
[0.000000].text:
0xc0008000-0xc0a54188(10545kB)
[0.000000].init:
0xc0a55000-0xc0a92100(245kB)
[0.000000].data:
0xc0a94000-0xc0b2e488(618kB)
[0.000000].bss:
0xc0b2e4ac-0xc0d0e1c8(1920kB)
[0.000000]SLUB:
Genslabs=11,HWalign=64,Order=0-3,MinObjects=0,CPUs=8,Nodes=1
(4)设备管理
[0.207000]usbcore:
registerednewinterfacedriverusbfs
[0.208000]i2c-gpioi2c-gpio.0:
usingpins99(SDA)and98(SCL)
[0.209000]s3c-i2cs3c2440-i2c.1:
i2c-1:
S3CI2Cadapter
[0.210000]s3c-i2cs3c2440-i2c.1:
slaveaddress0x10
[0.210000]s3c-i2cs3c2440-i2c.1:
busfrequencysetto195KHz
[0.211000]s3c-i2cs3c2440-i2c.2:
i2c-2:
S3CI2Cadapter
[0.211000]s3c-i2cs3c2440-i2c.2:
slaveaddress0x10
[0.211000]s3c-i2cs3c2440-i2c.2:
busfrequencysetto195KHz
[0.212000]Linuxvideocaptureinterface:
v2.00
[0.223000]axp22_ldo1:
3000mV
[0.353000]DisplayLCDregisteroperation
[0.354000]DisplayLVDSregisteroperation
[0.354000]DisplayMiPiregisteroperation
(5)网络协议
[0.331000]NET:
Registeredprotocolfamily2
[0.331000]IProutecachehashtableentries:
32768(order:
5,131072bytes)
[0.332000]TCPestablishedhashtableentries:
131072(order:
8,1048576bytes)
[0.334000]TCPbindhashtableentries:
65536(order:
8,1572864bytes)
[0.336000]TCP:
Hashtablesconfigured(established131072bind65536)
[0.336000]TCP:
renoregistered
[0.336000]UDPhashtableentries:
512(order:
3,32768bytes)
[0.337000]UDP-Litehashtableentries:
512(order:
3,32768bytes)
[0.337000]NET:
Registeredprotocolfamily1
(6)挂载rootfs
[3.959000]EXT4-fs(mmcblk0p2):
mountedfilesystemwithordereddatamode.Opts:
(null)
[3.961000]VFS:
Mountedroot(ext4filesystem)ondevice179:
2.
[3.968000]devtmpfs:
mounted
[3.970000]Freeinginitmemory:
244K
[3.974000]Writeprotectingthekerneltextsectionc0008000-c0a1e000
[3.981000]rodata_test:
attemptingtowritetoread-onlysection:
[3.987000]writetoread-onlysectiontrapped,success
[4.127000]EXT4-fs(mmcblk0p2):
re-mounted.Opts:
data=ordered
根文件系统在emmc的第2个分区上,根文件系统的格式是:
ext4
4、分析rootfs(根文件系统)
1.什么是rootfs
Linux核挂载的第一个文件系统,根文件系统是挂载到根目录下的文件系统。
rootfs是一个”包”,里面包含:
[rootGEC6818/]#ls
IOTetclost+foundrootsysusr
binlibmntrunvar
devlinuxrcprocsbintmp
这些容是什么?
5、执行应用程序
GEC6818平台--------->IOT(InternetofThings)
rootfs挂载后-------->自动执行脚本/etc/init.d/rcS-------->自动执行/etc/profile------------>安装驱动------------>执行应用程序
vi/etc/profile,注释掉最后三行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 linux 系统 启动 过程