<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Обработчик прерывания по IRQ 0, 8]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=37352&amp;type=atom" />
	<updated>2015-01-17T08:36:59Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=37352</id>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440701#p440701" />
			<content type="html"><![CDATA[<p>Спасибо, в будущем, думаю, стоит обратить внимание - цена, действительно, доступная.</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2015-01-17T08:36:59Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440701#p440701</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440688#p440688" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Пишечка - это PIC? Если да, то это тема ближайшего рассмотрения, точнее начинаю изучать PIC16F1454. Вопросы тоже имеются, нужна консультация</p></blockquote></div><p>не... raspberry Pi... pic&#039;и для линукса маловаты...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2015-01-17T01:21:36Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440688#p440688</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440663#p440663" />
			<content type="html"><![CDATA[<p>Нет, таймеры высокого разрешения не пробовал. Но, результат, думаю будет похожим, просто удастся засечь отставание от выполнения более точно)))</p><p>Пишечка - это PIC? Если да, то это тема ближайшего рассмотрения, точнее начинаю изучать PIC16F1454. Вопросы тоже имеются, нужна консультация.</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2015-01-16T14:57:08Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440663#p440663</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440627#p440627" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>тати, обратил внимание - используя таймер на малых интервалах (1-2мс) наблюдается отклонение времени исполнения фактического от запрошенного</p></blockquote></div><p>hrtimer&#039;ы пробовал?</p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Есть предложение использовать другую платформу?</p></blockquote></div><p>как вариант arm, можно даже пишечку — на ней можно с прерываниями по GPIO поиграться...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2015-01-16T09:40:36Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440627#p440627</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440619#p440619" />
			<content type="html"><![CDATA[<p>IRQF_DISABLED, да, понял, похоже, не верно.</p><div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>это всем хотелось бы, только вот сил на разработку собственного девайса под x86 ни у кого не хватает....</p></blockquote></div><p>Есть предложение использовать другую платформу?</p><p>Кстати, обратил внимание - используя таймер на малых интервалах (1-2мс) наблюдается отклонение времени исполнения фактического от запрошенного, и оно растёт, если систему нагрузить, то есть фактически, без использования механизма прерываний невозможно обеспечить высокую чёткость работы. Конечно, это не всегда требуется, но, когда, например, производишь измерения, то, опоздав на пару мс, можно упустить актуальный результат.(</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2015-01-16T08:38:04Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440619#p440619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440592#p440592" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Так вот, я разложил 00015a20, и оказалось, что стандартный обработчик IRQ0 - timer содержит флаг IRQF_DISABLED, то есть по сути он выполняет роль заглушки</p></blockquote></div><p>не правильно понимаешь: IRQF_DISABLED — это «запретить прерывания при входе в обработчик»... если верить <a href="http://lwn.net/Articles/380931/">этому</a>, то сейчас это делается для всех обработчиков, а флаг оставлен для совместимости...</p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>В итоге, решил задачу, посредством включения timer.h, задав функцией setup_timer таймер и его обработчик. Тем не менее, хотел бы научиться, как можно использовать тики APIC более прямым образом?</p></blockquote></div><p>это всем хотелось бы, только вот сил на разработку собственного девайса под x86 ни у кого не хватает....</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2015-01-15T22:20:20Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440592#p440592</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440578#p440578" />
			<content type="html"><![CDATA[<p>Недостатки постараюсь учесть)</p><p>Да, покопался и вот, что выяснил:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">genirq: Flags mismatch irq 0. 00014200 (My_IRQ0) vs. 00015a20 (timer)</div><br />перед скобками и стоят, собственно, флаги IRQF, определённые в файле linux/interrupt.h.<br />Так вот, я разложил 00015a20, и оказалось, что стандартный обработчик IRQ0 - timer содержит флаг IRQF_DISABLED, то есть по сути он выполняет роль заглушки. Отсюда, также и следствие - счёт не идёт. Я проверил на стареньком Celeron 233 /proc/interrupts, там таймер скачет десятками тысяч.<br />Покопался далее, выяснил, что за системный счёт теперь отвечает APIC, и его тики подсчитываются, как у Вас и написано, в LOC (local timer).</p><p>В итоге, решил задачу, посредством включения timer.h, задав функцией setup_timer таймер и его обработчик. Тем не менее, хотел бы научиться, как можно использовать тики APIC более прямым образом? Мда, одни вопросы решаются, другие появляются.)</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2015-01-15T18:31:15Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440578#p440578</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440560#p440560" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>1) На IRQ0 или 8 - невозможно впринципе написать обработчик из-за монопольного использования линии текущим обработчиком?</p></blockquote></div><p>да, по идее раздельное использование прерываний для разных устройств на x86 возможно только в рамках pci...</p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>2) Если написать возможно, то, наверное, нужны другие IRQF флаги?</p></blockquote></div><p>FYI: arch/x86/kernel/time.c<br /></p><div class="codebox"><pre><code>  static struct irqaction irq0  = {
      .handler = timer_interrupt,
      .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER,
      .name = &quot;timer&quot;
  };</code></pre></div><br /><p>а если глянуть /proc/interrupts <br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CPU0&nbsp; &nbsp; &nbsp; &nbsp;CPU1&nbsp; &nbsp; &nbsp; &nbsp;CPU2&nbsp; &nbsp; &nbsp; &nbsp;CPU3<br />&nbsp; 0:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;19&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp;IO-APIC-edge&nbsp; &nbsp; &nbsp; timer<br />...<br />&nbsp; 8:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp;IO-APIC-edge&nbsp; &nbsp; &nbsp; rtc0<br />...<br />LOC:&nbsp; 751701606&nbsp; 790091571&nbsp; 867486481&nbsp; 745563970&nbsp; &nbsp;Local timer interrupts<br />...<br /></div><br />то этих прерываний окажется как-то мало... не уверен до конца, что же ядро на самом деле использует для найминга... по идее должен использоваться hpet, он должен был бы эмулировать rtc и старый таймер и слать прерывания через них или занять отдельное прерывание... а ни того ни другого не видно... есть ещё&nbsp; внутренние прерывания APIC&#039;а — вот их похоже и используют...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2015-01-15T15:21:30Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440560#p440560</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Обработчик прерывания по IRQ 0, 8]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=440129#p440129" />
			<content type="html"><![CDATA[<p>Доброго дня.)</p><p>Занялся изучением вопроса установки собственных обработчиков прерываний. Написал простенькую программу. В ней всё работает, но, когда я пытаюсь выполнить:<br />insmod Mod_1.ko // в которой:<br /></p><div class="codebox"><pre><code>   N_irq = 0; //или 8; 0 - timer, 8 - rtc
   if (request_irq (N_irq, My_interrupt,
   IRQF_SHARED|IRQF_TIMER, &quot;My_IRQ0&quot;, &amp;D_irq)) return -1;</code></pre></div><p>То на консоли вижу:<br /></p><div class="codebox"><pre><code>insmod: ERROR: could not insert module Mod_1.ko: Operation not permitted
dmesg показывает:
genirq: Flags mismatch irq 0. 00014200 (My_IRQ0) vs. 00015a20 (timer)</code></pre></div><p>Как я понял, мне отказывают в регистрации обработчика из-за несоответствия флагов, отсюда вопросы:<br />1) На IRQ0 или 8 - невозможно впринципе написать обработчик из-за монопольного использования линии текущим обработчиком?<br />2) Если написать возможно, то, наверное, нужны другие IRQF флаги?</p><p><span style="color: red">Пользование тегами code/console крайне желательно</span></p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2015-01-12T14:21:34Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=440129#p440129</id>
		</entry>
</feed>
