Linux根文件系统制作--中

Linux根文件系统制作--中

参考朱有鹏uboot全集

0、根文件系统概况

1、busybox源码下载并编译进去根文件系统

1.1、busybox是一个开源的项目,所以源代码可以直接从网上下载

1.2、busybox的版本的差异不大,版本的新旧没有太大的关系

1.3、下载busybox直接去www.busybox.net官方网站下载都行

下载完后,进行解压:
tar -jxvf busybox-1.24.1.tar.bz2

2修改Makefile

因为这是源代码是可以在很多的平台上面运行的,所以我们需要把他的平台弄成ARM。

因为我们编译的是A8的处理器所以我们需要对其进行平台的移植。

(1)ARCH =arm
(2)CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

3、使用make menuconfig

Busybox Settings--->
    Build Options--->
        [*]Build BusyBox as a static binary(no shared libs)


Busybox Library Tuning--->
    [*]vi-style line editing commands
    [*]Fancy shell prompts


Linux Module Utilities--->
    [ ]Simplified modutils
    [*]insmod
    [*]rmmod
    [*]lsmod
    [*]modprobe
    [*]depmod


Linux System Utilities--->[*]mdev
    [*]Support /etc/mdev.conf
    [*]Support subdirs/symlinks
    [*]Support regular expressions substitutions when renaming dev
    [*]Support command execution at device addition/removal
    [*]Support loading of firmwares

4、安装make -j4和make install
4.1、使用多线程进行编译,增加编译的速度。

4.2、make install
这里面可以设置busybox的安装路径:

Busybox Settings
    Installation Options ("make install....")

目的就是将编译生成的可执行程序以及依赖的库文件,配置文件,头文件安装到当前系统中指定,(一般都可以自己指定安装到哪个目录下面)的目录下面。

5、1我们把busybox程序编写进入根文件系统中
然后把其挂载到开发板中,得到的错误就变了。从/linuxrc不能执行

出现的错误信息:

VFS:Mounted root (nfs filesystem)on device 0:12
Freeing init memory: 540K
can't run '/etc/init.d/rcs':No such file or directory
can't open /dev/tty2:No such file or directory

2、inittab详解,并进入根文件系统控制台

#first:run the system script file
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

2.1、我们的实验现象就是,能够进入根文件系统的控制台中:
所以综上所述,最小的根文件系统就是busybox+inittab。

2.2、我们解析上面的文件:
#表示的是我们在这个脚本程序中使用的注释.

sysinit表示的是一种条件:表示在系统跑起来最先执行的程序。
/etc/init.d/rcS 这里面试shell脚本,就是用来执行脚本程序的

askfirst: 就是在进入控制台前面输出一行信息,提示你应该按下enter键才能执行。

shutdown:就代表在关机的时候执行后面的程序/bin/umount -r -a
就是关机的时候,把所有的根文件系统中的文件全部卸载掉。

注意:关键点:理解inittab:
合起来的意思就是当满足action的条件时,就会执行process这个程序。

3、busybox的源码分析

3.1、源码目录分析
很多都是用来实现shell的命令的。

3.2、整个程序的入口确定:
学习C语言的时候我们都知道程序的主函数main函数就是整个程序的入口,这种情况下适应于操作系统下的工作的应用程序的情况。

3.3、在uboot和Linux kernel这两大的C语言的项目中,main函数都没有都不是入口,在我们这种裸机程序中入口不是main函数,而是由链接脚本指定的。

3.4、busybox是Linux启动起来后的工作的第一个应用程序,因此其中必然有main函数的。

3.5、busybox的入口就是main函数,appletbb.c起作用了。
busybox中有很多的XXX_main函数,这些main函数每一个都是busybox支持的一个命令的真正的接口,比如ls_main函数就是busybox当做ls函数的使用的入口程序。

PS:答案:
答案就是main转xxx_main.也就是说busybox每次执行时都是先执行其main。
在main函数中识别我们真正要执行的函数(ls)然后去调用相应的xxx_main
比如ls_main来具体实现这个命令。
靠我们main函数的传参:argc,argv[0]传递给我们的main函数的。

run_applet_and_exit();

busybox pwd

4、busybox调用配置文件inittab解析并且执行

(1)inittab的解析是在busybox/init/init.c/init_main函数中解析的

(2)parse_inittab()
解析成一个一个的action.

(3)执行逻辑是:先通过parse_inittab()函数解析出来:/etc/inittab
解析的重点是将inittab中的各个action和process解析出来。

为什么我们嵌入式制作根文件系统需要使用busybox?
(1)busybox实际上就是把ls,cd,mkdir,,等很多个Linux中常用的shell命令集成在一起。集成在一起之后,busybox程序的大小,比busybox实现的那些命令大小要小的多。

(2)busybox体系变小有2个原因:第一个是busybox本身提供的shell命令是裁剪版的,busybox能够支持的命令的参数选项是有限制的。
不常用的命令选项都裁剪掉了。

(3)实际上,busybox是很多个命令集成的,所以有很多命令需要用到的指令是代码是可以共用的,所以容量小了很多。

5、RCS文件

5.1、就是在busybox源码中的init.c中调用的。

parse_inittab里面INIT_SCRIPT: /etc/init.d/rcs
相当于默认执行了这个东西的运行。

5.2、/etc/init.d/rcs文件是Linux的运行的时候配置文件中最重要的一个,其他的配置都是由这个文件配置出来的,这个文件可以很复杂,也可以很简单。里面有很多的配置项。

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S
prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10

6.1、PATH:导出环境变量
什么是环境变量,就是你运行的应用程序的时候,操作系统在环境变量的目录中寻找应用程序,能找到就执行,不能找到就不执行。

runlevel=S :设置操作系统处于单用户模式

6.3、umask=
(1)umask是Linux的一个命令,作用是设置Linux系统的umask值
(2)umask值决定当前用户的权限。

6.4、mount 挂载所有的设备驱动程序

6.5、HOSTNAME:设置用户名;可以直接在/etc/sysconfig目录下面的
HOSTNAME创建一个名字,主机显示出来:这里我们设置为lhh_210

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值