Bootloader和Kernel

目标板处理器上电或者复位之后,首先执行引导程序(Bootloader),初始化内存等硬件,然后把压缩的内核映像加载到内存中,最后跳转到内核映像入口执行。
目标板上的Bootloader具有加载内核映像的功能。在嵌入式Linux开发中,常常用到网络加载的方式,就是通过Tftp协议把内核映像加载到目标板内存中。不同的Bootloader有不同的配置方法,这里以U-boot为例说明。U-boot支持多种启动加载模式,包括从网络和从FLASH启动。这里以从网络启动为例。
U-Boot 1.1.4 (Jun 29 2007 - 13:26:53)
U-Boot code: 31F80000 -> 31F9DCE0  BSS: -> 31FA2350
RAM Configuration:
Bank #0: 30000000 32 MB
Nor Flash: 512 KB
Nand Flash:    64 MB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
NANO2410=> Tftp 30008000 zImage
系统加电后首先启动了U-Boot,当出现命令提示符后,输入命令:
Tftp 30008000 zImage
表示从服务器上通过Tftp下载内核镜像zImage。之后出现下面的提示。
Tftp from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'zImage'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
############################################
done
Bytes transferred = 1555932 (17bddc hex)
通过前面的Tftp命令,将内核下载到了内存地址的30008000处。在下载的同时还显示了下载进度。由于这是Linux 2.6的内核,而其包含了较多的驱动和模块,使得体积较大,有1555932字节长,若是2.4版本的内核,通常不会超过1MB。
NANO2410=>go 30008000
## Starting application at 0x30008000 ...
Uncompressing Linux.................................
............................
.......................... done, booting the kernel.   
当输入命令:
 go 30008000
ootloader将内核镜像解压,并跳转至内核映像入口地址,开始启动内核。
Linux version 2.6.18.2 (swordzj@swordzj-desktop) (gcc version 3.4.1) #1 Wed Jul
18 22:00:09 CST 2007
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177
Machine: SMDK2410
ATAG_INITRD is deprecated; please update your bootloader.
Memory policy: ECC disabled, Data cache writeback
CPU S3C2410A (id 0x32410002)
S3C2410: core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz
S3C24XX Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
Scanning device for bad blocks
Creating 4 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00100000 : "bootloader"
0x00100000-0x00300000 : "kernel"
0x00300000-0x02b00000 : "root"
0x02b00000-0x04000000 : "user"
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
eth0: using half-duplex 10Base-T (RJ-45)
在经历一系列的初始化过程之后,内核启动完毕,接下来启动Init程序。
BusyBox v1.4.2 (2007-07-01 17:44:36 CST) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
[root@swordzj /]$
嵌入式程序的Init程序完成的工作很少,一般不需要实现Login等复杂的功能,而是直接启动shell。

你可能感兴趣的:(职场,休闲)