Những trình điều khiển thiết bị được tích hợp vào kernel?


14

Gần đây tôi đã cài đặt một nhà cung cấp được cung cấp nhúng linux vào một thiết bị phần cứng. Khi tôi chạy lsmodtrên dòng lệnh thiết bị, phản hồi trống rỗng. Tôi đã được tin rằng điều này có nghĩa là các trình điều khiển cho phần cứng chạy trên thiết bị đã được tích hợp vào kernel chứ không phải là tệp .ko. Câu hỏi của tôi là: quá trình này xảy ra như thế nào?

Là hỗ trợ cho phần cứng phổ biến dần dần được tích hợp vào kernel trong các phiên bản tiếp theo, do đó thay thế các tệp .ko? Tệp .ko có được sử dụng đơn giản để hỗ trợ phần cứng mới không hỗ trợ trình điều khiển tích hợp kernel tại thời điểm phát hành không? Trong kiến ​​thức hạn chế của tôi, tôi nghĩ rằng tất cả các trình điều khiển phần cứng đều ở dạng tệp .ko nhưng rõ ràng điều này là sai.

Tôi hơi bối rối bởi toàn bộ quá trình và sẽ biết ơn vì đã làm rõ vì tôi có cảm giác rằng tôi có thể đang nhìn sai tình huống.


Câu trả lời:


10

Các trình điều khiển lõi được coi là quan trọng đối với việc tải kernel thường được tích hợp vào kernel, trong khi các trình điều khiển phần cứng khác, v.v. được xây dựng dưới dạng các mô-đun hoặc tệp .ko .

Các mô-đun .ko thường được lưu trữ dưới /libthư mục trên phân vùng gốc của bạn. Để sử dụng bất kỳ thứ nào trong số này, trước tiên, hạt nhân phải có khả năng phát hiện và truy cập vào thiết bị lưu trữ bên dưới và sau đó truy cập hệ thống tệp của nó. Vì vậy, thật an toàn khi giả định rằng một hạt nhân không có hỗ trợ SATA / SCSI và ext2 / 3/4 được tích hợp thì nó sẽ không thực sự khởi động;)

Bạn có thể chọn chuyển hầu hết các trình điều khiển kernel tích hợp thành dạng mô-đun. Nhóm hạt nhân Ubuntu quyết định có sửa đổi cấu hình mặc định của nhóm nhân Linux hay không và bao gồm / loại trừ các trình điều khiển tích hợp bổ sung cho các hình ảnh hạt nhân bạn tải xuống.

Nếu bạn xây dựng kernel của riêng mình, bạn có thể làm tương tự:

nhập mô tả hình ảnh ở đây

  • Trong ảnh chụp màn hình ở trên, *biểu thị trình điều khiển tích hợp, trong khi Mchỉ ra mô-đun.
  • Hỗ trợ thiết bị Loopback, thường rất cần thiết để khởi động hệ thống, được tích hợp sẵn theo mặc định.
  • Trình điều khiển USB tốc độ thấp (USB 1.0) theo mặc định cũng được tích hợp sẵn để cho phép bạn khởi động một thanh USB, nhưng ở đây tôi đã thay đổi nó thành một mô-đun.

Cảm ơn đã giúp rất nhiều. Tôi đoán rằng tôi sẽ hiểu rõ hơn về điều này khi cuối cùng tôi thực hiện xây dựng kernel từ đầu.
nhà toán

3

Khi biên dịch kernel , bạn có thể cấu hình các thành phần nào được cài đặt. Không chỉ vậy, nhưng bạn có thể chọn xem chúng có được tích hợp vào kernel hay không nếu chúng là một mô-đun .

Ví dụ, nhiều người sử dụng hệ thống tập tin ext2 trên phân vùng / boot của họ . Do đó, kernel phải có khả năng đọc các hệ thống tập tin ext2 khi khởi động. Để thực hiện điều này, mô đun ext2 được tích hợp vào chính kernel.

Bây giờ, hãy tưởng tượng số lượng mô-đun có sẵn. Sẽ không có ý nghĩa gì khi tất cả chúng được tích hợp vào kernel của bạn, phải không? Đây là lý do tại sao bạn có thể xây dựng chúng dưới dạng các mô-đun .ko riêng biệt và tải chúng theo ý muốn.


1
Có đoạn cuối cùng của bạn là những gì thúc đẩy câu hỏi của tôi thành thật. Cảm ơn câu trả lời
nhà toán

1

Những thứ này phụ thuộc vào cách bạn đã cấu hình bản dựng kernel linux của mình.

Trong quá trình biên dịch, bạn thường có thể:

  • biên dịch kernel có hoặc không có hỗ trợ mô-đun (thường đi kèm với hỗ trợ mô-đun)
  • biên dịch trình điều khiển dưới dạng mô-đun hoặc dưới dạng một phần mềm tích hợp ngay vào kernel

để hiểu tệp .ko là gì đối với /programming/10476990/difference-b between-o-and-ko-file

Lý do tại sao bạn có một đầu ra trống lsmodlà vì bạn có một hạt nhân nguyên khối.

Một cách nhanh chóng để liệt kê tất cả các mô-đun của bạn (nếu chúng có mặt) là bằng cách chạy lệnh này

find /lib/modules/*/ -type f -iname '*.ko' | less

Lưu ý việc sử dụng less, bạn có thể sử dụng mọi máy nhắn tin mà bạn muốn hoặc chuyển hướng đầu ra nơi bạn muốn.


Vì vậy, trên một kernel được cấu hình mà không có hỗ trợ mô-đun (như của tôi), tôi sẽ không thể cài đặt bất kỳ trình điều khiển nào ở dạng tệp .ko để sử dụng phần cứng bổ sung?
nhà toán

vâng, về cơ bản, bạn phải biên dịch lại nó từ nguồn, nếu bạn muốn chỉnh sửa và / hoặc thêm trình điều khiển, bạn phải xây dựng lại nó, có thể chỉ cần sử dụng cùng một .configtệp và sửa đổi nó khi bạn cần.
dùng827992

Vì vậy, để làm điều này, tôi sẽ cần lấy nguồn kernel từ nhà cung cấp, tự biên dịch nó với các sửa đổi chính xác cho tệp .config sau đó tôi có thể cài đặt trình điều khiển khác không?
nhà toán

phụ thuộc, nếu anh ta sử dụng hạt nhân vani (không có gì nhiều hơn mã nguồn gốc), bạn vẫn ổn chỉ với .config và bạn có thể sao chép cùng một hạt nhân chỉ với máy tính của mình, tuy nhiên nếu anh ta sử dụng hạt nhân vani + một số bản vá hoặc sửa đổi bạn cần thêm thông tin này, một Makefile tùy chỉnh cũng có thể được coi là một biến có liên quan như bất kỳ sửa đổi nào khác đối với chuỗi công cụ tiêu chuẩn và nói chung cho quy trình xây dựng tiêu chuẩn.
dùng827992

Theo kinh nghiệm của tôi, các mô-đun bị vô hiệu hóa cho Linux nhúng, vì lý do tốc độ và kích thước, và các hạt nhân cho các thiết bị đó thường chứa trình điều khiển ngoài cây và được xây dựng trên PC của một số nhân viên ngẫu nhiên mà không có lợi ích kiểm soát nguồn. Chúc may mắn với điều đó.
Stephen M. Webb

0

Xem nội dung của tệp / lib / mô-đun / $ (uname -r) /modules.builtin

ví dụ: để tìm kiếm một mô-đun cụ thể

grep <module> /lib/modules/$(uname -r)/modules.builtin

Tài liệu / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? Không chắc chắn những gì OP phải làm. Anh ta có nên chạy tuyến đầu tiên trong nhà ga không? Đây có thể là câu trả lời, nhưng bạn vui lòng giải thích một chút?
nặc

0
ls /sys/module

dường như chứa tất cả các mô-đun tích hợp và bên ngoài.

Nhưng nó cũng có vẻ chứa một số mục không thực sự là mô-đun: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules

TODO: đọc nguồn và hiểu chính xác hơn những gì được đặt ở đó.

Ưu điểm của phương pháp này là bạn không dựa vào việc có thể tìm thấy cấu hình kernel bên dưới /boothoặc /proc/config.gz.

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.