Как прикрепить stdin и stdout к пользовательскому процессу, вызываемому call_usermodehelper - PullRequest
0 голосов
/ 29 апреля 2020

Изучив немного call_usermodehelper () и множество испытаний, он успешно выполнен. Вот код: -

#include <linux/module.h>
#include <linux/umh.h>
static char *argv[] = {"/bin/sh","-c","/home/san/Temp/my_prog",0};
static char *envp[] = {"HOME=/","TERM=linux","PATH=/usr/sbin:/usr/bin:/sbin:/bin",0};
static int __init userspace_start(void) {
    printk("Start...\n");
    call_usermodehelper(argv[0],argv,envp,UMH_WAIT_PROC);
    printk("End...\n");
    return 0;
}
static void __exit userspace_exit(void) {
    printk("Exit\n");
}
module_init(userspace_start);
module_exit(userspace_exit);
// my_prog.c
#include <stdio.h>
void main() {
    for(int i = 0; i < 20; i++)
        printf("Testing\n");
}

Я работаю над Linux Ядро 4.15.0-29-generi c

Теперь проблема, с которой я сталкиваюсь в том, что я не получаю вывод на терминал. После поиска я обнаружил, что мне нужно подключить stdin и stdout, а также найти переопределение stdin и stdout. Итак, я запутался насчет stdin и stdout 'attach / override'. Я на самом деле нуб и хочу изучить материал о ядре linux. Итак, могу ли я получить пример кода о том, как присоединить / переопределить stdin и stdout, чтобы я мог видеть вывод на терминале после запуска программы пользовательского пространства из call_usermodehelper или какие шаги я должен выполнить для достижения этого.

I также нашел call_usermodehelper_pipe, но мне не повезло, т.е. когда я выполняю: grep -r "call_usermodehelper_pipe" /usr/src/linux-headers-4.15.0-29-generic/include/linux/ Я не получил никакого заявления об этом.

Я также читал, что «порождение вещей из ядра должно выполняться только в крайне особых обстоятельствах» , Но я делаю это ради учебы.

Большое спасибо в Advance!

...