桓台县城乡建设局网站,公司做环评的网站,广告发布者是指,app软件制作器【问】内存空间的组成部分#xff1f;#xff1f;
内存空间分为内核空间和用户空间 1.内核空间控制硬件资源#xff0c;提供系统调用接口#xff0c;保护系统自身安全稳定 2.用户空间实现业务逻辑 【问】如何进入内核空间使用硬件资源#xff1f; 1.系统调用 2.软中断 3.…【问】内存空间的组成部分
内存空间分为内核空间和用户空间 1.内核空间控制硬件资源提供系统调用接口保护系统自身安全稳定 2.用户空间实现业务逻辑 【问】如何进入内核空间使用硬件资源 1.系统调用 2.软中断 3.硬件中断 【问】用户空间与内核空间的数据如何交换 1.配合read函数 copy_to_uservoid __user *to , const void *from , unsigned long n; 把内核空间数据给用户空间 2.配合write函数 copy_from_uservoid *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_userbuf, 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;
}