#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/uaccess.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
#include <linux/signal.h>
#include <linux/timer.h>
#include <linux/slab.h>

#define printw(fmt, ...)     ({printk( KERN_ERR "[ksync] " fmt, ##__VA_ARGS__); 0; })

;
struct cdev testcdev;
struct class *myclass;
static struct fasync_struct *async;
][] = {};

int hexdump(unsigned char *name, unsigned char *data, unsigned short len)
{
    unsigned char *buf;
    int i, p, ret;
    unsigned ] = {};
    unsigned ;

    tmp_len = sprintf(tmp, "%s hex(len=%d): ", name, len);
    )
        len = ;
    buf = kmalloc( (len + ) *  + tmp_len, GFP_KERNEL);
    memset(buf, ) *  + tmp_len);
    memcpy(buf, tmp, tmp_len);

     == len))
    {
        printw("%s\n", buf);
        kfree(buf);
        ;
    }
    , p = tmp_len; i < len; i++)
    {
        ret = sprintf((buf + p), "%02x ", *(data + i));
        p = p + ret;
    }
    printw("%s\n", buf);
    kfree(buf);
    ;
}

void ksync_send(unsigned short cmd, unsigned char *buffer, short len)
{
    unsigned ] = {};
    sprintf(string, "%s(0x%x, %d)", __func__, cmd, len);

    memcpy(fsync_buffer[] + , ();
    memcpy(fsync_buffer[] + , ();
    memcpy(fsync_buffer[] + ,     buffer, len);
    hexdump(], len+);
    kill_fasync(&async, SIGIO, POLL_IN);
}

void ksync_recv(unsigned short cmd, unsigned char *buffer, short len)
{
    unsigned ] = {};
    sprintf(string, "%s(0x%x, %d)", __func__, cmd, len);
    hexdump(string, buffer, len);
    ksync_send(0x57, buffer, len);
}

int char_open(struct inode *inode, struct file *filp)
{
    printw("char_open ok...\n");
    ;
}

static int char_fasync(int fd, struct file *filp, int mode)
{
    return fasync_helper(fd, filp, mode, &async);
}

int char_release(struct inode *inode,struct file *filp)
{
        printw("char close\n");
        , filp, );;
}
int char_ioctl (struct inode *inode, struct file *filelp, unsigned int cmd, unsigned long args)
{

    ;

}
ssize_t char_write(struct file *filp, const char __user *buffer, size_t count, loff_t *offset)
{
    unsigned ];
    printw("%s\n", __func__);
    ], buffer, count))
    {
        return -EFAULT;
    }
    hexdump("char_write", buffer, count);
    memcpy((], );
    ksync_recv( info[], fsync_buffer[] + , info[] );
    printw("char_write ok...\n");
    return count;
}

ssize_t char_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset)
{
    int ret;
    ret = copy_to_user( (unsigned ], count);
     != ret) {
        printw("[%s][%d][err]\n", __func__, __LINE__);
        return -EFAULT;
    }
    filp->f_pos += count;
    hexdump(], count);
    printw("char_read ok...\n");
    ;
}

struct file_operations fop =
{
        .open = char_open,
        .release = char_release,
        .compat_ioctl = char_ioctl,
        .write = char_write,
        .read = char_read,
        .fasync = char_fasync,
};

int __init a_init(void)
{

    dev_t dev;
    int ret;
    dev = MKDEV(major,);
    ret = register_chrdev_region(dev,,"char");
    if(ret)
    {
        alloc_chrdev_region(&dev,,,"char");
        major = MAJOR(dev);
    }

    testcdev.owner = THIS_MODULE;
    cdev_init(&testcdev, &fop);
    cdev_add(&testcdev, dev, );

    myclass = class_create(THIS_MODULE, "char_class");
    device_create(myclass,NULL,dev,NULL, "ksync");
    printw("module init ok ...\n");
    ;
}

void __exit a_exit(void)
{
    dev_t dev;
    dev = MKDEV(major ,);

    device_destroy(myclass, dev);
    class_destroy(myclass);

    cdev_del(&testcdev);
    unregister_chrdev_region(dev,);
    printw("module exit ok....\n");
}

module_init(a_init);
module_exit(a_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("...");
MODULE_DESCRIPTION("ksync");
MODULE_VERSION("V1.0");
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
int g_fd;
unsigned ][] = {};

int hexdump(unsigned char *name, unsigned char *data, unsigned short len)
{
    unsigned char *buf;
    int i, p, ret;
    unsigned ] = {};
    unsigned ;

    tmp_len = sprintf(tmp, "%s hex(len=%d): ", name, len);
    )
        len = ;
    buf = ) *  + tmp_len);
    memset(buf, ) *  + tmp_len);
    memcpy(buf, tmp, tmp_len);

     == len))
    {
        printf("%s\n", buf);
        free(buf);
        ;
    }
    , p = tmp_len; i < len; i++)
    {
        ret = sprintf((buf + p), "%02x ", *(data + i));
        p = p + ret;
    }
    printf("%s\n", buf);
    free(buf);
    ;
}

void ksync_recv(unsigned short cmd, unsigned char *buffer, short len)
{

}

void ksync_send(unsigned short cmd, unsigned char *buffer, short len)
{
    unsigned ];
    int ret;

    memcpy(s_buf + , ();
    memcpy(s_buf + , ();
    memcpy(s_buf + ,     buffer, len);
    hexdump();
    ret = write(g_fd, s_buf, len + );
    printf("write ret %d\n", ret);
}

void sig_handler(int sig)
{
    int ret;
    unsigned ];
    unsigned ];
    if(sig == SIGIO)
    {
        ret = read(g_fd, r_buf, );
        memcpy((], r_buf + , );
        memcpy((], r_buf + , );
        hexdump(]+);
        ksync_recv(info[], r_buf + , info[]);
    }
    return;
}

int main(void)
{
    unsigned ];
    signal(SIGIO, sig_handler);
    g_fd = open("/dev/ksync", O_RDWR);
     == g_fd)
    {
        printf("open err\n");
        ;
    }
    printf("open %d\n", g_fd);
    fcntl(g_fd, F_SETOWN, getpid());
    fcntl(g_fd, F_SETFL, fcntl(g_fd, F_GETFL) | FASYNC);
    )
    {
        memset(input, );
        gets(input);
        fflush(stdin);
        )
            continue;
        ksync_send(0x56, input, strlen(input) );
    }
    ;
}
# Makefile for PEDD

EXTRA_CFLAGS += -Wframe-larger-than=

ifneq ($(CROSS_COMPILE),)
    EXTRA_CFLAGS += -DARC_SDP
endif

ifeq ($(KERNELRELEASE),)

ifeq ($(CROSS_COMPILE),)
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
else
    KERNELDIR ?= /workspace/bpcie/output/build/linux-arc-axs101--3.13
endif

    PWD       := $(shell pwd)

modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers *.order *.out

.PHONY: modules modules_install clean

else

    obj-m    := ksync_drv.o

endif

ksync的更多相关文章

  1. 使用ksync 加速基于k8s 的应用开发

      ksync 实际上实现了类似 docker docker run -v /foo:/bar 的功能,可以加速我们应用的开发&&运行 安装 mac os curl https://v ...

随机推荐

  1. 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)

    找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...

  2. Struts2框架和SpringMvc框架的区别

    Struts2框架和SpringMvc框架的区别 一.拦截机制的不同 Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域 ...

  3. 《js高程》笔记总结一:基本概念(语法,数据类型,流程控制,函数)

    1.ECMA 欧洲计算机制造商协会 2.";"的作用 代码后的:当压缩代码时可以用于压缩代码,有效的间隔开代码. 3.数据类型有 undefined,null,boolean,st ...

  4. 划词标注1——使用svg绘制换行文本并自动识别库中字典数据

    业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...

  5. 持续集成(CI):API自动化+Jenkins定时构建

    一.系统管理 1.管理监控配置 系统管理>>系统设置>>管理监控配置 2.设置接收测试报告的邮箱 系统管理>>系统设置>>配置Extended E-ma ...

  6. zookeeper C client API 和zkpython 的安装

    1 zookeeper C API 安装 yum install -y ant 在解压的zookeeper包中执行: ant compile_jute 进入src/c 安装:yum -y instal ...

  7. GNSS学习笔记--坐标转换

    GNSS 坐标转换 GNSS计算主要涉及三个坐标系,地心地固坐标系,地理坐标系和站心坐标系.这里主要介绍一下三个坐标的含义和转换公式. 地心地固坐标系如图X,Y,Z表示 (ECEF坐标系),以地心O为 ...

  8. MongoDB for OPS 03:分片 shard 集群

    写在前面的话 上一节的复制集也就是主从能够解决我们高可用和数据安全性问题,但是无法解决我们的性能瓶颈问题.所以针对性能瓶颈,我们需要采用分布式架构,也就是分片集群,sharding cluster! ...

  9. rsync免交互方法

    添加-e "ssh -o StrictHostKeyChecking=no" rsync -avzP -e "ssh -o StrictHostKeyChecking=n ...

  10. Django之Django简介,开发环境搭建,项目应用创建

    软件及Django框架简介 软件框架 一个软件框架是由其中各个软件模块组成的: 每一个模块都有特定的功能: 模块与模块之间通过相互配合来完成软件的开发. 软件框架是针对某一类软件设计问题而产生的. M ...