我在驱动程序里调用了phys_to_virt这个函数把物理地转换成虚拟机地址发现每次都失败。下面是我的日志
[10:16:34][ 57.613082@2] BAD USING of phys_to_virt, addr:47c00000, page:47c00
[10:16:34][ 57.613621@2] CPU: 2 PID: 4652 Comm: camera_test Tainted: G O 4.9.113 #33
[10:16:34][ 57.621502@2] Hardware name: Generic DT based system
[10:16:34][ 57.626451@2] [bc2d38b4+ 16][] show_stack+0x20/0x24
[10:16:34][ 57.632252@2] [bc2d38d4+ 32][] dump_stack+0x90/0xac
[10:16:34][ 57.638059@2] [bc2d38fc+ 40][] phys_check+0x88/0x8c
[10:16:34][ 57.643883@2] [bc2d3934+ 56][] am_adap_init+0x234/0x318 [iv009_isp_sensor]
[10:16:34][ 57.651688@2] [bc2d3994+ 96][] sensor_set_iface+0xc0/0x140 [iv009_isp_sensor]
[10:16:34][ 57.659737@2] [bc2d39ac+ 24][] start_streaming+0x34/0x4c [iv009_isp_sensor]
[10:16:34][ 57.667623@2] [bc2d39dc+ 48][] camera_ioctl+0x4cc/0x898 [iv009_isp_sensor]
[10:16:34][ 57.675443@2] [bc2d3a34+ 88][] start_streaming+0xa4/0xb0 [iv009_isp]
[10:16:35][ 57.682728@2] [bc2d3a54+ 32][] sensor_fsm_set_param+0x268/0x26c [iv009_isp]
[10:16:35][ 57.690610@2] [bc2d3a8c+ 56][] acamera_fsm_mgr_set_param+0x60/0x2e8 [iv009_isp]
[10:16:35][ 57.698841@2] [bc2d3ac4+ 56][] sensor_streaming+0x13c/0x240 [iv009_isp]
[10:16:35][ 57.706382@2] [bc2d3af4+ 48][] acamera_command+0xd44/0x1104 [iv009_isp]
[10:16:35][ 57.713920@2] [bc2d3b1c+ 40][] fw_intf_stream_start+0x5c/0x94 [iv009_isp]
[10:16:35][ 57.721633@2] [bc2d3b3c+ 32][] isp_v4l2_stream_on+0x78/0xb8 [iv009_isp]
[10:16:35][ 57.729173@2] [bc2d3b64+ 40][] isp_v4l2_streamon+0x74/0xb0 [iv009_isp]
[10:16:35][ 57.736600@2] [bc2d3b7c+ 24][] v4l_streamon+0x2c/0x30
[10:16:35][ 57.742579@2] [bc2d3be4+ 104][] __video_do_ioctl+0x21c/0x2e8
[10:16:35][ 57.749077@2] [bc2d3cac+ 200][] video_usercopy+0x278/0x70c
[10:16:35][ 57.755403@2] [bc2d3cbc+ 16][] video_ioctl2+0x20/0x24
[10:16:35][ 57.761383@2] [bc2d3ce4+ 40][] v4l2_ioctl+0xb0/0xe8
[10:16:35][ 57.767193@2] [bc2d3d64+ 128][] do_vfs_ioctl+0xb0/0x9d8
[10:16:35][ 57.773258@2] [bc2d3d8c+ 40][] SyS_ioctl+0x7c/0x8c
[10:16:35][ 57.778978@2] [00000000+ 0][] ret_fast_syscall+0x0/0x48
查了下我的内核dts配置文件:
adapt_cma_reserved:linux,adapt_cma {
compatible = “shared-dma-pool”;
reusable;
status = “okay”;
size = <0x01800000>;
alignment = <0x400000>;
};
内核启动log显示:Reserved memory: created CMA memory pool at 0x49400000, size 24 MiB