之前的一篇:http://blog.csdn.net/niyufeng/article/details/7990458
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變量所代表的命令 !
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))
最徹底的方法就是在你的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中定義也是可以的