Реализация аппаратных тактовых сигналов в ядре Linux - PullRequest
12 голосов
/ 01 июля 2011

Я смотрю на некоторые указатели для понимания того, как ядро ​​Linux реализует настройку различных аппаратных часов.Это в основном относится к работе с настройкой различных часов, которые будут использовать аппаратные функции, такие как LCD, UART и т. Д.Например, когда Linux загружается, как он справляется с настройкой часов для UART или USB.Может быть, что-то вроде диспетчера часов или что-то в этом роде.

Я пытаюсь реализовать нечто подобное для другой ОС на новом оборудовании, над которым я работаю.Любая помощь могла бы быть полезна.

[Редактировать]
Спасибо за ответы и ссылки.Так вот, что я реализовал до сих пор.Это должно дать вам представление о том, куда я направляюсь.

Я посмотрел Справочное руководство по аппаратному обеспечению для конкретной системы, на которую нацеливаюсь, и написал некоторый код для мониторинга / изменения сигналов / выводов периферийных устройств, которые мне интересны, т.е. включения / выключения их из командной строки.. Теперь набор этих часов / сигналов вместе управляет периферийным устройством. HRM скажет, что если вы хотите включить UART или что-то еще, то включите такие и такие сигналы / выводы.И @BjoernD да, я использую что-то вроде функции mmap () для общения с периферийными устройствами.

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

Теперь я уверен, что нечто подобное было бы реализовано в Linux или, если на то пошло, в любой операционной системе из-за проблем с производительностью (никто не хотел бы тратить энергию, включая все периферийные устройства во время загрузки).Я хочу понять архитектуру программного обеспечения этого.Ссылка из любой ОС будет делать по крайней мере получить преимущество.Кроме того, я не пишу свою собственную ОС, там есть ОС, но я больше смотрю на программное обеспечение уровня платы, также известное как BSP.Но все равно спасибо за ссылку на ОС, они действительно хороши.Ценить это.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 02 июля 2011

То, чего вы хотите достичь, очень сильно зависит от а) используемой вами платформы и б) устройства, которое вы хотите использовать.Например, в x86 существует 3 способа связи с устройством:

  1. Прерывания позволяют устройству сигнализировать ЦПУ.ОС обычно предоставляет механизмы для регистрации обработчиков прерываний - функций, которые вызываются при возникновении прерывания.В Linux смотрите request_irq () и друзей в linux / include / interrupt.h
  2. Оперативный ввод-вывод с отображением в памяти - это физическая память устройства, которую BIOS платформы делает доступной так же, как и доступ к обычной физической памяти.- просто записав в адрес памяти.Что именно скрывается за такой памятью (например, регистры конфигурации сетевого интерфейса или буфер кадров LCD), зависит от устройства и обычно указывается в техническом описании устройства.
  3. Порты ввода / вывода доступны через специальное адресное пространство и специальные инструкции (INB / OUTB и другие).Кроме того, они работают аналогично памяти ввода-вывода.

Существует множество способов узнать, какие ресурсы предоставляет устройство и где их сопоставил BIOS.На некоторых платформах используются таблицы ACPI (сами Google для спецификации страницы в 1000 000), PCI предоставляет информацию об устройствах в стандартизированном виде через конфигурационное пространство PCI, USB имеет аналогичные способы обнаружения устройств, подключенных к шине, и некоторые устройства, например, UARTS, просто указываются как доступные в предварительно настроенном диапазоне ввода-вывода, который фиксирован для вашей платформы.

В качестве начала для понимания Linux, я бы порекомендовал "Понимание ядра Linux" .Для подробностей о том, как Linux обрабатывает устройства и что там писать драйверы, взгляните на Драйверы устройств Linux .Кроме того, вам нужно взглянуть на особенности вашей платформы и устройства, которое вы хотите использовать.

Если вы хотите запустить собственную ОС, UART, безусловно, будет очень полезным для печати.отладочный вывод, так что вы, возможно, захотите сначала пойти на это.

Теперь, когда я записал все это, кажется, что ваш реальный вопрос таков: как начать проектирование операционной системы.Этот вопрос должен быть очень ценным для вас: Какие существуют ресурсы для начала разработки операционной системы?

0 голосов
/ 11 июля 2011

Двумя крупными опытными пользователями на большинстве компьютеров являются процессор и диски. Оба из них имеют возможности для энергосбережения в Linux. Тактовая частота процессора может быть замедлена, когда система не занята, и двигатели дисков могут быть остановлены, когда не происходит ввода-вывода. Для UART, даже если вы экономите всю энергию, которую он использует, выключая свои часы, он все еще крошечный по сравнению с другими, потому что в UART нет большой логики.

Лучшие способы экономии энергии 1) более эффективный источник питания 2) заменить вращающийся диск на SSD 3) Замедлить процессор и шину памяти

...