Tôi đang làm việc trên trình điều khiển FPGA cho hạt nhân Linux. Mã dường như làm việc tốt trên x86, nhưng trên x86_64 tôi đã có một số vấn đề. Tôi đã triển khai truyền trực tuyến DMA. Vì vậy, nó đi như thếTruyền DMA trong trình điều khiển hạt nhân Linux PCIE
get_user_pages(...);
for (...) {
sg_set_page();
}
pci_map_sg();
Nhưng pci_map_sg
trở địa chỉ như 0xbd285800
, mà không phải là aligned bởi PAGE_SIZE
, vì vậy tôi không thể gửi đầy đủ trang đầu tiên, bởi vì đặc điểm kỹ thuật PCIE nói
"Yêu cầu không được chỉ định một kết hợp Địa chỉ/Độ dài làm cho việc truy cập không gian bộ nhớ vượt qua ranh giới 4 KB. . "
Có cách nào để có được các địa chỉ được liên kết hay không, tôi đã bỏ sót điều gì đó quan trọng?
Bạn có thể bao gồm mã từ nguồn thực của mình không? Không có đủ để phát hiện lỗi. –
Vâng, tất nhiên rồi. Được đính kèm với bài đăng gốc. – soh
@soh: Bất kỳ kế hoạch phát hành nó cho công chúng? Tôi đã nhìn xung quanh cho một người lái xe mở và không thể tìm thấy một người tốt. Là quá lười biếng để viết của riêng tôi, tôi muốn được vui mừng hơn để đóng góp và giúp đỡ với thử nghiệm. –