microtime computer inc. http //€¦ · 3、 認識llinux 的檔案系統及embedded linux...

49
DOC Number RM-033-04-304 DOC Version V1.00 Release Date 2007-04-27 Module Name U-Boot/Linux Kernel image 下載或燒錄的驗證實習 Platform Creator XScale-PXA270 Category Embedded Linux programming Difficulty Basic Experiment time Lectur xx minutes Operation xx minutes Key Word Author Microtime Computer Inc. http//www.microtime.com.tw

Upload: others

Post on 14-Aug-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

  • DOC Number : RM-033-04-304

    DOC Version : V1.00

    Release Date : 2007-04-27

    Module Name : U-Boot/Linux Kernel image 下載或燒錄的驗證實習

    Platform : Creator XScale-PXA270

    Category : Embedded Linux programming

    Difficulty : Basic

    Experiment time : Lectur : xx minutes

    Operation : xx minutes

    Key Word :

    Author : Microtime Computer Inc. http://www.microtime.com.tw

  • Copyright Notice

    Copyright ©2006 Microtime Computer Inc. All right reserved.

    No part of this publication may be reproduced, translated into another language, store in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, or otherwise without the prior written consent of Microtime Computer Inc.

    Disclaimer

    This information in this document is subject to change without notice.

    Every precaution has been taken in the preparation of this publication. Microtime assumes no responsibility for error or omission. Neither is any liability assumed for damages resulting from the use of the information contained herein.

    Trademarks

    Carrier ICE , Pocket-ARM and DOMINGO are trademarks of Microtime computer Inc.

    All other product names are trademarks or registered trademarks of their respective owners.

    Reversion History

    Version Descriptions Date

    V1.00 Initial release 2007-04-27

  • 前言.....................................................................................................................................................5

    實驗目的.....................................................................................................................................5

    實驗規格.....................................................................................................................................5

    實驗關聯.....................................................................................................................................5

    實驗背景需求.............................................................................................................................5

    實驗設備需求.............................................................................................................................5

    1. 實驗簡介.....................................................................................................................................7

    2. 系統說明.....................................................................................................................................7

    2.1 系統架構...........................................................................................................................7

    2.2 電路架構...........................................................................................................................7

    2.3 程式流程...........................................................................................................................7

    3. 基礎知識.....................................................................................................................................8

    3.1 Embedded Linux 系統初始化 .......................................................................................8

    3.1.1. Bootloader 及 Linux Kernel 啟動過程 ......................................................................8

    3.1.2. Embedded Linux 系統初始化 .....................................................................................9

    3.1.3. Head-XScale-PXS270.S ..........................................................................................10

    3.1.4. Embedded Linux Kernel Image 的產生 ....................................................................10

    3.2 Bootloader — U-Boot 介紹 .........................................................................................11

    3.2.1. U-Boot 的命令介紹 ...................................................................................................12

    3.2.2. U-Boot 的環境變數設定 ............................................................................................14

    3.3 Linux 的檔案系統種類.................................................................................................. 15

    3.4 Linux Target 端的根目錄規劃.................................................................................... 21

    3.4.1. 製作檔案系統:........................................................................................................22

    3.4.2. 移植檔案系統內容:.................................................................................................24

    3.5 Linux Target 端的 Flash 規劃 ....................................................................................26

    4. 實作...........................................................................................................................................27

  • 4.1 系統設置.........................................................................................................................27

    4.1.1. 系統硬體設置 ...........................................................................................................27

    4.1.2. 系統軟體設置 ...........................................................................................................28

    4.1.3. 實驗程式碼設置........................................................................................................28

    4.1.4. 重要檔案說明 ...........................................................................................................28

    4.1.5. 實驗架構圖 ...............................................................................................................28

    4.2 實作進行.........................................................................................................................30

    4.2.1. 原始碼檔案瀏覽........................................................................................................30

    4.2.2. Windows Host 端 TFTP Server 的安裝 .....................................................................30

    4.2.3. U-Boot 程式碼的安裝與編譯.....................................................................................32

    4.2.4. U-Boot image 檔的驗證與更新 .................................................................................33

    4.2.4.1. 利用 Domingo for Linux 更新 U-Boot.bin 檔 ..............................................................33

    4.2.4.2. 利用 U-Boot 更新 U-Boot.bin 檔 ...............................................................................36

    4.2.5. U-Boot—【燒錄 Linux Kernel 及 RootFS】 ..............................................................37

    4.2.6. U-Boot—【啟動 flash 中的 Linux Kernel 及 RootFS】..............................................39

    4.2.7. U-Boot—【啟動 flash 中的 Linux Kernel 及遠端 NFS server 的 RootFS】 ...............40

    4.2.8. Domingo for Linux—【ICE 啟動 Linux Kernel 及遠端 NFS Server 的 RootFS】 ......42

    4.2.9. Domingo for Linux—【ICE 啟動 Linux Kernel 及 Flash 中的 RootFS】 ....................48

    4.3 程式碼註解.....................................................................................................................48

    5. 結論...........................................................................................................................................49

    6. 習作...........................................................................................................................................49

    7. 參考資料...................................................................................................................................49

  • -5-

    前言

    實驗目的 1、 瞭解 Bootloader 及 Linux Kernel 的啟動程序。

    2、 認識 U-Boot 所提供的命令及環境變數。

    3、 認識 Llinux 的檔案系統及 Embedded Linux 的根目錄檔案系統的規劃方式。

    4、 瞭解 Linux Target 端—Create XScale-PXA270 的 flash 規劃模式。

    5、 學習 Linux Kernel 及 root filesystem 的驗證方式。

    實驗規格 本章實習說明 Linux Kernel 及 root filesystem 的驗證方式,主要驗證方式包含下列幾點:

    1、 學習 Domingo for Linux 利用 ICE 下載 Linux Kernel Image 及 root filesystem 到 ram的驗證方式。

    2、 學習 U-Boot 利用 TFTP 下載及燒錄 Linux Kernel Image 及 root filesystem

    實驗關聯 None

    實驗背景需求

    實驗設備需求 H/W requirements :

    1.) PC Host,COM port,網路 Hub,

    2.) Creator XCsale-PXA270 Development Kit

    S/W requirements :

    Linux for Creator XScale-PXA270 光碟。

  • -6-

    Domingo for Linux Ver.1.3(含)以上版本。

    通訊軟體:例如 Windows 的超級終端機。

  • -7-

    1. 實驗簡介

    本章實習的主要內容,要介紹如何利用 Domingo for Linux 或 U-Boot 來下載、燒錄和啟動驗證 Linux Kernel 及 root filesystem,除此之外也會介紹相關的理論說明。

    在理論部分將針對下列幾點加以說明:

    1、 Bootloader 及 Linux Kernel 的啟動程序。

    2、 U-Boot 的命令及環境變數介紹。

    3、 Linux 的檔案系統說明

    4、 Linux Target 端的根目錄檔案系統規劃。

    5、 Linux Target 端的 Flash 規劃。

    在實習理論部分將針對下列幾點加以說明:

    1、 Domingo for Linux 利用 ICE 下載 Linux Kernel Image 及 root filesystem 到 ram 的驗證方式。

    2、 U-Boot 利用 TFTP 下載及燒錄 Linux Kernel Image 及 root filesystem 的驗證方式。

    2. 系統說明

    2.1 系統架構

    2.2 電路架構

    2.3 程式流程

  • -8-

    3. 基礎知識

    3.1 Embedded Linux 系統初始化

    3.1.1. Bootloader 及 Linux Kernel 啟動過程

    上圖為 Bootloader 和 Linux Kernel 啟動過程,其實 Target 板啟動 Linux 的程序都類似,以下的步驟歸類了從開啟電源到出現 shell 提示符號的啟動過程,如下:

    1、 處理器經重設(Reset)或電源開啟之後,即開始執行唯讀記憶體中的基本設定程式,此類程式類似個人電腦的 BIOS。此基本設定程式碼會針對中央處理器,記憶體控制單元,單晶片裝置進行初始化動作,也會設定記憶體對應(Memory Map),接著會執行 Boot Loader 程式。

    2、 Boot Loader 會將 Linux Kernel 從非揮發性記憶體(如快閃記憶體)或是外部儲存裝置解壓縮到動態記憶體裡面去,然後會跳到核心的第一個指令去執行。核心首先會設定處

    理器的暫存器,初始化核心資料結構,偵測硬體,啟動驅動程式,這一部份是與硬體有

    關的初始化。

    Extract and decompress the kernel image

    Launch kernel

    Initial hardware and

    Initial device

    Mount root

    Run /sbin/init

    Issue login: prompt Start network services Start X-Windows …

    Boot code

    Linux kernel

    User Programs

  • -9-

    3、 接著跳至 start_kernel 執行,這是一個與硬體架構無關的起始點,核心此時會初始化核心的子系統,例如快取區,緩衝區,還有程序間通信(IPC),解譯核心的參數,開啟中斷(enable interrupt),計算系統的 BogoMips 作為延遲機制,接著初始化需要利用延遲機制的的子系統。

    4、 此時核心會產生 init 作為核心的一個執行緒(kernel thread),此期間做的主要一件事就是執行 do_basic_setup,開始設定執行環境,和檔案系統。

    5、 接著便會掛載(mount)root 檔案系統,掛載檔案系統的程序也可以包括先掛載 initrd,此即建構在 RAM 上面的暫時 root 檔案系統,如在無真實儲存裝置的嵌入式系統,initrd可以當作系統運作的 root 檔案系統。

    6、 核心執行緒 init 接著會產生一個使用者空間的 init 程序(process),載入共享的執行時期函式庫,如有記憶管理單元硬體的系統中,系統在會在這個階段啟動它。

    7、 接著使用者空間的 init 程序會讀取它的設定檔,並執行一個啟動 script,用以設定並啟動網路以及其他系統裝置,最後 init 進入 runlevel 階段,此時系統的各項服務才算是要開始運作,可開始登錄(login)作業。

    3.1.2. Embedded Linux 系統初始化

  • -10-

    3.1.3. Head-XScale-PXS270.S

    3.1.4. Embedded Linux Kernel Image 的產生

    vmlinux piggy

    piggy.o

    vmlinuzzImage

    piggy.gz

    objcopy gzip

    ld

    Head-Xscale-PXA270.o

    objcopy

  • -11-

    3.2 Bootloader — U-Boot 介紹 嵌入式系統常見的 Bootloader

    1、 U-Boot "Universal Boot loader"

    專供以 PowerPC 和 ARM 核心為基礎的嵌入式系統所用的 Boot loader。 •RedBoot︰由紅帽公司(RedHat)的 eCos 所延伸出來的,可攜性極高的嵌入式系統 Boot Loader)。

    2、 Blob

    LART 所用的 Boot loader,所謂 LART 就是 Linux Advanced Radio Terminal 的縮寫,意指小型但計算能力很強可以讓 Linux 作業系統在上面運作的嵌入式電腦。

    3、 Rrload

    專供以 ARM 核心為基礎的嵌入式系統所用的 Boot loader。

    4、 FILO

    與 x86 架構相容的 Boot Loader,他可以在沒有 BIOS 的狀況下直接由本地端的檔案系統載入開機映像檔。

    5、 CRL/OHH

    在快閃記憶體上專供以 ARM 核心為基礎的嵌入式系統所用的 Boot loader。

    6、 PPCBOOT

    專供以 PowerPC 核心為基礎的嵌入式系統所用的 Boot loader。

    7、 Alios

    能夠由唯讀記憶體或是動態記憶體完成基本的硬體初始化動作,以組合語言完成的

    Linux Loader,其設計目標在於免除在嵌入式系統中對於韌體 BIOS 的需求。

    開機引導程式 — Bootloader

    Bootloader 就是硬體系統開機時第一個執行的程式碼。

    如果以個人電腦來說明的話,Boot Loader 就是由 BIOS 和硬碟的主要開機磁區中的OS Loader(例如:LILO 或是 GRUB)所組成;BIOS 在完成硬體元件的檢測,初始化以及設定之後,將硬碟的主要開機磁區的 OS Loader 搬移到系統的記憶體,然後將系統控制權交給它。

    在嵌入式系統中,Boot Loader 的主要任務就是將系統核心搬移到系統的記憶體,可能需要傳入適當的參數給核心,這些參數可以來自開機命令行或儲存裝置,然後跳到核心

  • -12-

    的入口點執行,開始啟動作業系統;有些 Boot Loader 還扮演開機選單的角色,可以讓使用者選擇不同的作業系統開機,此類程式則有時稱為開機管理程式(boot manager)。

    1、 Bootloader 操作模式

    Boot Loader 大致都會有兩種操作模式,如下:

    2、 啟動載入(Boot Loading)模式

    Boot Loader 將儲存在電路板上的某個非揮發性儲存裝置的作業系統環境直接載入記憶體執行,而不需要使用者的介入。當嵌入式系統產品化之後,只會執行這個

    模式。

    3、 下載模式(Downloading)模式

    在這個模式下,Boot Loader 啟動後,可以接受使用者的命令,透過某些輸出輸入通道(例如序列埠或是乙太網路),更新嵌入式裝置中的映像檔。此模式通常只會

    在產品開發過程中供研發人員使用。

    在 Creator-XScale-PXA270 嵌入式系統中,Linux Target 端的 Bootloader 部分是利用U-Boot 完成的,接下來將依序介紹 U-Boot 所提供的命令和環境變數的說明。

    3.2.1. U-Boot 的命令介紹

    U-Boot 的操作是以命令列的模式呈現,

    候是以下列出常用的 U-Boot 命令,如下: 命令 說明

    printenv 列印環境變數,如:

    Uboot>printenv baudrate=115200 ipaddr=192.168.1.1 ethaddr=12:34:56:78:9A:BC serverip=192.168.1.5 Environment size: 80/8188 bytes

    setenv 設定新的環境變數,如:

    Uboot>setenv ipaddr 10.0.0.216 saveenv

    儲存新的環境變數。將目前定義所有的環境變數寫入 flash 中。

  • -13-

    loadb 從 serial line 下載 binary file

    tftp 透過 tftp server 下載檔案到設定的記憶體位置。

    執行 tftp command 前要先設定網路相關的環境變數。如:

    Uboot> setenv ethaddr 12:34:56:78:9A:BC

    Uboot> setenv ipaddr 192.168.1.1

    Uboot> setenv serverip 192.168.1.254

    以上分別設定 Linux Target 端的 mac address、ip address 以及Windows Host 端 tftp server 的 ip address。

    接下來利用 tftp 命令下載 Windows Host 端 tftp server 指定目錄下的 test.bin 檔到記憶體 0x20000000 位置,如下:

    Uboot> tftp 20000000 application.bin md

    顯示記憶體的內容。 mm

    修改記憶體內容,記憶體位址修改後遞增。 nm

    修改記憶體內容,記憶體位址修改後不變。 mw

    將記憶體區塊都田如相同的設定值。 cp

    複製記憶體區塊到另一指定區塊。 cmp

    比較兩記憶體區塊的值。 protect

    設定 flash sector 的 protect 為 on 或 off。 erase

    執行 Flash sector 的 erase。 run

    執行某個環境變數所設定的內容,如:

    Uboot> setenv flashit tftp 20000000 mycode.bin\; erase 10020000 1002FFFF\; cp.b 20000000 10020000 8000 Uboot> saveenv Uboot> run flashit

    go 到指定的記憶體位址執行應用程式。

    bootm 到指定的記憶體位址執行應用程式。

    此時會檢查執行的應用程式是否為 U-Boot 的特定格式。

  • -14-

    bootp 利用 BootP/TFTP protocol 啟動 image via network

    ? 所有命令列表。

    help 列出指定命令的使用說明。

    ping 註:只允許 Linux Target 端 PING  的機器。

    usb usb start:開啟 usb 功能。

    usb info:列出 usb 的相關資訊。

    usb scan:查詢 usb storage 設備。 Kgo

    啟動沒有壓縮的 linux kernel,如:

    Uboot>kgo 32000000 Flinfo

    列出 flash 的相關資訊。 Nfs

    如:Uboot>nfs 32000000 192.168.0.2:aa.txt 把 192.168.0.2 中的 NFS 檔案系統中的 aa.txt 檔案下載到記憶體的0x32000000 位置。

    3.2.2. U-Boot 的環境變數設定

    U-Boot 提供使用者對環境變數設定的功能,然而環境變數所提供的功能就是,當 U-Boot 啟動的時候會依照這些環境變數,設定程式所需的相關數值(如:ipaddr、baudrate…),這些環境變數 U-Boot 已經規劃儲存在 flash 中,並提供 setenv、saveenv、printenv 等相關命令對環境變數去做讀寫及查詢的動作。以下說明一些常用的環境變數,如下:

    類別 命令 說明 baudrate a decimal number that selects the console baudrate (in

    bps) Board

    Configuration ethaddr Ethernet MAC address for first/only ethernet interface

    bootdelay

    After reset,U-Boot will wait the number of seconds specified by this variable before it executes the contents of the bootcmd variable

    Startup Behaviour

    bootcmd This variable defines a command string that is automatically executed when the initial countdown is not interrupted. This command is only executed when the variable bootdelay is also defined!

  • -15-

    bootargs The contents of this variable is passed to the Linux kernel as boot arguments

    ipaddr IP address serverip TFTP server IP address gatewayip

    IP address of the Gateway (Router) to use

    netmask Subnet Mask hostname

    Target hostname

    rootpath Pathname of the root filesystem on the NFS server

    Network Parameters

    bootfile Name of the default image to load with TFTP autoload if set to "no" (any string beginning with 'n'), the rarpb,

    bootp or dhcp commands will just perform a configuration lookup from the BOOTP/DHCP server, but not try to load any image using TFTP

    Misc

    autostart if set to "yes", an image loaded using the rarpb, bootp, dhcp, tftp, disk, or docb commands will be automatically started (by internally calling the bootm command.

    3.3 Linux 的檔案系統種類 Linux 的最重要的特徵之一是它的為許多不同的檔案系統的支援。這使其非常靈活從而與許多另外的作業系統可以很好的共存。現今 Linux 已支援 15 種檔案系統;ext、ext2、xia、minix、umsdos、msdos、vfat、proc、smb、ncp、iso9660、sysv、hpfs、affs 及 ufs,並且沒有疑問,將來支援的檔案類型將被增加的更多。

    它們被構建成為一個單一的層次樹狀結構以作為代表檔案系統的實體。Linux 通過安裝一個檔案系統將該新檔案系統加入它的檔案系統樹中。所有的檔案系統,不管是什麼類型,都安

    裝在檔案系統樹的一個目錄上並且該檔案系統之上的檔案將掩蓋掉這個安裝目錄中原來存在

    的內容。這個目錄稱為安裝目錄或安裝點,當檔案系統被卸掉之後,安裝目錄中原來的檔案

    才再次可見。

    檔案系統是建置於儲存設備的分割區之上,用以儲存檔案資料。一個檔案系統在使用之前必

    須先「掛上(mount)」,將它掛在系統樹狀目錄結構的某個點上。同理,當某個分割區的檔案系統不使用時,可以將它「卸下(umount)」,如此系統會將尚未寫入的資料寫回去,並將它從系統的樹狀目錄中除去。

  • -16-

    1、 一般檔案系統:

    ext2:

    Ext2 是 GNU/Linux 系統中標準的檔案系統,其特點為存取檔案的效能極好,對於中小型的檔案尤佳,這主要得利於其資料區塊快取層的優良設計。其單一檔案大

    小與檔案系統本身的容量上限與檔案系統本身的資料區塊大小有關,在一般常見的

    x86 電腦系統中,資料區塊最大為 4KB,則單一檔案大小上限為 2048GB,而檔案系統的容量上限為 16384GB。但由於目前核心 2.4 所能使用的單一分割區最大只有2048GB,因此實際上能使用的檔案系統容量最多也只有 2048GB。

    Ext2 的優點是:

    Ext2fs 支援達 4 TB 的記憶體。

    Ext2fs 文件名稱最長可以到 1012 個字符。

    當創建文件系統時,管理員可以選擇邏輯塊的大小(通常大小可選擇 1024、2048 和 4096 字節)。

    Ext2fs 了實現快速符號鏈結:不需要為此目的而分配數據塊,並且將目標名稱直接存儲在索引節點(inode)表中。這使性能有所提高,特別是在速度上。

    Ext2 在嵌入式系統上的缺點是:

    Ext2fs 是為象 IDE 設備那樣的塊設備設計的,這些設備的邏輯塊大小是 512字節,1K 字節等這樣的倍數。這不太適合於磁區大小因設備不同而不同的閃存設備。

    Ext2 文件系統沒有提供對基於磁區的擦除/寫操作的良好管理。在 Ext2fs中,為了在一個磁區中擦除單個字節,必須將整個磁區複製到 RAM,然後擦除,然後重寫入。考慮到閃存設備具有有限的擦除壽命(大約能進行 100,000次擦除),在此之後就不能使用它們,所以這不是一個特別好的方法。

    在出現電源故障時,Ext2fs 不是防崩潰的。

    Ext2 文件系統不支援損耗平衡,因此縮短了磁區/閃存的壽命。(損耗平衡確保將地址範圍的不同區域輪流用於寫和/或擦除操作以延長閃存設備的壽命。)

    Ext2fs 沒有特別完美的磁區管理,這使設計塊驅動程式十分困難。

    2、 BSD 平台檔案系統:

    BSD 平台是另一類的自由 UNIX 作業系統,包括 FreeBSD、NetBSD、OpenBSD 等,其中 FreeBSD 最為常見。其所採用的檔案系統稱之為 ufs。除了各種 BSD 平台以外,此類的檔案系統也用於 SunOS、NextStep 等系統中,但格式稍有不同。

  • -17-

    3、 微軟平台檔案系統:

    微軟平台的檔案系統包括 msdos(使用於 MS-DOS),vfat(使用於 Win95,Win98,WinMe 等),與 ntfs(使用於 WinNT 等)。其中 vfat 與 msdos 相當類似,差別只在於vfat 支援長檔名而已。除此之外,Linux 核心還支援 umsdos 檔案系統,它可以直接在msdos 檔案系統中規劃一塊區域來安裝 GNU/Linux 作業系統,而無須額外劃分割區,這在早期很常見,特別是當電腦的硬碟很小,已安裝了 MS-DOS,而無法再重新分割其他分割區時。然而,使用 umsdos 其檔案讀寫效率不好,故不建議將 GNU/Linux 作業系統安裝在其上,最好還是使用 ext2。

    4、 光碟媒體檔案系統:

    此類檔案系統包括 iso9660 以及最近新開發的 udf,前者用於一般的 CDROM,後者用於 DVD 片,二者都是唯讀檔案系統。

    5、 其他平台檔案系統:

    minix:此作業系統是由阿姆斯特丹的 Andrew S.Tanenbaum 教授為教學用所發展的類 UNIX 作業系統。由於是為了教學用,故其功能較為簡單陽春。而 Linux 核心在最早期草創階段,就是在此作業系統上的。

    hpfs:OS/2 平台的檔案系統。

    hfs:麥金塔電腦的檔案系統。

    adfs:Acorn Disc 檔案系統,用於 ARM Risc PC 的 RiscOS 作業系統上。

    affs:用於 Amiga 的 AmigaOS 作業系統上。

    bfs:用於 SCO UnixWare 作業系統上,在開機時載入核心檔案用。

    efs:用於舊的 SGI IRIX 作業系統上。

    vxfs:此為 Veritas VxFS 檔案系統,用於 SCO UnixWare,也見於 Solaris、HP-UX及其他作業系統上。

    qnx4fs:用於 QNX 4 作業系統。

    sysv:用於 SCO,Xenix 及其他商業版 UNIX 作業系統。

    6、 日誌式檔案系統:

  • -18-

    由於檔案系統都有快取層參與運作,如不使用時必須將檔案系統卸下,以便將快取層的

    資料寫回磁碟中。因此每當系統要關機時,必須將其所有的檔案系統全部卸下後才能進

    行關機。

    如果在檔案系統尚未卸下前就關機(如停電)時,下次重開機後會造成檔案系統的資料不一致,故這時必須做檔案系統的重整工作,將不一致與錯誤的地方修復。然而,此一重

    整的工作是相當耗時的,特別是容量大的檔案系統,而且也不能百分之百保證所有的資

    料都不會流失。故這在大型的伺服器上可能會造成問題。

    為了克服此問題,業界經長久的開發,而完成了所謂「日誌式檔案系統(Journal File System)」。此類檔案系統最大的特色是,它會將整個磁碟的寫入動作完整記錄在磁碟的某個區域上,以便有需要時可以回朔追蹤。由於資料的寫入動作包含許多的細節,像是

    改變檔案標頭資料、搜尋磁碟可寫入空間、一個個寫入資料區段等等,每一個細節進行

    到一半若被中斷,就會造成檔案系統的不一致,因而需要重整。然而,在日誌式檔案系

    統中,由於詳細紀錄了每個細節,故當在某個過程中被中斷時,系統可以根據這些記錄

    直接回朔並重整被中斷的部分,而不必花時間去檢查其他的部分,故重整的工作速度相

    當快,幾乎不需要花時間。

    目前在 GNU/Linux 上的日誌式檔案系統,除了 ext3 之外,其餘均為來自業界的貢獻,茲簡介如後:

    ext3:顧名思義,它就是 ext2 的下一代,也就是在保有目前 ext2 的格式之下再加上日誌功能。目前它離實用階段還有一段距離,也許在下一版的核心就可以上路

    了。

    reiserfs:此檔案系統為 Threshold Networks、Emusic.com、Bigstorage.com 等公司所支持開發,它目前已完整地與核心 2.4 整合在一起,且發展已接近成熟。其特色除了日誌功能以外,其在數量龐大的小檔案存取效率相當驚人,在某些情況下

    可以達到 ext2 檔案系統的三至四倍以上。

    xfs:此檔案系統為 SGI 公司所開發,已移植到 GNU/Linux 系統上,但尚未整合到 Linux 核心中。除了日誌功能以外,其最大的特色是高延展性,可以有效率地處理超大型檔案。

    jfs:此檔案系統為 IBM 公司所開發,已移植到 GNU/Linux 系統上,但尚未整合到 Linux 核心中。其主要特色與 xfs 相似。

    7、 網路檔案系統:

    網路檔案系統並非建置在機器本上的儲存設備上,而是用以將遠端機器的檔案系統經由

    網路連線掛到本身的機器上,使其使用上就與一般的檔案系統無異。Linux 核心支援了數種網路檔案系統,包括:

    NFS:NFS 是此類檔案系統的代表,它是由 Sun Microsystems 公司設計發表的,現已成為各 UNIX 系統的標準配備之一。

  • -19-

    Code(Coda?)檔案系統:此檔案系統與 NFS 類似,但擁有較 NFS 還先進的特色,例如斷線操作、安全性認證等。

    SMB:此檔案系統可以將微軟作業系統的「網路芳鄰」分享出來的磁碟或檔案系統掛上來使用。

    NCP:此檔案系統可以將 Novell NetWare 的 IPX 分享磁碟掛上來使用。

    8、 虛擬檔案系統:

    在 Linux 核心中,有許多檔案系統並不是用來存取實際的檔案資料。這些檔案系統在掛上後,我們可以見到其內部的檔案目錄,但實際上這些檔案目錄都不佔任何儲存設備的

    儲存空間,因為它們根本不是來自任何儲存設備,它們都是系統核心所製造出來的檔案

    「影像」。

    這麼做的目的主要有兩個,其一就是用以方便存取系統內部資訊。另一個目的為有效率

    配置系統資源,供應用程式使用。

    proc:

    用以存取系統核心狀態資訊。此檔案系統同時也出現在許多新設計的 UNIX 系統上,使用相當廣泛。其內含的資訊包括:系統資源分配狀況、機器硬體組 態、各設備目前的狀態、網路系統狀態與可調整選項、以及所有執行中的行程(process)狀態等等。

    devfs:

    用以取代傳統的設備檔,使用此檔案系統時所有的系統設備檔都會依一定的規則存

    在於樹狀目錄群中,而且只有該裝置存在時才會存在。此為核心 2.4 的新設計,對於大型系統的延展性有相當大的幫助。目前此檔案系統尚在開發階段,在不久的將

    來將會被廣泛使用。

    devpts:

    用於接受外部網路連線(telnet)的虛擬終端機埠。每一個外來的網路連線本機都必須要準備一個虛擬終端機埠來處理它,而每個虛擬終端機埠就是一個設備檔,故在

    此情況下使用虛擬檔案系統是最佳的解決方式。未來當 devfs 被廣泛採用時,devpts 的功能將完全由 devfs 取代。

    9、 特殊用途檔案系統:

    cramfs:

    此為 Compressed ROM File System,為唯讀檔案系統,其容量上限只有 256MB,用於嵌入式裝置。

  • -20-

    romfs:

    此為非常小的唯讀檔案系統,用於唯讀的儲存媒體。

    jffs2:

    此為日誌式快閃 (Flash) 檔案系統,用於嶔入式裝置。

    jffs2 有以下優點:

    JFFS2 在磁區級別上執行閃存擦除/寫/讀操作要比 Ext2 文件系統好。

    JFFS2 提供了比 Ext2fs 更好的崩潰/掉電安全保護。當需要更改少量數據時,Ext2 文件系統將整個磁區複製到記憶體(DRAM)中,在記憶體中合併新數據,並寫回整個磁區。這意味著為了更改單個字,必須對整個磁區(64 KB)執行讀/擦除/寫例程—這樣做的效率非常低。要是運氣差,當正在 DRAM 中合併數據時,發生了電源故障或其他事故,那麼將丟失整個數據集合,因為在將數據讀

    入 DRAM 後就擦除了閃存磁區。JFFS2 附加文件而不是重寫整個磁區,並且具有崩潰/掉電安全保護這一功能。

    這可能是最重要的一點:JFFS2 是專門為象閃存晶片那樣的嵌入式設備創建的,所以它的整個設計提供了更好的閃存管理。

    jffs2 在嵌入式系統中有以下缺點:

    當文件系統已滿或接近滿時,JFFS2 會大大放慢運行速度。

    tmpfs:

    此檔案系統可以用來將檔案暫時保存在主記憶體(RAM)中,而且其容量可以隨著保存檔案的量而增減。

    tmpfs 的優點有:

    動態文件系統大小—文件系統大小可以根據被複製、創建或刪除的文件或目錄的數量來縮放。使得能夠最理想地使用記憶體。

    速度—因為 tmpfs 駐留在 RAM,所以讀和寫幾乎都是暫態的。即使以交換的形式存儲文件,I/O 操作的速度仍非常快。

    tmpfs 的缺點有:

    當系統重新引導時會丟失所有數據。因此,重要的數據不能存儲在 tmpfs 上。

    ramfs:

    此檔案系統也用於將檔案暫時保存在主記憶體中,與 tmpfs 類似。

    10、 檔案系統的比較:

  • -21-

    檔案系統 可寫入 永久性 斷電可靠

    壓縮 RAM

    CRAMFS NO - - YES NO

    JFFS2 YES YES YES YES NO

    JFFS YES YES YES NO NO

    RAM Disk YES NO NO NO YES

    ROMFS NO - - NO NO

    3.4 Linux Target 端的根目錄規劃

    /

    bin dev etc lib sbin usr

    bin include lib man sbinls cp

    cc

    如上圖所示 Llinux Target 端 root filesystem 應該包含幾個基本的目錄及檔案,所以這個章節要討論 Linux Target 端 root filesystem 的製作與規劃,基本上 root filesystem 必須包含支援完整 Linux 系統運作所需的每一個項目,但是在嵌入式系統當中針對 root filesystem 的規劃只要能達到讓 Linux 系統運作最基本(minimum)的需求就可以了,這些需求包含下列幾點:

    最起碼的目錄: /dev, /proc, /bin, /etc, /lib, /usr, /tmp。

  • -22-

    基本的工具程式: sh, ls, cp, mv, etc.。

    最起碼的組態設定檔: rc, inittab, fstab, etc.。

    設備檔: /dev/hd*, /dev/tty*, /dev/fd0, etc.。

    Runtime 函式庫以提供工具程式所使用之基本功能 (functions)。

    接下來將針對製作 root filessytem 的幾個步驟一一說明:

    3.4.1. 製作檔案系統:

    首先使用者應該依照系統的需求來建立 root filesystem 的檔案系統,這裡將介紹 EXT2 及JFFS2 檔案系統的建立方式:

    建立 EXT2 檔案系統

    1、 這裡要告訴使用者,如何建立一個空的 EXT2 檔案系統,然後再參考後面介紹的單元建立合適的 root filesystem,請參考下列的製作步驟:

    2、 建立一個檔案空間: SHELL> dd if=/dev/zero of=ext2new bs=1k count=8192

    說明如下:

    dd:這個指令是用來轉換檔案並且 copy 用的。

    if:指的是要被轉換的輸入檔案格式/dev/zero 可以由 man zero 來查看內容。

    of:指的是輸出的檔案,我們將之輸出到 ext2new 這個檔案。

    bs:指的是一個磁區佔用幾個 kb。

    count:指的是要使用多少個 bs,所以最後的容量為 bs*count = 1k*8192 = 8M。

    3、 將檔案空間格式化成 EXT2 檔案系統格式: SHELL> mke2fs –F –m0 –i 2000 ext2new

    上面的命令是將 ext2new 檔案空間格式化成 ext2 檔案系統格式,並設定其 node數最大值為 2000。

    4、 掛載新建立的 EXT2 檔案系統: SHELL> mount –w –o loop ext2new /mnt/loop

  • -23-

    將 ext2new 檔案系統掛載到/mnt/loop 目錄下,其中“-w”參數是設定其為read/write 模式,若設為“-r”則為 read only 模式。

    5、 移植檔案系統:

    上一個步驟已經將 ext2new 檔案系統掛載到/mnt/loop 目錄當中,但是察看/mnt/loop 目錄可以發現並沒有什麼檔案,他現在是一個空的檔案系統,所以接下來要參考後面單元的說明,將檔案系統移植到/mnt/loop 目錄下。

    6、 卸除掛載,完成 EXT2 檔案系統的建立: SHELL> umount –l /mnt/loop

    Umount 指令會卸除檔案系統的掛載,在卸除掛載的同時,會把在/mnt/loop 目錄下所有的修改寫回到 ext2new 檔案當中。

    依照上述步驟完成的 ext2new 檔案,就是要先建立的 EXT2 檔案系統。

    建立 JFFS2 檔案系統

    要建立一個 JFFS2 檔案系統,首先參考後面介紹的單元建立合適的 root filesystem 架構,然後再利用 mkfs.jffs2 指令建立 JFFS2 檔案系統,說明如下:

    1、 建立合適的 root filesystem 架構:

    首先要建立一個目錄,然後參考後面單元的說明,將檔案系統移植到新建立的目錄

    下。

    2、 利用 mkfs.jffs2 指令建立 JFFS2 檔案系統: SHELL> ./mkfs.jffs2 -v -e 131072 --pad=0xF00000 -r

    jffs2_rootfs -o rootfs.jffs2

    mkfs.jffs2 各參數意義,說明如下: 參數 說明 -v print information -e 設定 flash 的 erase sector 大小

    --pad 宣告要建立的檔案系統磁碟空間,這裡宣告為 15M。 -r 要建立的檔案系統架構目錄。 -o 輸出檔案名稱。

  • -24-

    3.4.2. 移植檔案系統內容:

    一個基本的檔案系統應該具有下列幾個目錄,如下:

    /dev -- 裡面存放設備檔 (Devices) ,為達成 I/O 工作所需

    /proc -- Directory stub required by the proc filesystem

    /etc -- 裡面存放系統組態設定檔

    /sbin -- 重要的 (critical) 系統二進位執行檔 (binaries)

    /bin -- 被認為是系統一部分的基本二進位執行檔

    /lib -- 提供 run-time 支援的共享函式庫

    /mnt -- 維護其它磁碟所用的磁碟掛入點 (mount point)

    /usr -- 額外的工具程式與應用程式

    接下來根據上述的幾個檔案目錄,根據每個目錄說明使用者應該放拿些檔案及如何建置,如

    下:

    /proc

    原則上只要建立這個目錄即可,這個目錄基本上是讓作業系統建立一個 proc filesystem於其下,以提供使用者用”cat”、”echo”這些指令來查詢系統的相關資訊。

    /mnt

    原則上只要建立這個目錄即可,這個目錄主要是用來掛載一些系統目錄,如:光碟機、

    磁碟機等…。

    /usr

    原則上只要建立這個目錄即可,這個目錄主要是用用來放一些使用者的資料檔或應用程

    式。

    /dev

    這個目錄建立了給系統上所有設備使用的裝置檔。所以說/dev 這個目錄每個 Linux 系統都應該依照其硬體裝置來建立相對應的檔案。每一個裝置檔可以用 mknod 指令來建立,如:

    SHELL> mknod /dev/lcd c 120,0 SHELL> mknod /dev/cmos c 110,0 SHELL> mknod /dev/codec c 121,0

  • -25-

    但是要一一建立系統相關的裝置檔並不容易,最快速的方式就是複製你現有 /dev 目錄的內容,然後再清除你不想要的裝置檔。

    一些基本的裝置檔有:console、kmem、mem、null、ram0、tty1。

    /etc

    這個目錄包含了 Linux 系統的一些重要的組態設定檔,包含有:

    rc.d/* -- 系統啟動與改變 run level 的 scripts。

    fstab -- 要被掛上的 file systems 清單。

    inittab -- 給 init process 的參數,於開機時啟動的第一個 process。

    passwd -- 重要的使用者、 home 目錄等其它項目的清單。

    group -- 使用者群組。

    shadow -- 使用者的密碼。你可能沒有這個檔。

    termcap -- the terminal capability database。

    使用者可以複製現有的檔案系統內容,然後再做一些適度的修改。

    /bin 與 /sbin

    這兩個目錄主要是放置為了執行基本作業 (operations) 而所需的額外工具程式,這些工具程式諸如 ls, mv, cat 與 dd。在網路上可以找到幾個提供這些工具程式的原始碼,使用者可以下載、編譯後,安裝到/bin 與/sbin 目錄下,以下介紹幾個常見的 package,如下:

    BusyBox:

    BusyBox 它包含了七十多種 Linux 上標準的工具程式,只需要的磁碟空間僅僅幾百 k (視所選擇工具程式的數目來決定大小),在嵌入式 系統上常用到它 (例如 Linux Router Project 和 Debian boot floppy 就使用到它),可在http://busybox.lineo.com 找到參考資料及下載,同時,Busybox 是由 Lineo, Inc 這家嵌入式系統廠商所贊助的 Open Source tool。

    Module-init-Tools:

    在網路上也可以下載到 Module-init-Tool 這個工具程式 package,這個 package 主要提供模組的載入和卸除的相關工具,如:depmod、insmod、lsmod 、modinfo、modprobe、rmmod。

    還有要注意的一點是,編譯這些 package時,所用的 Tool Chain(Compiler)要和編譯 linux kernel 的 Tool Chain 版本要一致才可以。

  • -26-

    /lib

    在這個目錄中要放入必要的共享函式庫 (libraries) 與載入程式 (loaders)。如果在/lib目錄中沒有提供必要的函式庫,那麼 Linux 系統將不能夠開機。

    要建立/lib 目錄最簡單的方式,就是將編譯 linux kernel 的 compiler(Tool Chain),把這個 Tool Chian /lib 目錄下所有的檔案複製過來即可。

    其實使用者要自行建立 linux 作業系統的 root filesystem 並不是一件容易的事,最快速而有效的方式,就是找到一個符合目前正在開發的 Linux Kernel 版本的 root file system,然後拿這個檔案檔案系統,移除和修改一些不必要或不合適的檔案,或是把自己開發的驅動程式和應用程式放到這個檔案系統中,這樣就可以了。

    3.5 Linux Target 端的 Flash 規劃 這個章節要介紹新華電腦(Microtime)所提供的 Embedded Linux 系統,Linux Target 端針對 Create XScale-PXA270 子板上 Flash 的規劃,下圖顯示目前出貨時 Flash 規劃的內容,如下:

    u-boot.bin

    U-BOOT 128K

    128K

    768K

    3.5M

    15M

    0000 - 0000

    0002 - 0000

    0004 - 0000

    0010 - 0000

    0048 - 0000

    0138 - 0000

    01FF - FFFF

    U-BOOT Parameter

    diag_ram.bin

    Diagnostic ProgramuImage.bin

    Linux Kernelrootfs.jffs2.pxa270

    Linux File Sysetm

    Reserved

    Create XScale-PXA270 子板上提供 32M 的 Flash,目前規劃成幾個部分,以下針對這幾個部分說明:

    Flash 範圍

    功能說明

  • -27-

    U-Boot 0 ~ 3FFFF Creator XScale-PXA270 嵌入式系統所提供的Bootloader。

    U-Boot 儲存在 flash 時規劃為兩個部分,前面128K 規劃為 U-Boot image,後面的 128K 規劃儲存 U-Boot 的環境變數。

    主要的功能包含:下載和燒錄 Linux Kernel 及 root filesystem、啟動 Linux Kernel。

    diag_ram.bin 40000 ~ FFFFF

    Embedded application,可以藉由 U-Boot 啟動。

    是一支針對 Creator 母板周邊 I/O 的測試程式。 uImage.bin 100000 ~

    47FFFF Linux Kernel Image。

    目前規劃由 U-Boot 來啟動 Linux Kernel,所以要特別注意一點,Linux Kernel Image 在燒錄到flash 之前,要先將 image 檔轉換成 U-Boot 的啟動格式。

    Roofts.jffs2.pxa270

    480000 ~ 137FFFFF

    root filesystem,檔案系統類型為 jffs2

    目前 root filesystem 規劃的空間為 15M,如果使用空間不足使用這可加大規劃的空間,但要注意的

    是在做相關的操作時要修重為新規劃的 size。

    4. 實作

    本章實習目的主要是要說明 Linux Kernel 及 root filesystem image 檔的驗證方式,我們將介紹如何利用Domingo for Linux透過 ICE下載及驗證 image檔,或是利用U-Boot透過TFTP下載、燒錄及驗證 image 檔。

    4.1 系統設置

    4.1.1. 系統硬體設置

    請參考[1] 4.1.1、System H/W、S/W setup。

  • -28-

    4.1.2. 系統軟體設置

    請參考[1] 4.1.1、System H/W、S/W setup。

    Linux Kernel 及 root filesystem 等 image 檔的編譯方式,請參考” RM-033-04-303--Linux Kernel 的安裝與編譯實習”。

    註:以下操作平台若沒有特別說明時,都是在 Linux host 端。

    4.1.3. 實驗程式碼設置

    4.1.4. 重要檔案說明

    /檔案 說明

    4.1.5. 實驗架構圖

    在 Creator XScale-PXA270 嵌入式系統中,要驗證 linux kernel image 及 root filesystem編譯是否正確無誤,在本實習中要介紹兩個驗證方式,一種是利用 Domingo for Linux 透過ICE 來下載 image 檔驗證,一種是利用 U-Boot 利用 tftp server 來下載 image 檔驗證,以下個別說明。

    1、 利用 Domingo for Linux 下載、驗證

  • -29-

    利用 Domingo for Linux 下載、驗證的方式,實驗步驟如下:

    首先要確認 root filesystem 檔已燒錄到 Linux Target 端的 flash。

    確認要驗證的 Linux kernel image 檔,其 configuration 的 CmdLine 是設定成利用NFS 掛載到 Linux Host 端的 NFS Server。

    上面步驟確認無誤後,利用 Domingo for Linux 下載 linux kernel image 到 Linux Target 端並啟動。

    2、 利用 U-Boot 下載、驗證

    利用 U-Boot 下載、驗證的方式,實驗步驟如下:

    ICE / JTAG

    RAM 0xA0008000 linux-kernel

    Linux Target

    Domingo

    Window Host

    NFS

    Linux Host

    RootFS 設定Cmdline 利用NFS mount linux Host

    tf

    U-Boot

    利用Cmd line

    bootargs Replace

    Linux Target Flash

    Linux-kernel

    RootFS

  • -30-

    首先要利用 Domingo for Linux 將 U-Boot image 檔燒錄到 Linux Target 端的flash。

    啟動 U-Boot 後,利用 tftp 下載和燒錄 linux kernel 及 RootFS 到 Linux Target端的 flash。

    設定 U-Boot 的環境變數 bootargs,設定 linux kernel 啟動時掛載 RootFS 是從Linux Target 端的 flash,並設定 U-Boot 為自動啟動 Linux Kernel 模式。

    重新啟動 U-Boot,當 U-Boot 啟動 Linux Kernel 時,U-Boot 會將環境變數bootargs 的內容複製到 Linux Kernel 的環境變數 Cmd Line,所以 Linux Kernel在掛載 RootFS 時會從 Linux Target 端的 Flash 掛載。

    4.2 實作進行

    4.2.1. 原始碼檔案瀏覽

    開啟下列檔案並瀏覽之

    4.2.2. Windows Host 端 TFTP Server 的安裝

    U-Boot 將利用 tftp 的命令下載 Linux kernel 及 root filesystem,所以在 Windows Host端要安裝相對應的 tftp server,請在 Windows Host 端依下列步驟安裝及設定,如下:

    在“Creator XScale-PXA270 V1.00”光碟中 Utilities 路徑下,有提供一個簡易的 tftp server 執行檔,請將這個 tftpd.exe 檔複製到 Windows Host 端的”C:\TFTPD”路徑下,開啟 tftpd.exe 後主畫面如下:

  • -31-

    接下來要設定 tftp server 的屬性及上傳、下載的路徑,請開啟 tftp server menu 的File/Properties…,此時出現 TFTP Server Properties 對話框,如下:

    在 Preferences Page 中,設定 Access Premissions group 中的 Allow Read Reguests及 Allow Write Reguests 為 checked。

  • -32-

    在 Directoriess Page 中,設定 Read Path 為” S:\microtime\build-linux\output”及Write Directory 為” S:\microtime\build-linux\output”。

    (註:Windows Host 端的”S:\”磁碟設定,請參考第八章”5-1、Samba 伺服器安裝實習”)

    4.2.3. U-Boot 程式碼的安裝與編譯

    這個章節將介紹如何安裝與編譯 U-Boot 的程式碼,請依照下列步驟執行:

    安裝編譯 U-Boot 程式碼,請在 Linux Host 端放入”Linux for Creaotr-XScale_PXA270”光碟,並開啟終端機鍵入如下:

    SHELL> cp /mnt/cdrom/BootLoader/u-boot/src/mt-u-boot-1.1.5.tar.gz /usr/src

    SHELL> cd /usr/src SHELL> tar –zxvf mt-u-boot-1.1.5.tar.gz

    編譯 U-Boot 的 image 檔,請依照下列步驟執行: SHELL> cd /usr/src/bootloader/u-boot/u-boot-1.1.5 SHELL> ./micoritme_config

  • -33-

    編譯完成後,檢查/usr/src/bootloader/u-boot/u-boot-1.1.5 路徑下已產生 U-Boot.bin的 binary 檔。

    4.2.4. U-Boot image 檔的驗證與更新

    這個章節要介紹當使用者拿到一個較新版本的 U-Boot.bin 檔或編譯一個新的 U-Boot.bin檔,如何利用 Domingo for Linux 或 U-Boot 去驗證與更新更新 U-Boot.bin 檔。

    這裡要別提醒使用者在更新 U-Boot.bin 檔時要特別謹慎,特別注意在執行下列步驟的時候不可輸入錯誤,還有在燒錄的過程中不可關閉 Linux Target 端電源或拔掉網路線。

    以下個別介紹如何利用 Domingo for Linux 或 U-Boot 去更新 U-Boot.bi

    4.2.4.1. 利用 Domingo for Linux 更新 U-Boot.bin 檔

    請參考下列步驟執行:

    開啟 Domingo for Linux。

    將要更新的 U-Boot.bin 檔複製到 Linux Host 端的/usr/src/microtime/ build-linux/output 目錄下。

    註:“Creator XScale-PXA270 V1.00”安裝光碟的 Boot Loader\U-Boot\bin 目錄下有提供 U-Boot.bin 檔。

    Domingo for Linux connect Target board:開啟 Domingo for Linux 後,此時 v 選擇tool bar 的 connect button,使 Domingo for Linux 連結到 Linux Target 端。

    連結完成後,要下載 Linux kernel 檔到 Linux Target 端,請在 Domingo for Linux 的Menu bar 選擇 Debug Load Module…,此時會要求選擇下載的檔案,請選擇S:\microtime\build-linux\output目錄下的 U-Boot.bin檔案,接下來出現 Load Module Dialog 對話框,如下:

  • -34-

    此時設定如下:

    ModuleFormat 的 Options edit:設定為”P;A3F80000”。

    Goto Main/Address check box:設定為 unchecked。

    按”OK”鈕,則開始下載 U-Boot.bin 檔到 Linux Target 端 0xA3F80000 的位址,下載完成後回到 Domingo for Linux 的主畫面,此時設定 Register View 中的 PC 值為A3F80000,如下:

  • -35-

    輸入完成後請按 enter 鍵。

    接下來要啟動 U-Boot,請按 Domingo for Linux Tool bar 的 Free go 按鈕則啟動U-Boot,因為接下來要進入U-Boot的 command line模式,所以在U-Boot進入 autoboot程序時,請按鍵盤任意見,此時進入 U-Boot 的 command line 模式,如下:

    接下來要燒錄 U-Boot.bin 檔到 Creator-XScale-PXA270 子板的 Flash,首先要設定U-Boot 的環境變數,請在 Windows Host 端 Domingo for Linux 的 UART View 鍵入如下:

    UBoot> setenv ipaddr xxx.xxx.xxx.xxx UBoot> setenv serverip zzz.zzz.zzz.zzz

    註 1:xxx.xxx.xxx.xxx:代表 Linux Target 端的 IP。

  • -36-

    zzz.zzz.zzz.zzz:代表 Windows Host 端的 IP。

    接下來要儲存 U-Boot 的環境變數,請鍵入如下: UBoot> saveenv

    利用 tftp 下載 U-Boot.bin 檔,請鍵入如下: UBoot> tftp a2000000 U-Boot.bin

    燒錄 U-Boot.bin,請鍵入如下: UBoot> protect off 0 3FFFF UBoot> erase 0 3FFFF UBoot> cp.b a2000000 0 40000

    以上即完成安裝 U-Boot.bin 檔。

    4.2.4.2. 利用 U-Boot 更新 U-Boot.bin 檔

    請參考下列步驟執行:

    開啟 Domingo for Linux。

    開啟 Linux Target 端的電源,此時在 Windows Host 端 Domingo for Linux 的 UART View 顯示 U-Boot 的啟動資訊,請在 U-Boot 進入自動啟動程序之前按下”enter 鍵”,此時進入 U-Boot 的 command line 模式。

    接下來要設定 U-Boot 的環境變數,請在 Windows Host 端 Domingo for Linux 的 UART View 鍵入如下:

    UBoot> setenv ipaddr xxx.xxx.xxx.xxx UBoot> setenv serverip zzz.zzz.zzz.zzz

    註 1:xxx.xxx.xxx.xxx:代表 Linux Target 端的 IP。

    zzz.zzz.zzz.zzz:代表 Windows Host 端的 IP。

    接下來要儲存 U-Boot 的環境變數,請鍵入如下: UBoot> saveenv

    複製新 release U-Boot.bin 檔(或 A-3 一節編譯產生的 U-Boot.bin 檔)到 Linux Host 端的精/usr/src/microtime/build-linux/output 目錄下。

    利用 tftp 下載 U-Boot.bin 檔,請鍵入如下: UBoot> tftp a2000000 U-Boot.bin

    燒錄 U-Boot.bin,請鍵入如下:

  • -37-

    UBoot> protect off 0 3FFFF UBoot> erase 0 3FFFF UBoot> cp.b a2000000 0 40000

    以上即完成更新 U-Boot.bin 檔。

    4.2.5. U-Boot—【燒錄 Linux Kernel 及 RootFS】

    這個章節將介紹如何利用 U-Boot 燒錄 linux kernel 及 root filesystem。利用 U-Boot 燒錄linux kernel 及 root filesystem,請參考下列步驟執行:

    開啟 Domingo for Linux。

    接下來要燒錄 linux kernel 及 root filesystem,假設使用者要重新燒錄Creator-XScale-PXA270 V1.0 光碟提供的檔案,首先要把檔案複製到 tftp server 下載的路徑下,請放入光碟,並在 Linux Host 端鍵入如下:

    SHELL> mkdir -p /usr/src/microtime/build-linux/output/cd SHELL> cd /usr/src/microtime/build-linux/output/cd SHELL> cp /mnt/cdrom/Linux/bin/uImage ./ SHELL> cp /mnt/cdrom/Linux/bin/rootfs.jffs2.pxa270-yyyymmdd-hhmm ./

    註 1:其中 yyyymmdd-hhmm 代表 rootfs 檔案編譯好的時間跟日期,實際的內容請參考光碟檔案。

    開啟 Linux Target 端的電源,此時在 Windows Host 端 Domingo for Linux 的 UART View 顯示 U-Boot 的啟動資訊,請在 U-Boot 進入自動啟動 Linux kernel 程序之前按下”enter 鍵”,此時進入 U-Boot 的 command line 模式。

    接下來要設定 U-Boot 的環境變數,請在 Windows Host 端 Domingo for Linux 的 UART View 鍵入如下:

    UBoot> setenv ipaddr xxx.xxx.xxx.xxx UBoot> setenv serverip zzz.zzz.zzz.zzz

    註 1:xxx.xxx.xxx.xxx:代表 Linux Target 端的 IP。

    zzz.zzz.zzz.zzz:代表 Windows Host 端的 IP。

    接下來要儲存 U-Boot 的環境變數,請鍵入如下: UBoot> saveenv

    利用 tftp 下載 linux kernel – uImage 檔,請鍵入如下: UBoot> tftp a1100000 cd/uImage

  • -38-

    燒錄 linux kernel image,請鍵入如下: UBoot> protect off 100000 47FFFF UBoot> erase 100000 47FFFF UBoot> cp.b a1100000 100000 200000

    註 1:目前編譯完成的 uImage 檔案 size 小於 2M,所以在複製記憶體時統一設定為200000,如果使用者要燒錄的 uImage 檔已經大於 2M,記得也要調整 200000這個數值。

    註 2:erase 時間大約 35 秒、燒錄時間大約 20 秒。

    利用 tftp 下載 root filesystem,請鍵入如下: UBoot> tftp a1480000 cd/rootfs.jffs2.pxa270-yyyymmdd-hhmm

    註 1:其中 yyyymmdd-hhmm 代表 rootfs 檔案編譯好的時間跟日期,實際的內容請參考光碟檔案。

    燒錄 root filesystem,請鍵入如下: UBoot> protect off 480000 1FFFFFF UBoot> erase 480000 1FFFFFF UBoot> cp.b a1480000 480000 F00000

    註 1:其中 F00000 代表目前 Creator-XScale-PXA270 出貨光碟中提供的 root filesystem 檔案大小為 15M,使用者可以依照實際要燒錄的檔案大小加以調整。

    註 2:erase 時間大約 2 分、燒錄時間大約 1 分鐘。

    以上及完成利用 U-Boot 燒錄 Linux kernel 及 root filesystem。

  • -39-

    4.2.6. U-Boot—【啟動 flash 中的 Linux Kernel 及 RootFS】

    這個章節將介紹如何利用 U-Boot 啟動 flash 中的 Linux kernel 及 root filesystem,要啟動之前請確認 Creator-XScale-PXA270 子板的 flash 已正確燒錄 linux kernel 及 root filesystem,如果沒有的話請參考本章”5-1、U-Boot—【燒錄 Linux Kernel 及 RootFS】”。

    要利用 U-Boot 啟動 flash 中的 Linux kernel,這裡要介紹兩種情形一種是自動啟動,另一種是進入 U-Boot 的 command line 模式再鍵入命令啟動,首先請確認下列步驟:

    開啟 Domingo for Linux。

    開啟 Linux Target 端的電源,此時在 Windows Host 端 Domingo for Linux 的 UART View 顯示 U-Boot 的啟動資訊,請在 U-Boot 進入自動啟動程序之前按下”enter 鍵”,此時進入 U-Boot 的 command line 模式。

    接下來要設定 U-Boot 的環境變數,請在 Windows Host 端 Domingo for Linux 的 UART View 鍵入如下:

    UBoot> setenv ipaddr xxx.xxx.xxx.xxx UBoot> setenv serverip zzz.zzz.zzz.zzz UBoot> setenv bootargs root=/dev/mtdblock3 rw rootfstype=jffs2

    console=ttyS0,9600n8 mem=64M ip=xxx.xxx.xxx.xxx:zzz.zzz.zzz.zzz:ggg.ggg.ggg.ggg:255.255.255.0::eth0:off

    UBoot> setenv bootcmd run linux

    註 1:UBoot>提示符號之後的均為同一行。

    註 2:xxx.xxx.xxx.xxx:代表 Linux Target 端的 IP。

    zzz.zzz.zzz.zzz:代表 Windows Host 端的 IP。

    U-Boot

    利用Cmd line

    bootargs Replace

    Linux Target Flash

    Linux-kernel

    RootFS

  • -40-

    ggg.ggg.ggg.ggg:代表 getway 的 IP。

    接下來要儲存 U-Boot 的環境變數,請鍵入如下: UBoot> saveenv

    接下來依照自動啟動模式及 command line 啟動模式,各別介紹如下:

    自動啟動模式 – 請參考下列步驟執行:

    按 Creator XScale-PXA270 子板的 reset 鍵,此時在 Windows Host 端 Domingo for Linux的 UART View 顯示 U-Boot 的啟動資訊,等待幾秒後 U-Boot 進入自動啟動 Linux kernel程序。

    command line 啟動模式 – 請參考下列步驟執行:

    按 Creator XScale-PXA270 子板的 reset 鍵,此時在 Windows Host 端 Domingo for Linux 的 UART View 顯示 U-Boot 的啟動資訊,請在 U-Boot 進入自動啟動程序之前按下”enter 鍵”,此時進入 U-Boot 的 command line 模式。

    鍵入以下命令啟動 linux kernel,如下: UBoot> run linux

    以上及完成啟動 linux kernel 的步驟。

    4.2.7. U-Boot—【啟動 flash 中的 Linux Kernel 及遠端 NFS server 的

    RootFS】

  • -41-

    這個章節將介紹如何利用 U-Boot 啟動 flash 中的 Linux kernel 及遠端 NFS server 的 root filessytem,要啟動之前請確認 Creator-XScale-PXA270 子板的 flash 已正確燒錄 linux kernel,如果沒有的話請參考” 5-1、U-Boot—【燒錄 Linux Kernel 及 RootFS】”。

    要利用 U-Boot 啟動 flash 中的 Linux kernel 及遠端 NFS server 的 root filesystem,這裡要介紹兩種情形一種是自動啟動,另一種是進入 U-Boot 的 command line 模式再鍵入命令啟動,首先請確認下列步驟:

    開啟 Domingo for Linux。

    開啟 Linux Target 端的電源,此時在 Windows Host 端 Domingo for Linux 的 UART View 顯示 U-Boot 的啟動資訊,請在 U-Boot 進入自動啟動程序之前按下”enter 鍵”,此時進入 U-Boot 的 command line 模式。

    接下來要設定 U-Boot 的環境變數,請在 Windows Host 端 Domingo for Linux 的 UART View 鍵入如下:

    UBoot> setenv ipaddr xxx.xxx.xxx.xxx UBoot> setenv serverip zzz.zzz.zzz.zzz UBoot> setenv bootargs console=ttyS0,9600n8 root=/dev/nfs rw

    nfsroot=yyy.yyy.yyy.yyy:/usr/src/microtime/rootfs,v3 ip=xxx.xxx.xxx.xxx:yyy.yyy.yyy.yyy:ggg.ggg.ggg.ggg:255.255.255.0::eth0:off mem=64M ether=aa:11:22:33:44:55

    UBoot> setenv bootcmd run linux

    註 1:UBoot>提示符號之後的均為同一行。

    註 2:xxx.xxx.xxx.xxx:代表 Linux Target 端的 IP。

    yyy.yyy.yyy.yyy:代表 Linux Host 端的 IP。

    ggg.ggg.ggg.ggg:代表 getway 的 IP。

    接下來要儲存 U-Boot 的環境變數,請鍵入如下: UBoot> saveenv

    接下來依照自動啟動模式及 command line 啟動模式,各別介紹如下:

    自動啟動模式 – 請參考下列步驟執行:

    按 Creator XScale-PXA270 子板的 reset 鍵,此時在 Windows Host 端 Domingo for Linux的 UART View 顯示 U-Boot 的啟動資訊,等待幾秒後 U-Boot 進入自動啟動 Linux kernel程序。

    command line 啟動模式 – 請參考下列步驟執行:

  • -42-

    按 Creator XScale-PXA270 子板的 reset 鍵,此時在 Windows Host 端 Domingo for Linux 的 UART View 顯示 U-Boot 的啟動資訊,請在 U-Boot 進入自動啟動程序之前按下”enter 鍵”,此時進入 U-Boot 的 command line 模式。

    鍵入以下命令啟動 linux kernel,如下: UBoot> run linux

    以上及完成啟動 linux kernel 的步驟。

    4.2.8. Domingo for Linux—【ICE 啟動 Linux Kernel 及遠端 NFS Server

    的 RootFS】

    這一節將介紹 Domingo for Linux 如何利用 ICE下載、起動 linux kernel並且掛載 Linux Host端 NFS server 分享的 root filesystem,操作步驟請參考如下:

    首先請參考[1] ” 3.2.5.2 編譯 kernel image – 設定 root filesystem 在遠端 NFS”,產生 uImage 檔並複製到/usr/src/microtime/build-linux/output/ nfs_boot 目錄下。

    開啟 Domingo for Linux。

    Domingo for Linux connect Target board:開啟 Domingo for Linux 後,此時 tool bar為尚未連結狀態,如下:

  • -43-

    此時選擇綠色的 connect button,連結到 Linux Target 端,此時 tool bar 為連結狀態,如下:

    確認“Vector Cache Manager”對話框的設定:

    選擇 Domingo for Linux Menu Bar 的 Config/Vector Cache Management…,則出現Vector Cache Manager 對話框,如下:

    確認 Vector Cache Manager 對話框的設定如下:

    Non-Touchable Memory Address 為 FFFF2000。

    Enable Adavance Vector Cache Management 為不勾選。

    LO_Vector Cache 及 HI_Vector Cache 的內容為 EAFFFFFF。

    設定完成後,要下載 Linux kernel 檔到 Linux Target 端,請在 Domingo for Linux 的Menu bar 選擇 Debug Load Module…,此時會要求選擇下載的檔案,請選擇S:\microtime\build-linux\output\nfs_boot 目錄下的 zImage 檔案,接下來出現 Load Module Dialog 對話框,如下:

  • -44-

    此時設定如下:

    ModuleFormat 的 Options edit:設定為”P;0xa0008000”。

    Goto Main/Address check box:設定為 unchecked。

    按”OK”鈕,則開始下載 zImage 檔案到 Linux Target 端 0xa0008000 的位址,下載完成後回到 Domingo for Linux 的主畫面,此時設定 Register View 中的 PC 值為A0008000,如下:

  • -45-

    輸入完成後請按 enter 鍵。

    接下來要啟動 Linux kernel,請按 Domingo for Linux Tool bar 的 Free go 按鈕,如下:

    執行 free go 後此時觀察 UART View,發現 message 停在 console 這一行便不再執行,如下:

    此時按 Tool bar 的 pause button,先讓 Domingo for Linux 進入暫停的狀態,接著會出現一個 Warning 視窗,說明 HI_Vector_Cache 將會被自動更新,如下:

    此時 Domingo for Linux 應該為暫停的狀態,接下來要再次設定 Vector Cache Manager對話框,選擇 Domingo for Linux Menu Bar 的 Config/Vector Cache Management…,則出現 Vector Cache Manager 對話框,如下:

  • -46-

    在 Vector Cache Manager 對話框請設定如下:

    勾選 Enable Adavance Vector Cache Management。

    按”Update Project File”鈕。

    完成之後請按”Exit”鈕回 Domingo for Linux 主畫面。

    接下來執行 Tool bar 的 Free go button,則能順利啟動 Linux Kernel 如下:

  • -47-

    以上即完成 Domingo for Linux 利用 ICE 下載 linux kernel 的驗證方式。

    註 1:”Vector Cache Manager”的詳細說明,請參考 Create XScale-PXA270 手冊的”5.7.1 Vector Cache Manager”及”5.7.2 Vector Cache Management Case Study”。

  • -48-

    4.2.9. Domingo for Linux—【ICE 啟動 Linux Kernel 及 Flash 中的

    RootFS】

    這一

    節將介紹 Domingo for Linux 如何利用 ICE 下載、起動 linux kernel 並且掛載已經事先燒錄在 Flash 中的 root filesystem,操作步驟請參考如下:

    首先請參考[1] ” 3.2.5.2 編譯 kernel image – 設定 root filesystem 在遠 Flash”,產生uImage 檔並複製到/usr/src/microtime/build-linux/output/ flash_boot 目錄下。

    參考本實習”3.2.5、U-Boot—【燒錄 Linux Kernel 及 RootFS】”,利用 U-Boot 將 root filesystem 燒錄到 Create XScale-PXA270 子板的 Flash 上。

    接下來所有的操作步驟和本實習”3.2.8、Domingo for Linux—【ICE 啟動 Linux Kernel及遠端 NFS Server 的 RootFS】”一樣,所以請使用者依其操作步驟執行,但是要注意有一個不同處,就是在用 Domingo for Linux 的 Load Module…下載的 linux kernel 檔,要選擇 S:\microtime\build-linux\output\flash_boot 目錄下的 zImage 檔案。

    4.3 程式碼註解

  • -49-

    5. 結論

    本章的實習部分說明了 Linux Kernel 和 root filesystem image 的驗證方式。使用者可以參考實習部分的說明利用 Domingo for Linux 或 U_Boot 將檔案下載或燒錄到 Linux Target 端驗證。除此之外掛載 root filesystem 的方式也有從 Linux Target 端 flash 掛載或是從 Linux Host 端 NFS server 分享的方式掛載,使用者可以選擇最有益於自己開發的模式來驗證。

    一般來說,在開發的過程當中利用從 Linux Host 端 NFS server 分享的方式掛載 root filasystem 是比較省時的方式,可以免除當 root filesystem 修改時,使用者要先下載和燒錄到 Linux Target 端所浪費的時間,進而縮短開發的時間。當然驗證都無誤之後,最終的目標就是把檔案燒錄到 Linux Target 端的 flash 上。

    另外本實習也介紹了 bootloader — U-Boot 和 Linux Target 端根目錄規劃的方式。

    6. 習作

    Exe-1:

    7. 參考資料

    [1] RM-033-04-401 字元裝置驅動程式實習.pdf