官术网_书友最值得收藏!

  • 嵌入式Linux開發教程
  • 宋娟 馬華杰主編
  • 1654字
  • 2021-01-04 16:03:57

1.5 啟動目標板系統

Linux 系統的一般啟動過程包括引導內核、啟動內核和啟動初始化程序三個階段,如圖1-20所示。

圖1-20 Linux的啟動過程

1.5.1 Boot Loader和Kernel

目標板處理器上電或者復位之后,首先執行引導程序(Boot Loader),初始化內存等硬件,然后把壓縮的內核映像加載到內存中,最后跳轉到內核映像入口執行。

目標板上的 Boot Loader 具有加載內核映像的功能。在嵌入式Linux開發中,常常用到網絡加載的方式,就是通過Tftp協議把內核映像加載到目標板內存中。不同的 Boot Loader 有不同的配置方法,這里以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 4.6的內核,而其包含了較多的驅動和模塊,使得體積較大,有1555932字節長,若是2.4版本的內核,通常不會超過1MB。

NANO2410=>go 30008000

## Starting application at 0x30008000 ...

Uncompressing Linux.............................................................

.......................... done, booting the kernel.

當輸入命令:

go 30008000

Boot Loader將內核鏡像解壓,并跳轉至內核映像入口地址,開始啟動內核。

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。

1.5.2 根文件系統

在內核啟動到最后,必須為其掛接一個根文件系統。從文件系統中啟動Init程序,以完成剩下的系統啟動過程。

在交叉開發環境中,通常采用NFS文件系統,在內核的啟動過程中掛載由主機共享的根文件系統,這種方式將大大地方便主機與目標板的數據共享。

要使目標板能夠加載上NFS根文件系統,需要做兩方面的工作。一是在主機端配置NFS服務器和準備好文件系統所需的文件和目錄結構。二是配置目標板的內核選項。關于主機端的配置在前面的內容中已經介紹過了,這里主要介紹內核的配置內容。使用NFS的根文件系統必須首先具備以下條件。

1.有正確的以太網接口驅動

內核的以太網驅動和Boot Loader中的以太網驅動是不一樣的,有時可能在Boot Loader中能正常使用的以太網,在內核中就不能使用了。在內核中配置以太網驅動一般在菜單項“Network device support”下。

2.配置內核啟動命令行參數

通過命令行參數可以告訴內核從哪里獲得根文件系統。配置內核啟動命令行參數默認值的菜單項為“Default kernel command line string”。格式如下:

root=/dev/nfs rw nfsroot=<nfs_server>:<root_path> ip=<target_ip>

參數的說明如下。

● <target_ip>:是為目標板指定的IP地址。

● <nfs_server>:是指定NFS服務器的IP。

● <root_path>:是指定要掛載的NFS服務器的目錄。

● root=/dev/nfs:則指定要掛接NFS根文件系統。

● rw:表示按照可讀/寫屬性掛載。

例如:

root=/dev/nfsrwnfsroot=192.168.1.1:/home/share/rootfs ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0:swordzj:eth0:off console=ttySAC0 115200 ehtaddr=08:00:3e:26:0a:5b mem=32M init=/linuxrc

表示掛載服務器 192.168.1.1 的/home/share/rootfs 為根文件系統,目標板的 IP 地址為192.168.1.2。此外還包含以下關于目標板的啟動信息。

● 網關地址:192.168.1.1。

● 子網掩碼:255.255.255.0。

● 主機名:lc-pc。

● 以太網接口:eth0。

● 以太網MAC:08:00:3e:26:0a:5b。

● 串口設備:ttySAC0(串口1,這是在Linux4.6內核下的設置)。

● 串口數率:115200。

● 內存大小:32MB。

● Init程序路徑:/linuxrc。

3.配置內核支持NFS根文件系統

在內核配置中,選中:“File Systems”“Kernel automounter support”“Network File Systems”和“NFS file system support”,配置編譯為內核,下載到目標板上啟動,如果準備工作沒有遺漏,此時NFS根文件系統就可以掛載到內核上了。至此,交叉開發環境就建立起來了。

主站蜘蛛池模板: 句容市| 阜南县| 清苑县| 依安县| 东乌| 广河县| 巢湖市| 泾阳县| 大丰市| 漳浦县| 偏关县| 蒙山县| 马龙县| 荣昌县| 望城县| 岳阳市| 裕民县| 竹北市| 铜山县| 华坪县| 简阳市| 正阳县| 缙云县| 蓝田县| 新蔡县| 宝山区| 松溪县| 乡城县| 东乡| 青田县| 昆明市| 永济市| 临颍县| 伊金霍洛旗| 海淀区| 新野县| 无锡市| 方正县| 津南区| 河南省| 巴彦淖尔市|