Email me: jollen # jollen.org

more: Jollen 的 Embedded Linux 教育訓練

« October 2001 | (回到Blog入口) | March 2004 »

February 2004 歸檔

February 26, 2004

uClinux-dist 使用教學:使用 GDB/ARMulator 來做測試

一開始執行 GDB/ARMulator 時,指定 kernel 做為執行檔:

# /usr/local/bin/arm-elf-gdb linux.2.0.x
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf"...
(no debugging symbols found)...

注意!GDB/ARMulator 是 GDB 加上 ARMulator patch 後的特殊版本,必須自行由 GDB 原始碼製作。

進入 gdb 命令模式後,在 gdb 命令模式下輸入 target sim 命令:

(gdb) target sim
Loaded ROM boot.rom
Loaded ROM boot.rom
Loaded ROM boot.rom
Loaded ROM boot.rom
Connected to the simulator.

指定 taget 端為 ARM simulator。此時 GDB 會載入 boot.rom 做為 root filesystem,因此請將 root filesystem的檔案名稱修改為 boot.rom(或建立link)。接著再輸入 load 命令載入kernel:

(gdb) load
Loading section .text, size 0x77b84 vma 0x2000000
Loading section .rodata, size 0x8ddb vma 0x2077b84
Loading section .data, size 0x8fc8 vma 0x2080a60
Start address 0x2000000
Transfer rate: 4507960 bits/sec.

由 GDB 的訊息可以看出,uClinux for GDB/ARMulator 的 .text 節區起始位址為 0x20000000,此位址會因為硬體平臺的不同而不同。uCliinux-dist 已經幫我們設定好許多平臺的起始位址參數,因此使用 uClinux-dist 時就不必自己手動重設節區位址。

輸入run命令開機:

(gdb) run

執行結果:

Starting program: /home/Embedded/GDB/linux.2.0.x
Found an Atmel AT91F40xxx arm7 processor
Atmel AT91 series microcontroller support (c) 2000,2001 Lineo Inc.
kernel binary is in RAM -- reserving 643k for the kernel
Calibrating delay loop.. ok - 13.00 BogoMIPS
Memory: 1372k/2048k available (224k kernel code, 0k reserved, 196k data)
Swansea University Computer Society NET3.035 for Linux 2.0
NET3: Unix domain sockets 0.13 for Linux NET3.035.
Swansea University Computer Society TCP/IP for NET3.034
IP Protocols: ICMP, UDP, TCP
Linux version 2.0.39.uc2 (davidm@moby) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(-msep-data patches)) 41 Fri Jun 14 10:54:27 EST 2002
Atmel USART driver version 0.99
ttyS0 at 0xfffd0000 (irq = 2) is a builtin Atmel APB USART
ttyS1 at 0xfffcc000 (irq = 3) is a builtin Atmel APB USART
Ramdisk driver initialized : 16 ramdisks of 4096K size
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: 4000000-B4BB07FF (RO)
PPP: version 2.3.8 (demand dialling)
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
PPP MPPE compression registered
SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256).
CSLIP: code copyright 1989 Regents of the University of California.
VFS: Mounted root (romfs filesystem).
Shell invoked to run file: /etc/rc
Command: hostname GDB-ARMulator
Command: /bin/expand /etc/ramfs.img /dev/ram0
Command: mount -t proc proc /proc
Command: mount -t ext2 /dev/ram0 /var
Command: mkdir /var/tmp
Command: mkdir /var/log
Command: mkdir /var/run
Command: mkdir /var/lock
Command: cat /etc/motd
Welcome to
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| |_| | |__| || | | | | |_| |/ \
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|

GDB/ARMulator support by <davidm@snapgear.com>
For further information check:
http://www.uclinux.org/

Execution Finished, Exiting

Sash command shell (version 1.1.1)
/>

uClinux-dist 使用教學:安裝 uClinux 的 GNU ARM toolchain

由 uClinux 網站下載 GNU armtools:

http://www.uclinux.org/pub/uClinux/m68k-elf-tools/

請下載此檔案:

http://www.uclinux.org/pub/uClinux/m68k-elf-tools/arm-elf-tools-20030314.sh

下載完成後,直接執行 arm-elf-tools-20030314.sh 即可安裝:

# sh arm-elf-tools-20030314.sh

uClinux 所提供的 GNU armtools 會安裝於 /usr/local 目錄下。

FLAT 格式的轉換工具

uClinux 所提供的 GNU armtools 也有一個用來處理 FLAT 格式轉換的工具,因此我們會有以下 2 個執行檔:

˙ /usr/local/bin/arm-elf-ld:呼叫arm-elf-ld.real並協助我們將檔案轉換成FLAT格式。
˙ /usr/local/bin/arm-elf-ld.real:真正的linker。

使用 uClinux 的 toolchains 時,只要在執行 arm-elf-ld 時加上 '-elf2flt' 參數即可將檔案轉換成 FLAT 格式;另外,設定 FLTFLAGS 環境變數,即可傳遞參數給 elf2flt 指令。例如:'export FLTFLAGS=-z' 表示要製作成 ZFLAT 的格式。

uClinux-dist 使用教學:編譯 uClinux-dist 與常見問題

編譯 uClinux-dist

完成 kernel 與 filesystem 設定後,在命令模式執行編譯命令:

# make dep
# make

進行 kernel 與應用程式的跨平臺編譯。在編譯之前,請檢查跨平臺編譯工具組(如GNU armtools)是否已安裝,同時在環境變數 PATH 的搜尋路徑裡也要能找到相關的程式。

uClinux-dist 會幫我們製作 root filesystem 的映像檔(image file),最後編譯完成的 kernel 與 root filesystem 映像檔會存放於 image/ 目錄下。編譯成功後會得到 4 個主要的檔案如下:

˙ images/linux.text:kernel的.text節區。
˙ images/linux.data:kernel的.data節區。
˙ images/romfs.img:filesystem的映像檔。
˙ images/image.bin:以上 3 個檔案合併後的映像檔。

在這裡我將 uClinux-dist 設定成「GDB/ARMulator」,這樣我們之後就可以用 GDB/ARMulator 來玩這個 root filesystem 了。

常見問題

在許多無法成功編譯 uClinux-dist 的案例中,最常見到的問題有2個。

第一種情況為 GNU armtools 安裝不完整,導致在編譯的過程中出現錯誤,例如在 uClinux-dist 中選用 uClibc,但並未安裝 uClibc 套件,或是系統設定的問題,導致編譯器無法找到正確的程式庫位置。因此若在編譯 uClinux-dist 的過程出現錯誤,請先檢查 GNU armtools 的安裝是否完整,同時也記得安裝所選用的 C 程式庫。

第二種情況為套件的設定與 C 函式庫有衝突,例如有些套件不能使用 uClibc,必須改用 uC-libc 才能成功編譯。

uClinux-dist 使用教學:uClinux-dist 的使用

uClinux-dist 基本操作

將uClinux-dist-20030909.tar.gz解壓後,執行:

# make menuconfig

進入文字選單設定介面(圖1)。

圖1 uClinux-dist的設定主選單

進入「Target Platform Selection」選單,開始設定target端平臺的參數(圖2)。

圖2 選擇 Vendor/Product

在 uClinux-dist 裡已經預先建立許多平臺的參數資料,因此我們可以在「Vendor/Product」選單裡選取我們的硬體平臺,並使用 uClinux-dist 的預設參數。

在這裡我們選擇「GDB/ARMulator」來配合後面的章節進行實作(圖3)。

圖3 在Vendor/Product選項中找到 GDB/ARMulator平臺

接著在「kernel Version」選單中選則 Linux kernel 版本,在這裡我們選擇「linux-2.0.x」(圖4)。

圖4 使用linux-2.0.x

再來是有關filesystem的設定。在「Libc Version」裡,選擇「uC-libc」做為標準C程式庫(圖5)。

圖5 使用uC-libc

回到「Target Platform Selection」主選單,選擇「Customize kernel Settings (NEW)」後儲存設定離開(圖6)。

圖6 選取「Customize Kernel Settings (NEW)」進入kernel設定介面

在圖6的畫面中連續選擇「Exit」後會出現圖7的畫面,在此畫面選擇「Yes」儲存設定後離開。

圖7 儲存設定後離開

uClinux kernel設定選單

離開uClinux-dist主選單後,會進入Linux kernel的設定選單(圖8)。

圖8 Linux kernel設定選單

在 Linux kernel的設定選單裡進行相關設定,其中關於記憶體使用配置可查詢各平臺的使用手冊。設定完成後儲存離開。由於我們選擇的平臺為 GDB/ARMulator,因此直接使用預設值即可。選擇「Exit」儲存設定後離開(圖9)。

圖9 儲存 kernel 設定後離開

Filesystem 設定選單

若在 uClinux-dist 主選單選擇「Customize Vendor/User settings (NEW)」(圖6)則可以自行設定 filesystem。圖7是 uClinux-dist 的 filesystem 設定介面,在這裡我們可以自行設定 filesystem 的套件。

圖10 Filesystem 設定選單

設定完成後選擇「Exit」,然後再選擇「Yes」儲存設定後離開。

注記

  • 2006.12.27: 本文是以 20030909 的 uClinux-dist 為例,目前最新版本是 20060803。(Edit by Jollen)

uClinux-dist 使用教學:uClinux 與 uClinux-dist 介紹

uClinux 介紹

uClinux 唸做「you-see-linux」,是由字置詞「u」(micro之意)與「c」(control之意)所組成的複合字。由 uClinux 的名稱可以知道,這是將Linux 移植到控制用微控制處理器上的 Linux kernel。

目前 uClinux 已經將 Linux kernel 的移植(porting)到許多不同的處理器架構上,uClinux 目前移植的 kernel 最新版本為: kernel 2.0.39、kernel 2.4.32 與 kernel 2.6.17。

uClinux 所支援的處理器有:M68k、ColdFire、ARM、Sparc、NEC v850、H8/300、OPENcores OR1000、Altera NIOS and Xilinx Microblaze。

uClinux 本身是 Linux kernel 的移植,許多情況下我們都可以直接使用廠商提供事先編譯完成的 uClinux。若想要自行編譯給 ARM 使用的 Linux kernel,建議使用uClinux-dist。

uClinux-dist 介紹

uClinux 有許多不同處理器平臺的移植,uClinux-dist 則是將不同處理器的 uClinux 整合至一個套件裡。此外,uClinux-dist 也整合了許多的軟體與系統工具,並且提供設定 root filesystem 的介面。

因此,使用 uClinux-dist 可以很方便的設定 Linux kernel 與 root filesystem,並且透過 uClinux-dist 的 Makefile 環境,我們就可以很方便的做跨平臺編譯。針對不同平臺所需要的其它處理工作(如 FLAT 格式轉換、.text/.data 節區的切割等等),uClinux-dist 也會自動幫我們完成。

可以小結使用 uClinux-dist 的主要好處有:

˙ 簡化編譯過程
˙ 不需下達雜複的 arm-elf-gcc 參數
˙ 不需下達雜複的 arm-elf-ld 參數
˙ 自動進行 kernel 的 .text/.section 節區處理
˙ 將 ELF 格式轉 FLAT 格式
˙ 自動進行 VMA 與 LMA 的位址重新對應
˙ 處理不同平臺的新增節區設定

除此之外,uClinux-dist 也提供 glibc/uClibc/uC-libc 的選擇,因此建議大家下載 uClinux-dist 使用。uClinux-dist 的官方下載網址:http://www.uclinux.org/pub/uClinux/dist/

由於編譯完成的 uClinux kernel 還需要針對硬體平臺做許多處理才能下載到實驗板使用,例如:針對不同的程式起啟位址重新調整所有節區的VMA/LMA 位址,因此若透過 uClinux-dist 的整合環境,便可以簡化我們的工作

注記

  • 2006.12.27: 更新(Editor: Jollen)

關於 February 2004

此頁面包含了在February 2004發表於Jollen's Blog的所有日記,它們從老到新列出。

前一個存檔 October 2001

後一個存檔 March 2004

更多信息可在 主索引 頁和 歸檔 頁看到。

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org