Tôi đã viết một trình điều khiển linux rằng ioremaps xuất PCI BAR0 cho một thiết bị cụ thể thành thuộc tính nhị phân sysfs cho phép userspace kiểm soát trực tiếp nó.Làm cách nào để ngăn chặn MMAP lưu vào bộ nhớ đệm?
Sự cố xảy ra khi tôi cố gắng MMAP trên đầu thuộc tính để truy cập trực tiếp vào bộ nhớ đó (từ chương trình người dùng). Đọc thành công tốt và trả về giá trị mong đợi, mặc dù khi tôi ghi vào bộ nhớ đó, nó dường như được lưu trữ ở đâu đó giữa hạt nhân và bộ nhớ và không được gửi tới tổ hợp gốc GMCH (và do đó là thiết bị). Những gì tôi muốn làm là có một rào cản bộ nhớ ngầm ẩn sau mỗi lần truy cập.
- Có cách nào để ngăn hạt nhân lưu vào bộ nhớ đệm ghi vào bit bộ nhớ mmap-ed không?
Follow up:
- Được gọi msync() sau mỗi lần truy cập vào "chấp nhận" cách để làm điều này?
Để trả lời câu hỏi tiếp theo ... bạn không cần 'msync()' ở đây vì không có tệp sao lưu mmap. Những gì bạn có thể cần mặc dù là một số hướng dẫn cụ thể về kiến trúc cho nhiều thứ khác nhau ... ví dụ để đảm bảo thứ tự truy cập phần cứng đúng trên powerpc bạn có thể cần [eieio] (https://www-01.ibm.com/support/knowledgecenter /ssw_aix_61/com.ibm.aix.alangref/idalangref_eieio_instrs.htm) hướng dẫn (ai đó có một cảm giác hài hước :-) ... cùng một bình luận được thực hiện [ở đây] (https://unix.stackexchange.com/questions/237783/ truy cập-bộ nhớ-ánh xạ-io-là-chậm). –