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 ...
随机推荐
- Luogu P5298 [PKUWC2018]Minimax
好劲的题目啊,根本没往线段树合并方面去想啊 首先每种权值都有可能出现,因此我们先排个序然后一个一个求概率 由于此时数的值域变成\([1,m]\)(离散以后),我们可以设一个DP:\(f_{x,i}\) ...
- Python常用模块实战之ATM和购物车系统再升级
目录 一.项目地址 二.功能需求 一.项目地址 https://github.com/nickchen121/atm 二.功能需求 FUNC_MSG = { '0': '注销', '1': '登录', ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 3
18.3 PDO的安装 PDO随PHP 5.1版本发行,在PHP 5的PECL扩展中也可以使用.PDO需要PHP 5版本核心面向对象特性的支持,所以它无法在之前的PHP版本中运行.无论如何,在配置P ...
- PHP 扩展与 ZEND 引擎的整合
PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如 ...
- 鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(二)
Linux目录配置的依据--FHS 因为利用Linux来开发产品的公司太多,例如,CentOS.Ubuntu.ReHat...,导致了配置文件存放的目录没有统一的标准.后来就有了FHS(Filesys ...
- 【BZOJ4823】[CQOI2017]老C的方块(网络流)
[BZOJ4823][CQOI2017]老C的方块(网络流) 题面 BZOJ 题解 首先还是给棋盘进行黑白染色,然后对于特殊边左右两侧的格子单独拎出来考虑. 为了和其他格子区分,我们把两侧的这两个格子 ...
- Vue修改单个组件的背景颜色
组件默认背景颜色为白色,但工作需要改成黑色,于是研究了一番. 很简单,只需在组件中使用两个钩子函数beforeCreate (),beforeDestroy () 代码如下: beforeCreate ...
- dictionary vs Hashtables
DictionaryDictionary is generic type Dictionary<TKey,TValue>Dictionary class is a strong type ...
- Docker是什么、为什么是一种趋势
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响.那么我就不需要专门运送水果的船和专门运 ...
- Spring Boot 中如何支持异步方法
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...