电阻加热炉KernelZircon的启动:⾸先运⾏boot-shim.ld的ENTRY(_start);//boot-shim.S的FUNCTION(_start);//start.S汇编代码,之后到lk_main(); ~~//内调zircon/kernel/的lk_main();
~~//创建"bootstrap2"线程,从的lk_init_level(),参数"global_prng_thread_safe";//内调的BecomeThreadSafe(); ~~//线程"bootstrap2"创建成功后执⾏bootstrap2()函数; ~~//创建userboot(内核线程),的lk_main();//内调init.h的lk_primary_cpu_init_level(),参数LK_INIT_LEVEL_LAST;//内调 的lk_init_level(),遍历到"userboot";
~~//内调的userboot_init();//创建,启动;
~~//运⾏userboot(由内核创建;创建bootsvc进程),内调的bootstrap();//内调的 parse_options();之后调⽤的LoaderService::Serve();
内裤加工
~~//转到HandleRequest();//转到LoadObject();//转到TryLoadObject();//内调的bootfs_open(),传⼊参
数"bin/bootsvc";
~~//内调的bootstrap(),创建进程"bin/bootsvc",创建线程;//转到load_child_process();//内调的elf_load_bootfs();
递进式分配器~~//运⾏bootsvc进程(由userboot进程创建;创建devmgr进程),的main();
~~//创建devmgr进程(由bootsvc创建),的main();//内调LaunchNextProcess(),传⼊参
数"bin/component_manager";
~~//运⾏devmgr进程,zircon/system/core/devmgr/的main();//内调的FsManager::WatchExit();
~~//创建driver_manager进程(由bootsvc创建)//...//的Launch();//新建进程,传
⼊"/boot/bin/driver_manager";
z轴线性马达
~~//运⾏driver_manager进程,driver_的main();//内调driver_manager/的
start_console_shell();创建进程;
~~//线程运⾏,driver_manager/的console_starter();//转到SystemInstance::ConsoleStarter();
~~//内调driver_的DevmgrLauncher::LaunchWithLoader(),传⼊参
数"/boot/bin/svchost","/boot/bin/netsvc","/boot/bin/sh","/boot/bin/miscsvc";
~~//"service-starter"运⾏(由driver_的main()创建),运⾏driver_manager/的SystemInstance::service_starter();//内调SystemInstance::ServiceStarter();
~~//driver的初始化(由driver_manager进程发起),driver_的main();//内调的
PrepareProxy();//内调的Coordinator::NewDevhost();
~~//转到dc_launch_devhost(),传⼊参数"driver_host:sys","driver_host:root","driver_host:misc","driver_host:pci",参数由的InitCoreDevices()初始化;
太阳能沼气~~//"driver_host:sys"进程运⾏,driver_的CreateDevice();//内调,传⼊参数"/boot/driver/platform-bus.so";//转到dh_find_driver(),dlopen_vmo(),dlsym();
~~//内调devhost.h的CreateOp();//内调create(),执⾏驱动so库的create();
~~//驱动so库执⾏,的platform_bus_create();//内调PlatformBus::Init();//内调
PlatformBus::GetBoardInfo();
====
处理服务进程的crsah:启动时的main();//内调的start_crashsvc();//内调 thrd_create_with_name(),传⼊crash_svc函数地址;
~~//当出现服务crash时,的crash_svc();//内调channel.h的wait_one(),read();
添加服务:garnet/examples/fidl/echo_server_cpp/echo_的构造函数;//内调sdk/lib/sys/cpp/ 的AddPublicService();
~
~//内调outgoing_directory.h的AddEntry();其中,根是通过PseudoDir->Lookup("svc")获取;//内核
zircon/system/ulib/fs/的AddEntry();//内调EntryByNameMap的insert();95215232
获取服务:garnet/examples/fidl/echo_client_cpp/echo_的Start();
~~//内调component_context.h的Create(),ComponentContext的svc();//的ServiceDirectory::Connect();
~~//内调zircon/system/ulib/的fdio_service_connect_at();//内调的fdio_namespace::Open(); ~~//转到fdio_namespace::WalkLocked();//内核zircon/system/ulib/fs/中PseudoDir继承LocalVnode的
Lookup();//内调EntryByNameMap的find();