分析busybox的源码

以下内容源于网络资源的学习与整理,如有侵权请告知删除。

参考博客

busybox详解_linuxarmsummary的博客-CSDN博客

一、前言

因为uboot给内核传参的bootargs中有“init=/linuxrc”这个项目,而由前面的分析可知/linuxrc这个二进制文件位于根文件系统中,它指向根文件系统的/bin/busybox这个命令。因此这里对busybox的源码进行分析。

二、源码分析

1、程序入口

(1)我们对程序进行分析时,需要按照程序运行时的逻辑顺序来分析,因此要找到入口地址。在uboot和linux kernel这两个大的C语言项目中,入口地址由连接脚本指定。而操作系统下的应用程序,它们的入口地址一般是main函数。busybox是linux启动后运行的第一个应用程序,因此其中必然有main函数,而且main就是入口地址。

(2)通过对busybox源码建立SI工程,搜索main这个符号发现有很多main函数,到底哪个才是入口地址呢?busybox-1.24.1/applets/applets.c文件的main函数中调用了lbb_main函数,通过查询该函数符号得知busybox的入口地址是busybox-1.24.1/libbb/appletlib.c中的main函数。

(3)busubox中有很多xxx_main函数,它们是busybox所支持的xxx命令的真正入口,比如ls_main函数就是busybox当作ls函数使用时的入口程序。busybox每次执行时都是先执行其入口main函数,然后通过main函数的传参argv[0]来识别要执行的xxx函数,然后调用相应的xxx_main函数来具体实现这个命令。比如pwd命令,在busybox命令行下执行pwd命令时实际执行的是pwd_main这个函数。

2、对inittab文件进行解析与执行

(1)对根文件系统中的rootfs_xjh/etc/inittab文件进行解析的是busybox-1.24.1/init/init.c文件中的init_main函数。

(2)执行逻辑

(1)先通过parse_inittab函数解析/etc/inittab文件。解析的重点是将inittab中的各个action和process解析出来。

(2)然后后面先直接执行sysinit和wait和once(注意这里只执行一遍),然后在while(1)死循环中去执行respwan和askfirst。

三、busybox的体积优势

busybox将ls、cd、mkdir等linux中常用的shell命令集成在一起,集成后busybox程序的大小比这些常用的命令的大小加起来要小很多。

busybox体积变小的原因:

(1)第一个原因,是busybox本身提供的shell命令是阉割版的。busybox中的命令支持的参数选项比发行版中要少,比如ls在发行版中可以有几十个参数选项,但是在busybox中只保留了几个常用的选项,不常用的都删除掉了。

(2)第二个原因,是因为busybox中所有命令的实现代码都在一个程序中实现,而各个命令中有很多代码函数都是通用的,通用会降低重复代码出现的次数,从而减少总的代码量和体积。比如ls、cd、mkdir等命令都会操作目录,因此在busybox中实现目录操作的函数就可以被这些命令通用。

(3)busybox的体积优势是嵌入式系统本身的要求和特点造成的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vmware vSphere 十个疑难问题解决方法

Vmware vSphere疑难问题解决方法导读:这里汇总了10个Vmware vSphere常见的问题:清除vSphere Client的登录记录、Linux系统VMXNET3虚拟网路卡时UDP包被Drop掉等,并给出了具体的解决办法。关键词:VMware vSphere1、清除vSphere Clie…

PHP中开发的良好习惯总结(持续更新) By ACReaper

最近在自己用php在写一个商城,再这个工程中学习到了很多的开发经验。 1.为了更好的调试和开发php,在开发状态中到php.ini设置开发的错误报告 在ubuntu中,其在/etc/php5/apache2/php.ini中。用命令打开后,找到 error_reporting E_…

Makefile中常用的函数

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)&#xff0c;而函数调用的格式如下&#xff1a; $(<function> <arguments>) 或者是…

彻底解决zend studio 下 assignment in condition警告

最近在mac系统下安装zend studio作为php开发工具&#xff0c;把以前的代码导入&#xff0c;发现项目中有很多 “assignment in condition”的警告&#xff0c;造成原因是在条件判断的if、while中使用了如下类似的做法&#xff1a; if ($res $other)while (($row $res->fet…

添加分页

<div style"text-align: center; padding-top: 10px"><webdiyer:AspNetPager ID"AspNetPager1" runat"server" PageSize"20" FirstPageText"首页"CssClass"anpager" LastPageText"尾页" NextP…

Makefile中命令的编写

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 简述 Makefile的规则&#xff0c;是由依赖关系规则和命令组成的。 Makefile中所使用的命令是由 shell 命令行组成&#xff0c;它们是一条一条执行的。 Makefile 中的任何命令都要以ta…

走出浮躁的泥沼:浮躁的社会原因 控制好自己的物欲

http://www.nowamagic.net/librarys/veda/detail/2265现在这个社会&#xff0c;大家都很浮躁。简单说&#xff0c;因为他是消费者。 具体的逻辑推理是这样的&#xff1a; 1. 现在的社会是一个“富裕社会”&#xff08;Affluent Society&#xff09;&#xff0c;物质极大丰富&am…

c# 连接各种数据库 Access、Server等

1.C#连接连接Access程序代码:usingSystem.Data;usingSystem.Data.OleDb;..stringstrConnection"ProviderMicrosoft.Jet.OleDb.4.0;";strConnection"Data SourceC:BegASPNETNorthwind.mdb";OleDbConnection objConnectionnewOleDbConnection(strConnection)…

make命令的参数选项

在执行 make 命令时&#xff0c;有时根据需要&#xff0c;可以添加某些参数选项。比如只打印命令但不执行命令的参数选项是 "-n" &#xff0c;还有只执命令不打印命令的参数选项是 "-s"&#xff0c;包含其它文件的路径参数选项是 "-include"等等…

〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示

有没有遇到一种情况&#xff1a; 在工作区1打开了应用程序Google Chrome&#xff1b; 这个时间感觉它打开速度比较慢&#xff0c;就快捷键切换到工作区2了&#xff1b; 结果这个时候&#xff0c;Google Chrome就直接在工作区2打开&#xff0c;多不爽&#xff1f;&#xff01; &…

oracle 插入含字符串

1、创建表 SQL> create table t(id number,name varchar2(20)); 表已创建。 2、常规方式插入 SQL> insert into t values(1,’a&b’); 输入 b 的值: a&b 原值 1: insert into t values(1,’a&b’) 新值 1: insert into t values(1,’aa&b’) 已创建 1 行…

认识Makefile文件

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile文件是什么 Makefile 文件描述了 Linux 系统下 C/C 工程文件的编译规则&#xff0c;比如某些文件是否需要编译、文件编译的顺序、文件间的依赖关系、文件是否需要重建等等…

搭建Spring MVC 4开发环境八步走

Spring MVC作为SpringFrameWork的产品&#xff0c;自诞生之日&#xff0c;就受到广泛开发者的关注&#xff0c;如今Spring MVC在Java中的发展可谓是蒸蒸日上&#xff0c;如今如果再有开发者说&#xff0c;不了解Spring MVC&#xff0c;或许就被人笑掉大牙。煽情的话就不说了&am…

JQ获取CKeditor的值

var editor CKEDITOR.replace("content"); editor.setData(""); alert(CKEDITOR.instances.content.getData()); var editor CKEDITOR.replace("content"); alert(editor.getData()); 转载于:https://www.cnblogs.com/Alandre/p/3405363.htm…

Makefile中变量的定义、引用与赋值

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 Makefile文件中的变量有很多种类&#xff0c;其意义各不相同。比如普通变量、环境变量&#xff0c;自动变量&#xff0c;模式指定变量等。 这里主要讲普通变量的定义与使用。 一、变量…

address already in use: jvm_bind

这是用Myeclipse写网上书店时遇到的错误&#xff0c;错误的意思是8080端口被占用&#xff0c;解决问题的方式是找到占用8080端口的进程关闭就可以了&#xff0c; 在dos下输入netstat -ano 即可查看所有的 然后根据PID关闭进程&#xff0c;在任务管理器中&#xff0c;找到进转载…

case when then的用法

用法一&#xff1a;等值判断&#xff0c;相当于switch CASE expression   WHEN value1 THEN returnValue1   WHEN value2 THEN returnValue2   WHEN value3 THEN returnValue3   ELSE defaultValue END 例子&#xff1a;论坛中用户的等级 create table [user] (uId int…

Makefile中的自动化变量

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 自动化变量&#xff0c;可以理解为由 Makefile 自动产生的变量。 在模式规则中&#xff0c;规则的目标和依赖的文件名代表了一类的文件。在 Makefile 中描述规则时&#xff0c;依赖文件…

Makefile中的文件搜索路径(VPATH和vpath)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 前言 当源文件与 Makefile 文件的存放路径不同时&#xff0c;如何将源文件的路径告知Makefile文件呢&#xff1f; 方法有两种&#xff1a;一般搜索VPATH&#xff0c;选择搜索vpath。 两…

今天是我开通博客的第一天

The first time I regist my blog.转载于:https://www.cnblogs.com/binquan/p/3417169.html