LINUX.ORG.RU

Python3 и Embedded Controller

 ,


0

1

Пишу скрипт на Python3 для управления скоростью вращения вентиляторов на ноутбуке. Как-то примерно так (регистры мне известны, тут условный пример):

with open("/sys/kernel/debug/ec/ec0/io", "r+b") as ec_file:
	ec_file.seek(0x42)
	ec_file.write(my_one_byte)

Возникает вопрос касательно буферизации: будет реально записан только один байт? Я боюсь, что будет писаться сразу пачка байтов из какого-нибудь внутреннего буфера, что может нежелательно дернуть какие-нибудь функции EC с непредсказуемыми последствиями. Какие есть «best practice» при работе с такими экзотическими типами файлов?

Есть еще вопрос. В директории /sys/kernel/debug/ec/ec0 кроме файла io находится несколько других файлов. Каковы их функции?


Можно дернуть ec_file.flush(), но это произойдет автоматически когда блок с with закончится (ну точнее при закрытии файла), так что если там кода больше нет то можно и так оставить.

micronekodesu ★★★
()
Ответ на: комментарий от RedEyedMan666

Что не так? И причем здесь ардуины?

SSZB
() автор топика
Ответ на: комментарий от i-rinat

Если сделать так:

with open("/sys/kernel/debug/ec/ec0/io", "r+b", buffering=0) as ec_file:
	ec_file.seek(0x42)
	ec_file.write(my_one_byte)
	ec_file.seek(0x42)
	ec_file.write(my_one_byte)

Интерпретатор сделает 2 отдельных обращения к ядру для записи этих 2 байт?

SSZB
() автор топика
Ответ на: комментарий от SSZB

Ну, можно посмотреть под strace, что происходит. Но так можно только проверить, что параметр буферизации не работает. Следующий шаг — посмотреть в исходниках Python, как параметр обрабатывается. Это поможет проверить, что в юзерспейсе всё правильно обрабатывается. Дальше — в ядре проверить.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.