Dnia poniedziałek, 4 września 2006 13:16, Wojciech "Sas" Cieciwa napisał:
> Paweł Gołaszewski wrote:
> > Witam,
> >
> > Wygląda na to, że sprawa nagłówków kernelowo-userlandowych staje się
> > coraz bardziej pilna. Przy okazji budowania upstart napotkałem kilka
> > rzeczy: - brak nagłówka inotify.h - po prostym skopiowaniu z kernela
> > sprawa załatwiona. klibc-devel zawiera nagłówek o tej nazwie (zawartości
> > nie porównywałem),
> > - definicje RLIMIT_NICE i RLIMIT_RTPRIO - choć to ostatnie chyba powinno
> > być w nagłówkach glibc-a (jest w 2.4?)
> > - ...zapewne trochę innych rzeczy jest jeszcze...
> >
> > Nasze ostatnie nagłówki to dosyć antyczne rzeczy - wartoby chyba
> > zastanowić się co z tym dalej. To dotyczy także AC, bo kernele tam są
> > znacznie nowsze (mają być).....
>
> Wszystko pięknie ładnie.
> A masz jakieś rozwiązanie inne niż siedzenie ręcznie nad nagłówkami ?
nie ma, co prawda był pomysł, aby zamiast rodzielać nagłówki
(i sprawdzać #includes w całym jajku) zmodyfikować struktury jądra
tak, by uzywały flexible array dla prywatnych danych jądra.
dzięki temu userland miałby stabilne ABI, jądro mogło mieszać sobie do woli.
$ gcc user_kernel_h.c -ansi -Wall -O2 -D__KERNEL__ -m32 && ./a.out
allocating 12 byte(s)...
sizeof( some_struct ) = 8
$ gcc user_kernel_h.c -ansi -Wall -O2 -m32 && ./a.out
allocating 8 byte(s)...
sizeof( some_struct ) = 8
#include <stdio.h>
#include <stdlib.h>
struct some_struct
{
int i;
int j;
char* priv[];
};
#ifdef __KERNEL__
struct some_struct_priv
{
int k;
};
#endif
struct some_struct* alloc_some_struct()
{
size_t size = sizeof( struct some_struct );
#ifdef __KERNEL__
size += sizeof( struct some_struct_priv );
#endif
printf( "allocating %Zd byte(s)...\n", size );
return (struct some_struct*)malloc( size );
}
void update( struct some_struct* s )
{
s->i = 1;
s->j = 2;
#ifdef __KERNEL__
struct some_struct_priv* priv = (struct some_struct_priv*)s->priv;
priv->k = 3;
#endif
}
int main()
{
struct some_struct* s = alloc_some_struct();
update( s );
printf( "sizeof( some_struct ) = %Zd\n", sizeof( *s ) );
free( s );
return 0;
}
_______________________________________________
pld-devel-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl