программа readts.c:
#include <linux/shed.h>
int main () {
task_t p;
return 0;
}пытаюсь скомпилировать:
[root@localhost kmem_t]# gcc -o x1 readts.c
In file included from /usr/include/linux/timex.h:186,
from /usr/include/linux/sched.h:10,
from readts.c:1:
/usr/include/linux/time.h:9: error: redefinition of `struct timespec'
/usr/include/linux/time.h:15: error: redefinition of `struct timeval'
In file included from /usr/include/linux/sched.h:11,
from readts.c:1:
/usr/include/linux/jiffies.h:16: error: parse error before "jiffies_64"
/usr/include/linux/jiffies.h:20: error: parse error before "get_jiffies_64"
In file included from /usr/include/linux/cpumask.h:8,
from /usr/include/linux/sched.h:14,
from readts.c:1:
/usr/include/linux/bitmap.h: In function `bitmap_empty':
/usr/include/linux/bitmap.h:15: error: `BITS_PER_LONG' undeclared (first use in this function)
/usr/include/linux/bitmap.h:15: error: (Each undeclared identifier is reported only once
/usr/include/linux/bitmap.h:15: error: for each function it appears in.)
/usr/include/linux/bitmap.h: In function `bitmap_full':
/usr/include/linux/bitmap.h:29: error: `BITS_PER_LONG' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In function `bitmap_equal':
/usr/include/linux/bitmap.h:44: error: `BITS_PER_LONG' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In function `bitmap_shift_right':
/usr/include/linux/bitmap.h:85: error: `__shr_tmp' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In function `bitmap_shift_left':
/usr/include/linux/bitmap.h:98: error: `__shl_tmp' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In function `bitmap_weight':
/usr/include/linux/bitmap.h:144: error: `BITS_PER_LONG' undeclared (first use in this function)
In file included from /usr/include/linux/sched.h:14,
from readts.c:1:
/usr/include/linux/cpumask.h:10:5: missing binary operator before token "("
/usr/include/linux/cpumask.h:34:5: missing binary operator before token "("
In file included from /usr/include/linux/sched.h:20,
from readts.c:1:
/usr/include/asm/mmu.h: At top level:
/usr/include/asm/mmu.h:13: error: field `sem' has incomplete type
In file included from /usr/include/linux/signal.h:4,
from /usr/include/linux/sched.h:24,
from readts.c:1:
/usr/include/linux/list.h:591:2: warning: #warning "don't include kernel headers in userspace"
In file included from /usr/include/linux/signal.h:6,
from /usr/include/linux/sched.h:24,
from readts.c:1:
/usr/include/asm/signal.h:29: error: conflicting types for `sigset_t'
/usr/include/sys/select.h:38: error: previous declaration of `sigset_t'
In file included from /usr/include/asm/siginfo.h:4,
from /usr/include/linux/signal.h:7,
from /usr/include/linux/sched.h:24,
from readts.c:1:
/usr/include/asm-generic/siginfo.h:70: error: parse error before "clock_t"
/usr/include/asm-generic/siginfo.h:87: error: parse error before '}' token
/usr/include/asm-generic/siginfo.h:88: error: parse error before '}' token
In file included from /usr/include/linux/sched.h:28,
from readts.c:1:
/usr/include/linux/completion.h:15: error: parse error before "wait_queue_head_t"
/usr/include/linux/completion.h: In function `init_completion':
/usr/include/linux/completion.h:26: error: dereferencing pointer to incomplete type
/usr/include/linux/completion.h:27: error: dereferencing pointer to incomplete type
In file included from /usr/include/linux/sched.h:29,
from readts.c:1:
/usr/include/linux/pid.h: At top level:
/usr/include/linux/pid.h:18: error: field `task_list' has incomplete type
/usr/include/linux/pid.h:19: error: field `hash_chain' has incomplete type
/usr/include/linux/pid.h:24: error: field `pid_chain' has incomplete type
In file included from /usr/include/linux/sched.h:30,
from readts.c:1:
/usr/include/linux/percpu.h: In function `__alloc_percpu':
/usr/include/linux/percpu.h:46: error: `GFP_KERNEL' undeclared (first use in this function)
In file included from /usr/include/linux/sched.h:101,
from readts.c:1:
/usr/include/linux/timer.h: At top level:
/usr/include/linux/timer.h:10: error: field `entry' has incomplete type
readts.c: In function `main':
readts.c:3: error: `task_t' undeclared (first use in this function)
readts.c:3: error: parse error before "p"
Вот такие пироги((( что я не так делаю?
>#include <linux/shed.h>
>Вот такие пироги((( что я не так делаю?Что-то твоя программа совсем непохожа на модуль ядра, да и компилируешь ты ее не как модуль ядра. А пытаешься зачем-то включить заголовочный файл ядра. Ты уверен в том что делаешь?
а мне модуль ядра и не нужен.
мне нужно объявление task_struct,конкретно,чтобы прочитать информацию sizeof(task_struct)
если я не хочу писать модуль ядра,то как мне работать со структурами ядра?
>а мне модуль ядра и не нужен.
>мне нужно объявление task_struct,конкретно,чтобы прочитать информацию sizeof(task_struct)А с каких пор task_struct стала доступной из user space?
>>а мне модуль ядра и не нужен.
>>мне нужно объявление task_struct,конкретно,чтобы прочитать информацию sizeof(task_struct)
>
>А с каких пор task_struct стала доступной из user space?а что посоветуешь? если все-таки надо...не переописывать же вручную...а модуль не надо...
как тогда быть?
>>А с каких пор task_struct стала доступной из user space?
>
>а что посоветуешь? если все-таки надо...не переописывать же вручную...Ничего не могу посоветовать, так как трудно даже сказать ЗАЧЕМ task_struct нужна в user space.
>>>А с каких пор task_struct стала доступной из user space?
>>
>>а что посоветуешь? если все-таки надо...не переописывать же вручную...
>
>Ничего не могу посоветовать, так как трудно даже сказать ЗАЧЕМ task_struct нужна
>в user space.
давай расскажу.мне надо мониторинг структур ядра осуществлять.и я из /dev/kmem хочу забрать task_struct для current и с его помощью найти task_struct для нужного мне(по pid) процесса,чтобы вывести информацию о процессе : открытые файлы,состояние памяти,родители,дети и т.д.
и вот зачем оно мне надо
сейчас скажешь,а зачем? - есть же /proc, но вот надо не из /proc ((
>>>>А с каких пор task_struct стала доступной из user space?
>>>
>>>а что посоветуешь? если все-таки надо...не переописывать же вручную...
>>
>>Ничего не могу посоветовать, так как трудно даже сказать ЗАЧЕМ task_struct нужна
>>в user space.
>
>
>давай расскажу.мне надо мониторинг структур ядра осуществлять.и я из /dev/kmem хочу забрать
>task_struct для current и с его помощью найти task_struct для нужного
>мне(по pid) процесса,чтобы вывести информацию о процессе : открытые файлы,состояние памяти,родители,дети
>и т.д.
>и вот зачем оно мне надо
>сейчас скажешь,а зачем? - есть же /proc, но вот надо не из
>/proc ((ИМХО, у Вас еще нос не дорос заниматься системным программированием, если Вы задаете подобные вопросы.
Учите мат. часть, а потом уже лезьте в структуры ядра.
>сейчас скажешь,а зачем? - есть же /proc, но вот надо не из /proc ((Очень странное требование.
Данные ядра могут меняться в произвольные моменты времени относительно выполнения твоей программы (это тем более опасно, когда мы говорим про связанные списки структур), поэтому программа априори должна работать на уровне ядра, чтобы обращаться к этим данным, т.е. быть модулем ядра. Но так как уже есть /proc, то зачем изобретать велосипед?