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

Linux kernel 2.6下的modules编译与KBuild的更多相关文章

  1. 【分享】Linux(Ubuntu)下如何自己编译JDK

    最近在看<深入理解 Java 虚拟机>这本书.里面提到了如何手动编译JDK,于是就试了试. 在编译的过程中,遇到了一些问题.上网一搜,发现了一篇很好的文章,跟大家分享一下:ubuntu 1 ...

  2. linux centos 7.5下 源码编译安装 lua环境

    lua 5.3.5 下载安装时发现缺少库 readline 需要添加依赖 yum search readline 看有哪些包 安装带有 devel 字样的 安装无 devel 的非开发包,通常不会自动 ...

  3. How to compile Linux kernel in fedora 6

    前提:已裝好Fedora 6 core 2.6.18 ,在 Fedora 6 中compile linux kernel.1.下載 Fedora 6 core 2.6.18 http://www.ke ...

  4. Linux kernel 模块 hello 测试

    原文链接:https://www.cnblogs.com/nerohwang/p/3621316.html hello.c 文件: #include <linux/kernel.h> /* ...

  5. Ubantu下编译Linux Kernel

    wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.9.3.tar.gztar -xzf linux-3.9.3.tar.gzcd li ...

  6. Linux下指定版本编译安装LAMP

    说明: 操作系统:CentOS 6.5 64位 需求: 编译安装LAMP运行环境 各软件版本如下: MySQL:mysql-5.1.73 Apache:httpd-2.2.31 PHP:php-5.2 ...

  7. 编译android的linux kernel goldfish

    https://source.android.com/source/building-kernels.html $ export PATH=/home/hzh/oldhome/learn/androi ...

  8. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...

  9. debian下为stm32f429i-discovery编译uboot、linux内核和根文件系统

    交叉编译器:arm-uclinuxeabi-2010q1 交叉编译器下载下来后解压,然后将其中bin文件夹路径加入到PATH变量中. 根据<debian下烧写stm32f429I discove ...

随机推荐

  1. 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...

  2. ashx输出文字,执行JavaScript,输出图片等

    原文发布时间为:2009-09-30 -- 来源于本人的百度文章 [由搬家工具导入] 一提到Ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用ASPX或者Webserv ...

  3. js动态添加select菜单 联动菜单

    原文发布时间为:2009-11-14 -- 来源于本人的百度文章 [由搬家工具导入] <html> <head> <title>http://hi.baidu.co ...

  4. 练习题 求a[i]到a[j]累积和为最大的部分

    原文发布时间为:2009-03-09 -- 来源于本人的百度文章 [由搬家工具导入] 1、有一个数组a[n],里面的数只有两种:-1或1。i,j是两个整数,假设0<=i<=j<=n- ...

  5. c# automapper 使用

    一.最简单的用法 有两个类User和UserDto 1 public class User 2 { 3 public int Id { get; set; } 4 public string Name ...

  6. xammp无法启动apache 由于80端口引起的问题 摘自百度经验

    启动过程提示: 15:33:05 [Apache] Problem detected!15:33:05 [Apache] Port 80 in use by "Unable to open ...

  7. LeetCode OJ--N-Queens II

    https://oj.leetcode.com/problems/n-queens-ii/ N皇后问题,计算解的个数 class Solution { public: int totalNQueens ...

  8. LeetCode OJ-- Balanced Binary Tree ***

    https://oj.leetcode.com/problems/balanced-binary-tree/ 判断一个二叉树,是否为平衡的.如果是平衡的,则它的每个子树的左右子树高度差不大于1. 递归 ...

  9. 一、Ubuntu 简介

    Ubuntu 是一个Linux 系统 Apt-Get apt-get 命令是一个强大的命令行工具,用于同 Ubuntu 的 Advanced Packaging Tool (APT) 一起执行诸如安装 ...

  10. 设置自定义Dialog背景不变暗

    设置Dialog弹窗的背景不变暗,有两种方式,一种是通过在style中设置,一种是通过代码设置. 一.在style中设置 <style name="dialog_waiting&quo ...