- を使用して2つのPAGESIZEバッファを割り当てる文字ドライバを構築しました - dma_alloc_coherent()
- 現在、これらのBUFFER [src_ptr&dest_ptr]の物理アドレスを - ioctl()as- source_offsetとを使用してユーザースペースに渡しています- dest_offset。
- ユーザースペースでは、このoffesetはmmap呼び出しのオフセットとして使用されます。したがって、同じ/devファイルで/dev/250と言うと2つのMMAP呼び出しを行っています - usr_src_ptr= mmap(0,page_size, PROT_READ|PROT_WRITE, MAP_SHARED,dev_FD, src_offset ); if (usr_src_ptr == MAP_FAILED){ printf("USR[UPP]:SOURCE MMAP FAiled \n\n"); close(dev_FD); exit(-1); }else{ printf("USR[UPP]:SOURCE MMAP is %X..\n",usr_src_ptr); } usr_dest_ptr= mmap(0,page_size, PROT_READ|PROT_WRITE,MAP_SHARED, dev_FD,dest_offset ); if (usr_dest_ptr == MAP_FAILED){ printf("USR[UPP]:DEST MMAP FAiled \n\n"); close(dev_FD); exit(-1); }else{ printf("USR[UPP]:DEST MMAP is %X..\n",usr_dest_ptr); }
- 私はユーザースペースに書き込み - 0x77、ユーザースペースとカーネルスペースに- user_src_ptr印刷 しています。ユーザースペースとカーネルスペースの両方について正しいデータを取得します- user_src_ptr- dest_src_ptr
- 私はカーネル空間で書い - 0x55ています& カーネル空間とユーザー空間で- dest_ptr印刷しています。この場合、たとえばカーネルバッファ で正しいデータを取得しますが、宛先のユーザースペースバッファは常にを返します。つまり、私が書き込んだデータ。- dest_ptr- usr_dest_ptr- 0X55- dest_ptr- 0x77- usr_src_ptr
mmap()異なるオフセットで同じファイルに対して2つの操作を実行できるかどうか、誰か教えてもらえますか?
それ以外の:
if ((ret = remap_pfn_range(vma,vma->vm_start,
                          (virt_to_phys((void *)src_ptr) >> PAGE_SHIFT),
                          size,vma->vm_page_prot)) < 0)  return ret;  
正しいものは次のとおりです。
if ((ret = remap_pfn_range(vma,vma->vm_start,
                           vma->vm_pgoff,
                           size,vma->vm_page_prot)) < 0)
あなたの入力をありがとうBЈовић....