1) 是否可以访问 /proc/iomem 中未定义的物理地址?
2) 如果设备的物理地址范围没有出现在/proc/iomem 中,是否意味着该设备还没有被使用/初始化?
1) 是否可以访问 /proc/iomem 中未定义的物理地址?
2) 如果设备的物理地址范围没有出现在/proc/iomem 中,是否意味着该设备还没有被使用/初始化?
1) 是否可以访问 /proc/iomem 中未定义的物理地址?
是的。
假设一个 ARM 处理器的内存映射所有直接连接的外围设备,驱动程序可以执行一个ioremap()
操作来将物理内存映射到虚拟内存以供访问。
但是正确编写的驱动程序会首先调用request_mem_region()
以确保它可以使用(并声称可以使用)该物理地址空间。
里面的信息/proc/iomem
来自司机打电话request_mem_region()
。
2) 如果设备的物理地址范围没有出现在/proc/iomem 中,是否意味着该设备还没有被使用/初始化?
您必须检查驱动程序代码以确定驱动程序的编写情况。之前有
吗?
使用命令查看系统日志;也许驱动程序初始化失败。request_mem_region()
ioremap()
dmesg
假设这是一个静态链接的驱动程序而不是一个可加载的模块,那么由于每个内核设备驱动程序都init()
调用了它的例程,您可以通过在内核命令行上添加选项“initcall_debug”来获得跟踪输出。如果您使用的是 U-Boot,则应将此选项添加到“bootargs”变量(用于内核命令行)。