linux ---------驱动开发遇到的问题及解决方法

在Linux驱动开发中,作者遇到设备只能读不能写的问题。问题出在file_operations结构体的write函数参数不匹配,导致上层应用程序调用write()时未执行驱动层的led_write()函数。通过修改相关函数参数并调整ioctl函数,最终解决了问题。
摘要由CSDN通过智能技术生成

      (1)今天有写了下设备驱动,当然首先是自己建立一个IP核,功能很简单,就是控制8个LED灯的,所以设置了一个寄存器,添加IP核,编译,XPS下载BIT文件测试了,一切正常。

      (2) 自然就是编写linux驱动了,通过生成的.ko文件,一切正常,/dev/led_ctrl_dev有了,sys/class下面也有了led_ctrl_dev。总之,insmod ,rmmod 都没问题。

      (3) 上层驱动代码的编写,read()读取LED灯的状态,没问题,write()函数感觉没得效果,根本没有执行驱动代码中的 led_write()函数,因为我每次实际写入的值为上层代中传递过来的,可是每次都是FFFFFFFFFF。。。打开文件的时候用的也是O_RDWR  啊

 
 
#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/ioport.h>
#include <linux/of.h>
#include <linux/fs.h>
#include <asm/io.h>
#include <linux/slab.h>
#include <linux/device.h>
#include <linux/kernel.h>


#define LED_PHY_ADDR 0x79c00000
#define DEVICE_NAME "led_ctrl_dev"

struct led_dev{

    struct cdev cdev;/*字符设备*/

    unsigned char value;

};

struct led_dev *led_devp;
static void __iomem *LED_Regs;

int led_major=0;

struct class *my_class;
struct device *my_device;

MODULE_AUTHOR("xiao gaogao");
MODULE_LICENSE("Dual BSD/GPL");

static int led_open(struct inode *inode,struct file * filp)

{
    return 0;
}
static int led_release(struct inode *inode,struct file *filp)
{
    r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值