Cây nguồn chứa gì? Điều này có liên quan đến tiêu đề kernel Linux không?


25

Trong cuốn sách, tôi thường đọc tài liệu tham khảo để các nguồn Linux Tree tại /usr/src/linuxvới các thiết lập thông thường của thư mục con ( arch, block, crypto, ...).

Tôi đã mong cây này chứa các tệp nhị phân tạo thành kernel. Trong hệ thống của tôi (Ubuntu 10.04) ...

  1. đối với các hạt nhân khác nhau mà tôi có (sử dụng tải xuống phần mềm tự động, không được cài đặt thủ công), tôi tìm thấy ở vị trí này thay vì hai thư mục con cho mỗi hạt nhân như sau:

    /usr/src/linux-headers-2.6.32-22
    /usr/src/linux-headers-2.6.32-22-generic
    
  2. Trong các thư mục con tôi mong đợi các tệp nhị phân, trong số những người khác. Tuy nhiên, tôi đã kiểm tra một lượng cây khá lớn và thư mục con cuối cùng ở đây dường như luôn có một Makefile(khi đọc nó, nó nghe có vẻ giống như một tệp cấu hình sau đó là tệp cài đặt), đôi khi một vài tệp khác bị cô lập (chủ yếu Kconfig).

Câu hỏi của tôi có thể ngây thơ, nhưng tôi hơi bối rối. Là (2) những gì tôi sẽ thấy trong Cây nguồn hạt nhân; và tại sao tôi có tài liệu tham khảo rõ ràng về 'tiêu đề'? Tôi cần cài đặt lại linux-generic-headersmột lúc cho một số phần mềm khác và không chắc chắn liệu điều này có liên quan hay không. Tôi nhận ra có lý do chính đáng cho các tệp tạo tệp (ví dụ: để cài đặt các mô-đun trong thư mục con / trình điều khiển), nhưng (khá nhiều) chỉ tạo tệp thực hiện?

Câu trả lời:


30

Các kernel-headergói phân phối chứa, như tên của chúng ngụ ý, chỉ các tệp tiêu đề kernel (cộng với hệ thống ống nước cần thiết) được yêu cầu để xây dựng phần mềm như các mô-đun hạt nhân.

Bạn không nên mong đợi tìm thấy tất cả các tệp nhị phân trong thư mục nguồn kernel , ngoại trừ đầu ra bản dựng. (Nếu bạn cấu hình và xây dựng một kernel mình, thư mục mã nguồn kernel cũng sẽ chứa các đối tượng biên soạn, mô-đun, hạt nhân xây dựng chính nó và một vài bit nhị phân khác và mảnh mà làm cho nó làm việc.)
KConfigFile là một mô tả về các tùy chọn cấu hình kernel (và phụ thuộc của chúng) có sẵn cho một thư mục / mô-đun nhất định.
Ngoài ra, đó là tất cả (hầu hết) mã nguồn C, tệp tiêu đề và Makefiles. Có một vài tập lệnh trợ giúp ở đây và ở đó, và nguồn lắp ráp cũng vậy.

Các gói tiêu đề (những gì bạn đã cài đặt) chỉ chứa phần tiêu đề ở trên (và không phải tất cả các tiêu đề đó - chỉ các tiêu đề "đã xuất") và một số cơ sở hạ tầng xây dựng. Vì vậy, những gì bạn đang thấy được mong đợi. Các gói tiêu đề không chứa mã nguồn C (ngoại trừ một số sơ khai và xây dựng mã cơ sở hạ tầng). Toàn bộ mục đích của loại gói này là để tiết kiệm không gian (và băng thông) - toàn bộ cây nguồn Linux khá lớn và hoàn toàn không cần thiết nếu bạn không có ý định tự biên dịch kernel. Các gói tiêu đề được xây dựng và vận chuyển bởi các bản phân phối để cung cấp đúng thứ cần thiết để xây dựng các mô-đun, nhưng không còn nữa. (Chúng chắc chắn không chứa kernel đã biên dịch.)

Giải quyết bình luận của bạn: các gói tiêu đề không di dời bất cứ nơi nào. Chúng được xây dựng cho các phiên bản cụ thể của kernel, được đóng gói trong một thư mục cụ thể và đó là điều đó. Nó chỉ là một tập hợp các tập tin. (Lưu ý rằng các gói tiêu đề không nhất thiết phải có cùng phiên bản với các gói nhị phân hạt nhân ổn định hiện tại - các gói tiêu đề là chung chung và có thể tụt hậu so với hạt nhân thực tế mà bạn đang chạy. Tuy nhiên, chúng không nên từ hạt nhân phiên bản gần đây hơn kernel đã cài đặt (hoặc đích) hiện tại.)

Các tệp nhị phân đã cài đặt thường được cài đặt trong /bootthư mục, cùng với các tệp nhị phân bootloader và các tệp cấu hình. (Đây đôi khi là một hệ thống tệp độc lập, không được gắn theo mặc định.) Tên chính xác của các tệp phụ thuộc vào kernel và phân phối. (Bộ tải khởi động cũng vậy.)

Các mô-đun hạt nhân được cài đặt nằm trong các thư mục con của:

/lib/modules/`uname -r`/

Vì vậy, ví dụ trên hệ thống của tôi, họ hiện đang ở

/lib/modules/3.1.4-gentoo/

Mã nguồn đầy đủ của kernel : Trên Ubuntu, nếu bạn muốn các nguồn kernel đầy đủ tự xây dựng kernel, bạn nên cài đặt theo hướng dẫn tại đây .

Bạn cũng có thể tải xuống một tarball nguồn từ kernel.orgvà giải nén nó ở đâu đó ( không ghi đè lên các tệp được cài đặt Ubuntu nếu bạn sử dụng tarball này, giữ riêng nội dung cá nhân của bạn và các nội dung được quản lý bởi RPM riêng biệt).

/usr/src/linuxlà một nơi truyền thống để đặt các nguồn kernel, nhưng không có gì ngăn cản bạn đặt các nguồn kernel ở nơi khác. Đường dẫn này cũng thường chỉ là một liên kết tượng trưng đến một thư mục. ví dụ: tôi có cái này trên máy của tôi:

 $ ls -l /usr/src/linux
lrwxrwxrwx 1 root root 18 Dec  7 17:03 /usr/src/linux -> linux-3.1.4-gentoo

Symlink có mặt để đơn giản hóa việc xây dựng các ứng dụng phụ thuộc vào nguồn kernel. Bạn liên kết đường dẫn đó với hạt nhân đang chạy (hoặc đích) của mình để bạn không phải chỉ định thông tin chính xác về phiên bản hoặc đường dẫn khi bạn xây dựng mô-đun ngoài cây. Giúp một bó cho các bản phân phối dựa trên nguồn ít nhất.


Cảm ơn bạn rất nhiều vì câu trả lời chi tiết và khá đầy đủ này. Điều này đã được tôi làm phiền trong một thời gian. Nếu tôi không quá mức chào đón và nếu bạn tìm thấy thời gian, tôi có thể vui lòng thêm, theo dõi: (a) Tôi đã đọc phần trên đó trong trường hợp của tôi (không phải kernel tự cài đặt), một số (một) của phụ thư mục nên (có thể) chứa mã nguồn C và Trình biên dịch mã. Nơi đó sẽ không - không phải là một danh sách đầy đủ, chỉ khi tôi duyệt khoảng 20 - 30 thư mục con, tôi chưa bao giờ bắt gặp một danh sách? Tôi đã tải xuống các tệp nguồn kernel từ kernel.org; Tôi chỉ có nghĩa là để hiểu hệ thống của tôi tốt hơn. (b) ...
gnometorule

... Vì vậy, (nói chung) các nhị phân kernel nằm ở đâu khi bạn không tự cài đặt kernel, như trong trường hợp của tôi? (c) Bạn tham khảo "các gói tiêu đề" mà tôi đã lấy là 'tiêu đề chung chung linux'. Là cây tôi nhìn thấy từ những gói đó? Nếu có, họ có di dời bất cứ nơi nào cây nguồn trước khi cài đặt chúng không? Rất cám ơn một lần nữa.
gnometorule

(nếu bạn trả lời, hãy sử dụng 'answer'not comment để tôi ít nhất có thể nâng cấp bạn một lần nữa vì sự giúp đỡ của bạn)
gnometorule

Mở rộng ra một chút. Gói tiêu đề dành cho tiêu đề. Gói nguồn đầy đủ cung cấp mã nguồn đầy đủ. Gói nhị phân chỉ cung cấp nhị phân.
Mat

5
linux-sourcechứa nguồn ngược dòng, apt-get source linux-image-$(uname -r)lấy nguồn cho kernel bằng các bản vá của Ubuntu.
Lekensteyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.