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语法的语句.

     

  • 相关阅读:
    一行代码更改博客园皮肤
    fatal: refusing to merge unrelated histories
    使用 netcat 传输大文件
    linux 命令后台运行
    .net core 使用 Nlog 配置文件
    .net core 使用 Nlog 集成 exceptionless 配置文件
    Mysql不同字符串格式的连表查询
    Mongodb between 时间范围
    VS Code 使用 Debugger for Chrome 调试vue
    css权重说明
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3727724.html
Copyright © 2011-2022 走看看