Что делает функцию calibrate_delay при загрузке системы - PullRequest
0 голосов
/ 05 февраля 2020

Из этого http://www.embeddedlinux.org.cn/essentiallinuxdevicedrivers/final/ch02lev1sec1.html

В нем говорится:

Во время загрузки ядро ​​вычисляет, сколько раз процессор может выполнить внутреннюю задержку l oop в один миг, который является интервалом времени между двумя последовательными тактами системного таймера.

Из Понимания Linux Книга ядра сообщает, что

ядро ​​выполняет Функция calibrate_delay (), которая определяет, сколько «петель» помещается в тике

Я запутался между jiff ie и loops_per_jiff ie. Мы уже можем узнать разрешение от CONFIG_HZ. Например, если CONFIG_HZ равен 250, это означает, что один шаг jiff ie будет стоить 1/250 = 4 мс

Может кто-нибудь объяснить больше об этой calibrate_delay (), что он на самом деле вычисляет?

1 Ответ

1 голос
/ 05 февраля 2020

Функция calibrate_delay() грубо измеряет, сколько инструкций процессор может выполнить в секунду. Эта функция также описана в вики о BogoMIPS , и результатом этой функции является число известных BogoMIPS. Источник функции - при инициализации / калибровке. c.

Глядя на pr_cont(...) вызов в источнике, я предполагаю, что:

1 loops_per_jiffy / (500000/HZ) = 1 BigoMOPS

Так это означает, что:

1 loops_per_jiffy = 500000 / HZ BigoMOPS

То есть loops_per_jiffy выглядит как число 500000 миллионов инструкций в один миг.

говорят, что я хочу задержку в 1 микросекунду, как я могу использовать это значение loops_per_jiff ie

Прочитать источник. Это реализовано для различных архитектур напр. udelay () в x86 / lib / delay. c function или udelay () для mips . Похоже, он ждет number_of_useconds_to_wait * loops_per_jiffy / 1000000 * 4 * HZ [+ 1] петли (или что-то в этом роде).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...