驱动:3.2内核空间和用户空间的数据交互

write(fd,buf,len)//调用内核中的磁盘驱动程序将用户空间buf中的数据写入到磁盘设备
read(fd,buf,len)//调用内核中的磁盘驱动程序将磁盘中的数据写入到用户空间的buf

原则:
1)用户空间代码不能访问内核空间数据
2)内核空间代码也不直接访问用户空间数据
访问前先做权限检查 再找做读写操作

内核中提供的间接访问用户空间数据的API:

#include <linux/uaccess.h>
unsigned long __must_check copy_to_user(void __user *to,const void *from,unsigned long n);
unsigned long __must_check copy_from_user(void __user *to,const void *from,unsigned long n);
   to,目标地址 该地址应该介于0-3G范围内
   from,源数据地址
   n,连续操作的字节数
   返回值,拷贝失败的字节数

练习:
通过write函数向myleds设备写入1灭灯,写入0亮灯
通过read函数读取灯的亮灭状态
实验步骤:

   cp 01 02 -r
   cd 02
   vi test.c
   vi led_drv.c
   make
   arm-cortex_a9-linux-gnueabi-gcc test.c -o test
   cp test ../../rootfs/
   
   在开发板上执行
      rmmod led_drv
      nsmod led_drv.ko
      mknod /dev/myleds c 244 5
      ./test on
      ./test off 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值