sensors.conf(5) Linux User's Manual sensors.conf(5)

sensors.conf - پرونده پیکربندی libsensors

پرونده sensors.conf شرح می‌دهد که libsensors(3) و تمام برنامه‌های استفاده‌کننده از آن، چگونه باید خوانش‌های خام ماژول‌های هسته را به مقادیر واقعی ترجمه کنند.

در یک سیستم ممکن است یک یا چند تراشه نظارت بر سخت‌افزار وجود داشته باشد. هر تراشه می‌تواند ویژگی‌های متعددی داشته باشد؛ برای مثال، تراشه LM78 بر ۷ ورودی ولتاژ، ۳ فن و یک ورودی دما نظارت می‌کند. نام ویژگی‌ها استانداردسازی شده است. نام‌های متداول عبارتند از: in0، in1، in2... برای ورودی‌های ولتاژ، fan1، fan2، fan3... برای فن‌ها، و temp1، temp2، temp3... برای ورودی‌های دما.

هر ویژگی می‌تواند به نوبه خود یک یا چند زیرویژگی داشته باشد که هر کدام نشان‌دهنده یک مشخصه از آن ویژگی است: مقدار ورودی، حد پایین، حد بالا، زنگ هشدار و غیره. نام‌های زیرویژگی‌ها نیز استاندارد شده‌اند. برای نمونه، نخستین ورودی ولتاژ (in0) معمولاً دارای زیرویژگی‌های in0_input (مقدار اندازه‌گیری‌شده)، in0_min (حد پایین)، in0_max (حد بالا) و in0_alarm (پرچم هشدار) است. این‌که دقیقاً چه زیرویژگی‌هایی وجود دارند، به نوع دقیق تراشه بستگی دارد.

پرونده پیکربندی sensors.conf به شما امکان می‌دهد هر تراشه، ویژگی و زیرویژگی را به گونه‌ای که برای سیستم شما منطقی باشد پیکربندی کنید.

ادامه این بخش معنای هر یک از عبارات پیکربندی را شرح می‌دهد.

یک عبارت chip مشخص می‌کند که تمام عبارات بعدی compute، label، ignore و set مربوط به کدام تراشه‌ها هستند. انتخاب تراشه تا عبارت chip بعدی معتبر باقی می‌ماند. مثال:

chip "lm78-*" "lm79-*"

اگر تراشه‌ای دست‌کم با یکی از توصیف‌های تراشه مطابقت داشته باشد، خطوط پیکربندی پس از آن برای آن بررسی می‌شوند؛ در غیر این صورت نادیده گرفته خواهند شد.

توصیف یک تراشه از چندین عنصر تشکیل شده که با خط تیره از هم جدا می‌شوند. عنصر نخست نوع تراشه، عنصر دوم نام گذرگاه، و عنصر سوم نشانی هگزادسیمال تراشه است. چنین توصیف‌هایی توسط sensors(1) به عنوان سطر نخست برای هر تراشه چاپ می‌شوند.

نام گذرگاه یکی از مقادیر isa، pci، virtual، spi-*، i2c-N یا mdio است که در آن N شماره گذرگاه متصل‌شده با عبارت bus می‌باشد. این فهرست لزوماً جامع نیست، زیرا ممکن است در آینده پشتیبانی از انواع دیگر گذرگاه نیز اضافه شود.

می‌توانید عملگر عام * را جایگزین هر یک از عناصر کنید. با این حال توجه داشته باشید که تعیین نشانی بدون مشخص کردن نوع گذرگاه بی‌معنی است، بنابراین در صورت عدم تعیین نوع گذرگاه، بخش نشانی به طور کامل حذف می‌شود.

نحوه بیان تطابق‌ها به شرح زیر است:

تراشه LM78 در نشانی 0x2d روی گذرگاه 1 I2C lm78-i2c-1-2d
تراشه LM78 در نشانی 0x2d روی هر گذرگاه I2C lm78-i2c-*-2d
تراشه LM78 در نشانی 0x290 روی گذرگاه ISA lm78-isa-0290
هر تراشه LM78 روی گذرگاه 1 I2C lm78-i2c-1-*
هر تراشه LM78 روی هر گذرگاه I2C lm78-i2c-*-*
هر تراشه LM78 روی گذرگاه ISA lm78-isa-*
هر تراشه LM78 lm78-*
هر تراشه‌ای در نشانی 0x2d روی گذرگاه 1 I2C *-i2c-1-2d
هر تراشه‌ای در نشانی 0x290 روی گذرگاه ISA *-isa-0290

اگر چند عبارت chip با یک تراشه خاص تطابق داشته باشند، همه آن‌ها در نظر گرفته می‌شوند.

یک عبارت label نحوه نام‌گذاری یک ویژگی را مشخص می‌کند. ویژگی‌هایی که فاقد عبارت label باشند، صرفاً با همان نام ویژگی خود نامیده می‌شوند. برنامه‌های کاربردی می‌توانند از این برچسب برای نمایش خوانش‌ها استفاده کنند. مثال:

label in3 "+5V"

آرگومان نخست نام ویژگی و آرگومان دوم شرح ویژگی است.

توجه داشته باشید که باید از نام خام ویژگی استفاده کنید، که لزوماً همان نام نمایش‌داده‌شده توسط sensors به صورت پیش‌فرض نیست. برای مشاهده نام‌های خام ویژگی‌ها از sensors -u استفاده کنید. همین موضوع در مورد تمام انواع عبارات زیر نیز صدق می‌کند.

یک عبارت ignore رهنمودی است مبنی بر اینکه یک ویژگی خاص باید نادیده گرفته شود - احتمالاً به این دلیل که مقادیر نادرست برمی‌گرداند (برای مثال، به دلیل وصل نبودن حسگر فن یا دما). مثال:

ignore fan1

تنها آرگومان آن، نام ویژگی است. لطفاً توجه داشته باشید که این کار هیچ چیزی را در تراشه حسگر واقعی غیرفعال نمی‌کند؛ بلکه صرفاً ویژگی مورد نظر را از دید کاربران libsensors پنهان می‌سازد.

یک عبارت compute نحوه تبدیل مقدار خام یک ویژگی به یک مقدار واقعی، و همچنین نحوه تبدیل معکوس یک مقدار واقعی به یک مقدار خام را شرح می‌دهد. این قابلیت بیش از همه برای حسگرهای ولتاژ مفید است؛ زیرا به طور کلی تراشه‌های حسگر دامنه محدودی دارند و ولتاژهای خارج از این دامنه باید پیش از نظارت توسط مقاومت‌ها تقسیم شوند. مثال:

compute in3 ((6.8/10)+1)*@, @/((6.8/10)+1)

مثال بالا بیانگر این واقعیت است که ورودی ولتاژ با استفاده از دو مقاومت با مقادیر ۶٫۸ اهم و ۱۰ اهم تقسیم شده است. برای جزئیات به بخش جزئیات محاسبات ولتاژ (VOLTAGE COMPUTATION DETAILS) در ادامه مراجعه کنید.

آرگومان نخست نام ویژگی است. آرگومان دوم عبارتی است که نحوه تبدیل مقدار خام به مقدار واقعی را مشخص می‌کند؛ علامت '@' در اینجا نشان‌دهنده مقدار خام است. این همان فرمولی است که هنگام خواندن مقادیر از تراشه اعمال می‌شود. آرگومان سوم عبارتی است که نحوه تبدیل مقدار واقعی به مقدار خام را تعیین می‌کند؛ در اینجا نیز '@' نشان‌دهنده مقدار واقعی است. این فرمول هنگام نوشتن مقادیر روی تراشه اعمال خواهد شد. این دو فرمول آشکارا به هم مرتبط هستند و با کاما از یکدیگر جدا می‌شوند.

یک عبارت compute بر تمام زیرویژگی‌های مرتبط ویژگی هدف اعمال می‌شود. برای نمونه، مثال بالا بر زیرویژگی‌های in3_min و in3_max (که مقادیر ولتاژ هستند) اعمال می‌شود، اما بر in3_alarm (که یک پرچم بولی است) تأثیری ندارد.

عملگرهای زیر در عبارات compute پشتیبانی می‌شوند:

+ - * / ( ) ^ `

عبارت ^x به معنای exp(x) و عبارت `x به معنای ln(x) است.

می‌توانید از نام زیرویژگی‌ها در این عبارات استفاده کنید؛ در این صورت خوانش‌های فعلی جایگزین خواهند شد. با این حال باید مراقب باشید تا از ارجاعات دورانی (چرخشی) اجتناب کنید.

اگر در هر لحظه تبدیلی بین یک مقدار خام و مقدار واقعی مورد نیاز باشد، اما هیچ عبارت compute مرتبطی وجود نداشته باشد، تبدیل یک‌به‌یک (مستقیم) به کار می‌رود.

یک عبارت set برای نوشتن مقدار یک زیرویژگی در تراشه به کار می‌رود. البته همه مقادیر زیرویژگی‌ها را نمی‌توان به این روش تنظیم کرد؛ به‌ویژه مقادیر ورودی و پرچم‌های هشدار قابل تنظیم نیستند. زیرویژگی‌های معتبر معمولاً حدود حداقل و حداکثر هستند. مثال:

set in3_min 5 * 0.95
set in3_max 5 * 1.05

مثال بالا در عمل تراشه را طوری پیکربندی می‌کند که انحراف ۵ درصدی را برای ورودی برق +5V مجاز بداند.

آرگومان نخست نام ویژگی است. آرگومان دوم عبارتی است که مقدار نوشته‌شده را تعیین می‌کند. اگر یک عبارت compute مرتبط وجود داشته باشد، این مقدار به آرگومان سوم آن داده می‌شود تا به مقدار خام تبدیل گردد.

می‌توانید از نام زیرویژگی‌ها در این عبارات استفاده کنید؛ خوانش‌های فعلی جایگزین می‌شوند. با این حال باید مراقب باشید تا از ارجاعات دورانی دوری کنید.

لطفاً توجه داشته باشید که عبارات set تنها زمانی توسط sensors(1) اجرا می‌شوند که از گزینه -s استفاده کنید. برنامه‌های گرافیکی متداول حسگرها معمولاً اصلاً به این عبارات اعتنایی نمی‌کنند.

یک عبارت bus توصیف یک آداپتور I2C یا SMBus را به یک شماره گذرگاه پیوند می‌دهد. این امر امکان ارجاع به یک آداپتور در پرونده پیکربندی را مستقل از تطابق واقعی شماره‌های گذرگاه و آداپتورهای فیزیکی (که ممکن است در هر لحظه تغییر کند) فراهم می‌سازد. مثال:

bus "i2c-0" "SMBus PIIX4 adapter at e800"

آرگومان نخست شماره گذرگاه است که متن ثابت i2c- به همراه یک عدد است. از آنجا که در این آرگومان خط تیره وجود دارد، همیشه باید داخل کوتیشن قرار گیرد.

آرگومان دوم نام آداپتور است که باید دقیقاً با نام آداپتور به گونه‌ای که در /sys/class/i2c-adapter/i2c-*/name ظاهر می‌شود مطابقت داشته باشد. این آرگومان نیز باید همیشه داخل کوتیشن قرار گیرد زیرا مسلماً شامل فاصله یا خط تیره خواهد بود.

عبارات bus می‌توانند به صورت پراکنده در سرتاسر پرونده پیکربندی قرار گیرند؛ نیازی نیست خط bus قبل از مکانی که پیوند آن مورد ارجاع قرار می‌گیرد بیاید. با این حال، برای رعایت ساختار مناسب، پیشنهاد می‌کنیم تمام عبارات bus را در کنار هم در بالای پرونده پیکربندی خود قرار دهید.

اجرای دستور sensors --bus-list این خطوط را برای شما تولید خواهد کرد.

در حالتی که از چندین پرونده پیکربندی استفاده می‌شود، دامنه هر عبارت bus همان پرونده پیکربندی است که در آن تعریف شده است. این امر امکان استفاده از عبارات bus در تمام پرونده‌های پیکربندی را بدون تداخل غیرمنتظره با یکدیگر فراهم می‌سازد.

عبارات می‌توانند به هر ترتیبی قرار گیرند، با این حال توصیه می‌شود عبارات 'set fanX_div' پیش از عبارات 'set fanX_min' قرار گیرند، تا در صورتی که درایور مقدار fanX_min را هنگام تغییر مقدار fanX_div حفظ نکند مشکلی ایجاد نشود. حتی اگر درایور آن را حفظ کند، باز هم بهتر است عبارات به همین ترتیب قرار گیرند تا از کاهش دقت جلوگیری شود.

بیشتر حسگرهای ولتاژ در تراشه‌های نظارتی دارای دامنه‌ای از ۰ تا ۴٫۰۸ ولت هستند. این مقدار عموماً برای ولتاژهای +3.3V و ولتاژهای تغذیه پردازنده کافی است، بنابراین خوانش تراشه حسگر همان ولتاژ واقعی است.

سایر ولتاژهای تغذیه باید با یک شبکه مقاومت خارجی مقیاس‌بندی شوند. درایور مقدار موجود در پایه تراشه (۰ - ۴٫۰۸ ولت) را گزارش می‌کند و برنامه کاربردی در فضای کاربر باید این مقدار خام را به ولتاژ واقعی تبدیل نماید. عبارات compute این امکان را فراهم می‌کنند.

متأسفانه مقادیر مقاومت‌ها در میان انواع مختلف مادربردها متفاوت است. بنابراین باید مقادیر صحیح مقاومت‌ها را برای مادربرد خود بیابید.

برای ولتاژهای مثبت (معمولاً +5V و +12V)، دو مقاومت با فرمول زیر استفاده می‌شوند:

R1 = R2 * (Vs/Vin - 1)

که در آن:

R1 و R2 مقادیر مقاومت‌ها هستند
Vs ولتاژ واقعی تحت نظارت است
Vin ولتاژ در پایه تراشه است

این به فرمول محاسباتی زیر می‌انجامد:

compute inX @*((R1/R2)+1), @/(((R1/R2)+1)

فرمول واقعی برای +5V و +12V به شکل زیر خواهد بود:

compute in3 @*((6.8/10)+1), @/((6.8/10)+1)
compute in4 @*((28/10)+1), @/((28/10)+1)

برای ولتاژهای منفی (معمولاً -5V و -12V) نیز از دو مقاومت استفاده می‌شود، اما بردهای مختلف از راهبردهای متفاوتی برای رساندن مقدار ولتاژ به محدوده ۰ - ۴٫۰۸ ولت استفاده می‌کنند. برخی از تقویت‌کننده معکوس‌کننده و برخی دیگر از ولتاژ مرجع مثبت بهره می‌برند. این امر به فرمول‌های محاسباتی متفاوتی منجر می‌شود. توجه داشته باشید که بیشتر کاربران نیازی به نگرانی در این مورد ندارند، زیرا مادربردهای مدرن استفاده اندکی از -12V دارند و اصلاً از -5V استفاده نمی‌کنند، بنابراین زحمت نظارت بر این ورودی‌های ولتاژ را به خود نمی‌دهند.

نمونه‌های واقعی برای حالت تقویت‌کننده معکوس‌کننده:

compute in5 -@*(240/60), -@/(240/60)
compute in6 -@*(100/60), -@/(100/60)

نمونه‌های واقعی برای حالت مرجع ولتاژ مثبت:

compute in5 @*(1+232/56) - 4.096*232/56, (@ + 4.096*232/56)/(1+232/56)
compute in6 @*(1+120/56) - 4.096*120/56, (@ + 4.096*120/56)/(1+120/56)

بسیاری از تراشه‌های نظارتی جدید دارای دامنه ۰ - ۲٫۰۴ ولت هستند، بنابراین مقاومت‌های مقیاس‌بندی حتی بیشتر مورد نیاز بوده و مقادیر مقاومت‌ها متفاوت است.

همچنین تراشه‌های اندکی وجود دارند که دارای مقاومت‌های مقیاس‌بندی داخلی هستند، به این معنی که مقدار آن‌ها مشخص است و از یک مادربرد به مادربرد دیگر تغییر نمی‌کند. برای این تراشه‌ها معمولاً درایور مقیاس‌بندی را مدیریت می‌کند، بنابراین فرآیند برای کاربر شفاف بوده و نیازی به عبارات compute نیست.

علاوه بر ویژگی‌های معمول، دماها می‌توانند دارای دو زیرویژگی خاص باشند: نوع حسگر دما (tempX_type) و مقادیر هیسترزیس (tempX_max_hyst، tempX_crit_hyst و غیره).

انواع حسگرهای حرارتی موجود:

1 PII/Celeron Diode
2 3904 transistor
3 thermal diode
4 thermistor
5 AMD AMDSI
6 Intel PECI

برای نمونه، جهت تنظیم temp1 روی نوع ترمیستور از عبارت زیر استفاده کنید:

set temp1_type 4

تنها تراشه‌های خاصی از تغییر نوع حسگر حرارتی پشتیبانی می‌کنند، و حتی آن‌ها نیز معمولاً تنها از برخی از انواع بالا پشتیبانی می‌نمایند. لطفاً به مستندات درایور خاص مراجعه کنید تا مشخص شود چه انواعی توسط تراشه شما پشتیبانی می‌شوند.

از نظر تئوری، بایوس (BIOS) باید انواع حسگرها را به درستی پیکربندی کرده باشد، بنابراین نباید نیازی به تغییر آن‌ها داشته باشید، اما گاهی اوقات این‌گونه نیست.

بسیاری از تراشه‌های نظارتی با حدود دمای بالا و بحرانی به عنوان حدود ساده برخورد نمی‌کنند. در عوض، آن‌ها دو مقدار برای هر حد دارند؛ یکی که با افزایش دما زنگ هشدار را فعال می‌کند و دیگری که با کاهش دما هشدار را پاک می‌سازد. دومی معمولاً چند درجه کمتر از اولی است. این سازوکار به عنوان هیسترزیس شناخته می‌شود.

دلیل پیاده‌سازی سازوکار به این شکل این است که هشدارهای دمای بالا معمولاً اقدامی را برای تلاش در جهت خنک‌سازی سیستم برمی‌انگیزند، خواه با کاهش فرکانس کاری پردازنده یا با به کار انداختن یک فن اضافی. این کار معمولاً باید دما را در یک بازه زمانی مناسب کاهش دهد. اگر این هشدار بلافاصله پاک می‌شد، سیستم به حالت اولیه بازمی‌گشت که در آن دما بالا می‌رفت و هشدار بلافاصله دوباره فعال می‌شد، که باعث ایجاد چرخه نامطلوب و سریع روشن و خاموش شدن فن می‌گردید. سازوکار هیسترزیس اطمینان می‌دهد که سیستم پیش از توقف فن کاملاً خنک شده باشد، به طوری که فن مجبور نباشد بلافاصله دوباره به کار بیفتد.

بنابراین، علاوه بر tempX_max، بسیاری از تراشه‌ها زیرویژگی tempX_max_hyst را دارند. به همین ترتیب، tempX_crit اغلب با tempX_crit_hyst همراه است. tempX_emerg_hyst، tempX_min_hyst و tempX_lcrit_hyst نیز وجود دارند اما چندان رایج نیستند.

مثال:

set temp1_max 60
set temp1_max_hyst 56

سازوکار هیسترزیس را می‌توان با دادن مقداری یکسان به هر دو حد غیرفعال کرد.

توجه داشته باشید که اکیداً توصیه می‌شود مقدار هیسترزیس بعد از مقدار حدی که به آن مربوط است در پرونده پیکربندی قرار داده شود. جزئیات پیاده‌سازی در سمت سخت‌افزار یا درایور ممکن است در صورت تنظیم اولیه مقدار هیسترزیس، باعث نتایج غیرمنتظره شود.

برخی تراشه‌ها از هشدارهایی با بوق اخطار پشتیبانی می‌کنند. هنگامی که یک هشدار فعال می‌شود، می‌توانید با یک سیگنال بوق از طریق بلندگوی رایانه خود مطلع شوید. علاوه بر پرچم‌های بوق به ازای هر ویژگی، معمولاً یک کلید اصلی برای کنترل بوق جهت فعال یا غیرفعال کردن سراسری بوق‌ها وجود دارد. بوق‌ها را به این صورت فعال کنید:

set beep_enable 1

یا به این صورت غیرفعال نمایید:

set beep_enable 0

اگر در یک لحظه بیش از یک عبارت از همان نوع اعمال شود، آخرین عبارت در پرونده پیکربندی استفاده می‌شود. بنابراین معمولاً باید عبارات کلی‌تر chip را در بالا قرار دهید تا بتوانید در ادامه آن‌ها را بازنویسی (لغو) کنید.

کامنت‌ها (توضیحات) با علامت هش (#) مشخص می‌شوند. یک کامنت تا انتهای خط ادامه می‌یابد. خطوط خالی و خطوطی که فقط شامل فاصله‌های خالی یا کامنت هستند نادیده گرفته می‌شوند. سایر خطوط یکی از فرم‌های زیر را دارند. باید بین هر عنصر فاصله خالی وجود داشته باشد، اما میزان فاصله خالی اهمیتی ندارد. یک خط را می‌توان با قرار دادن یک بک‌اسلش در انتهای آن، در خط بعد ادامه داد؛ این قابلیت در داخل یک کامنت، NAME یا NUMBER کار نمی‌کند.

bus NAME NAME

chip NAME-LIST

label NAME NAME

compute NAME EXPR , EXPR

ignore NAME

set NAME EXPR

یک NAME یک رشته است. اگر تنها شامل حروف، ارقام و زیرخط باشد، نیازی به قرار گرفتن در کوتیشن ندارد؛ در تمام موارد دیگر باید دور آن از کوتیشن دوگانه استفاده کنید. در داخل کوتیشن‌ها می‌توانید از کدهای فرار معمولی در C استفاده نمایید.

یک NAME-LIST شامل یک یا چند مورد NAME پشت سر هم است که با فاصله از یکدیگر جدا شده‌اند.

یک EXPR یکی از فرم‌های زیر را دارد:

NUMBER

NAME

@

EXPR + EXPR

EXPR - EXPR

EXPR * EXPR

EXPR / EXPR

- EXPR

^ EXPR

` EXPR

( EXPR )

یک NUMBER یک عدد ممیز شناور است. مقادیر `10'، `10.4' و `.4' نمونه‌هایی از اعداد ممیز شناور معتبر هستند؛ مقادیر `10.' یا `10E4' معتبر نیستند.

/etc/sensors3.conf
/etc/sensors.conf

پرونده پیکربندی سراسری سیستم برای libsensors(3). ابتدا /etc/sensors3.conf آزمایش می‌شود، و اگر وجود نداشته باشد، به جای آن از /etc/sensors.conf استفاده می‌گردد.

/etc/sensors.d

پوشه‌ای که می‌توانید پرونده‌های پیکربندی اضافی libsensors را در آن قرار دهید. پرونده‌های موجود در این پوشه پس از پرونده پیکربندی پیش‌فرض، به ترتیب حروف الفبا پردازش خواهند شد. پرونده‌هایی که نام آن‌ها با یک نقطه شروع می‌شود نادیده گرفته می‌شوند.

libsensors(3)

Frodo Looijaard و گروه lm_sensors

https://hwmon.wiki.kernel.org/lm_sensors

November 2012 lm-sensors 3