( 转)嵌入式Linux驱动开发笔记
Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式。简单的例子,
Begin of hello.c file
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

static int __init test_init(void)
{
printk("init module\n");

return 0;
}
static void __exit test_exit(void)
{
printk("exit modules\n");
}

module_init(test_init);
module_exit(test_exit);

Over of hello.c file

Makefile为,
PWD = $(shell pwd)
KERNEL_SRC = /usr/src/linux-source-2.6.15/

obj-m := test.o
module-objs := test.o

all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules

clean:
rm *.ko
rm *.o

在test.c和Makefile所在的目录下运行make,如果看到类似输出
make -C /usr/src/linux-source-2.6.15/ M=/home/vmeth modules

make[1]: Entering directory `/usr/src/linux-source-2.6.15'
CC [M] /home/vmeth/hello.o
Building modules, stage 2.
MODPOST
CC /home/vmeth/hello.mod.o
LD [M] /home/vmeth/hello.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.15'

一般用下面的Makefile,
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.

mymodule-objs := hello.o
obj-m := hello.o

else
PWD := $(shell pwd)

KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build #KDIR目录其实是链接到上面那个Makefile中的那个
/usr/src/linux-source-2.6.15/*中
all:
$(MAKE) -C $(KDIR) M=$(PWD)

clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

endif

KERNELRELEASE 是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。
当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。
当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示的值。
关于报以下错误的解决方法:
Makefile:1: *** 遗漏分隔符
这个有多种情况:
1,命令前要加tab键
2,可能标点符号输成中文形的了
3,比如上面那个文件:ifneq后面要加个空格
转自:http://blog.csdn.net/lufeiop02/archive/2011/05/26/6446343.aspx

关于linux模块驱动简单的Makefile相关推荐

  1. Linux内核驱动-Kconfig和Makefile

    1.在linux编写驱动的过程中,有两个文件是我们必须要了解和知晓的.这其中,一个是Kconfig文件,另外一个是Makefile文件.如果大家比较熟悉的话,那么肯定对内核编译需要的.config文件 ...

  2. linux 一个超简单的makefile

    2019独角兽企业重金招聘Python工程师标准>>> makefile 自动化变量: $@ : 规则的目标文件名 例如:main:main.o test.o g++ -Wall - ...

  3. Linux设备驱动中的ioctl

    memdev.h #ifndef _MEMDEV_H #define _MEMDEV_H#define MEM_MAGIC 'm' #define MEM_RESTART _IO(MEM_MAGIC, ...

  4. Linux移植EC20 4G模块驱动简易教程

    关于4G模块常见的品牌与型号: 品牌 型号 市场价格 芯片组 状态 HUAWEI ME909s-821 210-260 海思芯片,只有五模 在售 HUAWEI ME909s-521 400左右 高通芯 ...

  5. Linux驱动 简单的Linux驱动基础知识

    Linux驱动 简单的Linux驱动基础知识 一.简述         记--Linux驱动学习笔记. Linux驱动程序初始化硬件设备,并提供硬件控制接口给更上一层的应用调用. 例如使用QT应用程序 ...

  6. 【Linux开发】linux设备驱动归纳总结(十二):简单的数码相框

    linux设备驱动归纳总结(十二):简单的数码相框 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  7. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念

    linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  8. linux的led驱动的实验总结,linux设备驱动归纳总结(五):4.写个简单的LED驱动

    linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. Linux驱动 | OLED显示模块驱动(SPI)

    SPI子系统 linux 驱动 | SPI子系统_★_仰望星空_★的博客-CSDN博客 https://blog.csdn.net/qq_36413982/article/details/123783 ...

最新文章

  1. OOM分析之问题定位(二)
  2. Jquery- 错误消息Date未定义,String未定义
  3. One order text browser tool
  4. IE8的模式修改优化Windows7
  5. 简单查询树形结构数据库表
  6. 鸟哥linux私房菜pdf及配套视频分享
  7. Python单例模式
  8. 7、边沿触发-D型触发器
  9. php盘古分词,百度分词技术_百度输入法分词怎么关_百度分词原理
  10. Aruba无线AP入坑心得
  11. 衡量现金分红收益率的指标——股息率
  12. 千万不要嫁给程序猿,我是认真的
  13. Note: NumExpr detected 12 cores but NUMEXPR_MAX_THREADS not set, so enforcing safe limit of 8. NumEx
  14. 微信小程序的家教信息系统
  15. 计算机二级可以重复考吗,计算机二级能重复考吗?计算机二级挂了怎么办
  16. Python:实现tabu search禁忌搜索算法(附完整源码)
  17. 生产实习-图像处理基础
  18. 做测试,就得去大厂!内部披露BAT大厂招聘“潜规则”
  19. 阿里巴巴程序员推出了的一份Python学习清单,这就是你最需要的
  20. Android包体积过大,真的会影响绩效

热门文章

  1. C语言之基本算法09—各位全是a的数列之和
  2. [STL][C++]LIST
  3. thinkphp的like用法
  4. 图解硬盘分区调整/硬盘分区重新调整的好软件/Norton PartitionMagic 版本 8.05 硬盘分区调整/想把硬盘空间调整一下...
  5. Http Module 介绍
  6. java:Eclipse插件springsource-tool-suite的下载和安装
  7. [XJOI]noip44 T3还有这种操作
  8. 日常问题解决记录一:远程桌面进程如果关闭了怎么呼出?
  9. Float浮点内存存储方式 转
  10. SQL Server 日期格式