busybox 根文件系统制作


busybox是构造文件系统最常用的软件工具包它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序(busybox)中。


  虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中已经足够了。


  busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。


【实验目的】

      熟悉Linux文件系统目录结构,创建自己的文件系统,通过NFS方式测试;用文件系统工具生成ramdisk文件系统映象文件。

【实验环境】

主机:ubuntu 12.04发行版

目标机:FS210平台

交叉编译工具:arm-none-linux-gnueabi-gcc

【实验步骤】

一、根文件系统制作

1、  源码下载

我们选择的版本是busybox-1.17.3.tar.bz2

下载路径为:http://busybox.net/downloads/

2、  解压源码

$ tar  xvf busybox-1.17.3.tar.bz2

3、  进入源码目录,修改Makefile

$ cd busybox-1.17.3

vim Makefile

ARCH = arm

CROSS_COMPILE = arm-none-linux-gnueabi-

4、  配置源码

$ make menuconfig

Busybox Settings --->

      Build Options --->

              [*] Build BusyBox as a static binary(no shared libs)

              [ ] Force NOMMU build

              [ ] Build with Large File Support(for accessing files > 2 GB)

              ()Cross Compiler prefix

              () Additional CFLAGS

     Installation Options  --->

                   [*] Don't use /usr

                     Appletslinks (as soft-links)  --->

           (./_install) BusyBoxinstallation prefix (NEW)

5、  编译

$ make

6、  安装

$ make install

    busybox默认安装路径为源码目录下的_install

7、  进入安装目录下

$ cd _install

$ ls

bin linuxrc  sbin

8、  创建其他需要的目录

$ mkdir dev  etc  mnt proc  var  tmp sys  root  lib home usr

9、  添加动态库

?  将工具链中的库拷贝到_install目录下的lib目录

$cp -raf/usr/local/toolchain-4.5.1-farsight/arm-none-linux-gnueabi/lib/*  lib/

?  删除库文件中的符号表,也叫瘦身

$ rm -rf lib/*.a

$ arm-none-linux-gnueabi-strip  lib/*

10、 添加系统启动文件

在_install/etc下添加文件inittab,文件内容如下:

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/ash

::ctrlaltdel:/sbin/reboot

::shutdown:/sbin/swapoff -a

::shutdown:/bin/umount -a -r

::restart:/sbin/init

格式说明:

<id>:<runlevels>:<action>:<process>: 在什么时间启动什么进程

id: 进程所使用的终端名

runlevels:不用填写

<action>: Valid actions include:sysinit, respawn, askfirst, wait, once, restart, ctrlaltdel, and shutdown.\

 sysinit: 系统初始化的时候,放在最前面

 respawn,askfirst是一样的,如果process意外终止啦,系统会讲其重启

 askfirst 会有提示Please press Enter to activate this console

 wait: 该进程一定要执行完,才能执行下一个

  once, 进程如果意外终止,那么不会重启

11,在_install/etc下添加文件fstab,文件内容如下:

#device    mount-point     type        options         dump     fsck order

proc         /proc                proc          defaults     0                  0

tmpfs         /tmp              tmpfs         defaults         0                 0

sysfs         /sys                 sysfs           defaults         0                  0

tmpfs         /dev              tmpfs         defaults          0                  0

      这里我们挂载的文件系统有三个proc、sysfs和tmpfs。在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持

修改内核配置:

File systems --->

      Pseudo filesystems --->

            [*] /proc file system support (NEW)

            [*] sysfs file system support(NEW)

            [*] Virtual memory file systemsupport (former shm fs)

            [*]   Tmpfs POSIX Access Control Lists

重新编译内核

     

12,在_install/etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:

    cd _install/etc   

    mkdir init.d

    vim init.d/rcS 

===============================================    

#!/bin/sh

echo ">>>>>>>>in/etc/init.d/rcS<<<<<<<<<<<<<<<<<"

/bin/mount -a

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

/sbin/mdev -s

===============================================

mdev是用于自动创建设备节点  

       为rcS添加可执行权限:

$ chmod   +x  init.d/rcS

13,在_install/etc下添加profile文件,文件内容为:

#!/bin/sh

export HOSTNAME=farsight

export USER=root

export HOME=root

export PS1="[$USER@$HOSTNAME \W]\#"

PATH=/bin:/sbin:/usr/bin:/usr/sbin

LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH LD_LIBRARY_PATH

14、 设备文件创建

根文件系统中有一个设备节点是必须的,在dev下创建console节点

$ mknod  dev/console  c  5  1

以上的步骤就完成了linux根目录所需要的所有文件,可以直接使用


 NFS测试

1、将做好的根目录复制成/opt/rootfs(如果你已经有这个目录,就要注意啦)

$sudo  cp  -raf  _install  /opt/rootfs

2, 在ubuntu中将/opt/rootfs设置成nfs文件系统

    修改ubuntu的/etc/exports: 将/opt/rootfs设置成nfs文件系统格式

    /opt/rootfs           *(subtree_check,rw,no_root_squash,async)


    sudo service nfs-kernel-server restart


测试:

       sudo mount -t nfs 192.168.7.22:/opt/filesystem/ /mnt/nfs/


    设置uboot环境变量

===========================================================================

# setenv bootcmd  tftp  20800000 zImage \;  go  20800000

# setenv bootargs  root=nfs  nfsroot=192.168.7.100:/opt/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.7.200

# saveenv

===========================================================================

如果开机就运行一个自己可执行程序,可以做如下处理


1、编译出一个可执行程序:/bin/hello_arm/

2、/etc/init.d/rcS中启动可执行程序


方法一:直接在/etc/init.d/rcS添加一条:

          /bin/hello_arm

方法二:另外再写一个脚本,然后在/etc/init.d/rcS中启动这个脚本

写一个脚本:/etc/local/mysrv.sh

#!/bin/ash

echo "my first app"

/bin/hello_arm

然后在/etc/init.d/rcS添加一条

       /etc/local/mysrv.sh

     重新启动开发板,查看是否能够正常挂载,功能是否正常


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先,busybox是一个非常小巧的程序集合,它集成了许多常用的Linux工具,可以用来替代传统的Linux命令行工具,从而使得系统的启动时间更快、占用的空间更小。基于busybox文件系统可以使得系统更加轻量级,并且可以方便地定制。下面是实现基于busybox文件系统的步骤: 1. 下载busybox源代码,并编译生成busybox可执行文件。你可以从busybox的官网上下载源代码,然后使用make命令进行编译。 2. 创建一个新的目录作为文件系统的挂载点。你可以使用mkdir命令创建一个空目录。 3. 将busybox可执行文件复制到文件系统目录中。你可以使用cp命令将busybox可执行文件复制到文件系统目录中。 4. 在文件系统目录中创建必要的目录和文件。据你的需求,你可以使用mkdir和touch命令创建必要的目录和文件。 5. 创建一个init脚本来启动系统。init脚本是系统的启动脚本,用来初始化系统并启动其他进程。你可以使用vi或者nano等编辑器创建init脚本。 6. 将文件系统目录打包成一个镜像文件。你可以使用tar命令将文件系统目录打包成一个tar包,然后使用mkfs命令将tar包转换成一个镜像文件。 7. 将镜像文件烧录到SD卡或者其他存储介质中。你可以使用dd命令将镜像文件写入到SD卡或者其他存储介质中。 以上就是基于busybox文件系统制作的基本步骤,你可以据你的需求进行定制和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值