(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