您好,欢迎来到微智科技网。
搜索
您的当前位置:首页KBuild

KBuild

来源:微智科技网
KBuild MakeFile介绍

从Linux内核2.6开始,Linux内核的编译采⽤Kbuild系统,这同过去的编译系统有很⼤的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:⾸先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第⼆次读取Kbuild的Makefile来编译Linux内核。Linux内核Makefile分类

· Kernel Makefile

Kernel Makefile位于Linux内核源代码的顶层⽬录,也叫 Top Makefile。它主要⽤于指定编译Linux Kernel⽬标⽂件(vmlinux)和模块(module)。这编译内核或模块是,这个⽂件会被⾸先读取,并根据读到的内容配置编译环境变量。对于内核或驱动开发⼈员来说,这个⽂件⼏乎不⽤任何修改。

· Kbuild Makefile

Kbuild系统使⽤Kbuild Makefile来编译内核或模块。当Kernel Makefile被解析完成后,Kbuild会读取相关的Kbuild Makefile进⾏内核或模块的编译。Kbuild Makefile有特定的语法指定哪些编译进内核中、哪些编译为模块、及对应的源⽂件是什么等。内核及驱动开发⼈员需要编写这个Kbuild Makefile⽂件。

· ARCH Makefile

ARCH Makefile位于ARCH/$(ARCH)/Makefile,是系统对应平台的Makefile。Kernel Top Makefile会包含这个⽂件来指定平台相关信息。只有平台开发⼈员会关⼼这个⽂件。Kbuild Makefile

Kbuild Makefile的⽂件名不⼀定是Makefile,尽管推荐使⽤Makefile这个名字。⼤多的Kbuild⽂件的名字都是Makefile。为了与其他Makefile⽂件相区别,你也可以指定Kbuild Makefile的名字为Kbuild。⽽且如果“Makefile”和“Kbuild”⽂件同时存在,则Kbuild系统会使⽤“Kbuild”⽂件。

· ⽬标定义

Kbuild Makefile的⼀个最主要功能就是指定编译什么,这个功能是通过下⾯两个对象指定的obj-?和xxx-objs:

· obj-?

obj-?指定编译什么,怎么编译?其中的“?”可能是“y”或“m”,“y”指定把对象编译进内核中,“m”指定把对象编译为模块。语法如下; obj-? = $(target).o

target为编译对象的名字。如果没有指定xxx-objs,这编译这个对象需要的源⽂件就是$(target).c或$(target).s。如果指定了$(target)-objs,则编译这个对象需要的源⽂件由$(target)-objs指定,并且不能有$(target).c或$(tar

get).s⽂件。

· xxx-objs

xxx-objs指定了编译对象需要的⽂件,⼀般只有在源⽂件是多个时才需要它。只要包含了这两⾏,Kbuild Makefile就应该可以⼯作了。

· 嵌套编译

有时⼀个对象可能嵌⼊到另⼀个对象的⽬录下,那个如何编译⼦⽬录下的对象呢?其实很简单,只要指定obj_?的对象为⼦⽬录的名字就可以了:

obj-? = $(sub_target)/

其中“?”可以是“y”或“m”,$(sub_target)是⼦⽬录名字。

· 编译器选项

尽管在⼤多数情况下不需要指定编译器选项,有时我们还是需要指定⼀些编译选项的。· ccflags-y, asflags-y and ldflags-y 这些编译选项⽤于指定cc、as和ld的编译选项

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务