加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

探索Linux内核:Kconfig/kbuild的秘密

发布时间:2019-08-16 00:40:23 所属栏目:Windows 来源:Cao Jin
导读:副标题#e# 深入理解 Linux 配置/构建系统是如何工作的。 自从 Linux 内核代码迁移到 Git 以来,Linux 内核配置/构建系统(也称为 Kconfig/kbuild)已存在很长时间了。然而,作为支持基础设施,它很少成为人们关注的焦点;甚至在日常工作中使用它的内核开发

在下面这个简化的 makefile 代码的帮助下,了解如何在 Linux 内核中实现递归 make:

  1. # In top Makefile
  2. vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps)
  3.                 +$(call if_changed,link-vmlinux)
  4.  
  5. # Variable assignments
  6. vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN) $(KBUILD_VMLINUX_LIBS)
  7.  
  8. export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
  9. export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y2) $(drivers-y) $(net-y) $(virt-y)
  10. export KBUILD_VMLINUX_LIBS := $(libs-y1)
  11. export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
  12.  
  13. init-y          := init/
  14. drivers-y       := drivers/ sound/ firmware/
  15. net-y           := net/
  16. libs-y          := lib/
  17. core-y          := usr/
  18. virt-y          := virt/
  19.  
  20. # Transform to corresponding built-in.a
  21. init-y          := $(patsubst %/, %/built-in.a, $(init-y))
  22. core-y          := $(patsubst %/, %/built-in.a, $(core-y))
  23. drivers-y       := $(patsubst %/, %/built-in.a, $(drivers-y))
  24. net-y           := $(patsubst %/, %/built-in.a, $(net-y))
  25. libs-y1         := $(patsubst %/, %/lib.a, $(libs-y))
  26. libs-y2         := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
  27. virt-y          := $(patsubst %/, %/built-in.a, $(virt-y))
  28.  
  29. # Setup the dependency. vmlinux-deps are all intermediate objects, vmlinux-dirs
  30. # are phony targets, so every time comes to this rule, the recipe of vmlinux-dirs
  31. # will be executed. Refer "4.6 Phony Targets" of `info make`
  32. $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
  33.  
  34. # Variable vmlinux-dirs is the directory part of each built-in.a
  35. vmlinux-dirs    := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m)
  36.                      $(core-y) $(core-m) $(drivers-y) $(drivers-m)
  37.                      $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
  38.  
  39. # The entry of recursive make
  40. $(vmlinux-dirs):
  41.                 $(Q)$(MAKE) $(build)=$@ need-builtin=1

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读