Tiny4412 rootfs制作-Busybox (五)

  • 创建rootfs文件夹

 mkdir /opt/systemmake/rootfs    
 cd /opt/systemmake/rootfs   
  • 下载busybox源码

 https://busybox.net/downloads/busybox-1.29.0.tar.bz2
  • 解压源码

 tar -jxvf busybox-1.29.0.tar.bz2 
  • 配置busybox

 cd busybox-1.29.0

默认配置

 make defconfig

图形化菜单配置

 make menuconfig

  • 第一处修改

Settings --->

        [* ] Build static binary (no shared libs)

  • 第二处修改

Settings --->

        (arm-linux-gnueabi-) Cross compiler prefix

  • 编译busybox

 time ( make -j 16 )

编译好之后会在 busybox-1.29.0 目录下生成名为 busybox 的文件

  • 安装busybox

 make install

安装好后会在 busybox-1.29.0 目录下生成 _install 文件夹

  • 安装好后会在 busybox-1.29.0 目录下生成 _install 文件夹,这个文件夹就是文件系统的基本结构文件

  • 继续完善文件系统

 cd _install
  • 拷贝etc目录

 cp ../examples/bootfloppy/etc ./ -arf 
 chmod +x etc/*
 chmod +x etc/init.d/*
  • 拷贝库

 mkdir lib
 cp -arf /opt/ToolChain/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/lib/* ./lib
  • 手动创建目录

 mkdir mnt media misc home sys proc tmp var dev boot net opt work
  • 修改配置文件

 vim etc/profile 
内容如下
 # /etc/profile: system-wide .profile file for the Bourne shells
 ​
 echo "============================="
 echo "  welcom to lqxuezhang system   "
 echo "============================="
 ​
 export PS1="[root@Tiny4412 \W]# "
  • 修改rcS配置文件

 vim etc/init.d/rcS 
 内容如下
​​​​​​​#! /bin/sh
 ​
 mount -t proc none /proc
 mount -t sysfs none /sys
 mount -t sysfs none /tmp
 mount -t sysfs none /dev
 /sbin/mdev -s
  • 修改inittab文件

 vim etc/inittab 
内容如下
 ::sysinit:/etc/init.d/rcS
 #::respawn:-/bin/sh
 ttySAC0::askfirst:-/bin/sh
 #::ctrlaltdel:/bin/umount -a -r
  • 添加ldd命令

 vim bin/ldd
 vim usr/bin/ldd

两个文件的内容都是一样的,如下

 #! /bin/sh
 # Copyright (C) 1996-2008, 2009 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 ​
 # The GNU C Library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
 # version 2.1 of the License, or (at your option) any later version.
 ​
 # The GNU C Library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 # Lesser General Public License for more details.
 ​
 # You should have received a copy of the GNU Lesser General Public
 # License along with the GNU C Library; if not, write to the Free
 # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 # 02111-1307 USA.
 ​
 ​
 # This is the `ldd' command, which lists what shared libraries are
 # used by given dynamically-linked executables.  It works by invoking the
 # run-time dynamic linker as a command and setting the environment
 # variable LD_TRACE_LOADED_OBJECTS to a non-empty value.
 ​
 # We should be able to find the translation right at the beginning.
 TEXTDOMAIN=libc
 TEXTDOMAINDIR=/usr/share/locale
 ​
 RTLDLIST=/lib/ld-linux.so.3
 warn=
 bind_now=
 verbose=
 ​
 while test $# -gt 0; do
   case "$1" in
   --vers | --versi | --versio | --version)
     echo 'ldd (GNU libc) 2.11'
     printf $"Copyright (C) %s Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 " "2009"
     printf $"Written by %s and %s.
 " "Roland McGrath" "Ulrich Drepper"
     exit 0
     ;;
   --h | --he | --hel | --help)
     echo $"Usage: ldd [OPTION]... FILE...
       --help              print this help and exit
       --version           print version information and exit
   -d, --data-relocs       process data relocations
   -r, --function-relocs   process data and function relocations
   -u, --unused            print unused direct dependencies
   -v, --verbose           print all information
 "
     echo $"For bug reporting instructions, please see:
 <http://www.gnu.org/software/libc/bugs.html>.
 "
     exit 0
     ;;
   -d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
   --data-rel | --data-relo | --data-reloc | --data-relocs)
     warn=yes
     shift
     ;;
   -r | --f | --fu | --fun | --func | --funct | --functi | --functio | \
   --function | --function- | --function-r | --function-re | --function-rel | \
   --function-relo | --function-reloc | --function-relocs)
     warn=yes
     bind_now=yes
     shift
     ;;
   -v | --verb | --verbo | --verbos | --verbose)
     verbose=yes
     shift
     ;;
   -u | --u | --un | --unu | --unus | --unuse | --unused)
     unused=yes
     shift
     ;;
   --v | --ve | --ver)
     echo >&2 $"ldd: option \`$1' is ambiguous"
     exit 1
     ;;
   --)       # Stop option processing.
     shift; break
     ;;
   -*)
     echo >&2 'ldd:' $"unrecognized option" "\`$1'"
     echo >&2 $"Try \`ldd --help' for more information."
     exit 1
     ;;
   *)
     break
     ;;
   esac
 done
 ​
 nonelf ()
 {
   # Maybe extra code for non-ELF binaries.
   return 1;
 }
 ​
 add_env="LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now"
 add_env="$add_env LD_VERBOSE=$verbose"
 if test "$unused" = yes; then
   add_env="$add_env LD_DEBUG=\"$LD_DEBUG${LD_DEBUG:+,}unused\""
 fi
 ​
 # The following use of cat is needed to make ldd work in SELinux
 # environments where the executed program might not have permissions
 # to write to the console/tty.  But only bash 3.x supports the pipefail
 # option, and we don't bother to handle the case for older bash versions.
 if set -o pipefail 2> /dev/null; then
   try_trace() {
     eval $add_env '"$@"' | cat
   }
 else
   try_trace() {
     eval $add_env '"$@"'
   }
 fi
 ​
 case $# in
 0)
   echo >&2 'ldd:' $"missing file arguments"
   echo >&2 $"Try \`ldd --help' for more information."
   exit 1
   ;;
 1)
   single_file=t
   ;;
 *)
   single_file=f
   ;;
 esac
 ​
 result=0
 for file do
   # We don't list the file name when there is only one.
   test $single_file = t || echo "${file}:"
   case $file in
   */*) :
        ;;
   *) file=./$file
      ;;
   esac
   if test ! -e "$file"; then
     echo "ldd: ${file}:" $"No such file or directory" >&2
     result=1
   elif test ! -f "$file"; then
     echo "ldd: ${file}:" $"not regular file" >&2
     result=1
   elif test -r "$file"; then
     test -x "$file" || echo 'ldd:' $"\
 warning: you do not have execution permission for" "\`$file'" >&2
     RTLD=
     ret=1
     for rtld in ${RTLDLIST}; do
       if test -x $rtld; then
     verify_out=`${rtld} --verify "$file"`
         ret=$?
     case $ret in
     [02]) RTLD=${rtld}; break;;
     esac
       fi
     done
     case $ret in
     0)
       # If the program exits with exit code 5, it means the process has been
       # invoked with __libc_enable_secure.  Fall back to running it through
       # the dynamic linker.
       try_trace "$file"
       rc=$?
       if [ $rc = 5 ]; then
     try_trace "$RTLD" "$file"
     rc=$?
       fi
       [ $rc = 0 ] || result=1
       ;;
     1)
       # This can be a non-ELF binary or no binary at all.
       nonelf "$file" || {
     echo $" not a dynamic executable"
     result=1
       }
       ;;
     2)
       try_trace "$RTLD" "$file" || result=1
       ;;
     *)
       echo 'ldd:' ${RTLD} $"exited with unknown exit code" "($ret)" >&2
       exit 1
       ;;
     esac
   else
     echo 'ldd:' $"error: you do not have read permission for" "\`$file'" >&2
     result=1
   fi
 done
 ​
 exit $result
 # Local Variables:
 #  mode:ksh
 # End:

给两个文件加上权限

 chmod 777 bin/ldd
 chmod 777 usr/bin/ldd
  • 现在的文件系统可以运行了,是最小的文件系统

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值