kernel-build.mk 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. include $(INCLUDE_DIR)/host.mk
  8. -include $(INCLUDE_DIR)/modules-$(KERNEL).mk
  9. LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
  10. LINUX_SITE=http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
  11. http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
  12. http://www.kernel.org/pub/linux/kernel/v$(KERNEL) \
  13. http://www.de.kernel.org/pub/linux/kernel/v$(KERNEL)
  14. KERNEL_IDIR:=$(KERNEL_BUILD_DIR)/kernel-ipkg
  15. KERNEL_IPKG:=$(KERNEL_BUILD_DIR)/kernel_$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)_$(ARCH).ipk
  16. TARGETS += $(KERNEL_IPKG)
  17. INSTALL_TARGETS += $(KERNEL_IPKG)
  18. LINUX_KARCH:=$(shell echo $(ARCH) | sed -e 's/i[3-9]86/i386/' \
  19. -e 's/mipsel/mips/' \
  20. -e 's/mipseb/mips/' \
  21. -e 's/powerpc/ppc/' \
  22. -e 's/sh[234]/sh/' \
  23. -e 's/armeb/arm/' \
  24. )
  25. $(TARGETS): $(PACKAGE_DIR)
  26. $(PACKAGE_DIR):
  27. mkdir -p $@
  28. $(DL_DIR)/$(LINUX_SOURCE):
  29. -mkdir -p $(DL_DIR)
  30. $(SCRIPT_DIR)/download.pl $(DL_DIR) $(LINUX_SOURCE) $(LINUX_KERNEL_MD5SUM) $(LINUX_SITE)
  31. $(LINUX_DIR)/.unpacked: $(DL_DIR)/$(LINUX_SOURCE)
  32. -mkdir -p $(KERNEL_BUILD_DIR)
  33. bzcat $(DL_DIR)/$(LINUX_SOURCE) | tar -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS) -
  34. touch $@
  35. ifeq ($(KERNEL),2.4)
  36. $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched
  37. $(SED) "s,\-mcpu=,\-mtune=,g;" $(LINUX_DIR)/arch/mips/Makefile
  38. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h
  39. touch $@
  40. $(LINUX_DIR)/.depend_done: $(LINUX_DIR)/.configured
  41. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) dep
  42. touch $@
  43. $(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.depend_done
  44. else
  45. $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched
  46. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts
  47. touch $@
  48. endif
  49. ramdisk-config: $(LINUX_DIR)/.configured FORCE
  50. mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
  51. grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
  52. ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
  53. echo 'CONFIG_INITRAMFS_SOURCE="../../root"' >> $(LINUX_DIR)/.config
  54. echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config
  55. echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config
  56. mkdir -p $(BUILD_DIR)/root/etc/init.d
  57. $(CP) ../generic-2.6/files/init $(BUILD_DIR)/root/
  58. else
  59. rm -f $(BUILD_DIR)/root/init $(BUILD_DIR)/root/etc/init.d/S00initramfs
  60. echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config
  61. endif
  62. $(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.linux-compile pkg-install ramdisk-config
  63. $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) $(KERNELNAME)
  64. $(LINUX_KERNEL): $(LINUX_DIR)/vmlinux
  65. $(KERNEL_CROSS)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S $< $@
  66. touch -c $(LINUX_KERNEL)
  67. $(LINUX_DIR)/.modules_done:
  68. rm -rf $(KERNEL_BUILD_DIR)/modules
  69. $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) modules
  70. $(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
  71. touch $(LINUX_DIR)/.modules_done
  72. modules: $(LINUX_DIR)/.modules_done
  73. packages: $(TARGETS)
  74. $(LINUX_DIR)/.linux-compile:
  75. @rm -f $(BUILD_DIR)/linux
  76. ln -sf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) $(BUILD_DIR)/linux
  77. @$(MAKE) modules
  78. touch $@
  79. $(KERNEL_IPKG):
  80. rm -rf $(KERNEL_IDIR)
  81. mkdir -p $(KERNEL_IDIR)/etc
  82. $(SCRIPT_DIR)/make-ipkg-dir.sh $(KERNEL_IDIR) ../control/kernel.control $(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE) $(ARCH)
  83. if [ -f ./config/$(BOARD).modules ]; then \
  84. cp ./config/$(BOARD).modules $(KERNEL_IDIR)/etc/modules; \
  85. fi
  86. $(IPKG_BUILD) $(KERNEL_IDIR) $(KERNEL_BUILD_DIR)
  87. $(TOPDIR)/.kernel.mk: $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL)/Makefile
  88. echo "CONFIG_BOARD:=$(BOARD)" > $@
  89. echo "CONFIG_KERNEL:=$(KERNEL)" >> $@
  90. echo "CONFIG_LINUX_VERSION:=$(LINUX_VERSION)" >> $@
  91. echo "CONFIG_LINUX_RELEASE:=$(LINUX_RELEASE)" >> $@
  92. echo "CONFIG_LINUX_KARCH:=$(LINUX_KARCH)" >> $@
  93. pkg-install: FORCE
  94. @for pkg in $(INSTALL_TARGETS); do \
  95. $(IPKG) install $$pkg || echo; \
  96. done
  97. download: $(DL_DIR)/$(LINUX_SOURCE)
  98. prepare: $(LINUX_DIR)/.configured
  99. @mkdir -p $(LINUX_DIR) $(PACKAGE_DIR)
  100. compile: prepare $(LINUX_DIR)/.linux-compile
  101. @$(MAKE) packages
  102. install: compile $(LINUX_KERNEL)
  103. mostlyclean: FORCE
  104. rm -f $(LINUX_DIR)/.linux-compile
  105. rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.modules_done
  106. rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.drivers-unpacked
  107. $(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean
  108. rm -f $(LINUX_KERNEL)
  109. rebuild: FORCE
  110. -$(MAKE) mostlyclean
  111. if [ -f $(LINUX_KERNEL) ]; then \
  112. $(MAKE) clean; \
  113. fi
  114. $(MAKE) compile $(MAKE_TRACE)
  115. clean: FORCE
  116. rm -f $(STAMP_DIR)/.linux-compile
  117. rm -rf $(KERNEL_BUILD_DIR)
  118. rm -f $(TARGETS)