LINUX.ORG.RU

linux: как добавить задержку на секунду?


0

0

Массив (software-RAID) md1 состоит из hda2 и md0. При старте системы md0 не успевает запустится до конца, когда уже запускается md1. Из-за этого вылезает ошибка:

linear: not enought drives present

И кончается всё kernel panic, что не есть гут. Хочу добавить секундную задержку в начале linear_run() файла linux/drivers/md/linear.c -- как я понял эта функция отвечает за запуск linear RAID, которым является md1. Решение quick and dirty, но меня устраивает.

Так вот, какой функцией сделать задержку на секундочку? Какие заголовочные файлы нужно включить? Пробовал: //

#include <linux/unistd.h>

sleep(1);

//

Но при компиляции вылезает warning: iplicit declaration. Видимо не тот заголовочный файл включаю. А какой надо включить? А может не той функцией пользуюсь?

★★★★★

вообще man 3 sleep говорит "#include <unistd.h>".

elenath
()
Ответ на: комментарий от Mr_Nobody

man что?

Mr_Nobody, поподробнее пожалуйста про книгу, где её взять, и про msleep_interruptible().

#include <unistd.h> я пробовал, кажися ту же ошибку выдаёт.

Camel ★★★★★
() автор топика
Ответ на: man что? от Camel

В инете - гугл выдаст кучу ссылок - доступна в э-виде. В исходниках ядра можно посмотреть примеры msleep()

Mr_Nobody
()
Ответ на: комментарий от Mr_Nobody

Смотришь в книгу, видишь фигу.

По-поводу unistd.h и linux/unistd.h: провёл эксперимент, в первом случае выдаёт ошибку

drivers/md/linear.c:20:20: unistd.h: No such file or directory

Так что надо писать, надеюсь,

#include <linux/unistd.h>

по аналогии с другими include рядышком.

По-поводу msleep: гуглёж показал что msleep это всего лишь аналог sleep с параметром в миллисекундах, то есть разница несущественна (если, конечно, писать msleep(1000), а не msleep(1)

Надо будет ебук полистать, как он там назывался? Linux Device Drivers?

Camel ★★★★★
() автор топика
Ответ на: Смотришь в книгу, видишь фигу. от Camel

Гляди в оба, увидишь микроба.

Спасибо за подсказку, Mr_Nobody. В ебуке быстро нашёл нужную главу Flow of Time, а в ней описание mdelay(). Сейчас собираю, посмотрим что получится.

Camel ★★★★★
() автор топика

#include <linux/sched.h>

schedule_timeout_uninterruptible(HZ);

anonymous
()
Ответ на: Йес! от Camel

Тормозит, но не работает.

Задержки сработали, но к нужному результату это не привело. Может нехватает какой-нибудь функции инициализации RAID'ов, чего-то что до linear_run()? Надо поковырять сорсы.

Camel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.