免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: yyykkk1229
打印 上一主题 下一主题

如何编写LINUX设备驱动程序 [复制链接]

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
11 [报告]
发表于 2008-08-07 14:15 |只看该作者
还有一个问题,我刚才给你hello-1那个简单的模块,在你的系统下能成功编译加载么?

论坛徽章:
0
12 [报告]
发表于 2008-08-07 14:20 |只看该作者
LINUXKERNEL_INSTALL_DIR=/usr/src/linux-2.4.20-8

obj-m += test.o

all:
        make -C $(LINUXKERNEL_INSTALL_DIR) M=`pwd` modules
clean:
        rm -f *.o *.ko mmtest

这是我的makefile文件,我害怕makefile编译的不对,用gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -I /usr/src/linux-2.4.20-8/include test.c 这样编译也是出错的

我的开头是如下的程序
#define __NO_VERSION__

#include <linux/module.h>
#include <linux/config.h>
#include <linux/version.h>

#include <asm/uaccess.h>

#include <linux/types.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/errno.h>
#include <asm/segment.h>

有没有可能是因为我的库不包含有file_operations呀  
麻烦你了,谢谢

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
13 [报告]
发表于 2008-08-07 14:41 |只看该作者

回复 #11 yyykkk1229 的帖子

应该不是,你编译一下那个hello-1试一下,看能不能成功。

论坛徽章:
0
14 [报告]
发表于 2008-08-07 14:44 |只看该作者
那个是成功的...insmod可以加载模块

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
15 [报告]
发表于 2008-08-07 14:52 |只看该作者

回复 #11 yyykkk1229 的帖子

老大,你怎么没有加#include <linux/kernel.h>阿?

论坛徽章:
0
16 [报告]
发表于 2008-08-07 15:08 |只看该作者
加了,依然不行,我重新编译了一下内核模块,错误发生了改变,但依然看不懂
test.c:7:25: asm/uaccess.h: No such file or directory
In file included from /usr/include/linux/fs.h:23,
                 from test.c:10:
/usr/include/linux/string.h:8:2: warning: #warning Using kernel header in userland!
In file included from /usr/include/linux/sched.h:14,
                 from /usr/include/linux/mm.h:4,
                 from test.c:11:
/usr/include/linux/timex.h:173: field `time' has incomplete type
/usr/include/linux/timex.h:188: confused by earlier errors, bailing out

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
17 [报告]
发表于 2008-08-07 15:13 |只看该作者
错误1:没有找到这个文件asm/uaccess.h
错误2:Using kernel header in userland!  你的编译有问题,makefile可能写得不对,在用户空间引用内核头文件,这本身就可能造成错误。其它地方,可能是兼容性造成的错误。

[ 本帖最后由 dreamice 于 2008-8-7 15:23 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2008-08-07 16:37 |只看该作者
非常感谢楼上的回答,虽然说自己还是很模糊
慢慢琢磨吧,哎...现在思路有些乱

论坛徽章:
0
19 [报告]
发表于 2008-08-08 10:26 |只看该作者
非常感谢dreamice的意见,可能是因为我表达的不够准确,导致了问题的复杂话,还是很感谢他的帮助
这里我总结一下吧,首先字符驱动程序最好放在/usr/src/linux/drivers/char这个文件夹的目录底下,其他的也是可以的,但所编写的程序在中间部分需要加上对字符设备注册的代码,这些我还在研究,感觉很麻烦,没必要每次都编写,继续研究中...

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
20 [报告]
发表于 2008-08-08 11:25 |只看该作者

回复 #19 yyykkk1229 的帖子

继续加油,大家一起交流学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP