Hiện tại, tôi đang sử dụng một số example driver để tìm hiểu và từ đó tôi có trình điều khiển tùy chỉnh của riêng mình xung quanh. Mã mmap gần như giống hệt nhau, tiết kiệm cho thực tế là tôi cho phép người dùng quản lý kích thước yêu cầu của riêng họ và cấp phát bộ nhớ của tôi xung quanh đó và thực tế là tôi tự động tạo thiết bị char trong/dev.Sự khác biệt giữa dma_mmap_coherent và remap_pfn_range là gì?
Để giải thích ngữ cảnh, đối với trường hợp sử dụng của tôi, tôi muốn thu hẹp một vấn đề mà tôi đang gặp phải. dma_mmap_coherent
testably hoạt động khi sử dụng bộ nhớ kmalloc'd, nhưng khi tôi có một vùng địa chỉ vật lý dự trữ mà tôi muốn sử dụng remap_pfn_range với nó lặng lẽ xuất hiện để làm việc, và dmesg không báo cáo bất kỳ lỗi nào, nhưng khi tôi đọc, không có vấn đề những gì tôi đã viết ở đó nó luôn trả về 0xff byte. Điều này đúng cho dù tôi sử dụng iowrite & ioread trong hạt nhân sau khi ioremap'ing bộ nhớ hoặc cố gắng để viết trong userland bằng cách sử dụng một thử nghiệm mmap'ing userland nhỏ.
Tôi đã thực hiện nhiều nghiên cứu về chủ đề này như tôi có thể nghĩ. Tất cả những gì tôi có thể tìm thấy cho tài liệu của remap_pfn_range là kernel.org page và một số lưu trữ danh sách gửi thư gmain hạt nhân trên remap_pfn_range thay thế remap_page_range. Đối với dma_mmap_coherent, tôi có thể tìm thêm một chút, including a presentation from the linux archives.
Cuối cùng phải có sự khác biệt; dường như có rất nhiều cách khác nhau để ánh xạ bộ nhớ hạt nhân vào vùng đất của người dùng. Câu hỏi cụ thể tôi có là: sự khác biệt giữa dma_mmap_coherent
và remap_pfn_range
là gì?
Chỉnh sửa có thể là tốt đẹp để cung cấp tổng quan chung về cách ánh xạ bộ nhớ hạt nhân vào vùng người dùng nói chung, bao quát cách sử dụng apis khác nhau trong trình quay số mmap trình điều khiển hạt nhân.
Bạn đã bao giờ tìm ra điều này, tức là sử dụng mmap và dma_mmap_coherent cùng nhau? Tôi không thể làm điều đó và tôi đã thực hiện các chức năng đọc và ghi của riêng mình. – user1876942
Vâng, tôi đã sử dụng những chức năng cụ thể đó. Bạn có muốn một ví dụ? Tôi đã tìm kiếm sự khác biệt giữa remap_pfn_range và dma_mmap_coherent đặc biệt để tôi có thể biết được tuyến đường nào đi xuống. –
Nếu bạn có thể đăng một ví dụ về tác phẩm này, điều đó thật tuyệt vời. Tôi đoán rằng mã phía người dùng là tiêu chuẩn và kmod là nơi tôi đang đi sai. – user1876942