Chinaunix首页 | 论坛 | 博客
  • 博客访问: 181344
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 622
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 19:12
文章分类

全部博文(67)

分类: LINUX

2015-01-19 16:05:03

(假定已存在hello.c文件),则将其编译成hello.ko的makefile可以有以下两种书写方式:
方式1、

  1. obj-m := hello.o  
  2. KERNEL_DIR := /lib/modules/$(shell uname -r)/build  
  3. PWD := $(shell pwd)  
  4. all:  
  5.     make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules  
  6. clean:  
  7.     rm *.o *.ko *.mod.c    

方式2、
  1. ifneq ($(KERNELRELEASE),)
  2.     obj-:= hello.o
  3. else
  4.     KERNELDIR ?= /lib/modules/$(shell uname -r)/build
  5.     PWD := $(shell pwd)
  6. default:
  7.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  8. endif

上述makefile文件网上随处可见,此处仅记录几点:
1、shell命令的运行
  如: $(shell uname -r) 会得到完整内核版本号

 2、make会进入KERNEL_DIR目录执行Makefile,然后返回PWD目录执行自己Makefile。
3、方式2中,先进入else,变量赋值然后执行default,当执行-C选项跳转进入内核树目录,重新读取makefile,此时$(KERNELRELEASE)定义,于是声明内核模块名字。

问题:

    如何使用类似echo的命令,来进行中间变量的跟踪?
    类似$(shell uname -r)的格式可以随处使用,表示一个值,但echo $(shell uname -r)只能放在target内才能打印出来。
    

阅读(1048) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~