ssize_t myread()

static  ssize_t myread(struct file*file,char *data,size_t count,loff_t *offp){
        
        if(filp->f_flags &O_NONBLOCK)
        return -EAGAIN;
        int tmp[4];
    tmp[0] =ioread32(aes_slave_reg5_addr) ;//AXI_AES_IP_mReadSlaveReg5(X_BASE,0);
    tmp[1] =ioread32(aes_slave_reg6_addr) ;//AAXI_AES_IP_mReadSlaveReg6(X_BASE,0);
    tmp[2] =ioread32(aes_slave_reg7_addr) ;//AAXI_AES_IP_mReadSlaveReg7(X_BASE,0);
    tmp[3] =ioread32(aes_slave_reg8_addr) ;//AAXI_AES_IP_mReadSlaveReg8(X_BASE,0);
    //xil_printf("%08x %08x %08x %08x\r\n",tmp[0],tmp[1],tmp[2],tmp[3]);
    data[3] = tmp[0] >> 24;
    data[2] = tmp[0] >> 16;
    data[1] = tmp[0] >> 8;
    data[0] = tmp[0];

    data[7] = tmp[1] >> 24;
    data[6] = tmp[1] >> 16;
    data[5] = tmp[1] >> 8;
    data[4] = tmp[1];

    data[11] = tmp[2] >> 24;
    data[10] = tmp[2] >> 16;
    data[9] = tmp[2] >> 8;
    data[8] = tmp[2];

    data[15] = tmp[3] >> 24;
    data[14] = tmp[3] >> 16;
    data[13] = tmp[3] >> 8;
    data[12] = tmp[3];
    return 0;
        }
        

 

转载于:https://www.cnblogs.com/puck/archive/2013/04/09/3009588.html

#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/slab.h> #define DEVICE_NAME "mydevice" #define BUF_SIZE 4096 static char *dev_buf; static int major; static int open(struct inode *inode, struct file *file) { printk(KERN_INFO "mydevice: device opened.\n"); return 0; } static int release(struct inode *inode, struct file *file) { printk(KERN_INFO "mydevice: device closed.\n"); return 0; } static ssize_t read(struct file *file, char __user *buf, size_t count, loff_t *pos) { int bytes_read = 0; if (*pos >= BUF_SIZE) { return 0; } if (count + *pos > BUF_SIZE) { count = BUF_SIZE - *pos; } if (copy_to_user(buf, dev_buf + *pos, count)) { return -EFAULT; } *pos += count; bytes_read = count; printk(KERN_INFO "mydevice: %d bytes read.\n", bytes_read); return bytes_read; } static ssize_t write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { int bytes_written = 0; if (*pos >= BUF_SIZE) { return -ENOSPC; } if (count + *pos > BUF_SIZE) { count = BUF_SIZE - *pos; } if (copy_from_user(dev_buf + *pos, buf, count)) { return -EFAULT; } *pos += count; bytes_written = count; printk(KERN_INFO "mydevice: %d bytes written.\n", bytes_written); return bytes_written; } static long ioctl(struct file *file, unsigned int cmd, unsigned long arg) { switch (cmd) { case 0: // 控制命令0 // 执行相应的控制操作 break; case 1: // 控制命令1 // 执行相应的控制操作 break; default: return -ENOTTY; } return 0; } static loff_t lseek(struct file *file, loff_t offset, int whence) { loff_t newpos = 0; switch (whence) { case 0: // SEEK_SET newpos = offset; break; case 1: // SEEK_CUR newpos = file->f_pos + offset; break; case 2: // SEEK_END newpos = BUF_SIZE + offset; break; default: return -EINVAL; } if (newpos < 0 || newpos > BUF_SIZE) { return -EINVAL; } file->f_pos = newpos; return newpos; } static struct file_operations mydevice_fops = { .owner = THIS_MODULE, .open = open, .release = release, .read = read, .write = write, .unlocked_ioctl = ioctl, .llseek = lseek, }; static int __init mydevice_init(void) { dev_buf = kmalloc(BUF_SIZE, GFP_KERNEL); if (!dev_buf) { printk(KERN_ALERT "mydevice: kmalloc failed.\n"); return -ENOMEM; } memset(dev_buf, 0, BUF_SIZE); major = register_chrdev(0, DEVICE_NAME, &mydevice_fops); if (major < 0) { printk(KERN_ALERT "mydevice: register_chrdev failed.\n"); return major; } printk(KERN_INFO "mydevice: Device registered, major = %d.\n", major); return 0; } static void __exit mydevice_exit(void) { unregister_chrdev(major, DEVICE_NAME); kfree(dev_buf); printk(KERN_INFO "mydevice: Device unregistered.\n"); } module_init(mydevice_init); module_exit(mydevice_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("My Device Driver");解释这串代码
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值