之前的一篇: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中定义也是可以的