驱动学习总结
- 硬件访问技术–地址映射
(1)动态映射–使用最多的
void *ioremap(phyaddr ,size)
入参:phyaddr 是物理地址,
size 是映射的区域大小
函数的返回值是映射后的虚拟地址
具体用法可参考:https://blog.csdn.net/zqixiao_09/article/details/50859505
(2)静态映射
用户将事先指定的映射关系,在内核启动时,将物理地址自动映射为虚拟地址。
用户通过map_desc结构来指明物理地址和虚拟地址的关系:
struct map_desc {
unsigned long virtual; //虚拟地址
unsigned long pfn; //物理地址所在的页帧号
unsigned long length; //映射长度
unsigned long type; //映射的设备类型
};
如何通知内核?
以s3c2440为例:
在cpu.c中有个结构体数组专门用来填充你定义的struct map_desc,
然后在初始化函数 比如 s3c24XX_init_io()中调用iotable_init()来调用刚才的数组完成映射