ubuntu下编译uclinux skyeye上运行

来源:互联网 发布:淘宝上哪款悠悠球 编辑:程序博客网 时间:2024/05/05 09:42

ubuntu下编译uclinux skyeye上运行

一、建立交叉编译环境

准备交叉编译器# wgethttp://www.uclinux.org/pub/uClinux/uclinux-elf-tools/arm-elf-tools-20030314.sh

1chmod 755 arm-elf-tools-20030314.sh改变权限  

2sudo sh ./arm-elf-tools-20030314.sh

一般情况下,会提示以下错误:
#################################
#tail: cannot open `+43'for reading: No such file or directory

#gzip: stdin: not in gzipformat
#tar: This does not looklike a tar archive
#tar: Error exit delayedfrom previous errors
#################################

解决方法:
*tail问题:tail: cannot open `+43'for reading: No such file or directory
用VIM打开该文件,将第39行的代码:
    tail +${SKIP} ${SCRIPT} | gunzip | tar xvf -
改成如下:
    tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf -
vim arm-elf-tools*

  3、arm-elf-gcc -v 查看是否安装成功

二、编译ucclinux内核

1、准备内核 wget http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20041215.tar.gz

2、解压内核 tar zxvfuClinux-dist-20041215.tar.gz

3、cd uClinux-dist

编译步骤 :

   1、make mrproper(一定要做这步哦)然后vi linux-2.4.x/arch/armnommu/vmlinux-armv.lds.in

     在__sto__kallsyms = ,;
     
*(.got)后面加上:
     
romfs_data = .;
      romfs.o
      romfs_data_end = .;
      然后wq退出   注意等号两边都有空格

   2makemenuconfig

    主要是选择Vendor为GDB,Product为ARMulator;内核版本要选Linux-2.4.x,不要使用默认的2.6.x,因为交叉编译器版本才2.95.3,太低,2.6.x要求交叉编译器版本不低于3.2。lib选择uclibc。

   3makedep

   在第一次编译的时候执行,为了是建立文件之间的依赖关系,make命令会根据这个依赖关系来确定哪些文件需要重新编译,哪些文件可以跳过

   4makelib_only

   编译uClibc

    5makeuser_only

   编译用户制定的应用程序,比如初始化进程init,bash,以及集成了很多常用工具的嵌入式软件包busybox。

我使用uClinux-dist-20051110.tar.gz时总是出现一个错误

   make[3]: *** [alias.o]段错误 (core dumped)
  
make[3]:正在离开目录 `/usr/src/uClinux-dist/user/boa/src'
  
make[2]: *** [all] 错误 2
  
make[2]:正在离开目录 `/usr/src/uClinux-dist/user/boa'
  
make[1]: *** [all] 错误 2
  
make[1]:正在离开目录 `/usr/src/uClinux-dist/user'
  
make: *** [user_only] 错误 2

这个困扰我好久,实在没办法我就换了一个uclinux-dist,也就是现在用的uClinux-dist-20041215.tar.gz,使用这个uclinux版本没有错误。尴尬。。。。。。

   6makeromfs

   uClinux经常才用romfs(只读文件系统)来作为系统的根文件系统,所以首先需要将之前编译的很多应用程序以uClinux所需要的目录格式存放起来。比如将可执行文件放在bin目录下,将配置文件放在etc目录下。该命令执行后会在uClinux-dist目录下生成一个romfs的目录,并且将文件系统所需要的文件组织起来,以便之后生成fomfs的映象文件。

    7makelinux

     执行该命令之后将生成linux内核文件。这一步一定要在make image前编译。因为我在这出现过错误。

   8make image

生成romfs文件系统的映象文件,以及linux的映象文件。该linux的映象文件是elf格式的,是不能直接下载到开发板上执行的(里面包含了大量的调试信息,elf文件执行前的环境建立信息等内容。该文件可以使用arm-elf-objcopy工具来生成可以直接在RAM中执行的binary文件)。

9、编译成功后image中的文件

image.bin  linux.data linux.text  romfs.img

4、编译错误

  错误1、在make user_only后make image会出现一个arm-elf-objcopy: /home/init/learn_linux/arm-uclinux/uClinux-dist/linux-  2.4.x/linux:文件不存在

  解决方法: 先make linux后在make image 不会出现如此错误。

   错误2、cannot open romfs.o: No such fileordirectory    make[1]: *** [linux] Error 1

   解决方法: cp ./linux-2.4.x/fs/romfs/romfs.o ./linux-2.4.x/其实romfs.o文件已经生成,把它拷贝到linux-2.4.x目录下即可。

   错误3、 multipledefinition of`romfs_file_operations'
romfs.o(.data+0x80):/curret1/uClinux-dist/linux-2.4.x/fs/romfs/inode.c:107:第一次在此定义
  
make[1]: *** [linux]错误 1
  
make[1]: Leavingdirectory`/curret1/uClinux-dist/linux-2.4.x'
   make: *** [linux] 错误1
  
解决方法:vi uClinux-dist/linux-2.4.x/fs/romfs/inode.c

   static(这地方没有加上)struct file_operationsromfs_file_operations static加上即可。

   这些是我编译uClinux-dist-20041215.tar.gz的错误,至于uClinux-dist-20051110.tar.gz的编译出现过很多错误,也不知道是为啥。

三、skyeyes上运行

1、安装skyeye

code: apt-get install skyeye

2、linux内核文件在uClinux-dist/linux-2.4.x/目录下,拷贝linux到images文件夹下,

code: cp ./linux-2.4.x/linux ./images

3、到image目录下编辑skyeye.conf,内容如下:

code:cd image/

code :vi skyeye.conf

#skyeyeconfig 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=./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

#setnic info

#net:type=cs8900a, base=0xfffa0000, size=0x20,int=16, mac=0:4:3:2:1:f,ethmod=tuntap, hostip=10.0.0.1

net:type=cs8900a, ethmod=tuntap, hostip=10.0.0.1

uart:mod = term

#dbct:state=on

ESC后,:wq退出

4、在image下执行

code: skyeye -c skyeye.conf -elinux

见到下图即为正确


ctrl+c 退出

四、添加自己的小程序到uclinux上运行

1、在user目录下建立自己的程序hello.c

code: cd user/

     mkdir test

    cd test

     vi hello.c  代码如下

#include<stdio.h>

intmain(void)

{

printf("Hello,uClinux!");

return(0);

}

2、编译hello.c并拷贝hello

code: arm-elf-gcc -Wall -elf2flt -o hellohello.c

      cp ./hello ../../romfs/bin/

3、在test目录下建立一个Makefile文件

code:vi Makefile

EXEC =hello

OBJS =hello.o

all:$(EXEC)

$(EXEC):$(OBJS)

         $(CC) $(LDFLAGS) -o $@ $(OBJS)$(LDLIBS)

$(OBJS):hello.c

romfs:

         $(ROMFSINST) /bin/$(EXEC)

clean:

         -rm -f $(EXEC) *.elf *.gdb *.o

4、相关配置

1、编辑uClinux目录下的文件user/Makefile,增加下面这行文字:dir_$(CONFIG_USER_TEST_HELLO)    += test

2、编辑uClinux目录下的文件config/Configure.help,在文件末尾追加下面这段文字:

CONFIG_USER_TEST_HELLO

Thisis an example C program in uClinux OS, and it will print "Hello,uClinux!" on screen.

3、编辑uClinux目录下的文件config/config.in,在文件末尾追加下面这段文字:

#########################

mainmenu_optionnext_comment

comment'Test'

 

bool  'hello'                 CONFIG_USER_TEST_HELLO

endmenu

#########################

5、重新编译内核

code:

genromfs-v -V "ROMdisk" -f ./images/romfs.img -d ./romfs

make image

make

6、在image下运行

code: skyeye -c skyeye.conf -e linux



 转载:请注明出处http://blog.csdn.net/paoxungan5156/article/details/72667924

原创粉丝点击