|
楼主 |
发表于 2003-5-28 20:35:15
|
显示全部楼层
以下是我的体会,如果有错的地方,希望高手指正.
实际上,内核中Makefile有5个部分
1)Makefile: top Makefile,就是源代码文件夹根目录中的
2).config:和1)在同一个目录下,是make menuconfig的时候产生的.里面都是CONFIG_*_*是否被设置了的情况.
3)arch/*/makefile
4)子目录中的makefile
5)Rules.make:提供所有子目录中的makefile共同使用的规则
========================================================================================
可以通过make menuconfig配置的项目,都是可选的,用户或者选择直接编译到内核中,或者作为可装载模块来编译.总而言之是和CONFIG_相关的.
这样在top makefile中就会有DRIVERS-$(CONFIG_*_*)+= *.O这样的语句,也就是说,如果配置了CONFIG_*_*,就要将*.o编进去.
同样的道理,在drivers/block/Makefile中有语句subdir-$(CONFIG_PARIDE)+=paride说明只要配置了paride ,就要深入到paride目录中去.
在drivers/block/paride/Makefile中有语句obj-$(CONFIG_PARIDE)+=paride.o和L_TARGET=paride.a也就是说如果配置了paride,就将paride.o编译到paride.a中.
在topdir/Makefile中有语句DRIVERS-$(CONFIG_PARIDE)+= drivers/block/paride/paride.a说明如果配置了paride,就使用paride.a作驱动.
============================================================================================
如果要加入内核的东西是一定要编译到内核中的,是没有权力通过make menuconfig来选择的,那么就要在top makefile中的CORE_FILES=.....中加入需要编译到内核的东西,比如我这里就是security/vmlinux-obj.o,这个东西是打入lsm包之后自动加上的.
我在上面的最初的贴子中建立的文件夹security/jack.我可以在security/Makefile中写入subdir-y=jack标明无论如何都要访问文件夹,和obj-y := .........jack/jack.o标明jack.o是必须要编译到vmlinux-obj.o中的东西.
在jack/Makefile中还是原来那样写
O_TARGET := jack.o
obj-y := a.o b.o
include $(TOPDIR)/Rules.make
就可以了 |
|