BootLoader簡介與基本命令
在專用的嵌入式板子運(yùn)行GNU/Linux系統(tǒng)已經(jīng)變得越來越流行。一個(gè)嵌入式Linux系統(tǒng)從軟件的角度看通??梢苑譃樗膫€(gè)層次:
1、 引導(dǎo)加載程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。
2、 Linux內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。
3、 文件系統(tǒng)。包括根文件系統(tǒng)和建立于Flash內(nèi)存設(shè)備之上文件系統(tǒng)。通常用ramdisk來作為rootfs。
4、 用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。有時(shí)在用戶應(yīng)用程序和內(nèi)核層之間可能還會(huì)包括一個(gè)嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI懂。
引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。PC機(jī)中的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤MBR中的OS BootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤MBR中的BootLoader讀到系統(tǒng)的RAM中,然后將控制權(quán)交給OS BootLoader。BootLoader的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤上讀到 RAM 中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開始啟動(dòng)操作系統(tǒng)。
而在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。
簡單地說,BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
通常,BootLoader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的BootLoader幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫ootLoader歸納出一些通用的概念來,以指導(dǎo)用戶特定的BootLoader設(shè)計(jì)與實(shí)現(xiàn)。
二.U-BOOT介紹
uboot是一個(gè)龐大的公開源碼的軟件。他支持一些系列的arm體系,包含常見的外設(shè)的驅(qū)動(dòng),是一個(gè)功能強(qiáng)大的板極支持包。其代碼可以從http://sourceforge.net/projects/u-boot下載
U-BOOT是由PPCBOOT發(fā)展起來的,是PowerPC、ARM9、Xscale、X86等系統(tǒng)通用的Boot方案,從官方版本0.3.2開始全面支持SC系列單板機(jī)。u-boot是一個(gè)open source的bootloader,目前版本是0.4.0。u-boot是在ppcboot以及armboot的基礎(chǔ)上發(fā)展而來,雖然宣稱是0.4.0版本,卻相當(dāng)?shù)某墒旌头€(wěn)定,已經(jīng)在許多嵌入式系統(tǒng)開發(fā)過程中被采用。由于其開發(fā)源代碼,其支持的開發(fā)板眾多。唯一遺憾的是并不支持我們現(xiàn)在學(xué)習(xí)所用samsung 44B0X的開發(fā)板。
為什么我們需要u-boot?顯然可以將ucLinux直接燒入flash,從而不需要額外的引導(dǎo)裝載程序(bootloader)。但是從軟件升級的角度以及程序修補(bǔ)的來說,軟件的自動(dòng)更新非常重要。事實(shí)上,引導(dǎo)裝載程序(bootloader)的用途不僅如此,但僅從軟件的自動(dòng)更新的需要就說明我們的開發(fā)是必要的。
同時(shí),u-boot移植的過程也是一個(gè)對嵌入式系統(tǒng)包括軟硬件以及操作系統(tǒng)加深理解的一個(gè)過程。
四.常用U-BOOT命令介紹
1.list 得到所有命令列表
2.help: help usb, 列出USB功能的使用說明
3.ping:注:只能開發(fā)板PING別的機(jī)器
4.setenv: 設(shè)置互環(huán)境變量:
5.setenv serverip 192.168.0.1
6.setenv ipaddr 192.168.0.56
7.setenv bootcmd tftp 32000000 vmlinux; kgo 32000000’
8.saveenv: 保存環(huán)境變量
9.在設(shè)置好環(huán)境變量以后,保存變量值
10.tftp: tftp 32000000 vmlinux, 把server(IP=環(huán)境變量中設(shè)置的serverip)中/tftpdroot/ 下的vmlinux通過TFTP讀入到物理內(nèi)存32000000處。
11.kgo: 起動(dòng)沒有壓縮的linux內(nèi)核,kgo 32000000
12.bootm:起動(dòng)UBOOT TOOLS制作的壓縮LINUX內(nèi)核, bootm 3200000
13.protect: 對FLASH進(jìn)行寫保護(hù)或取消寫保護(hù), protect on 1:0-3(就是對第一塊FLASH的0-3扇區(qū)進(jìn)行保護(hù)),protect off 1:0-3取消寫保護(hù)
14.erase: 刪除FLASH的扇區(qū), erase 1:0-2(就是對每一塊FLASH的0-2扇區(qū)進(jìn)行刪除)
15.cp: 在內(nèi)存中復(fù)制內(nèi)容, cp 32000000 0 40000(把內(nèi)存中0x32000000開始的0x40000字節(jié)復(fù)制到0x0處)
16.mw: 對RAM中的內(nèi)容寫操作, mw 32000000 ff 10000(把內(nèi)存0x32000000開始的0x10000字節(jié)設(shè)為0xFF)
17.md: 修改RAM中的內(nèi)容, md 32000000(內(nèi)存的起始地址)
18.usb:
lusb start: 起動(dòng)usb 功能
lusb info: 列出設(shè)備
lusb scan: 掃描usb storage(u 盤)設(shè)備
19.fatls:列出DOS FAT文件系統(tǒng),如:fatls usb 0列出第一塊U盤中的文件
20.fatload: 讀入FAT中的一個(gè)文件,如:fatload usb 0:0 32000000 aa.txt
21.把USB中的aa.txt 讀到物理內(nèi)存0x32000000處!
22.flinfo: 列出flash的信息
23.loadb: 準(zhǔn)備用KERMIT協(xié)議接收來自kermit或超級終端傳送的文件。
24.nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件系統(tǒng))中的NFS文件系統(tǒng)中的aa.txt 讀入內(nèi)存0x32000000處。
2.help: help usb,
3.ping:注:只能開發(fā)板PING別的機(jī)器
4.setenv:
5.setenv serverip 192.168.0.1
6.setenv ipaddr 192.168.0.56
7.setenv bootcmd tftp 32000000 vmlinux; kgo 32000000’
8.saveenv:
9.在設(shè)置好環(huán)境變量以后,保存變量值
10.tftp: tftp 32000000 vmlinux,
11.kgo:
12.bootm:起動(dòng)UBOOT
13.protect: 對FLASH進(jìn)行寫保護(hù)或取消寫保護(hù), protect on 1:0-3(就是對第一塊FLASH的0-3扇區(qū)進(jìn)行保護(hù)),protect off 1:0-3取消寫保護(hù)
14.erase:
15.cp: 在內(nèi)存中復(fù)制內(nèi)容, cp 32000000 0 40000(把內(nèi)存中0x32000000開始的0x40000字節(jié)復(fù)制到0x0處)
16.mw: 對RAM中的內(nèi)容寫操作, mw 32000000 ff 10000(把內(nèi)存0x32000000開始的0x10000字節(jié)設(shè)為0xFF)
17.md: 修改RAM中的內(nèi)容, md 32000000(內(nèi)存的起始地址)
18.usb:
lusb start:
lusb info:
lusb scan:
19.fatls:列出DOS FAT文件系統(tǒng),如:fatls usb 0列出第一塊U盤中的文件
20.fatload:
21.把USB中的aa.txt 讀到物理內(nèi)存0x32000000處!
22.flinfo:
23.loadb:
24.nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件系統(tǒng))中的NFS文件系統(tǒng)中的aa.txt 讀入內(nèi)存0x32000000處。
評論