kernel-build.mk 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. KERNEL_BUILD:=1
  8. include $(INCLUDE_DIR)/host.mk
  9. include $(INCLUDE_DIR)/kernel.mk
  10. LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
  11. LINUX_SITE:=http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
  12. http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
  13. http://www.kernel.org/pub/linux/kernel/v$(KERNEL) \
  14. http://www.de.kernel.org/pub/linux/kernel/v$(KERNEL)
  15. LINUX_CONFIG:=./config
  16. ifneq (,$(findstring uml,$(BOARD)))
  17. LINUX_KARCH:=um
  18. else
  19. LINUX_KARCH:=$(shell echo $(ARCH) | sed -e 's/i[3-9]86/i386/' \
  20. -e 's/mipsel/mips/' \
  21. -e 's/mipseb/mips/' \
  22. -e 's/powerpc/ppc/' \
  23. -e 's/sh[234]/sh/' \
  24. -e 's/armeb/arm/' \
  25. )
  26. endif
  27. KERNELNAME=
  28. ifneq (,$(findstring x86,$(BOARD)))
  29. KERNELNAME="bzImage"
  30. endif
  31. ifneq (,$(findstring ppc,$(BOARD)))
  32. KERNELNAME="uImage"
  33. endif
  34. define Kernel/Prepare/Default
  35. bzcat $(DL_DIR)/$(LINUX_SOURCE) | tar -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
  36. [ -d ../generic-$(KERNEL)/patches ] && $(PATCH) $(LINUX_DIR) ../generic-$(KERNEL)/patches
  37. [ -d ./patches ] && $(PATCH) $(LINUX_DIR) ./patches
  38. endef
  39. define Kernel/Prepare
  40. $(call Kernel/Prepare/Default)
  41. endef
  42. define Kernel/Configure/2.4
  43. $(SED) "s,\-mcpu=,\-mtune=,g;" $(LINUX_DIR)/arch/mips/Makefile
  44. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h
  45. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) dep
  46. endef
  47. define Kernel/Configure/2.6
  48. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts
  49. endef
  50. define Kernel/Configure/Default
  51. @$(CP) $(LINUX_CONFIG) $(LINUX_DIR)/.config
  52. $(call Kernel/Configure/$(KERNEL))
  53. endef
  54. define Kernel/Configure
  55. $(call Kernel/Configure/Default)
  56. endef
  57. define Kernel/CompileModules/Default
  58. $(MAKE) -j$(CONFIG_JLEVEL) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) modules
  59. $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) DEPMOD=true INSTALL_MOD_PATH=$(KERNEL_BUILD_DIR)/modules modules_install
  60. endef
  61. define Kernel/CompileModules
  62. $(call Kernel/CompileModules/Default)
  63. endef
  64. ifeq ($(KERNEL),2.6)
  65. ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
  66. define Kernel/SetInitramfs
  67. mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
  68. grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
  69. echo 'CONFIG_INITRAMFS_SOURCE="../../root"' >> $(LINUX_DIR)/.config
  70. echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config
  71. echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config
  72. mkdir -p $(BUILD_DIR)/root/etc/init.d
  73. $(CP) ../generic-2.6/files/init $(BUILD_DIR)/root/
  74. endef
  75. else
  76. define Kernel/SetInitramfs
  77. mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
  78. grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
  79. rm -f $(BUILD_DIR)/root/init $(BUILD_DIR)/root/etc/init.d/S00initramfs
  80. echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config
  81. endef
  82. endif
  83. endif
  84. define Kernel/CompileImage/Default
  85. $(call Kernel/SetInitramfs)
  86. $(MAKE) -j$(CONFIG_JLEVEL) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) $(KERNELNAME)
  87. $(KERNEL_CROSS)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL)
  88. endef
  89. define Kernel/CompileImage
  90. $(call Kernel/CompileImage/Default)
  91. endef
  92. define Kernel/Clean/Default
  93. rm -f $(LINUX_DIR)/.linux-compile
  94. rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.configured
  95. rm -f $(LINUX_KERNEL)
  96. $(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean
  97. endef
  98. define Kernel/Clean
  99. $(call Kernel/Clean/Default)
  100. endef
  101. define BuildKernel
  102. ifneq ($(LINUX_SITE),)
  103. $(DL_DIR)/$(LINUX_SOURCE):
  104. -mkdir -p $(DL_DIR)
  105. $(SCRIPT_DIR)/download.pl $(DL_DIR) $(LINUX_SOURCE) $(LINUX_KERNEL_MD5SUM) $(LINUX_SITE)
  106. endif
  107. $(LINUX_DIR)/.prepared: $(DL_DIR)/$(LINUX_SOURCE)
  108. -rm -rf $(KERNEL_BUILD_DIR)
  109. -mkdir -p $(KERNEL_BUILD_DIR)
  110. $(call Kernel/Prepare)
  111. touch $$@
  112. $(LINUX_DIR)/.configured: $(LINUX_DIR)/.prepared $(LINUX_CONFIG)
  113. $(call Kernel/Configure)
  114. touch $$@
  115. $(LINUX_DIR)/.modules: $(LINUX_DIR)/.configured
  116. rm -rf $(KERNEL_BUILD_DIR)/modules
  117. @rm -f $(BUILD_DIR)/linux
  118. ln -sf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) $(BUILD_DIR)/linux
  119. $(call Kernel/CompileModules)
  120. touch $$@
  121. $(LINUX_DIR)/.image: $(LINUX_DIR)/.configured FORCE
  122. $(call Kernel/CompileImage)
  123. touch $$@
  124. mostlyclean: FORCE
  125. $(call Kernel/Clean)
  126. define BuildKernel
  127. endef
  128. endef
  129. download: $(DL_DIR)/$(LINUX_SOURCE)
  130. prepare: $(LINUX_DIR)/.configured $(TOPDIR)/.kernel.mk
  131. compile: $(LINUX_DIR)/.modules
  132. install: $(LINUX_DIR)/.image
  133. clean: FORCE
  134. rm -f $(STAMP_DIR)/.linux-compile
  135. rm -rf $(KERNEL_BUILD_DIR)
  136. rebuild: FORCE
  137. @$(MAKE) mostlyclean
  138. @if [ -f $(LINUX_KERNEL) ]; then \
  139. $(MAKE) clean; \
  140. fi
  141. @$(MAKE) compile
  142. $(TOPDIR)/.kernel.mk: Makefile
  143. echo "CONFIG_BOARD:=$(BOARD)" > $@
  144. echo "CONFIG_KERNEL:=$(KERNEL)" >> $@
  145. echo "CONFIG_LINUX_VERSION:=$(LINUX_VERSION)" >> $@
  146. echo "CONFIG_LINUX_RELEASE:=$(LINUX_RELEASE)" >> $@
  147. echo "CONFIG_LINUX_KARCH:=$(LINUX_KARCH)" >> $@