2009-05-06 29 views
5

Sau khi nâng cấp hạt nhân Linux, máy chủ VMWare của tôi không thể bắt đầu cho đến khi sử dụng vmware-config.pl để thực hiện một số công việc tái cấu hình (bao gồm xây dựng một số mô-đun hạt nhân).Tại sao tôi cần phải biên dịch lại mô-đun hạt nhân vmware sau khi nâng cấp hạt nhân Linux?

Nếu tôi cập nhật cửa sổ VMWare lưu trữ với Windows Service Pack mới nhất, tôi thường không cần phải làm bất cứ điều gì để chạy VMWare.

Tại sao VMWare hoạt động khác nhau giữa Linux và Windows? Hành động biên dịch lại này có mang lại lợi ích nào cho nền tảng Linux trên Windows không?

Trả lời

12

Đọc đọc The Linux Kernel Driver Interface.

Điều này được viết để giải thích tại sao Linux không có giao diện hạt nhân nhị phân, cũng không có giao diện hạt nhân ổn định. Xin lưu ý rằng bài viết này mô tả các giao diện _in kernel_, không phải hạt nhân cho các giao diện không gian người dùng. Giao diện kernel đến không gian người dùng là giao diện người dùng sử dụng, giao diện syscall. Giao diện đó là _very_ ổn định theo thời gian và sẽ không bị ngắt. Tôi có các chương trình cũ được xây dựng trên hạt nhân trước 0.9something mà vẫn hoạt động tốt trên bản phát hành kernel 2.6 mới nhất. Giao diện này là giao diện mà người dùng và người lập trình ứng dụng có thể tin cậy vào việc ổn định.

Nó phản ánh quan điểm của phần lớn các nhà phát triển hạt nhân Linux: sự tự do để thay đổi chi tiết và API thực hiện trong kernel bất cứ lúc nào cho phép họ phát triển nhanh hơn và tốt hơn nhiều.

Nếu không có hứa hẹn giữ giao diện hạt nhân giống hệt với bản phát hành, không có cách nào cho mô-đun hạt nhân nhị phân như VMWare hoạt động đáng tin cậy trên nhiều hạt nhân. Ví dụ, nếu một số cấu trúc thay đổi trên bản phát hành hạt nhân mới (cho hiệu năng tốt hơn hoặc nhiều tính năng hơn hoặc bất kỳ lý do nào khác), mô-đun VMWare nhị phân có thể gây ra thiệt hại nghiêm trọng khi sử dụng bố cục cấu trúc cũ. Việc biên dịch lại mô-đun từ nguồn sẽ nắm bắt bố cục cấu trúc mới, và do đó có cơ hội làm việc tốt hơn - mặc dù vẫn không phải 100%, trong trường hợp các trường đã bị xóa hoặc đổi tên hoặc cho các mục đích khác nhau.

Nếu một hàm thay đổi danh sách đối số của nó hoặc được đổi tên hoặc làm cách khác không còn khả dụng, thậm chí không biên dịch lại từ cùng một mã nguồn sẽ hoạt động. Module sẽ phải thích nghi với hạt nhân mới. Vì mọi người (nên) có nguồn và (có thể tìm thấy ai đó) có thể sửa đổi nó để phù hợp."Đẩy công việc tới các nút kết thúc" là một ý tưởng chung trong cả phần mềm mạng và phần mềm tự do: vì các tài nguyên [ở rìa]/[của các nhà phát triển bên ngoài hạt nhân Linux] lớn hơn các tài nguyên giới hạn [của xương sống]/[của các nhà phát triển Linux], thương mại-off để làm cho cựu làm nhiều hơn của công việc được chấp nhận.

Mặt khác, Microsoft đã đưa ra quyết định rằng họ phải duy trì khả năng tương thích trình điều khiển nhị phân càng nhiều càng tốt - họ không có sự lựa chọn, vì họ đang chơi trong một thế giới độc quyền. Theo một cách nào đó, điều này giúp các nhà phát triển bên ngoài dễ dàng không còn phải đối mặt với mục tiêu di động nữa và đối với người dùng cuối không bao giờ phải thay đổi bất kỳ thứ gì. Mặt khác, điều này buộc Microsoft phải duy trì tính tương thích ngược, đó là (tốt nhất) tốn thời gian cho các nhà phát triển của Microsoft và (tồi tệ nhất) là không hiệu quả, gây ra lỗi, và ngăn chặn tiến bộ về phía trước.

2

Linux không có hạt nhân ABI ổn định - những thứ như bố cục bên trong của cấu trúc, vv thay đổi từ phiên bản sang phiên bản. VMWare cần phải được xây dựng lại để sử dụng ABI trong hạt nhân mới.

Mặt khác, Windows có ABI hạt nhân rất ổn định không thay đổi từ gói dịch vụ sang gói dịch vụ.

1

Để thêm vào câu trả lời của bdonlan, khả năng tương thích ABI là một túi hỗn hợp. Một mặt, nó cho phép bạn phân phối các mô-đun nhị phân và trình điều khiển sẽ làm việc với các phiên bản mới hơn của hạt nhân. Mặt khác, nó buộc các lập trình viên hạt nhân phải thêm rất nhiều mã keo để giữ lại khả năng tương thích ngược. Bởi vì Linux là nguồn mở, và bởi vì kernel developers even whether they're even allowed, khả năng phân phối các mô-đun nhị phân không được coi là quan trọng. Ngược lại, các nhà phát triển hạt nhân Linux không phải lo lắng về khả năng tương thích của ABI khi thay đổi cấu trúc dữ liệu để cải thiện hạt nhân. Về lâu dài, điều này dẫn đến mã hạt nhân sạch hơn.

1

Đó là hệ quả của Linux và Windows đang được phát triển trong các môi trường và kỳ vọng văn hóa khác nhau: http://www.joelonsoftware.com/articles/Biculturalism.html. Tóm lại: Windows được thiết kế phù hợp với người dùng, trong khi Linux phát triển để phù hợp với các nhà phát triển mã nguồn mở.

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