本试验的运行环境:VMWARE WORKSTATION + REDHAT 9.0
本实验需要的文件:arm-linux-gcc-3.4.1.tar.bz2
arm-linux-gcc-3.3.2.tar.bz2
arm-elf-20040427.tar.bz2
u-boot-1.2.0.tar.bz2
skyeye-1.2.5_REL.tar.gz
skyeye-testsuite-1.2.5.tar.gz
一、安装交叉编译器、配置环境
1. 下载交叉编译器arm-linux-gcc-3.4.1.tar.bz2, arm-elf-20040427.tar.bz2, 并将其拷贝到根目录下
2. 安装arm-linux-gcc-3.4.1.tar.bz2和arm-elf-20040427.tar.bz2:
# cd /
# tar jxvf arm-linux-gcc-3.4.1.tar.bz2
# ./arm-elf-20040427.tar.bz2
3.设置环境变量: 从新打开终端,然后执行
# vi .bashrc 添加
export PATH=$PATH:/usr/local/arm/3.4.1/bin
4.查看是否成功安装
退出控制台,然后从新打开终端,输入
# arm-linux-
按下tab键,可以看到所有”arm-linux-“打头的工具。再使用命令”arm-linux-gcc –v”查看编译器信息:
二.安装skyeye
1.下载skyeye-1.2.5_REL.tar.gz, 在/home/redhat/下建立文件夹lab3
# mkdir lab3
将skyeye-1.2.5_REL.tar.gz拷贝到lab3中,解压缩
# tar zxvf skyeye-1.2.5_REL.tar.gz
进入/skyeye-1.2.5_REL编译并安装
# ./configure (与skyeye匹配的编译器是gcc-3.4或者gcc-4.2,如果本虚拟机默认的不是此版本,则可以写成:CROSS_COMPILE = /usr/local/arm/3.4.1/bin/gcc-3.4 ./configure)
# make
# sudo make install
3. 下载测试集
最新的skyeye-testsuite-1.2.5.tar.bz2测试集并解压缩
4、使用skyeye模拟板子s3c2410运行某个Linux
如:进入/skyeye-testsuite-1.2.5/linux/s3c2410/s3c2410x-2.6.14
# cd skyeye-testsuite-1.2.5/linux/s3c2410/s3c2410x-2.6.14
命令:skyeye –c skyeye.conf –e vmlinux
#skyeye –c skyeye.conf –e vmlinux
执行命令后,会出现”Welcome to ARMLINUX”的欢迎界面:
5、编写应用程序hello.c
//hello.c
#include <stdio.h>
int main(void)
{
for(int i=0; i<6; i++)
printf(“This is my program!”);
return 0;
}
使用命令:arm-linux-gcc –static –o hello hello.c
6、将所选择的测试linux的根文件系统映像initrd.img加载到某个目录下:
在/home/redhat/下,执行命令,
# mkdir root
在/skyeye-testsuite-1.2.5/linux/s3c2410/s3c2410x-2.6.14中
# sudo mount –o loop initrd.img /home/redhat/lab3/root/
7、将hello拷贝到根文件系统中
# sudo cp hello root/bin
# sudo umount root 卸载刚刚加载过的root
8、进入skyeye模拟该板子运行应用程序,如:hello
进入/skyeye-testsuite-1.2.5/linux/s3c2410/s3c2410x-2.6.14
# skyeye –c skyeye.conf –e vmlinux 进入skyeye然后查找并执行hello
# cd bin
# ls
# ./hello
可看到出现”This is my program!”
# skyeye –c skyeye.conf –e vmlinux
三、编译u-boot
1、下载u-boot-1.2.0.tar.bz2 并解压缩
2、因为我们要模拟ep7312芯片,而u-boot已经支持一个基于ep7312的板子了,所以我们只要对u-boot里面有关ep7312的板子的配置做修改就可以了。U-boot里面有关主板的配置文件都在include/configs/ep7312.h中,
现在我们要对ep7312修改:
找到#define CONFIG_DRIVER_CS8900 1
改为#define CONFIG_DRIVER_CS8900 0
找到#define CONFIG_COMMANDS(CONFIG_CMD_DFL | CFG_CMD_JFFS2)
改为#define CONFIG_COMMANDS(CONFIG_CMD_DFL)
找到#define CONFIG_BOOTDELAY 3
改为#define CONFIG_BOOTDELAY -1
3、还要做以下修改:
(1)cpu/arm720t/config.mk
找到# supply options according to compiler version
PLATFORM_CPPFLAGS += $(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu),)
(2)include/asm-arm/processor.h
union debug_insn{
u32 Arm;
u16 thumb;
};
(3) examples/Makefile
$(LIB):$(obj).depend $(LIBOBJS)
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
$(SREC):
$(obj)%.srec: $(obj)%.o
$(OBJCOPY) –o srec $< $@ 2>/dev/null
$(BIN):
$(obj)%.bin: $(obj)%.o
$(OBJCOPY) –o binary $< $@ 2>/dev/null
4、然后在 u-boot的根目录下,配置,编译:
# make ep7312_config
(与u-boot匹配的编译器是arm-linux-gcc-3.3.2,指定编译时要在Makefile文件中加入:
CROSS_COMPILE = /usr/local/arm/3.3.2/bin/arm-linux-即可,ARCH = arms)
#sudo make all, 结果如下:
经过编译,如果不出错,结果中会出现u-boot, u-boot.bin, u-boot.map, u-boot.srec 文件。
四、用skyeye仿真u-boot
1、创建一个目录,如:/home/redhat/lab3/uboot
并把u-boot, u-boot.bin, u-boot.map, u-boot.srec拷贝到这个目录,
并在这个目录创建一个skyeye.conf文件,内容如下:
mpu: arm720t
mach: ep7312
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00200000
mem_bank: map=M, type=RW, addr=0xc0200000, size=0x00600000
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00800000
#1cd: type=ep7312, mod=gtk
dbct: state=on
2、然后输入命令:skyeye –c skyeye.conf –e u-boot, 就能看到u-boot运行结果了。
至此,整个u-boot编译就完成了。
五、编译中遇到的问题:
1. 安装arm-linux-gcc-时,在设置安装路径时要注意路径的正确性,如果设置不正确,使用tab键时就不会出现结果。我们可以直接拷贝到根目录下即可。
2. 在编译u-boot时,注意u-boot和arm-linux-gcc的版本一致,否则编译时会出现错误,且如果版本不同,可在u-boot的Makefile中设置CROSS_COMPILE的值。
3. 编译工作是一个十分繁琐的过程,因此要认真对待每一步。