嵌入式linux系统的启动过程.docx

上传人:b****6 文档编号:15693961 上传时间:2023-07-06 格式:DOCX 页数:12 大小:27.48KB
下载 相关 举报
嵌入式linux系统的启动过程.docx_第1页
第1页 / 共12页
嵌入式linux系统的启动过程.docx_第2页
第2页 / 共12页
嵌入式linux系统的启动过程.docx_第3页
第3页 / 共12页
嵌入式linux系统的启动过程.docx_第4页
第4页 / 共12页
嵌入式linux系统的启动过程.docx_第5页
第5页 / 共12页
嵌入式linux系统的启动过程.docx_第6页
第6页 / 共12页
嵌入式linux系统的启动过程.docx_第7页
第7页 / 共12页
嵌入式linux系统的启动过程.docx_第8页
第8页 / 共12页
嵌入式linux系统的启动过程.docx_第9页
第9页 / 共12页
嵌入式linux系统的启动过程.docx_第10页
第10页 / 共12页
嵌入式linux系统的启动过程.docx_第11页
第11页 / 共12页
嵌入式linux系统的启动过程.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式linux系统的启动过程.docx

《嵌入式linux系统的启动过程.docx》由会员分享,可在线阅读,更多相关《嵌入式linux系统的启动过程.docx(12页珍藏版)》请在冰点文库上搜索。

嵌入式linux系统的启动过程.docx

嵌入式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,注释掉最后三行

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2