LED驱动中为什么不能直接配置ioremap()函数生成的虚拟地址寄存器中的值

Lucas表哥 2019-11-06 10:28:24
在编写LED驱动中,已经通过ioremap()函数获得了对应的LED寄存器的虚拟地址,为什么不能直接控制GPJ2DAT_VA中的值?还要先将buf通过 copy_from_user函数从用户空间写到内核空间中,再去判断wbuf的值再去配置对应的寄存器呢?是因为驱动加载的时候已经进入到了内核中,不会去读取用户空间的数据了吗?下面是部分程序,本人初学驱动,对这方面还不是很了解,请大佬不吝赐教

ret = copy_from_user(wbuf,buf,len);
if(ret!=0)
{
printk("failed to copy from user\n");
return -1;
}

if(wbuf[0]=='0')
{
*GPJ2DAT_VA &=~0xf;
*GPJ2DAT_VA |=0xe;
}

————————————————
版权声明:本文为CSDN博主「ZJE_ANDY」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014453898/article/details/60144021
...全文
118 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acuity. 2019-11-06
  • 打赏
  • 举报
回复
用户空间和内核空间内存不能直接访问,只能通过copy_from_user 、copy_to_user进行交互

1,319

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧