Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306462
  • 博文数量: 111
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 672
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-05 23:41
文章分类

全部博文(111)

文章存档

2017年(111)

我的朋友

分类: LINUX

2017-06-23 19:29:52

定制根文件系统的方法很多,最常用的是使用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@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文件系统。

阅读(1705) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~