初始化过程的调用被安排在内核;/sys/kern/init_main.c的mi_startup函数中,;mi_startup;是系统启动过程中,;第一个被执行的C语言函数,;它做的第一件事情就是调用这些初始化函数,;开始时对所有的初始化过程做优先级排序,;然后顺序调用它们.;
void;;;;
mi_startup(void)
{;;;;;;;
register;struct;sysinit;**sipp;;/*;system;initialization*/
register;struct;sysinit;**xipp;;/*;interior;loop;of;sort*/
register;struct;sysinit;*save;;;/*;bubble*/
restart:
这是优先级别排序,;这里没有使用那个在setdef0.c中定义的计数器,;而是使用
了setdef1.c中定义的空指针作为结束标志.
/*;;;;;;
*;Perform;a;bubble;sort;of;the;system;initialization;objects;by
*;their;subsystem;(primary;key);and;order;(secondary;key).
*/;;;;;
for;(sipp;=;sysinit;;*sipp;;sipp);{
for;(xipp;=;sipp; ;1;;*xipp;;xipp);{
if;((*sipp)->subsystem;< (*xipp)->subsystem;||
((*sipp)->subsystem;==;(*xipp)->subsystem;&&
(*sipp)->order;<= (*xipp)->order))
continue/*;skip*/
save;=;*sipp;
*sipp;=;*xipp;
*xipp;=;save;
}
}
/*
*;Traverse;the;(now);ordered;list;of;system;initialization;tasks.
*;Perform;each;task,;and;continue;on;to;the;next;task.
*
*;The;last;item;on;the;list;is;expected;to;be;the;scheduler,
*;which;will;not;return.
*/
for;(sipp;=;sysinit;;*sipp;;sipp);{
if;((*sipp)->subsystem;==;SI_SUB_DUMMY)
continue/*;skip;dummy;task(s)*/
这是按顺序调用:
/*
*;Traverse;the;(now);ordered;list;of;system;initialization;tasks.
*;Perform;each;task,;and;continue;on;to;the;next;task.
*
*;The;last;item;on;the;list;is;expected;to;be;the;scheduler,
*;which;will;not;return.
*/
for;(sipp;=;sysinit;;*sipp;;sipp);{
if;((*sipp)->subsystem;==;SI_SUB_DUMMY)
continue/*;skip;dummy;task(s)*/
if;((*sipp)->subsystem;==;SI_SUB_DONE)
continue;
/*;Call;function;*/
(*((*sipp)->func))((*sipp)->udata);
/*;Check;off;the;one;we"re;just;done;*/
(*sipp)->subsystem;=;SI_SUB_DONE;
/*;Check;if;we"ve;installed;more;sysinit;items;via;KLD;*/
if;(newsysinit;!=;NULL);{
if;(sysinit;!=;(struct;sysinit;**)sysinit_set.ls_items)
free(sysinit,;M_TEMP);
sysinit;=;newsysinit;
newsysinit;=;NULL;
goto;restart;
}
}
panic("Shouldn"t;get;here!");
}
推荐阅读
- FreeBSD中Telnet最大连接用户数的定制
- FreeBSD handbook中文版 5 X Window 系统
- freebsd 软件安装相关命令集
- FreeBSD中文化全攻略
- 如何去掉FreeBSD控制台上显示的太多的提示信息
- FreeBSD下的带宽控制 -- ipfw+dummynet
- FreeBSD如何保存和使用内核更改信息
- FreeBSD 安全入门
- 从网络安装最新的FreeBSD-Stable
- 如何看FreeBSD的系统日志