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

Odpowiedź listem elektroniczym