• openWRT自学---对官方的开发指导文档的解读和理解 记录2:如何控制内核模块的编译


    openwrt对于kernel module的处理分两类:随内核主线而来的kernel module 和 其他作为独立project的kernel module。而这两种,openwrt将采用相同的模版进行处理。

    对于随内核主线一起提供的kernel module,the makefiles are located in package/kernel/modules/*.mk and they appear under the section "Kernel modules"。举例:package/kernel/modules/netfilter.mk,全文如下:


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

    NF_MENU:=Netfilter Extensions
    NF_KMOD:=1
    include $(INCLUDE_DIR)/netfilter.mk

    define KernelPackage/ipt-core
      SUBMENU:=$(NF_MENU)  //The sub menu under which this package will be seen
      TITLE:=Netfilter core  //The name of the module as seen via menuconfig
      KCONFIG:=$(KCONFIG_IPT_CORE)  //Kernel configuration option dependency. For external modules, remove it.
      FILES:=$(foreach mod,$(IPT_CORE-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))  //Files you want to inlude to this kernel module package, separate with spaces.
      AUTOLOAD:=$(call AutoLoad,40,$(notdir $(IPT_CORE-m))) //Modules that will be loaded automatically on boot, the order you write them is the order they would be loaded.
    endef

    define KernelPackage/ipt-core/description
     Netfilter core kernel modules
     Includes:
     - comment (2.6)
     - limit
     - LOG
     - mac
     - multiport
     - REJECT
     - TCPMSS
    endef

    $(eval $(call KernelPackage,ipt-core))


    define KernelPackage/ipt/Depends
      SUBMENU:=$(NF_MENU)
      DEPENDS:= kmod-ipt-core $(1)
    endef


    define KernelPackage/ipt-conntrack
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Basic connection tracking modules
      KCONFIG:=$(KCONFIG_IPT_CONNTRACK)
      FILES:=$(foreach mod,$(IPT_CONNTRACK-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,41,$(notdir $(IPT_CONNTRACK-m)))
    endef

    define KernelPackage/ipt-conntrack/description
     Netfilter (IPv4) kernel modules for connection tracking
     Includes:
     - conntrack
     - defrag (2.6)
     - iptables_raw
     - NOTRACK
     - state
    endef

    $(eval $(call KernelPackage,ipt-conntrack))


    define KernelPackage/ipt-conntrack-extra
    $(call KernelPackage/ipt/Depends,+kmod-ipt-conntrack)
      TITLE:=Extra connection tracking modules
      KCONFIG:=$(KCONFIG_IPT_CONNTRACK_EXTRA)
      FILES:=$(foreach mod,$(IPT_CONNTRACK_EXTRA-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,42,$(notdir $(IPT_CONNTRACK_EXTRA-m)))
    endef

    define KernelPackage/ipt-conntrack-extra/description
     Netfilter (IPv4) extra kernel modules for connection tracking
     Includes:
     - connbytes
     - connmark/CONNMARK
     - conntrack
     - helper
     - recent
    endef

    $(eval $(call KernelPackage,ipt-conntrack-extra))


    define KernelPackage/ipt-filter
    $(call KernelPackage/ipt/Depends,+LINUX_2_6:kmod-textsearch)
      TITLE:=Modules for packet content inspection
      KCONFIG:=$(KCONFIG_IPT_FILTER)
      FILES:=$(foreach mod,$(IPT_FILTER-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_FILTER-m)))
    endef

    define KernelPackage/ipt-filter/description
     Netfilter (IPv4) kernel modules for packet content inspection
     Includes:
     - layer7
     - string
    endef

    $(eval $(call KernelPackage,ipt-filter))


    define KernelPackage/ipt-ipopt
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Modules for matching/changing IP packet options
      KCONFIG:=$(KCONFIG_IPT_IPOPT)
      FILES:=$(foreach mod,$(IPT_IPOPT-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_IPOPT-m)))
    endef

    define KernelPackage/ipt-ipopt/description
     Netfilter (IPv4) modules for matching/changing IP packet options
     Includes:
     - CLASSIFY
     - dscp/DSCP
     - ecn/ECN
     - hl/HL (2.6.30 and later)
     - length
     - mark/MARK
     - statistic (2.6)
     - tcpmss
     - time
     - tos/TOS (prior to 2.6.25)
     - ttl/TTL (prior to 2.6.30)
     - unclean
    endef

    $(eval $(call KernelPackage,ipt-ipopt))


    define KernelPackage/ipt-ipsec
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Modules for matching IPSec packets
      KCONFIG:=$(KCONFIG_IPT_IPSEC)
      FILES:=$(foreach mod,$(IPT_IPSEC-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_IPSEC-m)))
    endef

    define KernelPackage/ipt-ipsec/description
     Netfilter (IPv4) modules for matching IPSec packets
     Includes:
     - ah
     - esp
     - policy (2.6)
    endef

    $(eval $(call KernelPackage,ipt-ipsec))


    define KernelPackage/ipt-nat
    $(call KernelPackage/ipt/Depends,+kmod-ipt-conntrack)
      TITLE:=Basic NAT targets
      KCONFIG:=$(KCONFIG_IPT_NAT)
      FILES:=$(foreach mod,$(IPT_NAT-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,42,$(notdir $(IPT_NAT-m)))
    endef

    define KernelPackage/ipt-nat/description
     Netfilter (IPv4) kernel modules for basic NAT targets
     Includes:
     - MASQUERADE
    endef

    $(eval $(call KernelPackage,ipt-nat))


    define KernelPackage/ipt-nat-extra
    $(call KernelPackage/ipt/Depends,+kmod-ipt-nat)
      TITLE:=Extra NAT targets
      KCONFIG:=$(KCONFIG_IPT_NAT_EXTRA)
      FILES:=$(foreach mod,$(IPT_NAT_EXTRA-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,43,$(notdir $(IPT_NAT_EXTRA-m)))
    endef

    define KernelPackage/ipt-nat-extra/description
     Netfilter (IPv4) kernel modules for extra NAT targets
     Includes:
     - MIRROR (2.4)
     - NETMAP
     - REDIRECT
    endef

    $(eval $(call KernelPackage,ipt-nat-extra))


    define KernelPackage/ipt-nathelper
    $(call KernelPackage/ipt/Depends,+kmod-ipt-nat)
      TITLE:=Basic Conntrack and NAT helpers
      KCONFIG:=$(KCONFIG_IPT_NATHELPER)
      FILES:=$(foreach mod,$(IPT_NATHELPER-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_NATHELPER-m)))
    endef

    define KernelPackage/ipt-nathelper/description
     Default Netfilter (IPv4) Conntrack and NAT helpers
     Includes:
     - ftp
     - irc
     - tftp
    endef

    $(eval $(call KernelPackage,ipt-nathelper))


    define KernelPackage/ipt-nathelper-extra
    $(call KernelPackage/ipt/Depends,+kmod-ipt-nat +LINUX_2_6:kmod-textsearch)
      TITLE:=Extra Conntrack and NAT helpers
      KCONFIG:=$(KCONFIG_IPT_NATHELPER_EXTRA)
      FILES:=$(foreach mod,$(IPT_NATHELPER_EXTRA-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_NATHELPER_EXTRA-m)))
    endef

    define KernelPackage/ipt-nathelper-extra/description
     Extra Netfilter (IPv4) Conntrack and NAT helpers
     Includes:
     - amanda
     - h323
     - mms
     - pptp (2.6)
     - proto_gre (2.6)
     - rtsp
     - sip (2.6)
     - snmp_basic
    endef

    $(eval $(call KernelPackage,ipt-nathelper-extra))


    define KernelPackage/ipt-imq
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Intermediate Queueing support
      KCONFIG:=
        CONFIG_IMQ
        CONFIG_IMQ_BEHAVIOR_BA=y
        CONFIG_IMQ_NUM_DEVS=2
        CONFIG_NETFILTER_XT_TARGET_IMQ
      FILES:=
        $(LINUX_DIR)/drivers/net/imq.$(LINUX_KMOD_SUFFIX)
        $(foreach mod,$(IPT_IMQ-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir
        imq
        $(IPT_IMQ-m)
      ))
    endef

    define KernelPackage/ipt-imq/description
     Kernel support for Intermediate Queueing devices
    endef

    $(eval $(call KernelPackage,ipt-imq))


    define KernelPackage/ipt-queue
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Module for user-space packet queueing
      KCONFIG:=$(KCONFIG_IPT_QUEUE)
      FILES:=$(foreach mod,$(IPT_QUEUE-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_QUEUE-m)))
    endef

    define KernelPackage/ipt-queue/description
     Netfilter (IPv4) module for user-space packet queueing
     Includes:
     - QUEUE
    endef

    $(eval $(call KernelPackage,ipt-queue))


    define KernelPackage/ipt-ulog
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Module for user-space packet logging
      KCONFIG:=$(KCONFIG_IPT_ULOG)
      FILES:=$(foreach mod,$(IPT_ULOG-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_ULOG-m)))
    endef

    define KernelPackage/ipt-ulog/description
     Netfilter (IPv4) module for user-space packet logging
     Includes:
     - ULOG
    endef

    $(eval $(call KernelPackage,ipt-ulog))


    define KernelPackage/ipt-iprange
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Module for matching ip ranges
      KCONFIG:=$(KCONFIG_IPT_IPRANGE)
      FILES:=$(foreach mod,$(IPT_IPRANGE-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_IPRANGE-m)))
    endef

    define KernelPackage/ipt-iprange/description
     Netfilter (IPv4) module for matching ip ranges
     Includes:
     - iprange
    endef

    $(eval $(call KernelPackage,ipt-iprange))


    define KernelPackage/ipt-extra
    $(call KernelPackage/ipt/Depends,)
      TITLE:=Extra modules
      KCONFIG:=$(KCONFIG_IPT_EXTRA)
      FILES:=$(foreach mod,$(IPT_EXTRA-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,45,$(notdir $(IPT_EXTRA-m)))
    endef

    define KernelPackage/ipt-extra/description
     Other Netfilter (IPv4) kernel modules
     Includes:
     - condition (2.4 only)
     - owner
     - physdev (if bridge support was enabled in kernel)
     - pkttype
     - quota
    endef

    $(eval $(call KernelPackage,ipt-extra))


    define KernelPackage/ip6tables
      SUBMENU:=$(NF_MENU)
      TITLE:=IPv6 modules
      DEPENDS:=+kmod-ipv6
      KCONFIG:=$(KCONFIG_IPT_IPV6)
      FILES:=$(foreach mod,$(IPT_IPV6-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      AUTOLOAD:=$(call AutoLoad,49,$(notdir $(IPT_IPV6-m)))
    endef

    define KernelPackage/ip6tables/description
     Netfilter IPv6 firewalling support
    endef

    $(eval $(call KernelPackage,ip6tables))


    define KernelPackage/arptables
      SUBMENU:=$(NF_MENU)
      TITLE:=ARP firewalling modules
      FILES:=$(LINUX_DIR)/net/ipv4/netfilter/arp*.$(LINUX_KMOD_SUFFIX)
      KCONFIG:=CONFIG_IP_NF_ARPTABLES
        CONFIG_IP_NF_ARPFILTER
        CONFIG_IP_NF_ARP_MANGLE
      AUTOLOAD:=$(call AutoLoad,49,$(notdir $(patsubst %.$(LINUX_KMOD_SUFFIX),%,$(wildcard $(LINUX_DIR)/net/ipv4/netfilter/arp*.$(LINUX_KMOD_SUFFIX)))))
    endef

    define KernelPackage/arptables/description
     Kernel modules for ARP firewalling
    endef

    $(eval $(call KernelPackage,arptables))


    define KernelPackage/ebtables
      SUBMENU:=$(NF_MENU)
      TITLE:=Bridge firewalling modules
      DEPENDS:=@LINUX_2_6
      FILES:=$(foreach mod,$(EBTABLES-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      KCONFIG:=CONFIG_BRIDGE_NETFILTER=y
        $(KCONFIG_EBTABLES)
      AUTOLOAD:=$(call AutoLoad,49,$(notdir $(EBTABLES-m)))
    endef

    define KernelPackage/ebtables/description
      ebtables is a general, extensible frame/packet identification
      framework. It provides you to do Ethernet
      filtering/NAT/brouting on the Ethernet bridge.
    endef

    $(eval $(call KernelPackage,ebtables))


    define KernelPackage/ebtables/Depends
      SUBMENU:=$(NF_MENU)
      DEPENDS:=kmod-ebtables $(1)
    endef


    define KernelPackage/ebtables-ipv4
    $(call KernelPackage/ebtables/Depends,)
      TITLE:=ebtables: IPv4 support
      FILES:=$(foreach mod,$(EBTABLES_IP4-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      KCONFIG:=$(KCONFIG_EBTABLES_IP4)
      AUTOLOAD:=$(call AutoLoad,49,$(notdir $(EBTABLES_IP4-m)))
    endef

    define KernelPackage/ebtables-ipv4/description
     This option adds the IPv4 support to ebtables, which allows basic
     IPv4 header field filtering, ARP filtering as well as SNAT, DNAT targets.
    endef

    $(eval $(call KernelPackage,ebtables-ipv4))


    define KernelPackage/ebtables-ipv6
    $(call KernelPackage/ebtables/Depends,)
      TITLE:=ebtables: IPv6 support
      FILES:=$(foreach mod,$(EBTABLES_IP6-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      KCONFIG:=$(KCONFIG_EBTABLES_IP6)
      AUTOLOAD:=$(call AutoLoad,49,$(notdir $(EBTABLES_IP6-m)))
    endef

    define KernelPackage/ebtables-ipv6/description
     This option adds the IPv6 support to ebtables, which allows basic
     IPv6 header field filtering and target support.
    endef

    $(eval $(call KernelPackage,ebtables-ipv6))


    define KernelPackage/ebtables-watchers
    $(call KernelPackage/ebtables/Depends,)
      TITLE:=ebtables: watchers support
      FILES:=$(foreach mod,$(EBTABLES_WATCHERS-m),$(LINUX_DIR)/net/$(mod).$(LINUX_KMOD_SUFFIX))
      KCONFIG:=$(KCONFIG_EBTABLES_WATCHERS)
      AUTOLOAD:=$(call AutoLoad,49,$(notdir $(EBTABLES_WATCHERS-m)))
    endef

    define KernelPackage/ebtables-watchers/description
     This option adds the log watchers, that you can use in any rule
     in any ebtables table.
    endef

    $(eval $(call KernelPackage,ebtables-watchers))


    define KernelPackage/nfnetlink
      SUBMENU:=$(NF_MENU)
      TITLE:=Netlink-based userspace interface
      DEPENDS:=@LINUX_2_6 +kmod-ipt-core
      FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink.$(LINUX_KMOD_SUFFIX)
      KCONFIG:=CONFIG_NETFILTER_NETLINK
      AUTOLOAD:=$(call AutoLoad,48,nfnetlink)
    endef

    define KernelPackage/nfnetlink/description
     Kernel modules support for a netlink-based userspace interface
    endef

    $(eval $(call KernelPackage,nfnetlink))


    define KernelPackage/nfnetlink/Depends
      SUBMENU:=$(NF_MENU)
      DEPENDS:=@LINUX_2_6 +kmod-nfnetlink $(1)
    endef


    define KernelPackage/nfnetlink-log
    $(call KernelPackage/nfnetlink/Depends,)
      TITLE:=Netfilter LOG over NFNETLINK interface
      FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink_log.$(LINUX_KMOD_SUFFIX)
      KCONFIG:=CONFIG_NETFILTER_NETLINK_LOG
      AUTOLOAD:=$(call AutoLoad,48,nfnetlink_log)
    endef

    define KernelPackage/nfnetlink-log/description
     Kernel modules support for logging packets via NFNETLINK
    endef

    $(eval $(call KernelPackage,nfnetlink-log))


    define KernelPackage/nfnetlink-queue
    $(call KernelPackage/nfnetlink/Depends,)
      TITLE:=Netfilter QUEUE over NFNETLINK interface
      FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink_queue.$(LINUX_KMOD_SUFFIX)
      KCONFIG:=CONFIG_NETFILTER_NETLINK_QUEUE
      AUTOLOAD:=$(call AutoLoad,48,nfnetlink_queue)
    endef

    define KernelPackage/nfnetlink-queue/description
     Kernel modules support for queueing packets via NFNETLINK
    endef

    $(eval $(call KernelPackage,nfnetlink-queue))


    define KernelPackage/nf-conntrack-netlink
    $(call KernelPackage/nfnetlink/Depends,+kmod-ipt-conntrack)
      TITLE:=Connection tracking netlink interface
      FILES:=$(LINUX_DIR)/net/netfilter/nf_conntrack_netlink.$(LINUX_KMOD_SUFFIX)
      KCONFIG:=CONFIG_NF_CT_NETLINK
      AUTOLOAD:=$(call AutoLoad,49,nf_conntrack_netlink)
    endef

    define KernelPackage/nf-conntrack-netlink/description
     Kernel modules support for a netlink-based connection tracking
     userspace interface
    endef

    $(eval $(call KernelPackage,nf-conntrack-netlink))

    而对于外部独立的kernel module,you can add them to the build system just like if they were software packages by defining a KernelPackage section in the package makefile.

  • 相关阅读:
    jquery deferred对象
    一张图道尽Javascript的原型继承
    Reflection
    vim操作
    转载:HTTP调试工具:Fiddler的使用方法介绍
    转载:计算机网络面试题
    20120810
    new pad不能用usb充电的解决方法
    20120416
    Lua入门——环境安装
  • 原文地址:https://www.cnblogs.com/lagujw/p/3662509.html
Copyright © 2020-2023  润新知