如何编译一个linux下的驱动模块(1)

直接写Makefile 文件(假设要编译的文件为hello.c)

1 ifneq ($(KERNElRELEASE),)

2 obj-m := hello.o

3 else

4 obj-m := hello.o

5 KERNELDIR ?= /lib/modules/$(shell uname -r)/build

6 PWD := $(shell pwd)

7

8 default:

9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

10 endif

第一个ifeq ($(KERNELRELEASE),)目前,并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核时,KERNELRELEASE宏会被定义,那么如果是从源码根目录开始的make则会将myhello.o模块编译进内核。

KERNELDIR ?= /usr/src/$(shell uname -r) ,这句是对KERNELDIR进行赋值,这个变量是后面我们用到的指代内核源码目录用的。

PWD := $(shell pwd),这句是对PWD变量进行赋值,作用是将$(shell pwd)的返回结果既求得当前目录的路径赋值给PWD,这个变量我们在后面指代我们要编译的驱动程序所在的位置。

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成ko文件。

时间: 2024-08-26 01:42:54

如何编译一个linux下的驱动模块(1)的相关文章

我想写一个Linux下的C++程序库--记我的C++库设计历程:设计一个TCP服务程序

我想写一个Linux下的C++程序库,实现一些常用的功能. 我首先想到的就是实现一个TCP监听程序.该程序应该具有哪些功能呢? 1: 启动/停止监听 2: 有客户端连接时,通知调用者 3: 与客户端断开时,通知调用者 4: 有消息到达时,通知调用者 5: 尽量避免程序退出时有没有close的socket. 该程序的大体接口及结构主要用一个类表示,内容如下: #pragma once #include <functional> namespace Hi { /* * @ brief TCP监听会

推荐一个linux下的web压力测试工具神器webbench

推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29   来源:   评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, 那么怎么办呢, 今天推荐一个神器---webbench webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好, 用多了apache的ab工具之后你就会发现ab存在很多问题, 那么怎么办呢, 今天推荐一个神器---webbench    

一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)

目录 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) Http协议简述 HttpRequest类设计 请求部分 接收部分 关于上传和下载 Cpp实现 关于源码中的Logger 使用示例 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) 最近写了点关于Http上传下载文件相关的,于是今天整理下代码. Http协议简述 HttpRequest类设计 使用示例 Http协议简述 协议:网络协议的简称,网络协议是通信计算机双方必须共同遵从

一个Linux下C线程池的实现

在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包.这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程.然而频繁地开辟与销毁线程极大地占用了系统的资源.而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源.线程池提供了一个解决外部大量用户与服务器有限资源的矛盾, 线程池和传统的一个用户对应一个线程的处理方法不同, 它的基本思想就是在程序

一个linux下socket编程的例子,client连server

关于socket编程,以下文章写得比较好:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 1. accept()函数,如果客户端一直没有连接,则服务端阻塞在accept()函数处. 以下是client代码 //============================================================================ // Name : client.cpp // A

分享一个LINUX下备份ORACLE到本地磁盘的脚本EXP,保留7天

请不要把备份脚本也放到backup_dir下,加到crontab里定时运行 #!/bin/sh   export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1    export ORACLE_SID=orcl    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK    export PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/loc

在Linux下利用crond实现一个定时任务并完成一个守护(精灵)进程

一.利用crond实现一个定时任务       在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为"crontab",是"cron table"的简写. crontab支持两种状态: a.直接编写计划任务: b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定. 为当前用户创建cron服

嵌入式Linux下MP4视频录制库MP4V2移植和简介

*************************************************************************************************************************** 作者:EasyWave                                                                             时间:2014.10.31 类别:Linux应用-MP4视频录制库MP4V2

嵌入式Linux下MP4视频录制库MP4V2移植和简单介绍

*************************************************************************************************************************** 作者:EasyWave                                                                             时间:2014.10.31 类别:Linux应用-MP4视频录制库MP4V2