ksync
- #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的更多相关文章
- 使用ksync 加速基于k8s 的应用开发
ksync 实际上实现了类似 docker docker run -v /foo:/bar 的功能,可以加速我们应用的开发&&运行 安装 mac os curl https://v ...
随机推荐
- 解决 layui 弹出层(弹框)一闪而过就消失的问题 (转载)
转载: 原文链接:https://blog.csdn.net/qq_20594019/article/details/83956532 本人遇到问题:使用layer.open()弹出页面层,出现弹框闪 ...
- 两种查看EFCore生成Sql语句的方法
一.利用反射生成查询语句 该方法转载自:https://jhrs.com/2019/28488.html (略有修改) using Microsoft.EntityFrameworkCore.Quer ...
- Vue模板语法中数据绑定
1.单项数据绑定 <div id="di"> <input type="text" :value="input_val"& ...
- ADB控制手机命令(adb命令)
手机端配置tcp方式连接 su setprop service.adb.tcp.port 5555 stop adbd start adbd 首先使用管理员权限,然后打开监听5555端口 电脑端使用a ...
- 解决webservice(Java)中dao层注入为null问题
首先在webservice指定发布的路径类中实现 ServletContextListener, 例如: import javax.servlet.ServletContextEvent; impor ...
- 论文学习-wlg-基于二维材料的肖特基异质结构的通用尺度定律
目录 主要公式: 各个段落的内容 第一页 第二页 第三页 名词的含义 功函数: 电子亲和力 肖特基势垒 肖特基二极管的原理 非相对论性电子气:未知 Rashba自旋电子系统: 参考链接: 主要公式: ...
- [转]Spring Cloud在国内中小型公司能用起来吗?
原文地址:http://www.cnblogs.com/ityouknow/p/7508306.html 原文地址:https://www.zhihu.com/question/61403505 今天 ...
- weblogic新增域并进行Jconsole监听
一.创建域: 第一步,打开域配置界面: [bofm@UAT02-BIZ-ZJCG-AP-002 bin]$ cd /home/software/weblogic/Oracle/Middleware/w ...
- MySQL数据篇(五)--SQL对数据进行按月统计,或对数据进行按星期统计
对于所有的需求,当你不知道怎么处理的时候,你就先用最简单的方法,或者说的明白一点,用最原始的方法,先实现业务需求再说. 一.对提现队列数据表“ims_checkout_task”进行汇总统计,按月汇总 ...
- python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题
爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据或者数据少问题.那为什么会造成这种结果呢? 其原因是由于Spider的速率比较快,而scapy操作数据库操作比较慢,导致pipelin ...