博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
驱动 (3.2) copy_to_user
阅读量:4284 次
发布时间:2019-05-27

本文共 2672 字,大约阅读时间需要 8 分钟。

copy_to_user

/*驱动端*//********filename : test.c********************************/#include 
#include
#include
#include
#include
#define MISC_NAME "test"#define BOADRID_READ 9999long misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg){
unsigned int __user *argp = (unsigned int __user *)arg; unsigned int boardid = 90; int ret =1; switch(cmd) {
case BOADRID_READ: ret = copy_to_user(argp,&boardid, sizeof(unsigned int)); //ret = copy_to_user(&arg,&boardid, sizeof(unsigned int)); if(ret) {
printk("ret : %d\n",ret); printk("IOC_VDEC_GET_VIDEO_LOSS error\n"); return -1; } break; default: return -1; } return 0;}int misc_close(struct inode * inode, struct file * file){
return 0;}/**********************************************************/static int misc_open(struct inode *inode, struct file *file){
printk("misc open\n"); return 0;}/**********************************************************/static const struct file_operations misc_fops ={
.owner = THIS_MODULE, .open = misc_open, .unlocked_ioctl = misc_ioctl, .release = misc_close};/**********************************************************/static struct miscdevice misc_dev ={
.minor = MISC_DYNAMIC_MINOR,//这是次设备号,如果为255,会自动分配一个次设备号.MISC_DYNAMIC_MINOR就是255 .name = MISC_NAME,//设备的名字,加载成功会在/dev/下创建一个以MISC_NAME为名字的设备 .fops = &misc_fops,//文件操作指针,供上层调用};/**********************************************************/static int __init misc_init(void){
int ret; ret = misc_register(&misc_dev); if (ret) {
printk("misc_register error\n"); return ret; } return 0;}static void __exit misc_exit(void){
misc_deregister(&misc_dev);}/**********************************************************/module_init(misc_init);module_exit(misc_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("XXX");
/*APP端*/#include 
#include
#include
#include
#include
#define BOADRID_READ 9999int main(int argc, const char *argv[]){
int fd; int ret; int id; char * file = "/dev/test"; fd = open(file, O_RDWR); if (fd < 0) {
printf("open %s failed!\n", file); return -1; } ret = ioctl(fd,BOADRID_READ,&id); if(ret < 0){
printf("get board id failed!!!\n"); }else{
printf("get board id sueecssed!!!\n"); } printf("%d\n",id); return 0;}

Makefile

ifneq  ($(KERNELRELEASE),)obj-m:=test.oelseKDIR := /lib/modules/$(shell uname -r)/buildPWD:=$(shell pwd)all:    make -C $(KDIR) M=$(PWD) modulesclean:    rm -f *.ko *.o *.symvers *.cmd *.cmd.oendif

转载地址:http://ftigi.baihongyu.com/

你可能感兴趣的文章
Canvas入门(3):图像处理和绘制文字
查看>>
《千与千寻》给读者带来了什么?
查看>>
JQuery笔记:JQuery和JavaScript的联系与区别
查看>>
PHP的MySQL扩展:PHP访问MySQL的常用扩展函数
查看>>
PHP实现分页:文本分页和数字分页
查看>>
博客收录集的源代码分享,需要那就快来吧
查看>>
杂谈:HTML 5的消息通知机制
查看>>
Ajax异步请求PHP数据
查看>>
百家搜索:在网站中添加Google、百度等搜索引擎
查看>>
关于坛友的一个布局问题的解答
查看>>
网页抓取:PHP实现网页爬虫方式小结
查看>>
国民岳父的“屁民理论”
查看>>
我为什么要写博客?
查看>>
博客测试:博客系统i94web beta1.0 请求测试
查看>>
XAMPP:访问phpmyadmin出错的解决方案
查看>>
怎么用PHP在HTML中生成PDF文件
查看>>
PHP中我经常容易混淆的三组函数
查看>>
DOM笔记(一):HTMLDocument接口
查看>>
DOM笔记(二):Node接口
查看>>
DOM笔记(三):Element接口和HTMLElement接口
查看>>