• Busybox构建根文件系统和制作Ramdisk


             定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统。它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整、功能丰富的文件系统,其中包括大量常用的应用程序。下面详细介绍有关Busybox定制根文件系统。

     

    一、系统环境:

    1、操作系统:Ubuntu140.4

    2、交叉编译工具:gcc version 6.1.1 20160711 (Linaro GCC 6.1-2016.08)

    3busybox源码包:busybox-1.26.2

     

    二、构建rootfs

        1、建立rootfs目录

        /home/xxx/xxx目录下建立rootfs目录,

            $  mkdir rootfs

                    $  cd  rootfs

                    $  mkdir  root  bin  sbin  etc  dev  usr  lib  tmp  mnt  sys  proc  var  //建立常用目录

                    $  mkdir  usr/lib  usr/bin  usr/sbin

     

        2、解压源码包:

            $ tar -jxvf busybox-1.26.2.tar.bz2

     

        3、配置BusyBox

           $ make distclean

                  $ make defconfig

                  $ make menuconfig ARCH=arm

        3.1选择Busybox Settings --->

                  Installation Options --->

                                       BusyBox installation prefix(在里面输入BusyBox的安装目录,我是保存在/home/xxx/xxx/rootfs)

    clip_image002

     

    clip_image004

     

        3.2选择Busybox Settings --->  

                         选中[*] Don't use /usr

     

    clip_image006

      

        3.3 Busybox Settings---->

                 Build Options---->

                   选中 [*]Build BusyBox as a static binary(静态链接)

                   Cross Compiler prefix配置为arm-linux-gnueabi-(指定交叉编译器)

    clip_image008

     

    配置好后,保存相关配置信息。

        4、编译安装Busybox

            $ make

                    $ make install

     

        5、添加/home/xxx/xxx/rootfs/dev目录下的设备文件。

        dev目录下必须有consolenull这两个设备文件,使用mknod来创建这两个设备文件。

            $ cd dev/

                    $ sudo mknod -m 666 console c 5 1

                   $ sudo mknod -m 666 null c 1 3

       

        6、把busybox源码目录下的examples/bootfloppy/etc的内容拷贝到rootfs目录下的etc

            $ cd /home/xxx/xxx/rootfs/etc

                    $ cp  /home/ xxx/xxx/Downloads/busybox-1.26.2/examples/bootfloppy/etc/* ./ -raf

     

        8、修改配置文件

        8.1、修改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

    var         /dev              tmpfs     defaults        0     0

    ramfs            /dev              ramfs     defaults        0     0

      

        8.2修改profile文件为:

    # /etc/profile: system-wide .profile file for the Bourne shells

     

    USER="root"

    LOGNAME=$USER

    export HOSTNAME=`/bin/hostname`

    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

     

        8.3修改inittab文件为:

    # /etc/inittab

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

    ::askfirst:-/bin/sh

    ::ctrlaltdel:/sbin/reboot

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

    ::restart:/sbin/init

     

    8.4 配置系统的hostname。在etc目录下执行如下命令:

        $ mkdir  sysconfig

            $ cd sysconfig

            $ touch  HOSTNAME

            $ echo  tiny4412 > HOSTNAME

     

        8.5 配置init.d/rcS文件为:

    #!/bin/sh

     

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

    runlevel=S

    prevlevel=N

    umask 022

    export PATH runlevel prevlevel

     

    mount -a

    mkdir -p /dev/pts

    mount -t devpts devpts /dev/pts

    #mount -n -t usbfs none /proc/bus/usb

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

    mdev -s

    mkdir -p /var/lock

     

    ifconfig lo 127.0.0.1

     

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

     

    修改init.d/rcS文件权限为:

        $ chmod 777 init.d/rcS

     

    三、制作Ramdisk文件系统

        制作Ramdisk的脚本mk_Ramdisk.sh如下:

    #!/bin/bash

     

    rm -rf ramdisk*

     

    sudo dd if=/dev/zero of=ramdisk bs=1k count=8192

     

    sudo mkfs.ext4 -F ramdisk

     

    sudo mkdir -p ./initrd

    sudo mount -t ext4 ramdisk ./initrd

     

    sudo cp rootfs/* ./initrd -raf

     

    sudo mknod initrd/dev/console c 5 1

    sudo mknod initrd/dev/null c 1 3

     

    sudo umount ./initrd

     

    sudo gzip --best -c ramdisk > ramdisk.gz

     

    sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

    rm ramdisk ramdisk.gz initrd  -rf

     

        把该脚本拷贝到rootfs同一目录下,执行该脚本制作Ramdisk文件系统。生成的ramdisk.img就是我们需要的Ramdisk文件系统。

     

     

     

  • 相关阅读:
    Windows Internals 笔记——作业
    Windows Internals 笔记——终止进程
    数据结构与算法-java-数组实现队列和栈
    数据结构与算法-java-稀疏数组
    学习笔记-java两种核心机制-JVM和GC
    python-Django-学习笔记
    python爬虫-大二时候的学习笔记
    KMP算法
    Docker
    排序与查找
  • 原文地址:https://www.cnblogs.com/LoTGu/p/7020418.html
Copyright © 2020-2023  润新知