Thay đổi tham số kernel khi chạy


10

Trong khi cố gắng khắc phục một lỗi phần cứng tối nghĩa, có ý kiến ​​cho rằng việc thêm một vài tham số vào kernel có thể giải quyết vấn đề.

Tất nhiên tôi có thể làm điều đó, nhưng tôi đã tự hỏi liệu tôi có thể thực hiện những thay đổi này cho một kernel đang chạy hay không. Cụ thể, tôi biết điều đó procfssysfscung cấp một cách để thay đổi kernel đang chạy, nhưng tôi không chắc cách ánh xạ tên tham số kernel vào đường dẫn tệp. (Tôi cũng cho rằng không phải tất cả các cài đặt đều có thể thay đổi khi chạy và các tham số cụ thể này có thể không được định cấu hình khi hệ thống được khởi động.)

Các thông số cụ thể tôi quan tâm là

i8042.nomux=1 i8042.reset

Tôi đặc biệt không chắc chắn liệu có thể ban hành lệnh đặt lại trên hệ thống đang chạy hay không.

Nếu các tham số này có thể điều chỉnh được trong thời gian chạy, tôi sẽ tìm thấy chúng ở đâu?

Câu trả lời:


16

Có ba loại điều có thể được gọi là tham số kernel.

Các tham số kernel lõi là các tùy chọn được truyền trên dòng lệnh kernel. Chúng chỉ có thể được thông qua tại thời điểm khởi động. Chúng được ghi lại trong kernel-parameters.txt(tệp này cũng liệt kê các tham số mô-đun; tham số kernel lõi là các tham số không có a .). Một số tham số này chỉ quan trọng khi khởi động (ví dụ root). Đối với những cái được sử dụng trong suốt vòng đời của hệ thống, có thể có hoặc không có cơ chế thay đổi chúng khi chạy, không có quy tắc chung.

Các tham số mô-đun giống như các tham số kernel, nhưng chúng chỉ định một thành phần cụ thể của kernel, thường là một trình điều khiển cụ thể. Mặc dù tên, các tham số này áp dụng cho dù trình điều khiển tương ứng được biên dịch trực tiếp trong kernel hoặc dưới dạng một mô-đun. Khi thành phần được bao gồm trong hình ảnh hạt nhân chính, bạn cần truyền COMPONENT_NAME.PARAMETER_NAME=VALUEvào dòng lệnh kernel. Khi thành phần được tải dưới dạng một mô-đun, bạn cần chuyển PARAMETER_NAME=VALUEđến insmod.

Một số tham số mô-đun được hiển thị thông qua sysfs . Thư mục /sys/module/MODULE_NAME/parameterschứa một tệp cho mỗi tham số; đọc tệp đó cung cấp cho bạn giá trị hiện tại của tham số. Ghi vào tập tin đó đặt tham số, nếu nó có thể được sửa đổi; hầu hết các tham số không thể được sửa đổi (và do đó, tệp chỉ đọc). Thư /sys/module/kernel/parametersmục liệt kê một số tham số kernel lõi.

Các tham số mô-đun được ghi lại một cách ngớ ngẩn; một số trong số chúng được liệt kê trong kernel-parameters.txtvà tệp chứa các tham chiếu cho một số mô-đun. Nếu bạn không thể tìm thấy tài liệu, tìm kiếm nguồn . Thông số mô-đun được khai báo bởi các module_paramvĩ mô hoặc một trong những bạn đồng hành của nó module_param_named, module_param_cbvv Tham số cuối cùng của các macro xác định cho phép tập tin (ví dụ 0600hay S_IRUSR | S_IWUSRsẽ rw-------tức là có thể đọc được và ghi bởi root và không thể tiếp cận bởi bất cứ ai khác). Khi quyền là 0, mục trong sysfs hoàn toàn không xuất hiện.

i8042.nomuxi8042.resetlà các thông số của i8042trình điều khiển . Nhìn vào mã nguồn, cả hai đều có quyền 0, vì vậy hai tham số này không thể sửa đổi hoặc thậm chí có thể truy vấn được trong thời gian chạy. Bạn chỉ có thể đặt tham số khi trình điều khiển được khởi động. Nếu trình điều khiển được biên dịch dưới dạng một mô-đun, thì việc dỡ bỏ mô-đun và tải lại nó cho phép bạn cung cấp các tham số khác nhau khi bạn tải lại nó. Nếu trình điều khiển trực tiếp trong kernel hoặc nếu cấu hình hệ thống của bạn khiến cho việc dỡ bỏ mô-đun một cách hiệu quả, bạn cần phải khởi động lại.

Cuối cùng, một loại tham số khác trong kernel là sysctl . Các cài đặt này có thể được xem và thay đổi bằng sysctllệnh hoặc thông qua /proc/sys. Tôi nghĩ rằng sự tách biệt giữa các tham số sysctl và kernel chủ yếu là lịch sử; Các cài đặt liên quan đến phần cứng là các tham số kernel truyền thống trong khi các cài đặt liên quan đến phần mềm là sysctl theo truyền thống nhưng đôi khi sự khác biệt có thể bị mờ.


Tôi đã xem qua /sys/module/i8042/parameters, nhưng tập tin duy nhất hiện tại là debug.
Toán học,

2
@MathologistsOrchid ơi, đúng rồi. Tôi đã sửa câu trả lời của mình, tôi không biết tại sao tôi tin 0 chỉ có nghĩa là chỉ đọc. 0 thực sự có nghĩa là không có mục, đó là những gì bạn đang quan sát. Kết luận áp dụng là như nhau, tham số chỉ có thể được đặt khi trình điều khiển được tải.
Gilles 'SO- ngừng trở nên xấu xa'

2

Tôi nghĩ rằng danh sách các tham số có thể thay đổi trong thời gian chạy có thể được tìm thấy bằng lệnh "sudo sysctl -a". Tôi không thấy i8042.nomux trong hệ thống của mình. Không chắc chắn lý do tại sao. Có thể bạn có thể kiểm tra nó trong của bạn, nếu bạn thấy tham số thì bạn có thể sửa đổi thời gian chạy.


Tôi cũng không thấy nó trong danh sách - điều đó có nghĩa là nó không thể thay đổi một cách linh hoạt. (Ai thực sự cần phải cấu hình lại PS / 2 sau khi hệ thống đã được khởi động?) Nhưng điều đó trả lời câu hỏi của tôi, cảm ơn!
Toán học,

Nó phức tạp hơn: có một số loại tham số. Các cài đặt sysctl thực tế không phải là các tham số kernel, theo nghĩa của Linux (mặc dù chúng là các tham số của kernel. Câu hỏi này là về các tham số trình điều khiển, là các tham số kernel (cụ thể là các tham số mô-đun). Xem câu trả lời của tôi để biết chi tiết.
Gilles ' SO- đừng trở nên xấu xa '
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.