zedboard--ubuntu12.04(基于pc机)编译globalmem驱动

来源:互联网 发布:ipad淘宝店怎么上货 编辑:程序博客网 时间:2024/04/28 02:23

先参考下http://blog.csdn.net/xzyiverson/article/details/12681223

globalmem.c中的注释中的编译器是交叉编译器,实际上我注释掉了交叉编译器(上面的博客),用的是gcc的编译器。

globalmem.c和Makefile上传到附件资源了,需要的下载了,记得顶一下啊!

宋宝华书上的例程显然是不能在ubuntu12.04下编译成功的,因为内核有很多的改变,有必要做下面的修改:

1:没有#include <asm/system.h>这个文件,注释掉。

编译仍然出现错误unknown field 'ioctl' specified in initializer。

出现原因:2.6.36后的file_operations结构发生了重大变化。取消了原有的ioctl成员,添加来新的成员       

 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
     long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

2.所以将.ioctl 改为.unlocked_ioctl

编译还是出错error:implicit declaration of function 'kmalloc'


错误原因:缺少头文件

3添加#include <linux/slab.h>

编译成功



ls一下


可能出现的错误:

error inserting 'globalmem.ko': -1 Device or resource busy
用cat /proc/devices 命令查看发现主设备号254已被rtc占用,所以更改驱动程序
#define GLOBALMEM_MAJOR 250(这个错误我没有出现。)

总结 :(来自韦东山)

移植驱动到新内核的时候:
1. 编译,必定会出现错误
2. 解决错误
2.1 头文件不对:去掉或改名
2.2 宏不对:改名使用新宏
2.3 有些函数没有了:改名使用新函数


原创粉丝点击