RHEL5.2中架设skyeye+uClinux环境
iammutou
|
1#
iammutou 发表于 2008-10-15 20:55
RHEL5.2中架设skyeye+uClinux环境
刚开始学习linux嵌入式开发,经过2天的尝试,今天终于把skyeye+uClinux配置成功了,特记下我配置的过程,希望对你有用!!
说下我的系统平台:我用的是在linux下的VMare+RHEL5.2(2.6.18-92.el5) 首先下载如下版本的文件: skyeye: skyeye-1.2.5_REL.tar.gz 下载地址:http://download.gro.clinux.org/skyeye/skyeye-1.2.5_REL.tar.gz arm-elf-tools: arm-elf-tools-20040427.sh 下载地址:http://www.lumit.org/download/tools/arm-elf-tools-20040427.sh arm-linux-tools: arm-linux-tools-20070808.tar.gz 下载地址:http://ftp.snapgear.org/pub/snap ... ols-20070808.tar.gz uClinux: uClinux-dist-20080808.tar.bz2 下载地址:http://mirror.lzu.edu.cn/softwar ... st-20080808.tar.bz2 安装步骤: 1、安装arm-elf-tools交叉编译环境: chmod a+x arm-elf-tools-20030314.sh ./arm-elf-tools-20030314.sh [root@work ~]# which arm-elf-gcc /usr/local/bin/arm-elf-gcc 说明 arm-elf-gcc 已经安装 如果提示错误: tail: 。。。。“+43”。。。。。 gunzip: stdin: not in gzip format 解决方法如下: 这是由于脚本中的tail没写对,必须加一个 -n 参数 用vi打开 arm-elf-tools-20030314.sh 将第39行的代码: tail +${SKIP} ${SCRIPT} | gunzip | tar xvf - 改成如下: tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf - 2、安装arm-linux-tools交叉编译环境: tar zxvf arm-linux-tools-20070808.tar.gz 就好在本目录下产生一个usr目录,比如我的就是/root/usr/这时要把它链接到/usr/local/下 ln -n /root/usr/local /usr/local/arm 编辑.bash_profile添加一行export PATH=$PATH:/usr/local/arm/bin 保存重启系统 3、安装skyeye: tar zxvf skyeye-1.2.5_REL.tar.gz 进入解压后的skyeye目录,接下来执行: make make install 如果一切正常,运行 skyeye 会出现一下信息: [root@work ~]# 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. *********************************************************************** Your elf file is little endian. Failed to open skyeye config file skyeye.conf in the same directory error: No such file or directory SkyEye 1.2.5 Bug report: skyeye-developer@lists.gro.clinux.org 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 -------- BlackFin architectures ---- bf533 bf537 3、编译uClinux: #tar jxvf uClinux-dist-20080808.tar.bz2 #cd uClinux-dist #make menuconfig 选择 Vendor/Product: GDB/Skyeye Kernel Version: linux-2.6.x Libc Version: uClibc 保存退出 在 uclinux-dist 目录下建立仿真AT91的skyeye配置文件 skyeye.conf,内容如下: 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/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 lcd: state=on 然后执行: make dep make 4、在skyeye下运行uClinux 这个时候就可以用skyeye来调试运行kernel了,在uclinux-dist执行如下命令: skyeye -e linux-2.6.x/linux 需要注意的是我已经在/usr/bin目录中建立了一个skyeye的符号连接,所以上面才不需要输入skyeye的完整路径。另外,由于skyeye.conf就在当前目录下,所以也就不用在skyeye命令中使用-c参数指定了 下面是uClinux跑起来的界面显示: [root@work uClinux-dist]# skyeye -e linux-2.6.x/linux Your elf file is little endian. arch: arm cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x805eb60 uart_mod:0, desc_in:, desc_out:, converter: SKYEYE: use arm7100 mmu ops Loaded ROM images/boot.rom start addr is set to 0x01008000 by exec file. Linux version 2.6.25-uc0 (root@work) (gcc version 4.2.1) #1 Wed Oct 15 14:30:09 CST 2008 CPU: Atmel-AT91M40xxx [14000040] revision 0 (ARMvundefined/unknown), cr=00000000 Machine: Atmel AT91 EB01 Built 1 zonelists in Zone order, mobility grouping off. Total pages: 4064 Kernel command line: PID hash table entries: 64 (order: 6, 256 bytes) console [ttyS0] enabled Dentry cache hash table entries: 2048 (order: 1, 8192 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory: 16MB = 16MB total Memory: 15284KB available (820K code, 74K data, 60K init) Mount-cache hash table entries: 512 io scheduler noop registered (default) 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 brd: module loaded uclinux[mtd]: RAM probe address=0x1400000 size=0xff000 Creating 1 MTD partitions on "ROM": 0x00000000-0x000ff000 : "ROMfs" uclinux[mtd]: set ROMfs to be root filesystem VFS: Mounted root (romfs filesystem) readonly. Freeing init memory: 60K 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 Command: mount -t ext2 /dev/ram0 /var Command: mkdir /var/tmp Command: mkdir /var/log Command: mkdir /var/run Command: mkdir /var/lock Command: mkdir /var/empty Command: cat /etc/motd Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| GDB/ARMulator support by <davidm@snapgear.com> For further information check: http://www.uclinux.org/ Execution Finished, Exiting Sash command shell (version 1.1.1) /> 注意:要在 skyeye.conf 所在目录下执行skyeye。 如果你是按网上的教程配置可能会有很多错误,比如: arm-linux-ld: ERROR: /opt/project/arm-linux/arm-linux/bin/../lib/gcc/arm-linux/3.4.3/libgcc.a(_divsi3.oS) uses VFP instructions, whereas u-boot does not File in wrong format: failed to merge target specific data of file /opt/project/arm-linux/arm-linux/bin/../lib/gcc/arm-linux/3.4.3/libgcc.a(_divsi3.oS) arm-linux-ld: ERROR: /opt/project/arm-linux/arm-linux/bin/../lib/gcc/arm-linux/3.4.3/libgcc.a(_umodsi3.oS) uses VFP instructions, whereas u-boot does not File in wrong format: failed to merge target specific data of file /opt/project/arm-linux/arm-linux/bin/../lib/gcc/arm-linux/3.4.3/libgcc.a(_umodsi3.oS) arm-linux-ld: ERROR: /opt/project/arm-linux/arm-linux/bin/../lib/gcc/arm-linux/3.4.3/libgcc.a(_modsi3.oS) uses VFP instructions, whereas u-boot does not File in wrong format: failed to merge target specific data of file /opt/project/arm-linux/arm-linux/bin/../lib/gcc/arm-linux/3.4.3/libgcc.a(_modsi3.oS) make: *** [u-boot] Error 1 这时典型的浮点问题,你可能要降低你的编译工具版本, 或者修改arm-linux-gcc配置文件,或者在内核目录下找相应架构的配置文件,去除软浮点运算 或者选择本文提到的arm-linux-tools版本的工具,并选择linux 2.6.x内核,可顺利完成 |