kernel.mk 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #
  2. # Copyright (C) 2006 OpenWrt.org
  3. #
  4. # This is free software, licensed under the GNU General Public License v2.
  5. # See /LICENSE for more information.
  6. #
  7. ifeq ($(DUMP),1)
  8. KERNEL:=<KERNEL>
  9. BOARD:=<BOARD>
  10. LINUX_VERSION:=<LINUX_VERSION>
  11. else
  12. include $(TOPDIR)/.kernel.mk
  13. include $(INCLUDE_DIR)/target.mk
  14. # check to see if .kernel.mk matches target.mk
  15. ifeq ($(CONFIG_BOARD)-$(CONFIG_KERNEL),$(BOARD)-$(KERNEL))
  16. LINUX_VERSION:=$(CONFIG_LINUX_VERSION)
  17. LINUX_RELEASE:=$(CONFIG_LINUX_RELEASE)
  18. LINUX_KARCH:=$(CONFIG_LINUX_KARCH)
  19. else
  20. ifneq ($(KERNEL_BUILD),1)
  21. # oops, old .kernel.config; rebuild it (hiding the misleading errors this produces)
  22. $(warning rebuilding .kernel.mk)
  23. $(TOPDIR)/.kernel.mk: FORCE
  24. @$(MAKE) -C $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL) $@ &>/dev/null
  25. endif
  26. endif
  27. ifeq ($(KERNEL),2.6)
  28. LINUX_KMOD_SUFFIX=ko
  29. else
  30. LINUX_KMOD_SUFFIX=o
  31. endif
  32. ifneq (,$(findstring uml,$(BOARD)))
  33. KERNEL_CC:=$(HOSTCC)
  34. KERNEL_CROSS:=
  35. else
  36. KERNEL_CC:=$(TARGET_CC)
  37. KERNEL_CROSS:=$(TARGET_CROSS)
  38. endif
  39. KERNEL_BUILD_DIR:=$(BUILD_DIR)/linux-$(KERNEL)-$(BOARD)
  40. LINUX_DIR := $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
  41. MODULES_SUBDIR:=lib/modules/$(LINUX_VERSION)
  42. MODULES_DIR := $(KERNEL_BUILD_DIR)/modules/$(MODULES_SUBDIR)
  43. TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
  44. LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux
  45. endif
  46. define KernelPackage/Defaults
  47. FILES:=
  48. KCONFIG:=m
  49. AUTOLOAD:=
  50. endef
  51. define ModuleAutoLoad
  52. export modules=; \
  53. add_module() { \
  54. mkdir -p $(2)/etc/modules.d; \
  55. ( \
  56. for mod in $$$$$$$$2; do \
  57. getvar mod; \
  58. done \
  59. ) > $(2)/etc/modules.d/$$$$$$$$1-$(1); \
  60. modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$1-$(1)"; \
  61. }; \
  62. $(3) \
  63. if [ -n "$$$$$$$$modules" ]; then \
  64. mkdir -p $(2)/etc/modules.d; \
  65. echo "#!/bin/sh" > $(2)/CONTROL/postinst; \
  66. echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst; \
  67. echo ". /etc/functions.sh" >> $(2)/CONTROL/postinst; \
  68. echo "load_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst; \
  69. chmod 0755 $(2)/CONTROL/postinst; \
  70. fi
  71. endef
  72. define KernelPackage
  73. NAME:=$(1)
  74. $(eval $(call KernelPackage/Defaults))
  75. $(eval $(call KernelPackage/$(1)))
  76. $(eval $(call KernelPackage/$(1)/$(KERNEL)))
  77. $(eval $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL)))
  78. define Package/kmod-$(1)
  79. TITLE:=$(TITLE)
  80. SECTION:=kernel
  81. CATEGORY:=Kernel modules
  82. DEFAULT:=m
  83. DESCRIPTION:=$(DESCRIPTION)
  84. EXTRA_DEPENDS:='kernel (=$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE))'
  85. $(call KernelPackage/$(1))
  86. $(call KernelPackage/$(1)/$(KERNEL))
  87. $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL))
  88. endef
  89. ifeq ($(findstring m,$(KCONFIG)),m)
  90. ifneq ($(strip $(FILES)),)
  91. define Package/kmod-$(1)/install
  92. mkdir -p $$(1)/lib/modules/$(LINUX_VERSION)
  93. $(CP) $$(FILES) $$(1)/lib/modules/$(LINUX_VERSION)/
  94. $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
  95. $(call KernelPackage/$(1)/install,$$(1))
  96. endef
  97. endif
  98. endif
  99. $$(eval $$(call BuildPackage,kmod-$(1)))
  100. endef
  101. define AutoLoad
  102. add_module $(1) "$(2)";
  103. endef