如何编译第一个eCos应用程序

这是一个给eCos初学者的简单说明,放在这里方便大家在下载和编译好eCos的库文件以后知道如何开始自己的eCos之旅。

(本文原创转载请注明出处)

环境配置

指定eCos repository和所需编译器的路径(其实这个也是要编译eCos库文件必须做的一个步骤)

PATH="/opt/ecos/gnutools/arm-eabi/bin:${PATH}" ;
PATH="/opt/ecos/ecos-tools/bin:${PATH}" ;
ECOS_REPOSITORY="/opt/ecos/ecos-hg/packages" ;


选择应用程序模板

在eCos的软件包中有一个examples目录

opt/ecos/ecos-hg/examples

里面有hello serial simple-alarm twothreads等几个参考应用程序,我们可以把这个目录copy到一个你想要开始eCos的一个地方。

我们现在看一下这个目录中的Makefile文件

# Mostly written by Jonathan Larmour, Red Hat, Inc.
# Reference to ecos.mak added by John Dallaway, eCosCentric Limited, 2003-01-20
# This file is in the public domain and may be used for any purpose



# Usage:   make INSTALL_DIR=/path/to/ecos/install


INSTALL_DIR=$$(INSTALL_DIR) # override on make command line


include $(INSTALL_DIR)/include/pkgconf/ecos.mak


XCC           = $(ECOS_COMMAND_PREFIX)gcc
XCXX          = $(XCC)
XLD           = $(XCC)


CFLAGS        = -I$(INSTALL_DIR)/include
CXXFLAGS      = $(CFLAGS)
LDFLAGS       = -nostartfiles -L$(INSTALL_DIR)/lib -Ttarget.ld


# RULES


.PHONY: all clean


all: hello twothreads simple-alarm serial


clean:
-rm -f hello hello.o twothreads twothreads.o
-rm -f simple-alarm simple-alarm.o serial serial.o
-rm -f instrument-test instrument-test.o


%.o: %.c
$(XCC) -c -o $*.o $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


%.o: %.cxx
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


%.o: %.C
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


%.o: %.cc
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


hello: hello.o
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $@.o


twothreads: twothreads.o
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $@.o


simple-alarm: simple-alarm.o
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $@.o


serial: serial.o
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $@.o


instrument-test: instrument-test.o
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $@.o


只要在编译的时候 make INSTALL_DIR=your_ecos_install_folder(指你编译好的ecos install的目录)就可以编译以上几个应用程序了。

其中 instrument-test是对eCos的kernel的一个测试,如果要编译这个应用程序需要你在eCos的配置中开打kernel测试选项。

如果你的ecos的install目录指定正确就可以生成hello twothreads simple-alarm serial几个可执行性文件了。


简单分析

下面几句话表示会把Makefile所在目录的.c,.cxx,.C,.cc文件编译成名字和原名相同扩展名为.o的目标文件(object file)

%.o: %.c
$(XCC) -c -o $*.o $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


%.o: %.cxx
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


%.o: %.C
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


%.o: %.cc
$(XCXX) -c -o $*.o $(CXXFLAGS) $(ECOS_GLOBAL_CFLAGS) $<


分析一下hello这个target,需要稍微的学下Makefile的规则,Makefile中以target为执行单元并且是顶行写的

那么hello就是一个target,当Makefile顺序的执行到hello这里的时候会通过hello下面的这个以tab开始的命令串连接hello后面指定的.o文件。

如果你的项目中有多个文件,那么就应该写hello1.o hello2.o

$@ 表示最后生成的可执行文件的名字就是hello

hello: hello.o
$(XLD) $(LDFLAGS) $(ECOS_GLOBAL_LDFLAGS) -o $@ $@.o


在QEMU中测试

首先参考emboslab中的qemu编译方法编译出 qemu-system-arm.exe

然后可以写一个简单的bat脚本(这是一个cygwin在windows上qemu运行ecos的推荐方法)

qemu-system-arm.exe -M mini2440 -kernel %1 -show-cursor -serial file:CON
我们把它保存成run-mini2440.bat

这样当我们要仿真某个程序的时候只要 run-mini2440.bat 后面跟上你要运行的程序就可以了,不过这里有点需要注意。
因为在windows上我们要想从终端中看到程序的运行结果,必须在cmd终端上,意思就是说不能用xterm和mintty。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值