社区
Linux_Kernel
帖子详情
Linux 2.6 和2.4 驱动开发有什么不同,特别是驱动模块
zdhzidy
2004-11-16 03:57:42
如题
请问那里有相应的资料。麻烦大家介绍一下。
...全文
124
5
打赏
收藏
Linux 2.6 和2.4 驱动开发有什么不同,特别是驱动模块
如题 请问那里有相应的资料。麻烦大家介绍一下。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
binjuny
2004-11-17
打赏
举报
回复
现在让我们来看一个例子,分析一下新的内核编译系统如何来编译并加载一个简单的模块。这个模块是一个“hello world”模块,代码和2.4模块代码基本类似,只是 module_init 和 module_exit 要换成 init_module 和 cleanup_module (内核2.4.10模块已经使用这种机制)。这个模块命名为 hello.c,Makefile 文件如下:
清单 3. 驱动程序 makefile 文件示例
KERNEL_SRC = /usr/src/linux
SUBDIR = $(KERNEL_SRC)/drivers/char/hello/
all: modules
obj-m := module.o
hello-objs := hello.o
EXTRA_FLAGS += -DDEBUG=1
modules:
$(MAKE) -C $(KERNEL_SRC) SUBDIR=$(SUBDIR) modules
makefile 文件使用内核编译机制来编译模块。编译好的模块将被命名为 module.ko,并通过编译 hello.c 和连接 vermagic 而获得。KERNEL_SRC 指定内核源文件所在的目录,SUBDIR 指定放置模块的目录。EXTRA_FLAGS 指定了需要给出的编译期标记。
一旦新模块(module.ko)被创建,它可以被新的模块工具加载或缷载。2.4中的原有模块工具不能用来加载或缷载2.6的内核模块。这个新的模块加载工具会尽量减少在一个设备仍在使用的情况下相应的模块却被缷载的冲突发生,而是在确认这些模块已经没有任何设备在使用后再缷载它。产生这种冲突的原因之一是模块使用计数是由模块代码自己来控制的(通过MOD_DEC/INC_USE_COUNT)。
在2.6中,模块不再需要对引用计数进行加或减,这些工作将在模块代码外部进行。任何要引用模块的代码都必须调用 try_module_get(&module),只有在调用成功以后才能访问那个模块;如果被调用的模块已经被缷载,那么这次调用会失败。相应的,可以通过使用 module_put() 来释放对模块的引用。
CoolQ
2004-11-17
打赏
举报
回复
visit www.lwn.net.
there are a series of articles about porting 2.4 driver to 2.6
ChChip
2004-11-16
打赏
举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
zdhzidy
2004-11-16
打赏
举报
回复
还是自己顶阿 阿阿阿
zdhzidy
2004-11-16
打赏
举报
回复
自己顶!!
Linux
2.6
与
2.4
内核
驱动
程序的区别
该文档详细的描述了
linux
2.4
和
2.6
的内核版本的
不同
,方便
开发
人员在将
2.4
内核移植到
2.6
版本内核时快速有效的执行
2.4
和
2.6
内核模块和
驱动
(转载)
很牛的内核讲解,对于新手和资历高的内核
驱动
人员来说,是个非常有用的资料,值得一看
linux
kernel
2.4
和
2.6
的
驱动
编写区别
linux
kernel
2.4
和
2.6
的
驱动
编写区别
神龙DVD解压卡
linux
2.6
内核
驱动
程序
官方提供的
驱动
都是
2.4
内核的,
开发
很不方便,这个可以工作在
2.6
内核下
reltek r8168 网卡
驱动
for
linux
2.4
2.6
reltek r8168 网卡
驱动
for
linux
2.4
2.6
Linux_Kernel
4,465
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章