Вызывая расписание в функции module_init, оно никогда не возвращается - PullRequest
0 голосов
/ 23 сентября 2019

Я написал простой код модуля, пытаясь понять, что происходит, когда мы вызываем schedule () из функции module_init.

#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>               //task_struct 
#include <linux/delay.h>



static int __init my_driver_init(void)
{
    pr_info("%s: processor id :%d before schedule\n", __func__, smp_processor_id());
    set_current_state(TASK_INTERRUPTIBLE);
    schedule();
    pr_info("%s: processor id:%d after schedule\n", __func__, smp_processor_id());
    return 0;
}

void __exit my_driver_exit(void)
{
        pr_info("%s:Device Driver Remove...Done\tProcessor Id:%d\n", __func__, smp_processor_id());
}

module_init(my_driver_init);
module_exit(my_driver_exit);

MODULE_LICENSE("GPL");

Когда я загружаю модуль, он печатает только первый printk из module_init и простождет там.В чем ошибка в вышеприведенном коде.

1 Ответ

0 голосов
/ 23 сентября 2019

Функция schedule () может использоваться процессом, чтобы добровольно указать планировщику, что он может запланировать какой-либо другой процесс на процессоре.

Как только процесс запланирован снова, выполнение начинается с точкигде процесс остановился, то есть выполнение начинается с вызова функции schedule ().

ref: https://www.linuxjournal.com/article/8144

...