上期学习了android Linux安全介绍,下篇继续介绍android framwork层安全。...之后,它将 Linux 内核加载到内存中,并将控制权交给它。 Linux 内核初始化环境来运行 C 代码,激活中断控制器,设置内存管理单元,定义调度,加载驱动程序和挂载根文件系统。...strcmp (basename( argv[0] ), "ueventd") ) 5 return ueventd_main ( argc, argv ) ; 6 ... 7...第一个守护进程派生于init进程,它是ueventd守护进程。 这个服务运行自己的main函数(参见清单 3.1 中的第 5 行),它读取ueventd.rc和ueventd....Android 和 Linux 中的某些目录是相同的,例如/dev,/proc,/sys,/etc,/mnt等。这些文件夹的用途与 Linux 中的相同。
对于我们熟悉的 PC,上电后,通过 BIOS 引导操作系统 (Windows、Linux等)。...在前面的文章中,QEMU 直接引导鸿蒙系统的 Linux 内核,这种方式缺少灵活性,关键是在实际产品中,嵌入式系统是不会直接上电引导 Linux 内核的(整个软件系统一般位于 Flash,需要能够读写...Booting Linux on physical CPU 0x0 Linux version 4.19.155+ (alex@alex-MS-7C22) (Android (dev based on...: Parsing file /vendor/ueventd.rc... ueventd: Unable to read config file '/vendor/ueventd.rc': open()...file /ueventd.unknown.rc... ueventd: Unable to read config file '/ueventd.unknown.rc': open() failed
源码分析 main(入口函数) Linux内核加载完成后,在系统文件中寻找init.rc文件,并启动init进程。init进程的入口函数main。...(节点创建) ueventd_main 负责节点创建。...源码路径:system/core/init/ueventd.cpp ueventd进程通过两种方式创建设备节点文件: 冷启动。统一创建好的文件节点如cpu频率等。 热启动。...result.ok()) { LOG(FATAL) << result.error(); } //Epoll是Linux内核为处理大批量文件描述符而作的改进。...僵尸进程 在Unix/Linux中,父进程fork创建子进程,在子进程终止后,如果父进程不知道子进程已经终止了,这时子进程虽然退出了,但是系统进程表还保留它的信息,这个子进程就被称为僵尸进程。
: ueventd started!...selinux: SELinux: Loaded file_contexts ueventd: Parsing file /ueventd.rc... ueventd: Parsing file /vendor.../ueventd.rc... ueventd: Unable to read config file '/vendor/ueventd.rc': open() failed: No such file...or directory ueventd: Parsing file /odm/ueventd.rc... ueventd: Unable to read config file '/odm/ueventd.rc...': open() failed: No such file or directory ueventd: Parsing file /ueventd.unknown.rc... ueventd: Unable
要注意,在第一步中,这个顺序可能会因不同的设备而异,但是在 Linux 内核加载之后,过程通常是相同的。 引导过程的流程如图 3.1 所示。...之后,它将 Linux 内核加载到内存中,并将控制权交给它。 Linux 内核初始化环境来运行 C 代码,激活中断控制器,设置内存管理单元,定义调度,加载驱动程序和挂载根文件系统。...strcmp (basename( argv[0] ), ”ueventd”) ) 5 return ueventd_main ( argc, argv ) ; 6 ... 7...第一个守护进程派生于init进程,它是ueventd守护进程。 这个服务运行自己的main函数(参见清单 3.1 中的第 5 行),它读取ueventd.rc和ueventd....Android 和 Linux 中的某些目录是相同的,例如/dev,/proc,/sys,/etc,/mnt等。这些文件夹的用途与 Linux 中的相同。
下面开始 启动代码(main) 主要分为七部分: 第一部分 判断启动部分,如果是ueventd,调用ueventd_main主函数,如果是watchdogd,调用watchdogd_main主函数....mount在目录dev/pts下 proc 一种基于内存的虚拟文件系统,它可以看作是内核内部数据结构的接口,通过它可以获得系统的信息,同时能够在运行时修改特定的内核参数 sysfs proc文件系统类似,它是Linux2.6...strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!...am.QueueEventTrigger("early-init"); // Queue an action that waits for coldboot done so we know ueventd...am.QueueBuiltinAction(mix_hwrng_into_linux_rng_action, "mix_hwrng_into_linux_rng"); am.QueueBuiltinAction
当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1。...它的生命周期贯穿整个linux 内核运行的始终, linux中所有其它的进程的共同始祖均为init进程,可以通过adb shell ps | grep init查看进程号。...strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!...am.QueueEventTrigger("early-init"); // Queue an action that waits for coldboot done so we know ueventd...am.QueueBuiltinAction(mix_hwrng_into_linux_rng_action, "mix_hwrng_into_linux_rng"); am.QueueBuiltinAction
strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!...security context restored to the proper value. // This must happen before /dev is populated by ueventd...am.QueueBuiltinAction(mix_hwrng_into_linux_rng_action, "mix_hwrng_into_linux_rng"); am.QueueBuiltinAction...start ueventd 另一部分是以“service”关键字开头的服务列表(service list): service ueventd /sbin/ueventd class core...critical seclabel u:r:ueventd:s0 动作列表用于创建所需目录,以及为某些特定文件指定权限,而服务列表用来记录init进程需要启动的一些子进程。
bugreports d dsp init.environ.rc init.zygote32.rc odm proc sdcard ueventd.rc...bugreports d dsp init.environ.rc init.zygote32.rc odm proc sdcard ueventd.rc
在init.rc中定义了很多系统的守护进程,这里主要是做一些简单的介绍 一、uevent 负责相应uevent事件,创建设备节点文件: 代码在init.rc 550行 550service ueventd.../sbin/ueventd 551 class core 552 critical 553 seclabel u:r:ueventd:s0 二、console 包含常用的shell命令
Android是基于Linux系统的,所以Android启动将由Linux Kernel启动并创建init进程。该进程是所有用户空间的鼻祖。...strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (argc...创建增强型Linux if (!...在Linux的新内核中,epoll是用来取代select/poll的,它是Linux内核为处理大批量文件描述符的改进版poll,是Linux下多路复用I/O接口select/poll的增强版,它能显著提升程序在大量并发连接中只有少量活跃的情况下的系统...今天主要尝试分析了一下Android在Linux系统下的init启动涉及的主要流程。
如: service ueventd /sbin/ueventd 备注语句以符号”#”作为注释. 语言基本上分为4个块: Actions Commands Services 和 Options....1000 22 # Set the security context of /adb_keys if present. 23 restorecon /adb_keys 24 start ueventd...probably should default to nobody) 23 Currently, if your process requires linux capabilities then you...seclabel' before exec'ing this service. 35 Primarily for use by services run from the rootfs, e.g. ueventd
二、Init.cpp init是Linux系统中用户空间的第一个进程(pid=1),Linux Kernel启动后,会调用/system/core/init/Init.cpp的main()方法 那我们就来看下...strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!...queue_builtin_action(mix_hwrng_into_linux_rng_action, "mix_hwrng_into_linux_rng"); queue_builtin_action...",则执行守护进程ueventd的主函数ueventd_main() 2 如果文件名是"watchdogd",则执行看门狗守护进程的主函数watchdogd_main() 如果文件名既不是"ueventd...同时SELinux是一个安全体系结构,它通过LSM(Linux Security Modules)框架被集成到Linux Kernel 2.6.x。
init init 是用户态的第一个进程,由 Linux 内核启动,进程号为1。...strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!...在 Linux 2.6 之后,udev 取代了 DevFS,即 userspace /dev。...在 Android 中对应的用户空间程序就是 ueventd。...在 Linux 中使用 init.rc 文件来描述各个启动项的启动属性和顺序,关于该文件格式的详细介绍可以参考 initrc/README.md。
280 1973-11-21 15:32:59.846666701 +0800 sbin /sbin/ 目录下的文件 : 其中 /sbin/su 是用于获取 root 权限的命令程序 ; /sbin/ueventd.../magiskinit lrwxrwxrwx 1 root root 7 1973-11-21 15:32:59.580000007 +0800 ueventd -> ..
--> App,具体来说: Bootloader层:Android底层基于Linux内核,所以这个阶段的启动流程和正常启动Linux操作系统一样(不过pc环境与嵌入式环境不同,嵌入式系统通常不会有像...从而把设备的软硬件环境进入一个合适的状态,以便为下一阶段Linux Kernel的执行准备好环境。...Linux Kernel:Linux Kernel通常包含两部分代码,分别为实模式代码和保护模式代码。...strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!...am.QueueEventTrigger("early-init"); // Queue an action that waits for coldboot done so we know ueventd
Android init 启动 Android启动的第一个进程是由Linux Kernel启动的init进程。在init进程启动的过程中,会通过解析init.rc文件来启动zygote进程。...就是Linux需要执行的具体内容。 Commands包含的指令还是很多的,这里列举一些常用的指令。...# This should occur before anything else (e.g. ueventd) is started....restorecon /adb_keys start ueventd # create mountpoints mkdir /mnt 0775 root system on...这一步是Linux首次进入到Java层。 为了避免单篇幅度过长,关于Linux如何启动Java中的ZygoteInit与ZygoteInit的内部启动过程,这块的具体内容将会在下篇文章继续分析。
Linux Kernel层,Android是基于Linux内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。...这个是之前我画的一张启动流程图: Java和C++通过JNI连接,C/C++通过system call直接调用linux os。 4.1 Loader层 1....2号进程 kthreadd进程(pid=2):由0号进程通过kernel_thread创建,是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal...init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程; init进程还启动servicemanager、bootanim、mediaserver
bugreports d dsp init.environ.rc init.zygote32.rc odm proc sdcard ueventd.rc
不出所料,Linux 内核是 Android 操作系统的基础[3]。 Android 不仅依赖于 Linux 的进程,内存和文件系统管理,它也是 Android 安全架构中最重要的组件之一。...在 Linux 中,内存中的所有文件都受 Linux 自定义访问控制(DAC)的约束。访问权限由文件的创建者或所有者为三种用户类型设置:文件的所有者,与所有者在同一组中的用户和所有其他用户。...这些架构决策在 Linux 内核层上建立了高效的应用沙箱。 这种类型的沙箱很简单,并基于 Linux 可选访问控制模型(DAC)的验证。...permission> 15 ... 16 Android 中有一些地方可以用于设置文件、驱动和 Unix 套接字的文件系统权限:init程序,init.rc配置文件,ueventd.rc...为了在 Android 中实现此控制,需要添加特殊的内核补丁,将网络设施的访问限制于属于特定 Linux 组或具有特定 Linux 功能的进程。
领取专属 10元无门槛券
手把手带您无忧上云