在这个过程中,看了网上许多的介绍,但是由于编译的东西比较多,skyeye,arm-elf-tools和uClinux版本又多。如果有版本不一样,或者你的操作系统和作者的不一样的话,操作步骤就会有很多不一样的地方。所以尽量和作者使用一个版本的东西,再加上自己的细心琢磨才有可能成功。去年自己对linux的一些基本命令都搞不懂就开始编译,结果走了很多的弯路,浪费了好多时间,希望初学者先把linux的基本命令学习一下。本文仅供参考。
一、环境介绍
操作系统:Red Hat 9.0
gcc version 3.2.2 20030222(Red Hat Linux 3.2.2-5)
skyeye-1.2-RC8.tar.bz2
arm-elf-tools-20030314.sh
uClinux-dist-20030909.tar.gz
操作系统中最好把GTK装上,否则有可能在编译的时候通不过。在“添加删除程序”中可找到这个自带的安装包。
二、安装skyeye
安装目录可自己选,我的装在/zyt/skyeye目录下
1.下载skyeye-1.2-RC8-3.tar.bz2
2.解压:tar jxvf skyeye-1.2-RC8-3.tar.bz2,生成skyeye-v1目录。
3.进入skyeye-v1目录,make NO_BFD=1。在binary目录下安装了所需要得文件
4.binary/skyeye -h,可以查看skyeye帮助及支持的芯片
三、安装交叉编译器
1.输入如下命令
#chmod a+x arm-elf-tools-20030314.sh
#./arm-elf-tools-20030314.sh
2.应该是安装到了/usr/local/arm-elf下。自动生成arm-elf目录
四、编译安装uClinux
解压编译
#tar -zxvf uClinux-dist-20030909.tar.gz
#cd uClinux-dist
#make menuconfig
根据网上资料选择
Vendor/Product: GDB/ARMulator
Kernel Version: linux-2.4.x
Libc Version: uC-libc
保存退出
#make dep
#make
在linux-2.4.x目录下生成了linux文件
五、skyeye运行uClinux
1.首先在uclinux-dist目录下添加文件skyeye.conf
内容说明模拟使用的平台,可参考skyeye的说明文件,摘抄其中的部分
例如
cpu :arm7tdmi
mach: at91
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.img
mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
lcd: state=on
2.通过如下命令看看在uClinux-dist目录下的skyeye.conf文件是否与上面的内容一致:
# more skyeye.conf
3.然后是建立文件系统的联接,需要在目录uClinux-dist目录下执行如下命令:
#ln -s images/romfs.img boot.rom
这主要是与skyeye.conf中的内容保持一致,大家可注意skyeye.conf中的第5行。
4.在uClinux-dist目录下,
# /zyt/skyeye/skyeye-v1/binary/skyeye -e linux-2.4.x/linux
这样uClinux就可以运行起来了
这里重点记录我在按照手册内容进行操作过程中遇到的问题。
问题1:在编译安装过程中make出错,错误信息如下:
****************************
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make[2]: *** [skyeye] 错误 1
make[2]:正在离开目录 `/home/magc/skyeye129/skyeye-1.2.9_rc1'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/magc/skyeye129/skyeye-1.2.9_rc1'
make: *** [all] 错误 2
****************************
问题分析解决:
此问题是由于缺少ncurses的开发库,通过新立得工具搜索ncurses,找到开发版的libncurses-dev的,选中安装即可。安装后
注:类似/usr/bin/ld: cannot find -xxxx的错误有很多, 首先我们可以最简单的判断一下:
这类情况一般是由于缺乏某某库文件, 又或者可能是由于已存在的库问题版本不对造成的
一般都是解决的办法就是安装缺乏的devel包就可以解决
问题2:在运行Skyeye自带的小测试实例arm_hello时,遇到问题,在运行start命令行,启动出错,错误信息如下:
*******************************
(skyeye)start
arch: arm
cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0
In do_mach_option, mach info: name at91, mach_init addr 0xb79bfe40
uart_mod:3, desc_in:, desc_out:, converter:
In create_uart_console
Child:: No such file or directory
*******************************
问题分析解决:查看skyeye.conf内容,发现其中的"uart=term "应该有问题,将它修改成"uart=stdio"或"uart=xterm"后,重新运行,正常。