从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)
从 2.4 到 2.6:Linux 内核可装载模
块机制的改变对设备驱动的影响
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
(此文章非常精彩,强烈推荐)
清单1:判断内核版本的代码段。
#include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
#define LINUX26
#endif
#ifdef LINUX26
/*code in 2.6 kernel*/
#else
/*code in 2.4 kernel */
#endif
|
|
清单2:2.4 内核模块的Makefile模板
#Makefile2.4
KVER=$(shell uname -r)
KDIR=/lib/modules/$(KVER)/build
OBJS=mymodule.o
CFLAGS=-D__KERNEL__ -I$(KDIR)/include -DMODULE -D__KERNEL_SYSCALLS__ -DEXPORT_SYMTAB
-O2 -fomit-frame-pointer -Wall -DMODVERSIONS -include $(KDIR)/include/linux/modversions.h
all: $(OBJS)
mymodule.o: file1.o file2.o
ld -r -o $@ $^
clean:
rm -f *.o
|
清单3:2.6 内核模块的Makefile模板
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := file1.o file2.o
obj-m := mymodule.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
|
清单4: 可同时在2.4 与 2.6 内核下工作的Makefile
#Makefile for 2.4 & 2.6
VERS26=$(findstring 2.6,$(shell uname -r))
MAKEDIR?=$(shell pwd)
ifeq ($(VERS26),2.6)
include $(MAKEDIR)/Makefile2.6
else
include $(MAKEDIR)/Makefile2.4
endif
|
-DMODVERSIONS -include $(KDIR)/include/linux/modversions.h;
|
#insmod hello.ko
Invalid module format
hello: version magic '2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0'
should be '2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3'
|
清单5:适用于2.4与2.6内核的模块的初始化与退出模板
#include <linux/module.h> /* Needed by all modules */
#include <linux/init.h> /* Needed for init&exit macros */
static int mod_init_func(void)
{
/*code here*/
return 0;
}
static void mod_exit_func(void)
{
/*code here*/
}
module_init(mod_init_func);
module_exit(mod_exit_func);
|
转载于:https://blog.51cto.com/zyg0227/270373
从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)相关推荐
- linux 内核可装载模块 版本检查机制
为保持 Linux 内核的稳定与可持续发展,内核在发展过程中引进了可装载模块这一特性.内核可装载模块就是可在内核运行时加载到内核的一组代码.通常 , 我们会在两个版本不同的内核上装载同一模块失败,即使 ...
- linux块设备驱动编写,Linux内核学习笔记 -49 工程实践-编写块设备驱动的基础
块设备可以随机存储.字符设备,比如键盘,只能按照输入顺序存取,不可随机,打乱输入的字节流. 文件系统层,包括常见的文件系统,以及虚拟文件系统层VFS,字符设备可以直接用应用程序打开.块设备不会在应用程 ...
- linux内核可装载模块(lkm)传参机制 module_param()/module_param_string()
对于如何向模块传递参数,Linux kernel 提供了一个简单的框架.其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量. 使用下面的宏时需 ...
- linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf
ISSN 1009-3044 E-mail:info@CCCC.net.CR ComputerKnowledgeandTechnology电脑知识与技术 http://www.dnzs.net.cn ...
- 【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )
文章目录 一.操作系统需要满足的要素 二.宏内核 三.微内核 四.Linux 内核动态加载机制 一.操作系统需要满足的要素 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要 为 ...
- Linux内核中的platform机制
Linux内核中的platform机制 从Linux 2.6起引入了一套新的驱动管理和注册机制:platform_device和platform_driver.Linux中大部分的设备驱动,都可以使用 ...
- 自学Linux 2—Linux 的系统架构之 Linux 内核的主要模块和 Linux 的文件结构
Linux 的系统架构 Linux 系统从应用角度来看,分为内核空间和用户空间两个部分. 内核空间是 Linux 操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的.丰富并且 ...
- Linux内核如何装载和启动一个可执行程序-----实验7
2015108 李泽源 Linux内核如何装载和启动一个可执行程序 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程 ...
- linux 信号优先级,linux内核中的信号机制
linux内核中的信号机制--信号处理 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blog.csdn.net ...
最新文章
- 【Cmake】执行cmake命令时报错:No XSLT processor found
- Activity的切换动画
- swift Array 数组
- javascript案例练习
- UglifyJs Unexpected token: keyword (const)
- java爬取新浪微博登陆_30行jsoup代码搞定新浪微博登录抓取爬虫
- maple 2018 窗口关闭提示乱码_如果解决SOLIDWORKS工程图转CAD字体出现乱码的问题_SolidWorks生信科技...
- JavaScript数据结构与算法(六) 链表的实现
- Python+sklearn训练结果保存与加载(以垃圾邮件分类为例)
- 漫谈并发编程(三):共享受限资源
- Maven详解及相关操作
- 如何用word制作英语答题卡_初中英语考试答题卡可编辑WORD版
- 天然气流量计选型指南
- PostgreSQL Array 数组类型与 FreeSql 打出一套【组合拳】
- 乡村黄昏[原创诗一首]
- gmx_MMPBSA.py的安装及使用--只翻译部分内容,具体可参考官方文档(https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/)
- python中append函数的用法
- awk基础教程详细版
- 流行的软件测试工具介绍
- 怎么把安卓手机便签小工具添加到手机桌面显示呢?
热门文章
- LeetCode:Merge Intervals
- hdu2716水水哈希
- 继续给力,持续一个星期位列NO.1
- php wget,Linux_Linux下载工具wget和axel简介,Wget 
Wget是一个十分常用命令 - phpStudy
- HBase-Shell-数据结构-原理
- Python爬虫:Xpath语法笔记
- Oracle管理表空间和数据文件详解
- javascript数据结构-介绍
- 为备考二级C语言做的代码练习---辅导资料《C语言经典编程282例》--(1)
- FireFox不支持cursor:hand