2001-03-21 11:14:15

by Manoj Sontakke

[permalink] [raw]
Subject: initialisation code

Hi
I am trying to implement some QoS in kernel(in the IP
layer....similar to TC..... BTW TC works in the data-link layer). I am
dequeuing the packets from the IP queue when the function ip_forward is
called. After processing them, I am reinserting them back to the IP queue.
I have a initlisation function (just like pktsched_init in
TC). Can anyone tell me, where in the kernel boot sequence should I make a
call to my initialisation function.

Thanks in advance for all the help.

Manoj


2001-03-21 11:39:10

by Keith Owens

[permalink] [raw]
Subject: Re: initialisation code

On Wed, 21 Mar 2001 22:00:51 +0530 (IST),
Manoj Sontakke <[email protected]> wrote:
> I have a initlisation function (just like pktsched_init in
>TC). Can anyone tell me, where in the kernel boot sequence should I make a
>call to my initialisation function.

Welcome to the wonderful world of magic initialisation.

(1) Declare your initialisation function as int __init foo_init(void).

(2) Decide when your function needs to be called, e.g. after initialisers
for A, B, C but before initialisers for X, Y, Z.

(3) Edit the Makefile to insert obj-$(CONFIG_FOO) after the objects
that contain initialisers A, B, C and before the objects for
initialisers X, Y, Z.

(4) Document why the order of this routine is required! Without docs
in the Makefile we have no idea if object order is correct or not.

2001-03-22 04:29:02

by Keith Owens

[permalink] [raw]
Subject: Re: initialisation code

On Thu, 22 Mar 2001 14:59:31 +0530 (IST),
Manoj Sontakke <[email protected]> wrote:
>On Wed, 21 Mar 2001, Keith Owens wrote:
>> Welcome to the wonderful world of magic initialisation.
>>
>> (1) Declare your initialisation function as int __init foo_init(void).
>> (2) Decide when your function needs to be called, e.g. after initialisers
>> for A, B, C but before initialisers for X, Y, Z.
>
>where do i find this ABC abs XYZ ?

You coded it, you know what kernel facilities must be initialised
before your program (ABC) and what kernel code cannot be initialised
until after your program (XYZ).

>What if I have to make it as an insertable/removable module?

static int __init foo_init(void) {
...
}

module_init(foo_init);

Automatically generates the correct code for a built in object and for
a module. See include/linux/init.h and almost any drivers/net/*.c,
plip.c is a good example.

>>
>> (3) Edit the Makefile to insert obj-$(CONFIG_FOO) after the objects
>> that contain initialisers A, B, C and before the objects for
>> initialisers X, Y, Z.
>
>Do I need to edit the .config file to add CONFIG_FOO=y ?

Do not edit .config, it is generated. Edit a [Cc]onfig.in file, read
Documentation/kbuild/config-language.txt and look at the [Cc]onfig.in
file in the directory where you are putting your source. Do not forget
to update Documentation/Configure.help.

2001-03-22 04:58:36

by Manoj Sontakke

[permalink] [raw]
Subject: Re: initialisation code

Hi
Thanks for all the help.

On Wed, 21 Mar 2001, Keith Owens wrote:

> On Wed, 21 Mar 2001 22:00:51 +0530 (IST),
> Manoj Sontakke <[email protected]> wrote:
> > I have a initlisation function (just like pktsched_init in
> >TC). Can anyone tell me, where in the kernel boot sequence should I make a
> >call to my initialisation function.
>
> Welcome to the wonderful world of magic initialisation.
>
> (1) Declare your initialisation function as int __init foo_init(void).
>
> (2) Decide when your function needs to be called, e.g. after initialisers
> for A, B, C but before initialisers for X, Y, Z.

where do i find this ABC abs XYZ ?
What if I have to make it as an insertable/removable module?

>
> (3) Edit the Makefile to insert obj-$(CONFIG_FOO) after the objects
> that contain initialisers A, B, C and before the objects for
> initialisers X, Y, Z.

Do I need to edit the .config file to add CONFIG_FOO=y ?

>
> (4) Document why the order of this routine is required! Without docs
> in the Makefile we have no idea if object order is correct or not.
>
of course

manojs