内核Makefile基本知识

一、常用文件介绍
Makefile文件:定义了Linux 内核的编译规则。
Kconfig文件:用于生成menuconfig的各级界面,方便用户配置选择各项功能。
.config文件:通过操作make menuconfig来配置各项的状态.最终改变.config文件各项的值,用于决定make时各项是否被编译链接进内核。

二、Makefile基本语法
1.基本规则:当依赖比目标新时,它就会执行下面的命令

目标:依赖1 依赖2
[tab]命令

2、变量及常用符号
2.1、变量的定义和使用
变量一般都是字符串,像C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上,变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来

2.2、变量的赋值
”:=” 直接赋值,赋予当前位置的值
”=” 延时赋值,变量的值是整个makefile中最后被指定的值
“?=” 表示如果该变量没有被赋值,才赋予等号后的值
“+=” 表示将等号后面的值添加到前面的变量上
“+=” 左边的“obj-$(CTL) ”表示如果.config里定义了宏CTL=y才编译链接进内核。=m则编译成动态加载模块

2.3、通配符
$@ 目标文件.o的集合,就像一个数组
$< 所有或者第一个依赖文件.c,视场景而定
$^ 所有的依赖目标的集合
$? 所有比目标新的依赖目标的集合。以空格分隔。
~/test 表示当前用户的/home目录下test文件

2.4、统配符
% 作为统配符,可以表示所有和它文件一类的文件如 %.c代表当前目录下的所有.c文件

3、伪目标
即该目标不存在,但可以方便使用。.PHONY : clean 显示地指明clean是“伪目标”。

4、命令执行和参数
make执行时,带入参数“-n”或“–just-print”,那么其只是显示makefile里的命令,但不会执行命令。
make参数“-s”或“–slient”则是全面禁止命令的显示。
当我们用“@”字符在命令行前,那么,这个命令将不被make显示出来。
make会一条一条的执行其后的命令。需注意的是,如果要让上一条命令的结果应用在下一条命令时,你应该写在同一行然后使用分号分隔这两条命令。
可以在Makefile的命令行前加一个减号“-”(Tab键之后),标记为不管命令出不出错都认为是成功的

三、将新编译项添加进内核的步骤:
1、编写.c等文件源码,并添加到相应的内核子目录中
2、在上述子目录的Kconfig中添加新编译项在配置界面的操作信息。eg:

config LEDS_CTL
        bool "Enable LEDS config"
        default y
        help
          Enable LEDS config

3、在上述子目录的Makefile中增加针对新编译项的编译条目。eg:

obj-$(CONFIG_LEDS_CTL)		+= itop4412_leds.o

四、单独驱动模块编译时makefile示例:
Makefile代码``

#!/bin/bash
obj-m +=hello_module.o
KDIR :=/home/iTop4412_Kernel_3.0
PWD ?=$(shell pwd)
all:
	make -C $(KDIR) M=$(PWD) modules	
clean:
		rm -rf *.o

五、生成可执行程序过程
源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。
编译时:编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。
链接程序时:链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error)

六、其他资料
makeflle入门到精通

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值