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