以下为论坛摘录:
2440的板子。
我想为spi编写一个简单的字符型驱动。
看了下内核代码中的spi驱动代码,发现在把寄存器地址ioremap之前,有一些platform_get_resource,request_mem_region之类的操作。
想问下直接对寄存器进行ioremap,然后用writeb、writel之类的函数去操作可以吗?看到网上有很多代码是直接这么做的。会不会存在危险?
高手指点下,谢谢!
回答:
1、标准的做法就是这样的,楼主担心什么危险,系统的寄存器地址是唯一的,而且跟进程的虚拟内存没有关系
2、platform_get_resource 是为了获取地址, 既然你已经知道地址了, 这个其实不是必须的。
request_mem_region 标记这段物理地址自己使用了,其他人不要使用而已,也不是必须的。
所以直接 ioremap 是没有任何问题的。
3、(ioremap)的作用是把一个物理内存地址点映射为一个内核指针,被映射数据的长度由size参数设定。该函数的实质是把一块物理区域二次映射到一个可以从驱动程序里访问的虚拟地址上去。
4、我觉得在 ioremap 之前 调用一下这个函数request_mem_region还是有必要得
阅读(3625) | 评论(0) | 转发(1) |