OpenWrt取消strip或者重新设置strip参数的方法

OpenWrt的strip功能定义在rules.mk中,使用了两个变量STRIP和RSTRIP(run strip),然后调用scripts/rstrip.sh脚本来真正的执行strip!

rules.mk中的相关定义如下:

198 # strip an entire directory
199 ifneq ($(CONFIG_NO_STRIP),)
200   RSTRIP:=:
201   STRIP:=:
202 else
203   ifneq ($(CONFIG_USE_STRIP),)
204     STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS))
205   else
206     ifneq ($(CONFIG_USE_SSTRIP),)
207       STRIP:=$(STAGING_DIR_HOST)/bin/sstrip
208     endif
209   endif
210   RSTRIP:= \
211     NM="$(TARGET_CROSS)nm" \
212     STRIP="$(STRIP)" \
213     STRIP_KMOD="$(TARGET_CROSS)strip --strip-unneeded --remove-section=.comment --remove-section=.pdr --remove-section=.mdebug.abi32" \
214     $(SCRIPT_DIR)/rstrip.sh
215 endif

而自己编写的packages使用strip,实际上是packages包含package.mk ==》包含package-ipk.mk ==》调用RSTRIP变量所代表的命令 !


RSTRIP在include/package-ipk.mk中的调用:

117         $(call Package/$(1)/install,$$(IDIR_$(1)))
118         mkdir -p $(PACKAGE_DIR)
119         -find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' | $(XARGS) rm -rf
120         $(RSTRIP) $$(IDIR_$(1))

因此,如果不想让openwrt进行strip,

最彻底的方法就是在你的Makefile中添加下面一行,包括kmod也不strip了:

RSTRIP:=:

一般情况下使用

STRIP:=:  
//或者  
STRIP:=true

同样,你也可以在Makefile中自行设置CONFIG_STRIP_ARGS,CONFIG_NO_STRIP,CONFIG_USE_STRIP等参数,

当然这些你也可以通过make menuconfig来设置。

make package/foo/{clean,compile} V=99 STRIP=/bin/true

也就是说如果默认使用strip破坏了你的程序、库,可以使用STRIP=/bin/true来取消strip操作,直接在Makefile中定义也是可以的



本文章由作者:佐须之男 整理编辑,原文地址: OpenWrt取消strip或者重新设置strip参数的方法
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐