免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1363 | 回复: 0
打印 上一主题 下一主题

ubuntu中建立交叉编译环境和skyeye [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-13 14:40 |只看该作者 |倒序浏览

                一、搭建开发环境
在www.uclinux.org上下载以下两个包:
交叉开发工具:arm-elf-tools-20040427.sh
uClinux的源码包:uClinux-dist-20040408.tar.gz
好像现在arm-elf-tools-20040427.sh不太好下,你也可以下载arm-elf-tools-20030314.sh
安装交叉开发工具:进入arm-elf-tools-20040427.sh所在的目录,执行以下命令进行安装:

          代码:
       
       
          $sudo chmod +x arm-elf-tools-20040427.sh
$sudo ./arm-elf-tools-20040427.sh
       
这两条命令首先是加可执行权限,然后安装。
解压uClinux源码包:
用以下命令:

          代码:
       
       
          $tar zxvf uClinux-dist-20040408.tar.gz
       
二、下载Skyeye 以便进行仿真:
SkyEye是开源软件的一个项目,SkyEye的目标是在Linux和Windows操作系统里提供一个完全的仿真环境。SkyEye仿真环境相当于一
个嵌入式计算机系统,你可以在SkyEye里运行一些嵌入式Linux操作系统,如ARMLinux,uClinux,uc/OS-II(ucos-
ii)等,并能分析和调试它们的源代码。
如果你想知道关于SkyEye和嵌入式系统更详细的信息,请访问下面的站点:
www.SkyEye.org
http://www.skyeye.org/index_cn.html
安装SkyEye
网上介绍了很多安装方法,其实在ubuntu里面安装最方便:

          代码:
       
       
          wenwu@wenwu-desktop:~$ sudo apt-get install skyeye
       
这样,一个最新版的skyeye1.2.3就安装好了。
在shell 里面直接键入skyeye后看到如下说明:

          代码:
       
       
          **************************** WARNING **********************************
If you want to run ELF image, you should use -e option to indicate
your elf-format image filename. Or you only want to run binary image,
you need to set the filename of the image and its entry in skyeye.conf.
***********************************************************************
big_endian is false.
Failed to open skyeye config file skyeye.conf in the same directory
error: No such file or directory
------------------------- SkyEye -V1.2 ---------------------------
Usage: SkyEye [options] -e program [program args]
Default mode is STANDALONE mode
------------------------------------------------------------------
Options:
-e exec-file        the (ELF executable format)kernel file name.
-l load_address,load_address_mask
                    Load ELF file to another address, not its entry.
-b                  specify the data type is big endian when non "-e" option.
-d                  in GDB Server mode (can be connected by GDB).
-c config-file      the skyeye configure file name.
-h                  The SkyEye command options, and ARCHs and CPUs simulated.
------------------------------------------------------------------
----------- Architectures and CPUs simulated by SkyEye-------------
-------- ARM architectures ---------
at91
lpc
s3c4510b
s3c44b0x
s3c44b0
s3c3410x
ep7312
lh79520
ep9312
cs89712
sa1100
pxa_lubbock
pxa_mainstone
at91rm92
s3c2410x
s3c2440
sharp_lh7a400
ns9750
lpc2210
ps7500
integrator
-------- BlackFin architectures ----
bf533
       
表明你的skyeye 已经安装好了,可以随时使用了。
当然,如果你的源里面没有 skyeye,就尝试从下面的方法安装:
首先下载skyeye:
下载地址:http://gro.clinux.org/projects/skyeye/
在这个网址里面有如下两个版本,我建议用1.2.2版本的,1.2.3版本的在安装时往往存在一些问题
skyeye_1_2_2_Rel.tar.bz2
skyeye_1_2_3_Rel.tar.bz2
因为在安装skyeye 时会用到一些别的包,所以在新立得软件包管理器中找到下面的软件包:binutils-dev 标记并安装
下面是关于这个软件包的描述
The GNU binary utilities (BFD development files)
This package includes header files and static libraries necessary to build
programs which use the GNU BFD library, which is part of binutils.  Note
that building Debian packages which depend on the shared libbfd is Not
Allowed.
最后使用make命令进行软件的安装,编译完毕后会在binary生成一个skyeye可执行文件,该文件就是skyeye模拟器了。
使用make命令的时候可以加入一些选项参数,例如:
不允许DBCT
$make NO_DBCT=1
不支持LCD
$make NO_LCD=1
不支持BFD库
$make NO_BFD=1
不支持网络设备
$make NO_NET=1
如果在binary目录下生成了skyeye文件,那么安装成功。
为了可以在shell 里面直接运用skyeye命令,将这个路径/source/skyeye_1_2_2_Rel/binary 加入到系统环境变量中

          代码:
       
       
          $gedit /etc/environment
       
找到有PATH那一行,加入skyeye 路径,比如下面所示
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/slickedit/bin:/source/skyeye_1_2_2_Rel/binary"
重启系统后生效
三、测试arm-elf-tool 的工作情况
建立一个源文件键入以下代码:

          代码:
       
       
          /*test.c*/
#include
int main()
{
        int i;
        for(i=0;i
       
用以下命令进行编译:

          代码:
       
       
          wenwu@wenwu-desktop:/source/work/test$ arm-elf-gcc -Wl,-elf2flt -o test test.c
wenwu@wenwu-desktop:/source/work/test$ ls
test  test.c  test.gdb
       
可以看到编译输出两个文件:test和test.gdb,表示编译成功
其中-elf2flt参数是将elf文件格式转为flat文件格式,这个工具是在你安装交叉编译器产生的.
也可以写一个makefile测试,下面是我写的一个,仅供参考:

          代码:
       
       
          #begin
CC=arm-elf-gcc
LDFLAGS=-Wl,-elf2flt
LIBS=
OBJS=test.o
all:test
hello:$(OBJS)
   $(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS)
   
clean:
   rm -rf *.o *.elf *.gdb test
   
#end
       
执行make 命令后编译成功,最后也生成了test文件,我们来看一下这个test文件

          代码:
       
       
          wenwu@wenwu-desktop:/source/work/test$ file test
test: BFLT executable - version 4 ram
       
可以看到生成的文件格式为BFLT格式,这是目标平台所支持的格式,所以当你试图:./test时,系统会提示:

          代码:
       
       
          wenwu@wenwu-desktop:/source/work/test$ ./test
bash: ./test:无法执行二进制文件
       
我们也可以用下面的命令进行编译生成汇编代码

          代码:
       
       
          wenwu@wenwu-desktop:/source/work/test$ arm-elf-gcc -S -o test.S test.c
wenwu@wenwu-desktop:/source/work/test$ file test.S
test.S: ASCII assembler program text
       
用文本编辑器打开这个文件test.S,就可以看到熟悉的ARM 汇编代码了。
四、测试这个程序:
测试这个程序需要用到一个工具skyeye-testsuits,可以在下面的网址下载:
http://gro.clinux.org/projects/skyeye/
网址里面有testsuite2.1.tar.bz2 但是在这里我们直接下载1.2.0版的二进制的工具包,skyeye-binary-testutils-1.2.0.tar.bz2
下载后解压

          代码:
       
       
          wenwu@wenwu-desktop:/source$ tar jxvf skyeye-binary-testutils-1.2.0.tar.bz2
       
进入下面这个目录,这是我们主要用到的目录。

          代码:
       
       
          wenwu@wenwu-desktop:/source$ ls skyeye-binary-testutils-1.2.0/at91x40/uclinux2
boot.rom  linux  readme  skyeye.conf
       
这个目录里面有四个文件,其中linux就是内核映像,boot.rom是要写到Flash里面去的。里面包含文件系统。skyeye.conf是配置文件。
可以在命令行里键入以下代码,

          代码:
       
       
          skyeye -e linux
       
你看到了什么?没错,我没有骗你

          代码:
       
       
                    ____ _  _
         /  __| ||_|                 
    _   _| |  | | _ ____  _   _  _  _
   | | | | |  | || |  _ \| | | |\ \/ /
   | |_| | |__| || | | | | |_| |/    \
   |  ___\____|_||_|_| |_|\____|\_/\_/
   | |
   |_|
       
当你看到这幅图片的时候,是不是感觉很爽?呵呵,我也是。
刚才我们不是写了一个代码吗?下面我们就看看怎么运行我们的程序:
首先在skyeye-binary-testutils-1.2.0/at91x40/uclinux2这个目录里面建立一个文件夹:romfs
这个目录主要用来存放用户程序,就是最后你写的程序也要拷到这个目录里面。

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ mkdir romfs
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls
boot.rom  linux  readme  romfs  skyeye.conf
       
但是我们必须把系统已有的文件系统里面的程序也拷出来,也就是把boot.rom本身所有的程序也要拷到romfs这个文件夹里面,所以首先要进行一次挂载,所以进入/mnt目录,建立一个临时文件夹tmp,如下所示

          代码:
       
       
          wenwu@wenwu-desktop:/mnt$ ls
wenwu@wenwu-desktop:/mnt$ sudo mkdir tmp
wenwu@wenwu-desktop:/mnt$ ls
tmp
       
用 mount -o loop src dst命令进行挂载,如下所示:

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo mount -o loop boot.rom /mnt/tmp/
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls /mnt/tmp/
bin  dev  etc  home  lib  mnt  proc  sbin  tmp  usr  var
       
然后把这里面的所有文件拷贝到我们刚才所建的那个我们自己的文件夹romfs里面

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo cp -r /mnt/tmp/* ./romfs/
       
这时,我们自己的文件夹里面有以下内容:

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls romfs/
bin  dev  etc  home  lib  mnt  proc  sbin  tmp  usr  var
       
将我们刚才生成的一个测试程序test也拷贝过来到romfs/bin目录时面:

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo cp /source/work/test/test romfs/bin/
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls romfs/bin/
boa      dhcpcd  ftp   gdbserver  inetd  login  ping    route  telnet   test
busybox  expand  ftpd  ifconfig   init   mount  reboot  sh     telnetd  umount
       
用genromfs这个工具重新制作文件系统

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo genromfs -f boot.rom -d ./romfs/
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls -l boot.rom
-rw-r--r-- 1 wenwu wenwu 1561600 2007-11-11 14:03 boot.rom
       
好了,下面我们再运行skyeye进行仿真,键入:skyeye -e linux

          代码:
       
       
          wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ skyeye -e linux
big_endian is false.
arch: arm
cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0
mach info: name at91, mach_init addr 0x8057550
ethmod num=1, mac addr=0:4:3:2:1:f, hostip=10.0.0.1
can't find device module: (name:net, type:(null))
log_info: log is off.
log_info:log file is /tmp/test.log, fd is 0x80f9318
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
start addr is set to 0x01000000 by exec file.
Linux version 2.4.20-uc0 (chy@localhost.localdomain) (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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP