OpenWrt取消strip或者重新設置strip參數的方法

之前的一篇: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變量所代表的命令 !


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中定義也是可以的




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章