unit sys_sysinit; {$mode ObjFPC}{$H+} {$CALLING SysV_ABI_CDecl} interface procedure sys_init; implementation uses time, kern_time, subr_sleepqueue, kern_sysctl, kern_thr, kern_thread, kern_sig, kern_timeout, kern_synch, kern_umtx, kern_namedobj, vmount, vfiledesc, vm_map, kern_dmem, kern_mtxpool, vsys_generic, vfs_subr, vfs_lookup, vfs_init, kern_event, devfs, devfs_devs, devfs_vfsops, fdesc_vfsops, null_vfsops, ufs, kern_descrip, vfs_mountroot, kern_conf, dev_null, dev_tty, dev_dmem; var daemon_thr:p_kthread; //Daemon for a separate thread procedure sys_daemon(arg:Pointer); begin repeat vnlru_proc; pause('sys_daemon',hz); until false; kthread_exit(); end; procedure sys_daemon_init; var n:Integer; begin n:=kthread_add(@sys_daemon,nil,@daemon_thr,'sys_daemon'); Assert(n=0,'sys_daemon'); end; procedure module_init; begin vfs_register(@devfs_vfsconf); vfs_register(@fdescfs_vfsconf); vfs_register(@nullfs_vfsconf); vfs_register(@ufs_vfsconf); vfs_mountroot.vfs_mountroot(); fildesc_drvinit; // null_modevent(0,MOD_LOAD); ttyconsdev_init(); dmemdev_init(); end; //Manual order of lazy initialization procedure sys_init; begin timeinit; init_sleepqueues; sysctl_register_all; PROC_INIT; threadinit; siginit; umtxq_sysinit; kern_timeout_init; named_table_init; vmountinit; fd_table_init; vminit; init_dmem_map; mtx_pool_setup_dynamic; selectinit; vntblinit; nameiinit; knote_init; vfs_event_init; devfs_mtx_init; devfs_devs_init; module_init; sys_daemon_init; end; end.