LINUX.ORG.RU

Сообщения Shockk

 

Отладочная информация в lkm

Народ, подскажите, как заставить компилятор генерировать отладочную информацию для lkm. GDB ругается (no debugging symbols found) для *.o.

Вот мой make файл:

obj-m += key.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Shockk
()

Идентификация процесса ядром

Всем привет. Столкнулся с проблемой. Есть модуль ядра, который делает вызов call_usermodehelper_keys (который вызывает программу в юзермод). Вопрос, как я могу через другой модуль ядра, понять что программа, которая запустилась через call_usermodehelper_keys вызвана моим первым модулем ?

Думал что надо искать через parent, но:
Первый модуль (кот вызывает call_usermodehelper_keys ) имеет PID 6998.
Вызываемый процесс имеет PID 7003, его parent имеет PID 7002 (khelper); current->parrent->parrent->pid = 8 (khelper); current->parrent->parrent->parrent->pid = 1 (init)

Как мне определить что это процесс с PID-ом 6998 вызвал программу ?

Shockk
()

lkm не видит signals

Подскажите, есть модуль создающий поток, который должен отлавливать определенные сигналы. Но проблема в том, что поток вообще не видит сигналов, вот код:

int
netf_thread(void *empty)
{
spin_lock_irq( &current->sighand->siglock );
sigfillset( &current->blocked );
siginitsetinv( &current->blocked, sigmask(SIGUSR1) | sigmask(SIGTERM) );
recalc_sigpending();
spin_unlock_irq( &current->sighand->siglock );

daemonize("netf");

do {
set_current_state( TASK_INTERRUPTIBLE );
schedule_timeout( 2 * HZ );

if ( signal_pending( current )) {

# никак не попаду в эту часть кода при посылки сигнала
# через kill -9 <pid>
#
# а также не ловится через вызов:
# kill_proc( thread_pid, SIGTERM, 1 );

}


} } while ( !atomic_read( &f_exit ) );

}

static int __init
init_netf_module(void)
{
init_completion( &thread_complete );
thread_pid = kernel_thread( netf_thread, NULL, CLONE_FS | СLONE_SIGHAND );

if ( thread_pid < 0 ) {
printk("Can't create thread\n");

return -ENOMEM;
}

return 0;
}

static void __exit
cleanup_netf_module(void)
{
atomic_set( &f_exit, 1 );
kill_proc( thread_pid, SIGTERM, 1 );
wait_for_completion( &thread_complete );
}



В чем ошибка ?

Shockk
()

RSS подписка на новые темы