linux+启动关键函数,linux启动过程中的几个重要文件的详解

1、最小根文件系统组成:

1/dev/console /dev/null

2、/etc/inittab

3、init本身,即busybox

4、C库(应用程序需要的函数)

2、BusyBox的基本用法 可以在原代码的docs中看到有两种用法:

直接使用BusyBox

busybox [ arg... ] 例如:/bin/busybox ls,将执行ls的功能

建立指向BusyBox的链接

[ arg... ] 例如:ln -s ls ./ls 将同样执行 ls的命令

3、BusyBox源码分析 BusyBox源码算是一个比较庞大的工程,但是该工程整体上看可以分为三个部分来讲述:

(1) BusyBox架构

BusyBox架构部分为BusyBox的运行提供了基本支持。其主要代码在applet下面。 busybox.c中包含了BusyBox的入口main函数,在对调用参数处理之用调用applet.c中的run_applet_by_name函数,该函数将根据Applet的名字,找到相应的applet,将执行BB_applet->main指向的函数,然后直接退出。这里BB_applet->main所执行的函数就是通过命令要执行的命令。 在run_applet_by_name中,所调用的find_applet_by_name中用bsearch对applets进行搜索,并返回applet. applets的定义是在 include/applets.h中,是一个常量数组。

(2) BusyBox实用库

Busybox的可复用函数都被定义在 libbb下面的文件中,其它的 applet通过对这些实用函数的调用实现自己的目标。

(3) BusyBox的Applet扩展

BusyBox本身没有多大的实用价值,更为重要的是BusyBox的Applet为我们提供了实用功能。Busybox的applets按功能被分散在源码的各个目录下面。BusyBox本身也是一个applet.它的定义就在busybox.c中,其入口点是busybox_main. 举例说明:cp命令的实现,cp被放在 coreutils下面的cp.c中,可以看到该文件中只有一个函数,cp_main(),该函数就是 cp命令的入口地址,而copy的最关键性的步骤:DO_COPY的实现,则是通过调用copy_file()来实现的。 copy_file这个函数被多个命令使用到,比如mv.cp等,它被放在libbb的copyfile.c中.

4、BusyBox源中的一些脚本分析

(1) applets /busybox.mkll, 该脚本通过分析include/config.h和 inlcude/applets.h两个文件来得到被配置的文件的链接。

(2) applets/install.sh, 该脚本根据busybox.mkll生成的busybox.link来建立链接文件

(3) 源码目录下的Makefile,提供了make menuconfig对源码进行配置,生成.config文件,make将生成busybox.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值