zoukankan      html  css  js  c++  java
  • Linux kernel 2.6下的modules编译与KBuild

    转载:http://blog.sina.com.cn/s/blog_602f87700100dq1u.html


    Sam之前在Linux kernel 2.4下写过一些driver.但自从转到kernel 2.6之后,再也没有写过driver.所以很多具体的东西并不清楚。今天看了看文档,觉得变化挺大的。记下来。

    在2.4内核中,只要自己写了driver,最多需要kernel头文件来配合编译。通常的CFLAGS为:
    =-D__KERNEL__ -I$(KDIR) /include -DMODULE

    但在2.6下面,不再是这样。模块的编译需要依赖配置过的内核源码,编译过程首先会到内核源码目标下,读取顶层的Makefile文件
    Module编译模板如下:

    #Makefile for linux2.6
    ifneq ($(KERNELRELEASE),)
    # call from kernel build system
    scull-objs := main.o pipe.o access.o
    obj-m := scull.o
    else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)
    modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD)
    clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
    endif


    解释:
    KERNELRELEASE:由Kernel顶层Makefile中定义。
    第一次运行中,KERNELRELEASE没有被定义,所以进入else
    $(MAKE) -C $(KERNELDIR) M=$(PWD)
    此处读取KERNELDIR中的顶层Makefile。读取后又返回本目录。继续执行本目录Makefile。
    则此时KERNELRELEASE被定义。进入if.
    if和else之间的为kbuild语法的语句.

     

  • 相关阅读:
    【Java123】HTTP Post Form Data 传输的Java实现
    【数据库123】Oracle数据库数据实时监控
    【Java123】Java基础知识点
    【测试123】ISTQB AL
    【Git123】Git 常用命令
    [Java123] Spring
    【Java123】JavaWeb Servlet开发
    [Java123] JBoss
    [SQL123] Oracle SQL 统计一定时间间隔内的数据
    【测试123】性能测试之压力测试
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3727724.html
Copyright © 2011-2022 走看看