BATMAN.adv系列03:修改並編譯BATMAN.adv


原創文章,轉發請注明鏈接和作者。(而且作者很懶,沒有檢查錯別字)

本文工作於1年多前完成,由於記憶缺失可能有部分疏漏 

 

先編譯好openwrt系統,此處不再贅述

原本openwrt工程路徑:./package/feeds/routing/batman-adv/。仔細查看會發現其實時一個鏈接到../../../../project/batman-advs/的軟鏈接,也就時鏈接到./feeds/routing/batman-adv/。查看內部的Makefile,可以知道,其實在系統編譯的時候openwrt將會從網絡下載源碼然后編譯BATMAN.adv(下載路徑為./dl/,里面有一個諸如batman-adv-xxxx.x.tar.gz的壓縮包)。但是如果我們希望自己修改源碼,則希望在本地編譯自己的源碼,而不是從網絡下載。

下面將展開具體實時步驟,編譯過程中很有可能遇到奇怪的問題可以通過下面三步(大概),本人兩次搭建環境編譯BATMAN.adv都遇到了問題而且都是這么解決的:

  1. make clean
  2. 刪除.config
  3. make menuconfig重新配置
  4. make

注:為避免歧義將用“batman-adv”目錄(有加粗)代指BATMAN.adv工程目錄,具體用戶是准備自己創建還是就在./feeds/routing/batman-adv/里面改自行決定。

1、新建文件夾(可選/推薦)

  建議新建一個文件夾,而不是在./feeds/routing/batman-adv/里面亂改。

  將./package/feeds/routing/batman-adv/連接至./package/feeds/routing/batman-adv/文件夾。

  將./feeds/routing/batman-adv/里的東西全部復制到新建的文件夾。

  新建一個src文件夾。

  替換./package/feeds/routing/batman-adv/這個軟鏈接為新的路徑。

2、將./dl/里面的BATMAN.adv源碼包解壓到batman-adv目錄的src(推薦自己創建,方便管理)里面。

  源碼大多在batman-adv/src/net/batman-adv/下,而batman-adv/patches/下的是補丁

3、修改Makefile文件

  很遺憾,這里怎么修改我已經忘記了,在文末我將貼出我的Makefile供參考相關的可以查看openwrt官網。、

4、配置中勾選BATMAN.adv

  BATMAN.adv的位置會給根據Makefile中填寫的內容有所變化,默認在:Kernel modules ---> Network Support ---> kmod-batman-adv

5、編譯BATMAN.adv

  命令:make ./package/feeds/routing/batman-adv/compile V=s

  如果出現了奇奇怪怪的問題,可以嘗試用上文提到的方法解決。

6、獲取安裝包

  編譯完成后里面會寫XXX.ipk安裝包的位置,例如:./bin/targets/ar71xx/nand/packages/kmod-batman-adv_4.9.172+0.0.0-7_mips_24kc.ipk。然后你就可以將這個安裝包拷貝到路由器了。卸載路由器上之前的BATMAN.adv后,就可以在路由器運行 opkg install kmod-batman-adv_4.9.172+0.0.0-7_mips_24kc.ipk安裝BATMAN.adv了。

 

確認上述步驟沒有問題后:

7、用git命令應用batman-adv/patches/下的補丁。具體步驟自行搜索。

8、在batman-adv/src/net/batman-adv/下添加新文件后,記得需要修改batman-adv/src/net/batman-adv/Makefile

 

附件

源碼目錄下的Makefile

#
# Copyright (C) 2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=batman-adv

PKG_VERSION:=0.0.0
PKG_RELEASE:=7

PKG_LICENSE:=GPL-2.0
PKG_EXTMOD_SUBDIRS=net/batman-adv

STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h

include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

define KernelPackage/batman-adv
  MAINTAINER:=CuSO4Gem
  SUBMENU:=Other modules
  DEPENDS:=+KMOD_BATMAN_ADV_BLA:kmod-lib-crc16 +kmod-crypto-crc32c +kmod-lib-crc32c +kmod-cfg80211 +kmod-ecdsa_support
  TITLE:=B.A.T.M.A.N. Adv S
  FILES:=$(PKG_BUILD_DIR)/net/batman-adv/batman-adv.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoProbe,batman-adv)
endef

define KernelPackage/batman-adv/description
B.A.T.M.A.N. advanced is a kernel module which allows to
build layer 2 mesh networks. This package builds
version $(PKG_VERSION) of the kernel module.
endef

define KernelPackage/batman-adv/config
    source "$(SOURCE)/Config.in"
endef

define Package/kmod-batman-adv/conffiles
/etc/config/batman-adv
endef

PKG_EXTRA_KCONFIG:= \
    CONFIG_BATMAN_ADV=m \
    CONFIG_BATMAN_ADV_DEBUG=$(if $(CONFIG_KMOD_BATMAN_ADV_DEBUG_LOG),y,n) \
    CONFIG_BATMAN_ADV_DEBUGFS=$(if $(CONFIG_KMOD_BATMAN_ADV_DEBUGFS),y,n) \
    CONFIG_BATMAN_ADV_BLA=$(if $(CONFIG_KMOD_BATMAN_ADV_BLA),y,n) \
    CONFIG_BATMAN_ADV_DAT=$(if $(CONFIG_KMOD_BATMAN_ADV_DAT),y,n) \
    CONFIG_BATMAN_ADV_MCAST=$(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),y,n) \
    CONFIG_BATMAN_ADV_NC=$(if $(CONFIG_KMOD_BATMAN_ADV_NC),y,n) \
    CONFIG_BATMAN_ADV_BATMAN_V=$(if $(CONFIG_KMOD_BATMAN_ADV_BATMAN_V),y,n) \

PKG_EXTRA_CFLAGS:= \
    $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(PKG_EXTRA_KCONFIG)))) \
    $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(PKG_EXTRA_KCONFIG)))) \

NOSTDINC_FLAGS = \
    -I$(PKG_BUILD_DIR)/net/batman-adv \
    -I$(STAGING_DIR)/usr/include/mac80211-backport \
    -I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
    -I$(STAGING_DIR)/usr/include/mac80211 \
    -I$(STAGING_DIR)/usr/include/mac80211/uapi \
    -I$(PKG_BUILD_DIR)/include/ \
    -include backport/backport.h \
    -include $(PKG_BUILD_DIR)/compat-hacks.h \
    -DBATADV_SOURCE_VERSION=\\\"openwrt-$(PKG_VERSION)-$(PKG_RELEASE)\\\"

COMPAT_SOURCES = \
    $(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),../../compat-sources/net/core/skbuff.o,) \
    $(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),../../compat-sources/net/ipv4/igmp.o,) \
    $(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),../../compat-sources/net/ipv6/mcast_snoop.o,) \


define Build/Compile
    +env "batman-adv-y=$(COMPAT_SOURCES)" \
    $(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
        ARCH="$(LINUX_KARCH)" \
        CROSS_COMPILE="$(TARGET_CROSS)" \
        SUBDIRS="$(PKG_BUILD_DIR)/net/batman-adv" \
        $(PKG_EXTRA_KCONFIG) \
        EXTRA_CFLAGS="$(PKG_EXTRA_CFLAGS)" \
        NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
        modules
endef

define Build/Prepare
    $(call Build/Prepare/Default)
    $(CP) ./files/compat-hacks.h $(PKG_BUILD_DIR)/
endef

define Build/Clean
        rm -rf $(BUILD_DIR)/$(PKG_NAME)/
endef

define KernelPackage/batman-adv/install
    $(INSTALL_DIR) $(1)/etc/config $(1)/etc/hotplug.d/net $(1)/etc/hotplug.d/iface $(1)/lib/batman-adv $(1)/usr/sbin $(1)/lib/netifd/proto
    $(INSTALL_DATA) ./files/etc/config/batman-adv $(1)/etc/config
    $(INSTALL_DATA) ./files/lib/batman-adv/config.sh $(1)/lib/batman-adv
    $(INSTALL_BIN) ./files/etc/hotplug.d/net/99-batman-adv $(1)/etc/hotplug.d/net
    $(INSTALL_BIN) ./files/lib/netifd/proto/batadv.sh $(1)/lib/netifd/proto
    $(INSTALL_BIN) ./files/lib/netifd/proto/batadv_vlan.sh $(1)/lib/netifd/proto
endef

$(eval $(call KernelPackage,batman-adv))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM