导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    Tina System Init 流程分析

    Linux
    1
    1
    1434
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Y
      YterAA LV 7 最后由 编辑

      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 条回复 最后回复 回复 引用 分享 3
      • 1 / 1
      • First post
        Last post

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

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