arm-elf交叉編譯器安裝與測試

一.下載交叉編譯器

    ftp://166.111.8.229/OS/Embedded/uclinux/pub/uClinux/arm-elf-tools/

   下載些目錄下的“arm-elf-tools-20030314.sh”文件。

二.安裝交叉編譯器

    1.修改“arm-elf-tools-20030314.sh”文件的權限

        chmod a+x arm-elf-tools-20030314.sh

    2.執行安裝

      ./arm-elf-tools-20030314.sh

      安裝完成後,利用命令 ls /usr/local/bin/ 可以查看到以“arm-elf”開頭的相關執行程序,這些文件用於編譯在目標平臺上運行的程序。

    例如:arm-elf-gcc,arm-elf-addr2line,arm-elf-gdb,arm-elf-ld arm-elf-as,arm-elf-c++,

    arm-elf-g++,genromfs,arm-elf-run 等等。

三.測試交叉編譯器

    下面利用一個實例C程序測試arm-elf-gcc編譯器

    1.源碼:

        /*

            hello.c

        */

        #include <stdio.h>

        int main(void)

        {

            printf("Hello world!");

            return 0

        }

    2.編譯:

        arm-elf-gcc  -Wl, -elf2flt  -o hello hello.c

        -elf2flt參數是將elf文件格式轉爲flat文件格式,其它還有很多選項,可以到網上查找相關的介紹文檔。

    3.查看執行文件格式:

       file hello

       輸出內容:hello:data

    4.安裝測試內核

      首先需要安裝skyeye程序,這個程序在以後會介紹到,然後就是下載一個testutils包,這個包裏面有幾嵌入式內核,

       下面慢慢介紹。

        1.下載testutils-1.0.4包,網址: http://download.gro.clinux.org/skyeye/skyeye-binary-testutils-1.0.4.tar.bz2

        2.解壓:tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2,並進入解壓出來的目錄中:cd testsuits/at91/uclinux2

        3.建立一個目錄:mkdir romfs(後面將用到,這個主要用於裝入hello程序)

        4.新建掛載目錄,並掛載:mkdir /mnt/uclinux ; mount -o loop boot.rom /mnt/uclinux

        5.將內核文件複製到romfs目錄:cp  -r  /mnt/uclinux/*   ./romfs

        6.將我們生成的hello文件複製到/romfs/bin目錄

        7.利用romfs目錄生成新的內核系統:genromfs  -f   boot.rom  -d  romfs/

        現在hello程序已經放到內核系統的bin/中了,接下來利用skyeye加載內核,並運行。

        8.利用skyeey加載運行內核:/home/skyeye-1.2.5/skyeye -e ./linux (說明:運行skyeye根據自己安裝的目錄而定,參數“-e” 一定要加,否則會出現錯誤“... no bank found ...”,當前目錄爲/testutils/at91/uclinux2,這個目錄下面有內核文件“linux”)。

     這樣就進入我們在linux下面熟悉的命令行模式了,接下來得用cd bin進入bin目錄,用ls -l 就可以查看到我們自己的hello程序了,運行程序./hello ,就可以看到我們再熟悉不過的結果了“Hello world!”

     至此,交叉編譯器的安裝與測試就算圓滿成功了。當前在這裏只是初略的介紹了一下,交叉編譯器的安裝與測試,其實裏面還有很需要我去學習的東西,比如:arm-elf-gcc 參數,genromfs  等等,其中skyeye(中文名:“天目”)也是比較重要的,它可以模擬很多內核系統以及相關的硬件,比如:軟件系統有uclinux,ucos!!,等,硬件有ARM,MIPS等。

我的機器上出現了以下信息:

root@lizhoujian uclinux2]# /home/zjli/skyeye-1.2.5/skyeye -e ./linux

Your elf file is little endian.
arch: arm
cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0
mach info: name at91, mach_init addr 0x805bd28
ethmod num=1, mac addr=0:4:3:2:1:f, hostip=192.168.1.166
can't find device module: (name:net, type:(null))
log_info: log is off.
log_info:log file is /tmp/test.log, fd is 0x814cd20
log_info: log start clock 3200000
log_info: log end clock 3330000
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use arm7100 mmu ops
Loaded ROM   ./boot.rom
exec file "./linux"'s format is elf32-little.
load section .init: addr = 0x01000000  size = 0x0000a000.
load section .text: addr = 0x0100a000  size = 0x000d0480.
load section .data: addr = 0x010dc000  size = 0x00009154.
not load section .bss: addr = 0x010e5160  size = 0x00022954 .
call ARMul_InitSymTable,kernel filename is ./linux.
start addr is set to 0x01000000 by exec file.
Linux version 2.4.20-uc0 (
[email protected] ) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/ )) #7 五 8月 1 19:43:07 CST 2003
Processor: Atmel AT91M40xxx revision 0
Architecture: EB01
On node 0 totalpages: 1024
zone(0): 0 pages.
zone(1): 1024 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/rom0
Calibrating delay loop... 12.97 BogoMIPS
Memory: 4MB = 4MB total
Memory: 2984KB available (833K code, 181K data, 40K init)
Dentry cache hash table entries: 512 (order: 0, 4096 bytes)
Inode cache hash table entries: 512 (order: 0, 4096 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 1024 (order: 0, 4096 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Starting kswapd
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
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: 1400000-15853FF [VIRTUAL 1400000-15853FF] (RO)
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
SkyEye NE2k Ethernet driver version 0.2 (2003-04-27)
sene2k dev name: eth0: <6>NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 512 bind 512)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
sys_mount:dev_name /dev/root,dir_name /root, type ext2, flag 0x8001, data 0
 sys_mount:1 data_page 1122000, type_page 113bf74, dev_page 0, dir_page 8001
sys_mount:2 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000
sys_mount:3 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000
sys_mount:4 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000
sys_mount:dev_name /dev/root,dir_name /root, type romfs, flag 0x8001, data 0
 sys_mount:1 data_page 0, type_page 117f000, dev_page 117d000, dir_page 8001
sys_mount:2 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000
sys_mount:3 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000
sys_mount:4 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000
VFS: Mounted root (romfs filesystem) readonly.
sys_mount:dev_name .,dir_name /, type <NULL>, flag 0x2000, data 0
 sys_mount:1 data_page 111c120, type_page 0, dev_page 10e5d00, dir_page 10e5174
sys_mount:2 data_page 0, type_page 0, dev_page 117f000, dir_page 1122000
sys_mount:3 data_page 0, type_page 0, dev_page 117f000, dir_page 1122000
sys_mount:4 data_page 0, type_page 0, dev_page 117f000, dir_page 1122000
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
sys_mount:dev_name /proc,dir_name /proc, type proc, flag 0xc0ed0000, data 11d1008
 sys_mount:1 data_page 1000, type_page 1002, dev_page 118c008, dir_page c0ed0000
sys_mount:2 data_page 118a000, type_page 11a2000, dev_page 118b000, dir_page 1122000
sys_mount:3 data_page 118a000, type_page 11a2000, dev_page 118b000, dir_page 1122000
sys_mount:4 data_page 118a000, type_page 11a2000, dev_page 118b000, dir_page 1122000
mount: /etc/mtab: Read-only file system
Command: mount -t ext2 /dev/ram0 /var
sys_mount:dev_name /dev/ram0,dir_name /var, type ext2, flag 0xc0ed0000, data 11d1008
 sys_mount:1 data_page 111c260, type_page 119fe40, dev_page 0, dir_page c0ed0000
sys_mount:2 data_page 1188000, type_page 118a000, dev_page 1189000, dir_page 1122000
sys_mount:3 data_page 1188000, type_page 118a000, dev_page 1189000, dir_page 1122000
sys_mount:4 data_page 1188000, type_page 118a000, dev_page 1189000, dir_page 1122000
mount: /etc/mtab: Read-only file system
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 <
[email protected] >
For further information check:
http://www.uclinux.org/
 
Command: /bin/ifconfig eth0 up 10.0.0.2
 IO error in at91_io_write_byte,addr=0xfffff108
Execution Finished, Exiting 

Sash command shell (version 1.1.1)                                                  

/>cd bin       (進行hello所存放的目錄)

/bin>./hello  (這裏就運行我們的hello程序了)                          

Hello world!            

/bin>

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章