Что разрешено и не разрешено делать в драйвере устройства Linux? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть общий вопрос о драйвере устройства Linux.Чаще я запутываюсь, какие действия разрешено или не разрешено выполнять в драйвере устройства Linux?

Есть ли какие-либо правила или тип списка поиска, которому нужно следовать?

, например, со следующими примерамикоторые недопустимы?

msleep(1000);
al = kmallock(sizeof(val));
printk(KERN_ALERT "faild to print\n";
ret = adc_get_val()*0.001;

1 Ответ

1 голос
/ 06 июня 2019

При программировании драйвера устройства linux это зависит от того, в каком контексте вы находитесь.Есть два контекста, которые необходимо различать:

  • контекст процесса
  • IRQ контекст.

Спящий режим может быть выполнен только в контексте процесса или вызапланировать работу для последующего выполнения (для этого есть несколько механизмов).Это сложная тема, которую нельзя описать в абзаце.

Выделение памяти может спать, это зависит от того, с какими параметрами / флажками вызывается kmalloc.

print всегда может быть вызвана (если ядробыл вызван), в противном случае используйте early_printk.

Я не знаю, что делает функция add_get_val.Это не часть ядра Linux.И, как уже было сказано, значения с плавающей запятой не могут быть легко использованы в ядре.

...