这是一个给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中测试
qemu-system-arm.exe -M mini2440 -kernel %1 -show-cursor -serial file:CON
我们把它保存成run-mini2440.bat
