安装uClinux时,伤透脑经。
一开始准备安装最新的版本——uClinux-dist-20100825.tar.bz2,下载地址为:http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20100825.tar.bz2 。用火狐下了两次,都在中途突然终止了,解压自然失败,后来无耐,只有使用迅雷下载。此文件的真实大小是327M,解压后产生文件夹uClinux-dist。
接着安装编译工具。一开始尝试的是arm-elf-tools-20030314.sh,下载地址为:http://www.uclinux.org/pub/uClinux/arm-elf-tools/arm-elf-tools-20030314.sh 。安装后可以使用arm-elf-*等编译工具。但是编译uClinux-dist时提示找不到arm-linux-gcc!原来新版的uClinux-dist已经使用arm-linux-tools来编译了,网上说可以通过修改config.arch完成,追踪到文件vendors/config/armnommu/config.arch,将CROSS_COMPILE 改成 arm-elf- 后再编译,仍然失败!最后使用命令sed -i "s/arm/-linux/arm/-elf/g" `grep 'arm/-linux' -rl .` 将目录uClinux-dist下所有的arm-linux都修改成arm-elf,然后尝试编译,仍然失败!然后安装arm-uclinux-tools-base-gcc3.4.0-20040713.sh,下载地址为http://opensrc.sec.samsung.com/download/arm-uclinux-tools-base-gcc3.4.0-20040713.sh ,配置~/.bashrc使用arm-uclinux-tools去编译仍然失败!实在没辙,只有下载arm-linux-tools工具编译。先后下载了arm-linux-gcc-4.3.2.tgz、cross-3.2.tar.bz2、cross-2.95.3.tar.bz2,下载地址分别为:http://www.friendlyarm.net/dl.php?file=arm-linux-gcc-4.3.2.tgz 、ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-3.2.tar.bz2 、ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-2.95.3.tar.bz2 。分别尝试编译,都以失败告终!所有的编译器都尝试了GDB/ArMulator下的Linux 2.4.x和Linux 2.6.x两个版本,事实表示,没有成功的可能!
实在无耐,只有安装书本中使用的版本。首先下载uClinux-dist-20020927.tar.gz,下载地址为:http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20020927.tar.gz ,文件大小为83M。然后下载arm-elf-tools-20011219.tar.gz,下载地址为:http://www.uclinux.org/pub/uClinux/arm-elf-tools/arm-elf-tools-20011219.tar.gz 。安装后按照make menuconfig、make dep、make linux、make romfs、make image的顺序编译,总是在make romfs中失败!偶然使用make menuconfig、make dep、make的顺序编译,成功!然后使用arm-elf-tools-20030314.sh编译,成功!使用arm-uclinux-tools-base-gcc3.4.0-20040713.sh编译,失败!
编译成功以后,就是在Skyeye中测试。我成功安装了最新版本:skyeye-1-3-1_rc1.tar.gz,可以从http://sourceforge.net/projects/skyeye/files/ 中寻找下载链接。最新版的Skyeye使用UART作为显示终端,所以需要在skyeye.conf中添加UART选项。在目录uClinux-dist下新建文件skyeye.conf,内容如下:
#skyeye config file sample
arch:arm
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=./boot.rom
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
uart:mod=term
#log: logon=0, logfile=./sk1.log, start=0, end=200000
最后一句uart:mod=term添加了UART,从而可以在UART界面中看到uClinux的启动界面。
然后建立符号链接文件boot.rom:ln -s images/romfs.img boot.rom。然后就可以在目录uClinux-dist下启动skyeye:/opt/skyeye/bin/skyeye -e linux-2.4.x/linux。依次输入:start、run,就可在uart_instance窗口中看到uClinux的启动界面。至此,终于完成了skyeye+uClinux的安装配置!
事实证明,uClinux管理上还是有些混乱,不同的版本使用的编译器不同,而且很多编译选项都是不兼容的,如mapcs-32等。skyeye也是的,不同版本的操作序列也不同。开源,也就注定了这些问题的层出不穷。
后记:第二天,偶然发现使用arm-linux-tools-20061213.tar.gz(arm-linux-gcc 3.4.4,下载地址为:http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20061213.tar.gz ),按照顺序make menuconfig、make dep、make顺序可以编译uClinux-dist-20100825.tar.bz2的GDB/ArMulator的Linux 2.4.x版本(尝试2.6.x版本时失败)!但是按照以前的make menuconfig、make dep、make linux、make romfs、make image顺序编译也失败!真是又惊又喜,不知说什么好! 2.95.3、3.2、4.3.2版本的arm-linux-tools都失败,3.4.4这个版本却OK,真是服了uClinux了!更让我吃惊的是,使用arm-linux-tools-20080623.tar.gz(arm-linux-gcc 4.2.4,下载地址为:http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20080623.tar.gz ),按照顺序make menuconfig、make dep、make顺序可以编译uClinux-dist-20100825.tar.bz2的GDB/ArMulator的Linux 2.6.x版本(尝试2.4.x版本时失败)!按照make menuconfig、make dep、make linux、make romfs、make image顺序编译也失败!神啊,uClinux的版本太混乱了!编译成功后的内核用skyeye加载时大多失败(只有一次加载2.4.x时成功),可能skyeye.conf配置文件没有写好。