Название: Как получить данные о процессоре и диске? Отправлено: Alchazar от Ноябрь 06, 2009, 17:22 Два дня пытаюсь нагуглить как в QT узнать такие данные о компе (Windows):
1 Модель процессора 2 Кол. во ядер 3 Загрузка процессора 4 Температура процессора 5 Температура дисков 6 Количество и модели дисков 7 SMART инфо о дисках Ничего стоящего найти не удалось, может подскажете в какую сторону копать? Название: Re: Как получить данные о процессоре и диске? Отправлено: lit-uriy от Ноябрь 06, 2009, 18:22 ни как, используй API целевой системы
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Ноябрь 09, 2009, 10:06 ни как, используй API целевой системы А можно по подорбнее?Название: Re: Как получить данные о процессоре и диске? Отправлено: kuzulis от Ноябрь 09, 2009, 10:15 Вот в гугле для винды например (первая попавшаяся ссылка):
http://www.java2s.com/Code/VBA-Excel-Access-Word/Windows-API/CPU-Processor.htm а вообще, см. MSDN Для линуха и т.п. - много вариантов как получить то, что нужно. Одним из вариантов является парсинг в /proc Название: Re: Как получить данные о процессоре и диске? Отправлено: ecspertiza от Ноябрь 09, 2009, 11:00 Для винды юзай WMI а для линуха исходники dmidecoder если не ошибаюсь, я так информацию о железе получал))))
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Ноябрь 09, 2009, 11:17 Для начала надо с виндой разобраться, потом для линукса буду портировать. Вот только с QT я совсем недавно познакомился, так что мне ещё много предстоит узнать.
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 25, 2010, 16:08 Подниму тему. Вроде получилось придумать как найти инфо о параметрах компьютора.
Использовал WMI чтобы найти Модель процессора, Кол. во ядер, и т.п. Всё это сделал в VS, собираюсь собрать dll и затем использовать его в своей программе. Правда не все диски определяются (только 2 из трёх, иногда видит только один диск), но с этим буду пожже разбираться. Вот только WMI не даёт никакой информации о температурах. А мне надо ещё узнать температуру дисков и процессора/процессоров. В гугле пишут, что windows такой информации не предоставляет, и её надо самому читать с датчиков. Погуглив ещё немного, я нашёл, что температуру можно узнать из ACPI или SMBIOS. Нашёл даже описание ACPI http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf (http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf) (стр. 375) и SMBIOS http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf (http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf) (стр. 67) Но к сожалению у меня нехватает опыта и знаний в таких делах (да и прогаммист я не очень, ещё только учюсь). Мне нужна помощь. Сам я не очень понимаю как пользоваться той информацией, что я нашёл. Буду очень признателен, за любую помощь. Заранее Спасибо. Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 25, 2010, 16:29 даташиты это хорошо. но что-то путевое по ним скодить - не просто.
я когда-то давно, писал то о чем ты говоришь, для вендавз. но мне нужно было читать два датчика температуры и скорость вращения двух кулеров. получилось. ввод-вывод с чипом написал при помощи http://www.internals.com/utilities/winio.zip алгоритм взаимодействия с чипом я так до конца и не понял(что-то помоему не правильно считало), потому подглядел код и исходников линухового ядра. т.е. тот код использовать в первоначальном виде не получится, а вот для понимания он супер, даже комменты есть. так что дерзай. зы определи номер чипа точно. чтоб обидно потом не было) Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 25, 2010, 17:52 Спасибо огромное за помощь)
Разбираюсь теперь WinIo, если я правильно понял, Код: GetPortVal(0x378, &dwPortVal, 4); читает данные, то есть тут (0x378) надо указать адрес с которого я хочу получить информацию. Или я не туда смотрю? А как узнать по какому адресу находится информация которая мне необходима? Я пытаюсь найти адрес в SMBIOS спецификации, или я вообще не в ту степь забрёл? Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 25, 2010, 18:46 Цитировать то есть тут (0x378) надо указать адрес с которого я хочу получить информацию верно.Цитировать А как узнать по какому адресу находится информация которая мне необходима? в даташитах написано. при том, там наверняка мультиплексированный ввод/вывод как и в большинстве современных микроконтроллеров.Цитировать Я пытаюсь найти адрес в SMBIOS спецификации, или я вообще не в ту степь забрёл? вскрываешь системник, ищешь микруху с ногами по ребрам, читаешь ее номер, забиваешь в гугл, ищешь даташит.а лучше скажи модель материнки. Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 26, 2010, 09:35 То есть, если я хочу чтобы программа работала хотя бы на 80-90% комп. мне надо делать поддержку кучи различных чипов? Неужели нету одного стандарта?
Материнка у меня Intel d865glc. Как понять "мультиплексированный ввод/вывод"? Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 26, 2010, 12:08 Цитировать То есть, если я хочу чтобы программа работала хотя бы на 80-90% комп. мне надо делать поддержку кучи различных чипов? именно.Цитировать Неужели нету одного стандарта? нет.Цитировать Как понять "мультиплексированный ввод/вывод"? т.е. для того чтоб чип тебе отдал какое-то значение, с ним нужно "пообщаться", сообщив ему что ты хочешь. для другого значения так же, только сообщаешь иначе.как я и говорил, не тривиально сие. Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 26, 2010, 12:17 не нашел ни одной нормальной картинки материнки, чтоб можно было прочитать номер чипа.
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 26, 2010, 12:45 Он большой или маленький должен быть? В каком углу (возле чего) его искать?
Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 26, 2010, 12:50 сфоткай лучше материнку, нижнюю часть.
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 26, 2010, 13:45 Фотографировал с телефоном, так что качество не очень
(http://img63.imageshack.us/img63/2655/p2601100005.th.jpg) (http://img63.imageshack.us/i/p2601100005.jpg/) (http://img687.imageshack.us/img687/857/p2601100004.th.jpg) (http://img687.imageshack.us/i/p2601100004.jpg/) (http://img32.imageshack.us/img32/1808/p2601100002.th.jpg) (http://img32.imageshack.us/i/p2601100002.jpg/) Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 26, 2010, 15:36 на средней фотке, тот что выше. номер скажи.
есть еще виндовская прога, которая инфу о железе выводит. everest кажеться... воспользуйся лучше ею. а то в нынешних материнках чип superIO могли уже в чип южного моста впихнуть. Название: Re: Как получить данные о процессоре и диске? Отправлено: kuzulis от Январь 26, 2010, 16:32 Цитировать есть еще виндовская прога, которая инфу о железе выводит. everest кажеться... еще SiSoft Sandra :) .Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 26, 2010, 17:16 Программ я знаю разных, но мне надо использовать эти данные в своей программе, и в моём случае вариант с Everest'ом не подходит.
чип: 82562E7 L335 sw74 Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 26, 2010, 18:20 Цитировать Программ я знаю разных, но мне надо использовать эти данные в своей программе, и в моём случае вариант с Everest'ом не подходит. ;Dя это сказал к тому, что еверест показывает номера чипов и биоса. Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 27, 2010, 09:33 Биос:
Manufacturer : Intel Corp. Version : BF86510A.86A.0077.P25.0508040031 Date : 08/04/2005 (mm/dd/yyyy) Address : 0x0 on 512 KB DMI Version : 2.3 Материнка: Manufacturer : Intel Corporation (Intel) Product : D865GLC Version : AAC28906-406 Serial Number : ABLC34432913 Support MP : Yes, 1 CPU(s) Version MPS : 1.4 Чипсет: NorthBridge : Intel i865PE SouthBridge : 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge Сенсор: Sensor : Analog Devices ADT7463 Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 27, 2010, 09:37 это не все.
мы с вами на определение номера чипа тратим столько времени, что могли бы уже написать весь код ;D Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 27, 2010, 09:47 Это точно)
Но сначало надо во всём разобраться Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 27, 2010, 09:52 Цитировать Sensor : Analog Devices ADT7463 вот он!даташит: http://docs.google.com/viewer?url=http://www.analog.com/static/imported-files/application_notes/3619620726148651766408599520AN612_0.pdf Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 27, 2010, 09:58 вот подробнейший даташит: http://www.datasheetcatalog.org/datasheet/analogdevices/15792721ADT7463_0.pdf
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 27, 2010, 10:13 Я ещё нашёл такую вещь как CPUID
http://wiki.osdev.org/CPUID (http://wiki.osdev.org/CPUID) http://sandpile.org/ia32/cpuid.htm (http://sandpile.org/ia32/cpuid.htm) Тут вроде всё намного проще, нету првязки к конкреиным моделям. Или это не то? Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 27, 2010, 12:26 Вот, нашёл в даташите:
Temperature Measurement Registers Reg. 0x25 Remote 1 Temperature = 0x80 default Reg. 0x26 Local Temperature = 0x80 default Reg. 0x27 Remote 2 Temperature = 0x80 default теперь при помощи ф-ции GetPortVal(0x25, &dwPortVal, 1); пробую получить значение по адресу 0x25, но получаю такой ответ - 4294967295 Разве не должно тут быть двоичное число (типо 01101100)? Код
внутренний голос мне подсказывает, что я пропускаю что-то очень важное... вот только что Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 27, 2010, 12:58 1. dwPortVal проинициализировали нулем?
2. "Разве не должно тут быть двоичное число (типо 01101100)?" - оно возможно там и есть, но вы выводите эту переменную как целое. 3. "внутренний голос мне подсказывает, что я пропускаю что-то очень важное... вот только что" - угу. настройку чипа для общения. читайте внимательно. еще гляньте в исходниках линуксового ядра(поиск по всем файлам ключевого слова ADT7463(без учета регистра)). исходники тут: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.6.tar.bz2 Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 27, 2010, 13:08 1. dwPortVal проинициализировали нулем? это - dwPortVal = 0;?если, да, тогда проинициализировал Цитировать 2. "Разве не должно тут быть двоичное число (типо 01101100)?" - оно возможно там и есть, но вы выводите эту переменную как целое. Как правильно вывести переменную, чтобы получить двоичное число?Цитировать 3..... еще гляньте в исходниках линуксового ядра(поиск по всем файлам ключевого слова ADT7463(без учета регистра)). Займусь теперь чтением исходников, может найду то, что ищю )исходники тут: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.6.tar.bz2 Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 27, 2010, 18:10 Цитировать Как правильно вывести переменную, чтобы получить двоичное число? посмотри QBitArrayкоды тут: linux-2.6.32.6/drivers/hwmon/lm85.c там все адреса портов, константы, понятен принцип инициализации, и т.д... доп документация тут: linux-2.6.32.6/Documentation/hwmon/lm85 читать внимательно! и по ссылкам пройдись. Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 28, 2010, 10:41 Вот нашёл в lm85.c:
Код: #define LM85_REG_TEMP(nr) (0x25 + (nr)) А что за переменная client? Не пойму, что она делает. Или она не нужна в моём случае? Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 28, 2010, 11:01 в твоем случае, этот код вообще нужно использовать как псевдокод.
но константы можно использовать по прямому назначению. Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 28, 2010, 14:36 Я вот чего не пойму, в спицификации пишут, что данные о температуре надо читать в регистрах по адресу 0х25, 0х26, 0х27. Значит эти регистры должны быть в памяти?
То есть сенсор должен положить в память данные? Или всё таки, эти регистры находится в самом чипе? Тогда как обяснить GetPortVal(), что регистры читать надо не в памяти, а в чипе? Что-то я чем больше пытаюсь разобраться, тем сильнее путаюсь Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 28, 2010, 14:47 Цитировать Значит эти регистры должны быть в памяти? нет.Цитировать То есть сенсор должен положить в память данные? нет.Цитировать Или всё таки, эти регистры находится в самом чипе? да.Цитировать Тогда как обяснить GetPortVal(), что регистры читать надо не в памяти, а в чипе? ничего ему объяснять не нужно. функция и так их читает из регистров на железе. в данном случае по адресам: 0х25, 0х26, 0х27Цитировать Что-то я чем больше пытаюсь разобраться, тем сильнее путаюсь ты так и не прочел даташит по чипу, раз не понимаешь, что прежде чем читать значения, нужно настроить чип на это. у чипа, так называемые многофункциональные порты. т.е. по одним и тем же портам он может отдавать разные значения, относящиеся к разным датчикам. а так же, выходы могут быть и входами. чип настраивать нужно.зы без прочтения даташита, ничего у тебя не получится. а судя по вопросам, ты его так и не прочел. Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 28, 2010, 17:01 Вот, что пишут в даташите:
Код: When reading data from a register, there are two possibilities: Я так понимаю, его (сенсора) адрес один из 3-ёх: 0x2c, 0x2d, 0x2e(default)? Значит я должен в 0x2e записать 0х25? А потом узнавать температуру тоже по адресу 0х2e? Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 28, 2010, 18:01 сейчас я буду читать.
Название: Re: Как получить данные о процессоре и диске? Отправлено: lit-uriy от Январь 28, 2010, 21:30 >>Как правильно вывести переменную, чтобы получить двоичное число?
Можно воспользоваться QString & QString::setNum ( int n, int base = 10 ) и base установить в 2. Тогда на выхлопе получится строка содержащая двоичное представление числа Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Январь 29, 2010, 14:22 Нашёл пример кода для считывания ChipID для чипа ITE-8712
Код Буду пробовать переделать его для моего чипа. Может что нибуть получиться. Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 29, 2010, 19:24 попробуй вот что:
Код
напиши код, запусти, выложи сюда код и скрин вывода программы. Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 29, 2010, 19:31 >>Как правильно вывести переменную, чтобы получить двоичное число? Юра, ты по моему электронщик? или я ошибаюсь? может тоже подскажешь что.Можно воспользоваться QString & QString::setNum ( int n, int base = 10 ) и base установить в 2. Тогда на выхлопе получится строка содержащая двоичное представление числа Название: Re: Как получить данные о процессоре и диске? Отправлено: ecspertiza от Январь 29, 2010, 20:47 Вот только WMI не даёт никакой информации о температурах. А мне надо ещё узнать температуру дисков и процессора/процессоров. Секунду гражданин :) Знаю что поздновато подключаюсь к теме, но все же, читать данные с чипа это конечно здорово, но сколько их может быть моделей? для каждого свою ф-цию писать будешь? Пусть этим делом занимается ось, а ты юзай апи той оси на которой работает программа, ибо написать ф-ции под несколько осей проще нежели колупать каждый чип(ну это мое ИМХО). Покури WMI хорошенько там есть класс Win32_TemperatureProbe я думаю это именно то что тебе нужно, а под линь тоже вроде есть софт определения температуры, но тут есть еше и + под линь почти весь софт идет с исходниками :) Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 29, 2010, 21:00 Цитировать для каждого свою ф-цию писать будешь? придется. в лине для каждого чипа свой модуль ядра.Цитировать а под линь тоже вроде есть софт определения температуры да. в лине с этим проще.Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Январь 31, 2010, 01:13 Alchazar, ну что с результатом?
Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Февраль 01, 2010, 09:36 что-то я никак не найду, что надо иклюдить чтобы использовать readbyte(), writebyte()
Название: Re: Как получить данные о процессоре и диске? Отправлено: kuzulis от Февраль 01, 2010, 14:10 Цитировать придется. в лине для каждого чипа свой модуль ядра. а lm_sensors зачем тогда? :)PS: и еще, раз упомянуто было выше про WMI - то в какой библиотеке в винде *.dll лежат классы для работы с WMI? т.к. я тож хочу WMI использовть, но вот проблема с minGW ! Нету инклюдов и либ в нём! :( Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Февраль 01, 2010, 14:16 WMI Win32_TemperatureProbe не работает на большинстве случаев.
Название: Re: Как получить данные о процессоре и диске? Отправлено: kuzulis от Февраль 01, 2010, 14:18 Цитировать WMI Win32_TemperatureProbe не работает на большинстве случаев. Почему? Название: Re: Как получить данные о процессоре и диске? Отправлено: BRE от Февраль 01, 2010, 14:20 Цитировать придется. в лине для каждого чипа свой модуль ядра. а lm_sensors зачем тогда? :)Название: Re: Как получить данные о процессоре и диске? Отправлено: kuzulis от Февраль 01, 2010, 14:25 Цитировать Так sensors использует информацию, которую предоставляет ядро. А в ядре есть специальные модули для поддержи этих чипов. Ну да! Я про это и говорю! Согласен с ecspertiza что проще брать инфу с девайсов из самой ОС! В случае с линухом - использовать lm_sensors, в случае с виндой - WMI (или что-то альтернативное)... IMHO, делать код на отдельные чипы - это "изобретать велостпед" (с) :) Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Февраль 01, 2010, 14:55 На сколько я понял, ОС получает инфо только в том случае, если сам биос (сенсор или кто там ещё) высылает ОСи инфо, но это происходит не на всех материнках/процах, поэтому Win32_TemperatureProbe не всегда работает. В моём случае (на моём пк) Win32_TemperatureProbe не даёт информации о температуре.
Название: Re: Как получить данные о процессоре и диске? Отправлено: ecspertiza от Февраль 01, 2010, 15:09 PS: и еще, раз упомянуто было выше про WMI - то в какой библиотеке в винде *.dll лежат классы для работы с WMI? т.к. я тож хочу WMI использовть, но вот проблема с minGW ! Нету инклюдов и либ в нём! :( Если чесно WMI с MinGW неюзал, я писал длл-ку в студии мне так проще показалось, а вообще вот примеры http://msdn.microsoft.com/en-us/library/aa394558(VS.85).aspx Название: Re: Как получить данные о процессоре и диске? Отправлено: niXman от Февраль 01, 2010, 15:34 что-то я никак не найду, что надо иклюдить чтобы использовать readbyte(), writebyte() написал же, что это псевдокод!readbyte(), writebyte() - это функции чтения и записи байта. Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Февраль 01, 2010, 16:13 Код
Вывод: locked ready Press any key to continue . . . Попробовал ещё пару раз запустить тот же код, теперь ответ получаю другой: ok, 4294967280Press any key to continue . . . ok, 78locked ready Press any key to continue . . . Название: Re: Как получить данные о процессоре и диске? Отправлено: Alchazar от Февраль 03, 2010, 17:45 Всё, что я понял перечитав несколько раз даташит на мой чип - вся работа с ним идёт через SMBus. Теперь читаю спецификации SMBus и I2C и прихожу к выводу что придётся подучить ассемблер.
Название: Re: Как получить данные о процессоре и диске? Отправлено: lks от Июнь 17, 2018, 21:30 Ну что, у кого-нибудь получилось с температурой ЦП ?
|