Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    Tina System Init 流程分析

    Linux
    1
    1
    1434
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Y
      YterAA LV 7 last edited by

      init 进程是内核启动的第一个用户进程,它根据配置文件决定启动那些程序,比如执行某些脚本、启动 shell、运行用户指定的程序等。init 进程是后续所有进程的发起者,比如init进程启动 /bin/sh 程序后,才能在控制台输入各种命令。

      init进程的执行程序通常是在/sbin/init,上面讲述的 init 进程的作用只不过是 /sbin/init 这个程序的功能。我们完全可以编写自己的 /sbin/init 程序,或者传入命令行参数“init=xxxx”指定某个程序作为init进程运行。

      tina系统中目前支持两种init程序:procd init 和 busybox init。下面我们来简单分析下kernel是如何调用第一个用户进程。

      18b9c8f3-50d3-4a71-8527-5af4d091f410-image.png

      如上图所示,内核启动的第一个c语言入口函数为 start_kernel(), 在函数中:会设置与体系结构相关的环境变量,初始化控制台,以及挂载根文件系统,最后启动 init 进程。

      其中的 run_init_process 函数使用它的参数所指定的程序来创建第一个用户进程。

      (1)如果 ramdisk_execute_command 变量指定了要运行的程序,则启动它。
      ramdisk_execute_command 的取值分三种情况,
      1)如果命令行参数指定了“rdinit=xxx”,则ramdisk_execute_command等于这个参数指定的程序
      2)否则,如果/init程序存在,ramdisk_execute_command就等于“/init”。
      3)否则,ramdisk__execute_command为空
      (2)如果execute_command变量指定了要运行的程序,启动它。
      如果命令行参数指定了"init=...",则execute_command等于这个参数指定的程序,否则为空
      (3)如果 ramdisk_execute_command 和 execute_command 参数都没有指定,则依次执行 ”/sbin/init、/etc/init、/bin/init、/bin/sh“

      在tina系统中,我们可以通过去修改env.cfg文件 ”rdinit=xxx“ 或 ”init=xxx“ 参数来指定启动的第一个用户进程

      example:
      tina/target/allwinner/azalea-m2ultra/configs下,修改env-3.10.cfg(如果没有这个文件,则到tina/target/allwinner/generic/configs/拷贝一份env-3.10.cfg到tina/target/allwinner/azalea-m2ultra/configs/),修改文件中的”init=‘指定的应用进程’ “即可

      1 Reply Last reply Reply Quote Share 3
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策