LINUX.ORG.RU

problem in debugfs linux kernel


0

0

Доброго времени суток!
У меня есть проблема:
Для передачи значения переменной с ядра linux использую debugfs.
С первого раза все заработало, но не тут та было. Когда меняешь название или значение передаваемой переменной не чего не меняется, а остается значение которое было в начале.
Вот код(который я добавил к ядру):

/usr/src/linux/kernel/sched.c
...
#include <linux/debugfs.h>
...
static struct dentry *R_debugfs_dir;

void debugfs_create_dir(void)
{
static unsigned test_2 = 332;
R_debugfs_dir = debugfs_create_dir("test",NULL);
debugfs_create_u32("test_2",0644,R_debugfs_dir,&test_2);
}
...

/usr/src/linux/include/linux/sched.h
...
void debugfs_create_dir(void);
...

/usr/src/linux/init/main.c
...
static noinline void __init_refok rest_init(void)
__releases(kernel_lock)
{
int pid;

kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
numa_default_policy();
pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
unlock_kernel();

/*
* The boot idle thread must execute schedule()
* at least once to get things moving:
*/
init_idle_bootup_task(current);
rcu_scheduler_starting();
preempt_enable_no_resched();
schedule();
preempt_disable();

debugfs_create_dir();//ВЫЗОВ ФУНКЦИИ <---------

/* Call into cpu_idle with preempt disabled */
cpu_idle();
}
...
Я так понимаю что то не то с памятью.
Пытался удалить принудительно:
void debugfs_remove(struct dentry *dentry); не чего не получилась. Папка удалилась, а файлик test_2 остается.
И не чего не могу больше записать.

Заранее большое спасибо!

Re: problem in debugfs linux kernel

debugfs_create_dir() вызывается в контексте swapper
task (idle thread for boot cpu), не надо так делать ;)
еще ничего практически не было инициализировано, в
тч и debugfs_init().

хотя бы уж в kernel_init() засуньте, a лучше в модуль
или late_initcall().

idle ★★★★★ ()
Ответ на: Re: problem in debugfs linux kernel от idle

Re: problem in debugfs linux kernel

>debugfs_create_dir() вызывается в контексте swapper >task (idle thread for boot cpu), не надо так делать ;) >еще ничего практически не было инициализировано, в >тч и debugfs_init().

А можно пример как правильно делать? мне нужно вообще переменные структуры rq. я думаю сначала создать папку, а потом для каждого значения свой файлик(debugfs_create_u8). может можно как то по другому?

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