2013-06-16 24 views
5

Tôi mới lập trình mô-đun hạt nhân Linux và nhiều hướng dẫn bắt đầu về chủ đề bao gồm ít thông tin về cách xây dựng mô-đun hạt nhân sẽ chạy trên nhiều phiên bản và nền tảng CPU của Linux. Hầu hết các hướng dẫn tôi đã nhìn thấy chỉ đơn giản là nhà nước những thứ như, "Linux không đảm bảo bất kỳ ABI/API tương thích giữa các phiên bản." Tuy nhiên, các hệ điều hành khác cung cấp các đảm bảo này cho các phiên bản chính và các hướng dẫn chủ yếu nhắm mục tiêu 2.7 (hiện đã cũ một chút). Tôi đã tự hỏi nếu có bất kỳ loại ABI/API tương thích ngay bây giờ, hoặc nếu có bất kỳ cách tiêu chuẩn để đối phó với phiên bản khác hơn là cô lập các hạt nhân phụ thuộc vào bit của tôi vào các tập tin với một tấn chỉ thị tiền xử lý. (Ngoài ra, có bất kỳ biểu tượng tiền xử lý chuẩn nào tôi nên sử dụng trong trường hợp thứ hai không?)cách viết mô-đun hạt nhân Linux phiên bản chéo/nền tảng?

+1

Trong số những thứ khác, macro 'LINUX_VERSION_CODE' và' KERNEL_VERSION (lớn, nhỏ, vi mô) thường được sử dụng trong mã như vậy để kiểm tra phiên bản hạt nhân. Như thế này, ví dụ: '#if LINUX_VERSION_CODE Eugene

+2

Bạn cũng có thể xem xét một ví dụ đáng chú ý về các mô-đun hạt nhân hiện không nằm trong hạt nhân ở phía trên: VirtualBox Guest Additions . Xem, ví dụ, việc thực hiện 'sf_lookup()' trong [dirops.c] (https://www.virtualbox.org/browser/vbox/trunk/src/VBox/Additions/linux/sharedfolders/dirops.c) .Nó có lẽ không phải là một cách lý tưởng để xử lý các hạt nhân thay đổi API nhưng vẫn có thể cung cấp cho bạn một số gợi ý. – Eugene

Trả lời

4

Linux, yingyang. Tangrs câu trả lời là tốt; nó trả lời câu hỏi của bạn. Tuy nhiên, có linux compat dự án. Xem số backports wiki. Về cơ bản, có các thư viện cung cấp chức năng shim cho các ABI Linux mới hơn mà bạn có thể sử dụng để liên kết mã của mình. Các KERNEL_VERSION macro Eugene ghi chú được kiểm tra trong một compat.h, và phù hợp compat-2.6.38.h, vv có nơi mỗi phiên bản có một trong hai macro và/hoặc các chức năng thư viện để cung cấp một API mong.

Điều này cho phép nhóm Wifi trên Linux viết mã cho hạt nhân cạnh chảy máu, trong khi vẫn có thể biên dịch trên phiên bản hạt nhân cũ hơn.

Tôi đoán đây trả lời câu hỏi,

nếu có bất kỳ cách tiêu chuẩn để đối phó với phiên bản?

Thư viện compat không phải là thuốc chữa bách bệnh, nhưng ít nhất nó ở đó và đang được phát triển.

Nguồn mở - Có nhiều đột biến. Tất cả họ đều có một kế hoạch khác.

+0

Aha! Tôi nghi ngờ chìa khóa duy nhất để thành công của Linux không phải là thực tế là nó không có khả năng tương thích ABI trên các phiên bản ... :) – Dan

9

Không có ABI ổn định cho hạt nhân và rất có thể sẽ không bao giờ là because it'd make Linux suck. Những lý do không có một là tất cả các tài liệu khá nhiều trong liên kết đó.

Cách tốt nhất để giải quyết vấn đề này là làm cho trình điều khiển của bạn được hợp nhất ngược dòng nơi nó sẽ được các nhà phát triển hạt nhân khác duy trì.

Để trở thành nền tảng đa nền tảng, điều này hoàn toàn miễn phí với hạt nhân Linux miễn là bạn chỉ sử dụng các chức năng chuẩn, nền tảng độc lập được cung cấp trong API.

+1

@Dan, tôi đồng ý với tangrs. Một điều tôi muốn thêm là việc có một trình điều khiển được hợp nhất với hạt nhân ngược dòng có thể mất một lúc. Cho đến lúc đó, tôi nên gắn bó với các API mà nhiều mô-đun hạt nhân ngược dòng sử dụng. Thậm chí là các API này thay đổi trong phiên bản hạt nhân mới, bạn sẽ có thể xem xét các mô-đun hạt nhân này và thực hiện các thay đổi tương tự cho các mô-đun của riêng bạn để thích nghi với các API mới. Bạn có thể xem [Tham chiếu chéo Linux] (http://lxr.free-electrons.com/ident) để tìm mô-đun nào đang sử dụng các chức năng bạn định sử dụng. – Eugene

Các vấn đề liên quan