Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527332
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类:

2010-01-18 18:59:42


vxworks makefile处理过程:编译vxworks的过程

1. 顶层的makefile位于目录vxworks-6.3目录下.
1.1 首先处理feature-set.我们可以指定一下,当然也可以不指定,这样就会计算出一个缺省的feature-set: pne.
  目前应该只支持一个feature-set,即pne
1.2 根据feature-set计算default,这用于没有指定target时使用,编译vxworks时,一般指定的comp-kernel,target_src-PPC32-gnu
1.3 目标的分解

target的pattern与command如下.
target_%:
$(MAKE) -C target CPU=$(word 2,$(subst -, ,$@)) TOOL=$(word 3,$(subst -, ,$@)) $(patsubst target_%,%,$(word 1,$(subst -, ,$@)))
解释:进入target目录,并再次make

1.4 include文件
在makefile的最后,include了两个文件
internal.mk 不知道它是做啥的
components.mk

2 target 的编译
target src再次进入src目录,进行编译
$(MAKE) -C src CPU=$(CPU) TOOL=$(TOOL) release

3 target src下的编译
在target src下的makefile根据需要编译的cpu类型,工具链等,初始化一些环境变量,其中比较重要的,就是初始化需要编译哪些目录. 

4 components.mk处理
components.mk中包含一些需要进行处理的内容,其中一条就是
comp-kernel:  wrsnmp-kernel seclibs-kernel ssl-kernel windml-kernel wlan-kernel wsec-kernel webcli-kernel webservices-kernel can-kernel dcom-kernel firewall-kernel ipsecike-kernel netstack-kernel bridge-kernel nat-kernel opc-kernel ospf-kernel ppp-kernel radius-kernel $(CUSTOMER_KERNEL)
说明为了编译comp-kernel,需要编译哪些targget.

4.1 编译firewall
编译firewall,按照
netstack-kernel:
$(MAKE) -C $(WIND_BASE)/vx_components/netstack-3.1 FEATURE_SET=$(FEATURE_SET) CPU=$(CPU) TOOL=$(TOOL) TARGET=$(TARGET) SPACE=kernel kernel
进行处理,看看相应的makefile

4.1.1 firewall的makefile
首先它引入了两个makefile
include $(WIND_BASE)/config/common/defs.component
-include config.mk
然后才编译firewall的相关源代码.

4.1.2 defs.components
在这个文件里,定义了是否编译一些组件,但是首先,它也include了一个文件
include $(WIND_BASE)/config/$(FEATURE_SET)/config.mk

4.1.3 config.mk
这个算是拿来作config的东西,如在这个里面,就可以指定是否编译router-stack,是否加入firewall或者是ipsec之类的东西.

4.2 编译netstack
如果需要firewall的支持,除了fireware的代码之外,还需要在netstack中插入ipfilter的代码,所以还要看看-DINCLUDE_IPFW_HOOKS是如何定义的.
vx_components\netstack-3.1的makefile在编译netstack时,有下面的检查
ifeq ($(FEATURE_COREIP_IPFW_HOOKS),true)
override EXTRA_DEFINE+=-DINCLUDE_IPFW_HOOKS
endif
所以我们只需要保证config.mk中指定了编译FEATURE_COREIP_IPFW_HOOKS特性,就会定义INCLUDE_IPFW_HOOKS,这样ipfilter功能才会真正的有效.

4.2.1 定义router-stack
如果不是router功能的协议栈,是不需要转发功能的,这是通过netstack中的makefile来定义的.
ifeq ($(FEATURE_COREIP_ROUTER),true)
override EXTRA_DEFINE+=-DROUTER_STACK
endif
它受到了router这个feature的影响.所以也可以通过定义FEATURE_COREIP_ROUTER为true达到目的.

阅读(2698) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~