当前位置: 首页 > article >正文

笔记整理—内核!启动!—kernel部分(6)buxybox详解

        上一章我们说到busybox,但还有一部分没有说完,busybox的配置与kernel的menuconfig几乎一样。也是配置然后make、makeinstall,kbuild是busybox的makefile,可以根据installtion options设定安装位置,安装后会出现/bin、/linuxrc、/sbin、/usr等文件夹。

        inittab文件与busybox有关,与init进程1文件有关,是一个配置文件,放在etc目录下。inittabs是一个文本格式的文件,其中的格式如下:

::sysinit:
    ::是格式,sysinit是项目

id:rulevels:action:process
    id为id字段,rulevels为运行级别,action为操作,process为执行进程

        busybox最终进入一个循环,当某个action满足,则执行这个操作的进程,所以inittab将会一直使用。

        action:respawm=>若process字段不存在,就会启动这个操作。

                     wait=>启动进程,等待处理结束后进入下一个进程

                      once=>只执行一次

                      boot=>只在系统启动时才启动一次

                      sysinit=>在访问控制台前执行(rcs)

                      askfirst=>让用户按下回车(控制台准备好了,可用respawn代替这样就不用回车了)

                      ctrlabtdel=>满足ctrl+alt+del则(重启)

                      shutdown=>关机就(取消挂载文件系统)

                       estart=>重启

        对于busybox而言coreutils是核心,用于存放核心指令。

        busybox的入口:kernel或uboot等的裸机程序入口不在main,而是在链接脚本,mian适用于应用层程序,作为其程序开始的标志,因为busybox是一个应用程序所以mian是其入口。

        kconfig是一个编译用工具文件夹,如果一个文件被使用了,会被编译为.o文件,但不是所有.o文件都有作用,在应用层上,有点编译了但并没有链接。

        busybox的main位置位于libbb/appletlib.c中,xxx_main()是支持的每一个程序的入口。

        busybox的ls、pwd、......都链接到了busybox,而非单独的一根个程序,通过如ls_main()去实现ls指令。在run_applet_and_exit(applet,argv)进行的指令调用,找不到就打印not find。

        inittab解析:busybox/init/initial.c/init_mian函数.console_init()初始化控制台,chdir("/")切换到根目录;setsid() super id;puyenv()保存环境变量;parse_inittab 解析inittab。

        inittab的作用:将action与process解析出来,然后执行一次sysinit、wait、once。在while(1)中执行respwan与askfurst。

        pwd指令:pwd_main()->buf=realloc_getcwd_or_warn->getcwd()(这是一个库函数)

        busybox的shell指令是阉割了的版本,能用但功能不全,只是对一些指令做了集合,ubuntu的vmlinuz作为内核是未压缩的。

        本章对busybox的解析就做到这,下一章将对rcs文件进行解析。

                


http://www.kler.cn/a/309254.html

相关文章:

  • 力扣515:在每个树行中找最大值
  • 前端--> nginx-->gateway产生的跨域问题分析
  • 算法——移除链表元素(leetcode203)
  • SQL练习(2)
  • 程序员年薪百万秘籍(一)
  • 【C++ 算法进阶】算法提升十三
  • 视觉检测中的深度学习应用
  • vue3 ref的用法及click事件的说明
  • 使用 uni-app 开发微信小程序的详细指南
  • go mod文件为啥又两个require
  • C#使用TCP-S7协议读写西门子PLC(四)
  • Qt常用控件——QDateTimeEdit
  • 【华为OD】2024D卷——生成哈夫曼树
  • CAD图纸加密软件哪个好?10款2024主流CAD图纸加密软件分享!
  • 如何利用Samba跨平台分享Ubuntu文件夹
  • 电路设计学习(一)
  • 【Day14-单例设计模式动态代理】
  • 一文吃透JVM面试八股文
  • 每日学习一个数据结构-DFA确定有限状态机
  • 【linux】VisiData:强大的命令行数据处理工具
  • 跟李沐学AI:序列到序列seq2seq
  • 本地部署大模型并使用知识库Windows下Ollama+Docker+MaxKB安装的记录
  • 影刀RPE学习——自动化
  • 地大信息-基础信息平台 GetImg 任意文件读取漏洞复现
  • http和https分别是什么?区别是什么?
  • GO GIN SSE DEMO