Porting OpenBSD's sysctl hw.sensors framework to FreeBSD (was: Re:
PERFORCE change 123040 for review)
Constantine A. Murenin
cnst at FreeBSD.org
Sun Jul 8 02:21:59 UTC 2007
On 07/07/2007 04:40, Andre Oppermann wrote:
> Rui Paulo wrote:
>
>> Constantine A. Murenin wrote:
>>
>>> http://perforce.freebsd.org/chv.cgi?CH=123040
>>>
>>> Change 123040 by cnst at dale on 2007/07/06 23:45:36
>>>
>>> add new node to sysctl.h: HW_SENSORS / "hw.sensors"
>>
>>
>> Hmm. I thought new sysctl nodes or leafs were dynamic and you needn't to
>> add any entry to sysctl.h.
>
>
> Yes, all new sysctl nodes and leaves should be entirely dynamic.
> The (old) static ones should go away with 8.0 or so. IIRC there
> hasn't been any new static sysctl node since a loooong time.
I don't exactly consider April 2007 being a loooong time ago. ;)
So even first- and second-level nodes must be generated dynamically by 8.0?
Hardware sensors tree is going to be pretty deep down. Under sysctl(8)
the variable names will look like this:
hw.sensors.lm0.temp0
whereas in reality, the tree has five levels:
hw.sensors.lm0.temp.0
but as an exception to sysctl rule -- specifically for hw.sensors -- in
OpenBSD the last dot is ommitted from sysctl(8) presentation to the
user, to improve readability and preserve some sanity. :) I want to keep
FreeBSD's sysctl hw.sensors tree compatible with the one in OpenBSD, so
that both sysctl(8) shell scripts and sysctl(3) C utilities will be
portable between the systems.
Any suggestions are welcome, and let me know if you have any questions
about the framework itself -- I'm the principal author of the current
"two-level" revision of the framework on OpenBSD, so I know everything
that is immediately relevant on how it works. ;)
P.S. Obviously, what I say here about sysctl(8) variable names will
equally apply to FreeBSD's sysctlbyname(3).
P.P.S. Here is a sample output of a recent sysctl(8) on OpenBSD
4.1-current, on a consumer-grade G965-based Core 2 Duo system, with a
pretty standard Winbond W83627DHG Super I/O:
dale: {3360} dmesg | fgrep -e "cpu0: Intel" -e lm | tail -n2
cpu0: Intel(R) Core(TM)2 CPU 4300 @ 1.80GHz ("GenuineIntel" 686-class)
1.81 GHz
lm0 at isa0 port 0x290/8: W83627DHG
dale: {3361} sysctl hw.sensors.{cpu0,lm0.{temp,fan,volt{0,1,2,7}}}
hw.sensors.cpu0.temp0=28.00 degC
hw.sensors.lm0.temp0=58.00 degC
hw.sensors.lm0.temp1=24.00 degC
hw.sensors.lm0.fan1=917 RPM
hw.sensors.lm0.volt0=1.15 VDC (VCore)
hw.sensors.lm0.volt1=12.30 VDC (+12V)
hw.sensors.lm0.volt2=3.33 VDC (+3.3V)
hw.sensors.lm0.volt7=3.31 VDC (3.3VSB)
dale: {3362}
And let me warn you that the framework supports many more things than
just temperature sensors -- from raid drive status to NMEA time offsets! :)
Cheers,
Constantine,
Google Summer of Code 2007 Student.
More information about the freebsd-arch
mailing list