早教吧 育儿知识 作业答案 考试题库 百科 知识分享

linux内核中物理地址转换为虚拟地址一些不懂的地方,麻烦指点volatileunsignedlong*gpfcon=NULL;volatileunsignedlong*gpfdat=NULL;//这两个是驱动中的定义GPFCON0X56000050GPFDAT0x56000054GPFUP0x56000058Re

题目详情
linux 内核中物理地址转换为虚拟地址一些不懂的地方,麻烦指点
volatile unsigned long *gpfcon = NULL;
volatile unsigned long *gpfdat =NULL;  //这两个是驱动中的定义

GPFCON 0X56000050
GPFDAT 0x56000054
GPFUP 0x56000058
Reserved 0x5600005c //这四个是手册中的数据

下面为物理地址转换为虚拟地址的映射
*gpfcon = (volatile unsigned long *)ioremap(0x56000050,16); //问题一:此处为什么是16?
gpfdat = gpfcon +1;//问题二:此处为什么是1?(volatile unsigned long*)所指向的长度是多少?
▼优质解答
答案和解析
  1.  GPFCON 0X56000050
    GPFDAT 0x56000054
    GPFUP 0x56000058
    Reserved 0x5600005c 

这是四个连续的物理地址,每个长度为4字节,所以是16


2. 在 32位系统上, sizeof(指针) 是4,所以 sizeof(xxxx xxxx *) 总是等于4,由于gpfcon 指向的是被映射后的 0X56000050,  gpfdata 就指向 0x56000054