2010-09-17 2 views
1

Я новичок в Linux-драйвере и написала драйвер char для аппаратного обеспечения.Linux-драйвер - Как предотвратить прерывание

Каков наилучший способ предотвращения помех (программного и аппаратного обеспечения) при выполнении функций драйвера (например, ioctl)?

Спасибо,

Пуй

ответ

2

вы имели в виду отключение всех прерываний в системе? На самом деле это не очень хорошая идея.

Если у вас есть раздел кода, и вы хотите убедиться, что неожиданное прерывание не мешает, взгляните на spin_lock_irqsave(). Это отключит прерывания локально. Когда вы закончите, вы можете использовать spin_lock_irqrestore().

Если вы обеспокоены только обновлением переменной, вы можете подумать о ее атомарности (atomic_t).

Наконец, если вы думаете только о отключении прерываний от вашего оборудования char, когда драйвер выполняет определенную функцию, это зависит от оборудования. Например, для LSI 1068E вам необходимо записать 0xFFFFFFFF в регистр IntMask. Вы также можете попросить ядро ​​отключить строку прерывания, используя disable_irq() в этой строке прерывания, но это, вероятно, не то, что вы хотите.

+0

ic, это значит, что мне нужно добавить spin_lock Спасибо – Pui

Смежные вопросы