Code Bye

linux设备驱动程序 warning: initialization from incompatible pointer type

Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
(1)linux驱动程序中: return -ENOMEM; 表示什么意思(返回的数字是多少)?
(2)执行make命令报警告:
c:116:5: warning: initialization from incompatible pointer type [enabled by default]
.release = ram_release,
^
c:116:5: warning: (near initialization for ‘ram_fops.release’) [enabled by default]
为什么会提示警告信息?有知道的,解释下,怎么解决这个问题?谢谢//

20分
(1)linux驱动程序中: return -ENOMEM; 表示什么意思(返回的数字是多少)?
如果返回ENOMEN表示没有memory了。查查你的系统中文件errno.h,一般是12.
#define ENOMEM 12

(2)执行make命令报警告:
c:116:5: warning: initialization from incompatible pointer type [enabled by default]
.release = ram_release,
^
c:116:5: warning: (near initialization for ‘ram_fops.release’) [enabled by default]
表示你定义的函数ram_release和release函数指针要求的不一样。查查参数的类型和顺序以及返回值的类型。

引用 1 楼 whizer 的回复:

(1)linux驱动程序中: return -ENOMEM; 表示什么意思(返回的数字是多少)?
如果返回ENOMEN表示没有memory了。查查你的系统中文件errno.h,一般是12.
#define ENOMEM 12

(2)执行make命令报警告:
c:116:5: warning: initialization from incompatible pointer type [enabled by default]
.release = ram_release,
^
c:116:5: warning: (near initialization for ‘ram_fops.release’) [enabled by default]
表示你定义的函数ram_release和release函数指针要求的不一样。查查参数的类型和顺序以及返回值的类型。

(1)路径: usr/src/linux-headers-3.13.0-32/include/linux/errno.h   文件的内容是

#define ERESTARTSYS	512
#define ERESTARTNOINTR	513
#define ERESTARTNOHAND	514	/* restart if no handler.. */
#define ENOIOCTLCMD	515	/* No ioctl command */
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
#define EPROBE_DEFER	517	/* Driver requests probe retry */
#define EOPENSTALE	518	/* open found a stale dentry */

/* Defined for the NFSv3 protocol */
#define EBADHANDLE	521	/* Illegal NFS file handle */
#define ENOTSYNC	522	/* Update synchronization mismatch */
#define EBADCOOKIE	523	/* Cookie is stale */
#define ENOTSUPP	524	/* Operation is not supported */
#define ETOOSMALL	525	/* Buffer or request is too small */
#define ESERVERFAULT	526	/* An untranslatable error occurred */
#define EBADTYPE	527	/* Type not supported by server */
#define EJUKEBOX	528	/* Request initiated, but will not complete before timeout */
#define EIOCBQUEUED	529	/* iocb queued, will get completion event */

文件里没有#define ENOMEM 12   。
(2)与问题相关的源代码:

int ramhd_open(struct block_device *bdev, fmode_t mode)  //设备打开用到
{
    return 0;
}
int  ramhd_release(struct gendisk *gd, fmode_t mode)   //设备关闭用到
{   
    return 0;
}
static struct block_device_operations ramhd_fops =
{   .owner = THIS_MODULE,
    .open = ramhd_open,
    .release = ramhd_release,
    .ioctl = ramhd_ioctl,
};

操作系统版本:Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
刚刚接触linux设备驱动编程,网上找的代码来研究,懂得太少了,希望帮忙重点解决下第二个问题。。谢谢。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明linux设备驱动程序 warning: initialization from incompatible pointer type