/ Proc / sys vs / sys / mô-đun / mod / tham số


10

Tôi đã tự hỏi trong vài ngày qua nó hoạt động chính xác như thế nào. Chúng ta có thể đặt tham số thời gian chạy của kernel bằng sysctl hoặc echo boolen 1> /proc/sys/module/exactParameternhưng /sys/modules/module/parameters/parameterchúng ta cũng có thể đặt giá trị.

Các tham số cho các mô-đun /proc/sys/chỉ liên quan đến cứng được tuân thủ trong kernel? hoặc có thể có các tham số cho các Mô-đun hạt nhân có thể tải được không?

LKM sau khi được tải vào Kernel đang chạy sẽ tiết lộ các tham số của chúng /sys/modules/module/paraeter/params. Có nghĩa là, không có tham số cho các mô-đun được biên dịch thành Kernel?

Sự khác biệt giữa cả hai thư mục là gì.

Câu trả lời:


5

Có rất ít mối quan hệ giữa /proc/sys/sysngoài thực tế là cả hai đều là giao diện kernel và sự trùng hợp về tên.

/proc/syslà một giao diện cho sysctl , là các tham số cấu hình kernel. Đọc hoặc sửa đổi /proc/sys/foo/bartương đương với nhận hoặc thiết lập foo.barsysctl. Các giá trị Sysctl được sắp xếp theo các loại ngữ nghĩa, về bản chất chúng không liên quan đến cấu trúc của kernel. Nhiều giá trị sysctl là các cài đặt có trên mọi hệ thống Linux bất kể trình điều khiển hoặc tính năng nào được biên dịch; một số có liên quan đến các tính năng tùy chọn (ví dụ: các giao thức mạng nhất định) nhưng không bao giờ với các thiết bị phần cứng cụ thể.

/sys/modulelà, như tên gọi, một giao diện cho các mô-đun hạt nhân. Mỗi thư mục tương ứng với một mô-đun hạt nhân. Bạn có thể đọc và đôi khi sửa đổi các tham số của mô-đun foobằng cách ghi vào /sys/module/foo/parameters/*.

Các thành phần được tải trong kernel đọc các tham số của chúng từ dòng lệnh kernel. Các tham số này không thể được đặt trong thời gian chạy (ít nhất là không thông qua giao diện được tạo tự động như /sys/module: thành phần có thể hiển thị giao diện tùy chỉnh cho việc này).


Vì vậy, đối với các mô-đun được biên dịch vào Kernel, tôi chỉ có thể thêm các tham số thông qua dòng lệnh kernel (như: / Proc / cmdline). Không có cách nào khác để thay đổi chúng trong thời gian chạy? Tôi có hiểu đúng không? Vậy chính xác những thông số kernel (cấu hình) này là gì? Tôi nghĩ rằng chúng là các tham số có thể thay đổi của một số mô-đun được biên dịch thành Kernel
ast

@ast Các tham số sysctl được ghi lại trong Documentation/sysctl/*.txttài liệu nhân Linux. Đó là một tập hợp các tham số chủ yếu áp dụng bất kể các tính năng và trình điều khiển nào được biên dịch vào một kernel cụ thể.
Gilles 'SO- ngừng trở nên xấu xa'

cảm ơn rất nhiều, tôi đã cố gắng hiểu đầy đủ mối quan hệ này và dành 3 ngày để đọc rất nhiều thứ để tìm câu trả lời.
ast

3

Bài báo " Hệ thống tập tin sysfs " của Patrick Mochel sẽ cho bạn cái nhìn tổng quan hơn nhiều về mục đích và lịch sử của /sysnó sẽ phù hợp với hộp này. Trích dẫn tóm tắt:

sysfs là một tính năng của hạt nhân Linux 2.6, cho phép mã hạt nhân xuất thông tin đến các tiến trình của người dùng thông qua một hệ thống trong bộ nhớ. Việc tổ chức hệ thống phân cấp thư mục fi lesystem rất nghiêm ngặt và dựa trên tổ chức bên trong của các cấu trúc dữ liệu kernel. Fi les được tạo trong fi lesystem là (hầu hết) ASCII fi les với (thường) một giá trị trên mỗi fi le. Các tính năng này đảm bảo rằng thông tin được xuất là chính xác và dễ dàng truy cập, làm cho sysfs trở thành một trong những tính năng trực quan và hữu ích nhất của kernel 2.6.

Để trả lời cho câu hỏi cụ thể của bạn "Mô-đun hạt nhân có thể tải có được đại diện trong /syskhông?" câu trả lời là "có, nếu tác giả của mô-đun cung cấp giao diện". Điều này có thể dễ dàng chứng minh bằng cách hiển thị có bao nhiêu mô-đun được tải có các mục tương ứng trong/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211
…

mà trên hệ thống của tôi cho thấy 73 trong số 73 mô-đun có thể tải có một mục tương ứng /sys/module.


Tôi đã tìm thấy thông tin đặc biệt là về / sys / mô-đun /, rằng luôn có mỗi LKM và module_param (tên, loại, perm) tác động đến sự xuất hiện của các tham số thư mục. Nhưng tôi vẫn còn thắc mắc về sysctl và / Proc / sys, nơi chúng ta có thể đặt Tham số thời gian chạy hạt nhân. Tại sao không thể sử dụng / sys / mô-đun? Và nơi chúng tôi đặt tham số cho các mô-đun được biên dịch Kernel (/ sys / mô-đun / hoặc trong / Proc / sys / quá)? Có thể tôi trộn các tùy chọn kernel với các tham số mô-đun (tôi nghĩ rằng chúng giống nhau) vì vậy sử dụng sysctl tôi nên đặt tham số mô-đun hoặc một số chức năng kernel
ast
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.