当前位置: 首页 > news >正文

【讯为Linux驱动开发】3.内核空间和用户空间

【问】内存空间的组成部分??

内存空间分为内核空间用户空间

1.内核空间控制硬件资源,提供系统调用接口,保护系统自身安全稳定

2.用户空间实现业务逻辑

【问】如何进入内核空间使用硬件资源?

1.系统调用

2.软中断

3.硬件中断

【问】用户空间与内核空间的数据如何交换?

1.配合read函数:

copy_to_user(void __user *to , const void *from , unsigned long n);

把内核空间数据给用户空间

2.配合write函数:

copy_from_user(void *to , const void __user *from , unsigned long n);

把内核空间数据给用户空间

 【驱动模版中完善read和write函数】

static ssize_t cdev_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)
{/* 模拟寄存器数据 */char kbuf[32] = "this is cdev_read!";/* 把这个数组的数据拷贝到寄存器中 */if(copy_to_user(buf, kbuf , strlen(kbuf))!= 0);{printk("copy_to_user error !\n");return -1;}printk("cdev_read success\n");return 0;
}static ssize_t cdev_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offt)
{/* 把buf中的数据写进内核的kbuf中 */char kbuf[32] = {0};if(copy_from_user(kbuf, buf ,sizeof(buf))!= 0);{printk("copy_from_user error !\n");return -1;}printk("cdev_write success\n");return 0;            
}

【APP应用层】

int main(int argc, char *argv[])
{int fd;char buf1[32] = {0};char buf2[32] = "Ni Hao !!";fd = open("/dev/test", HELLO);  /* 打开设备节点 */   /* 读内核中的kbuf数据放进buf1中 */read(fd, buf1 ,sizeof(buf1));printf("buf is %s\n",buf1);/* 写buf2数据(ni hao)进内核中的kbuf中*/write(fd, buf2 ,sizeof(buf2));close(fd);return 0;  
}

http://www.lryc.cn/news/364859.html

相关文章:

  • AI论文:一键生成论文的高效工具
  • 申请医疗设备注册变更时,需要补充考虑网络安全的情况有哪些?
  • 打对钩的方式做人机验证(vue+javascript)
  • 可视化脚本用于使用MMDetection库进行图像的目标检测
  • React-组件通信
  • 低代码选型要注意什么问题?
  • hive切换spark引擎倒入数据乱码
  • fpga入门 串口定时1秒发送1字节
  • 总结一下自己,最近三年,我做了哪些工作
  • SpringCloud Gateway基础入门与使用实践总结
  • TensorBoard在pytorch训练过程中如何使用,及数据读取问题解决方法
  • 【Vue】普通组件的注册使用-全局注册
  • 爬虫之反爬思路与解决手段
  • 2.1.4 采用配置类与注解方式使用MyBatis
  • 微信小程序云开发实现利用云函数将数据库表的数据导出到excel中
  • python 字符串(str)、列表(list)、元组(tuple)、字典(dict)
  • 【源码】SpringBoot事务注册原理
  • 技巧:合并ZIP分卷压缩包
  • 数据挖掘 | 实验三 决策树分类算法
  • Python机器学习预测区间估计工具库之mapie使用详解
  • Linux基础指令磁盘管理002
  • Python怎么添加库:深入解析与操作指南
  • Python | 虚拟环境的增删改查
  • 【MySQL数据库】:MySQL内外连接
  • C# FTP/SFTP 详解及连接 FTP/SFTP 方式示例汇总
  • 二、【源码】实现映射器的注册和使用
  • Android Compose 十:常用组件列表 监听
  • Wireshark 如何查找包含特定数据的数据帧
  • 【深度学习入门篇一】阿里云服务器(不需要配环境直接上手跟学代码)
  • app,waf笔记