Подтвердить что ты не робот

Реализация аппаратных тактовых сигналов в ядре Linux

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

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

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

  • Прерывания позволяют устройству сигнализировать CPU. ОС обычно предоставляет механизмы для регистрации обработчиков прерываний - функций, вызываемых при возникновении прерывания. В Linux см. Request_irq() и друзей в linux/include/interrupt.h
  • Ввод-вывод с памятью - это физическая память устройства, доступная для BIOS платформы, так же, как и доступ к простой физической памяти - просто путем записи на адрес памяти. То, что именно стоит за такой памятью (например, конфигурационные регистры сетевого интерфейса или буфер кадров ЖК-дисплея), зависит от устройства и обычно указывается в листе данных устройства.
  • Доступ к портам ввода/вывода осуществляется через специальное адресное пространство и специальные инструкции (INB/OUTB и co.). Кроме того, они работают аналогично памяти ввода/вывода.

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

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

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

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

Ответ 2

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

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