/ proc / sys vs / sys / modules / mod / พารามิเตอร์


10

ฉันสงสัยว่าสองสามวันที่ผ่านมามันทำงานอย่างไร เราสามารถตั้งค่าพารามิเตอร์รันไทม์ของเคอร์เนลโดยใช้ sysctl หรือecho boolen 1> /proc/sys/module/exactParameterแต่ใน/sys/modules/module/parameters/parameterเรายังสามารถตั้งค่า

พารามิเตอร์สำหรับโมดูล/proc/sys/เกี่ยวข้องกับฮาร์ดไดรฟ์ที่เข้ากับเคอร์เนลหรือไม่? หรืออาจมีพารามิเตอร์สำหรับโมดูลเคอร์เนลที่ใส่ได้ด้วย

LKM หลังจากที่โหลดเข้าสู่การทำงานเคอร์เนลเปิดเผยพารามิเตอร์ของพวกเขา/sys/modules/module/paraeter/paramsมา หมายความว่าไม่มีพารามิเตอร์สำหรับโมดูลที่คอมไพล์ลงในเคอร์เนลใช่หรือไม่

ความแตกต่างระหว่างทั้งสองไดเรกทอรีคืออะไร

คำตอบ:


5

มีความสัมพันธ์เล็กน้อยระหว่าง/proc/sysและ/sysอื่น ๆ นอกเหนือจากข้อเท็จจริงที่ว่าทั้งสองเป็นอินเตอร์เฟสเคอร์เนลและชื่อบังเอิญ

/proc/sysเป็นอินเตอร์เฟสไปยังsysctlซึ่งเป็นพารามิเตอร์การกำหนดค่าเคอร์เนล การอ่านหรือการแก้ไข/proc/sys/foo/barนั้นเทียบเท่ากับการรับหรือตั้งค่าfoo.barsysctl ค่า Sysctl ถูกจัดระเบียบตามหมวดหมู่ความหมายซึ่งไม่เกี่ยวข้องกับโครงสร้างของเคอร์เนล ค่า sysctl จำนวนมากเป็นการตั้งค่าที่มีอยู่ในระบบ Linux ทุกระบบโดยไม่คำนึงถึงไดรเวอร์หรือฟีเจอร์ที่รวบรวม บางอย่างเกี่ยวข้องกับคุณสมบัติเสริม (เช่นโปรโตคอลเครือข่ายบางอย่าง) แต่ไม่เคยใช้กับอุปกรณ์ฮาร์ดแวร์ที่เฉพาะเจาะจง

/sys/moduleคือตามชื่อบ่งชี้อินเตอร์เฟสไปยังโมดูลเคอร์เนล แต่ละไดเรกทอรีสอดคล้องกับหนึ่งโมดูลเคอร์เนล คุณสามารถอ่านและบางครั้งการปรับเปลี่ยนพารามิเตอร์ของโมดูลโดยการเขียนfoo/sys/module/foo/parameters/*

คอมโพเนนต์ที่โหลดในเคอร์เนลอ่านพารามิเตอร์ได้จากบรรทัดคำสั่งเคอร์เนล ไม่สามารถตั้งค่าพารามิเตอร์เหล่านี้ที่รันไทม์ (อย่างน้อยไม่ผ่านอินเทอร์เฟซที่สร้างขึ้นโดยอัตโนมัติเช่น/sys/module: ส่วนประกอบสามารถเปิดเผยอินเตอร์เฟสแบบกำหนดเองสำหรับสิ่งนี้)


ดังนั้นสำหรับโมดูลที่คอมไพล์ลงในเคอร์เนลฉันสามารถเพิ่มพารามิเตอร์ผ่านทางบรรทัดคำสั่งเคอร์เนลเท่านั้น (เช่น: / proc / cmdline) ไม่มีวิธีอื่นในการเปลี่ยนแปลงที่รันไทม์? ฉันเข้าใจถูกมั้ย ดังนั้นพารามิเตอร์เคอร์เนล (การกำหนดค่า) เหล่านี้คืออะไร? ผมคิดว่าพวกเขาเป็นพารามิเตอร์ changable ของโมดูลบางเรียบเรียงเคอร์เนล
AST

@ast พารามิเตอร์ sysctl ได้รับการบันทึกไว้Documentation/sysctl/*.txtในเอกสารเคอร์เนล Linux เป็นชุดของพารามิเตอร์ที่ใช้เป็นส่วนใหญ่โดยไม่คำนึงถึงคุณสมบัติและไดรเวอร์ที่จะรวบรวมเป็นเคอร์เนลที่เฉพาะเจาะจง
Gilles 'หยุดความชั่วร้าย'

ขอบคุณมากฉันพยายามทำความเข้าใจความสัมพันธ์นี้อย่างเต็มที่และใช้เวลา 3 วันในการอ่านสิ่งต่าง ๆ มากมายเพื่อค้นหาคำตอบ
ast

3

กระดาษ " The sysfs ระบบไฟล์ " โดย Patrick Mochel จะให้ภาพรวมที่ดีขึ้นเกี่ยวกับวัตถุประสงค์และประวัติความเป็นมาของ/sysกว่าจะพอดีในกล่องนี้ การอ้างถึงนามธรรม:

sysfs เป็นคุณลักษณะของเคอร์เนล Linux 2.6 ที่อนุญาตให้โค้ดเคอร์เนลส่งออกข้อมูลไปยังกระบวนการของผู้ใช้ผ่านระบบไฟล์ในหน่วยความจำ การจัดลำดับชั้นของไดเรกทอรีระบบไฟล์นั้นเข้มงวดและเป็นไปตามการจัดระเบียบภายในของโครงสร้างข้อมูลเคอร์เนล ไฟล์ที่สร้างขึ้นในระบบไฟล์คือ (ส่วนใหญ่) ไฟล์ ASCII พร้อมด้วย (ปกติ) หนึ่งค่าต่อไฟล์ คุณสมบัติเหล่านี้ทำให้มั่นใจได้ว่าข้อมูลที่ส่งออกนั้นถูกต้องและเข้าถึงได้ง่ายทำให้ sysfs เป็นหนึ่งในคุณสมบัติที่ใช้งานง่ายและมีประโยชน์ที่สุดของเคอร์เนล 2.6

ในการตอบคำถามที่เฉพาะเจาะจงของคุณ "โมดูลเคอร์เนลที่โหลดได้ได้รับการนำเสนอ/sysหรือไม่" คำตอบคือ "ใช่ถ้าผู้เขียนโมดูลให้อินเทอร์เฟซ" สิ่งนี้สามารถแสดงให้เห็นได้อย่างง่ายดายโดยการแสดงจำนวนโมดูลที่โหลดมีรายการที่สอดคล้องกัน/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
…

ซึ่งแสดงให้เห็นระบบของฉันที่ 73 จาก 73 /sys/moduleโมดูลที่ใส่มีรายการที่สอดคล้องกันใน


ฉันพบข้อมูลโดยเฉพาะอย่างยิ่งเกี่ยวกับ / sys / modules / ว่ามี LKM และ module_param (ชื่อประเภทประเภทดัด) เสมอที่ส่งผลกระทบต่อลักษณะที่ปรากฏของพารามิเตอร์ไดเรกทอรี แต่ฉันยังคงมีคำถามเกี่ยวกับ sysctl และ / proc / sys ซึ่งเราสามารถตั้งค่าพารามิเตอร์เคอร์เนล Kernel ได้ ทำไมจึงไม่สามารถจ้าง / sys / modules ได้? และสถานที่ที่เราตั้งค่าพารามิเตอร์สำหรับโมดูลที่รวบรวมเคอร์เนล (/ sys / modules / หรือใน / proc / sys / เกินไป)? บางทีฉันอาจจะผสมตัวเลือกที่มีพารามิเตอร์เคอร์เนลโมดูล (ผมคิดว่าพวกเขาเป็นเดียวกัน) ดังนั้นการใช้ sysctl ฉันควรตั้งค่าพารามิเตอร์โมดูลหรือบางฟังก์ชันการทำงานเคอร์เนล
AST
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.