zoukankan      html  css  js  c++  java
  • Linux 利用busybox制作根文件系统

    busybox版本:1.17.3

    官网下载路径:https://busybox.net/downloads/

    网盘下载路径:https://pan.baidu.com/s/1nvrEa73 密码:7y4r

    交叉编译工具:arm-2009q3.tar.bz2

    网盘下载路径:http://pan.baidu.com/s/1dE7P9rb 密码:300i

    1、创建根文件系统目录

    xxx@ubuntu:~$ mkdir myrootfs
    xxx@ubuntu:~$ cd myrootfs/
    xxx@ubuntu:~/myrootfs$ mkdir rootfs
    xxx@ubuntu:~/myrootfs$ cd rootfs/
    xxx@ubuntu:~/myrootfs/rootfs$ mkdir bin sbin lib etc sys dev proc root home usr mnt tmp opt var
    xxx@ubuntu:~/myrootfs/rootfs$ ls
    bin dev etc home lib mnt opt proc root sbin sys tmp usr var

    2、拷贝busybox到myrootfs中并解压

    xxx@ubuntu:~/myrootfs$ ls
    busybox-1.17.3.tar.bz2 rootfs
    xxx@ubuntu:~/myrootfs$ tar -xvf busybox-1.17.3.tar.bz2

    3、配置交叉工具链

    xxx@ubuntu:~/myrootfs$ cd busybox-1.17.3/
    xxx@ubuntu:~/myrootfs/busybox-1.17.3$ vim Makefile

    修改以下,保存退出:

      CROSS_COMPILE ?= arm-none-linux-gnueabi-

      ARCH ?= arm

    4、配置menuconfig并保存

    xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make menuconfig

      Busybox Settings  --->

        Build Options  ---> 

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

        Installation Options  --->  

          [*] Don't use /usr  

    5、 编译并安装

    xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make

    xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make install

    6、将拷贝到制作的文件系统目录中

    xxx@ubuntu:~/myrootfs/busybox-1.17.3$ cd _install/
    xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ ls
    bin linuxrc sbin
    xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ cp -raf * ../../rootfs/

    7、拷贝交叉编译工具链中的库,交叉工具链的位置与自己安装路径有关,详见:Linux 安装交叉编译工具链

    xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ cd ../../rootfs/
    xxx@ubuntu:~/myrootfs/rootfs$ cp -raf /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* lib/
    xxx@ubuntu:~/myrootfs/rootfs$ du -h lib/
    3.8M lib/

    8、为交叉编译工具链瘦身

    xxx@ubuntu:~/myrootfs/rootfs$ chmod a+w lib/*
    xxx@ubuntu:~/myrootfs/rootfs$ arm-none-linux-gnueabi-strip lib/*
    xxx@ubuntu:~/myrootfs/rootfs$ du -h lib/
    3.0M lib/

    9、参照 busybox 源码中的 busybox-1.17.3/examples/inittab 例子编写 inittab

    xxx@ubuntu:~/myrootfs/rootfs$ cd etc/
    xxx@ubuntu:~/myrootfs/rootfs/etc$ touch inittab
    xxx@ubuntu:~/myrootfs/rootfs/etc$ vim inittab 

      ::sysinit:/etc/init.d/rcS
      ::askfirst:-/bin/sh
      ::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, 进程如果意外终止,那么不会重启
    restart:每次重启时都要执行
    ctrlaltdel:按组合键时执行
    shutdown:关机时执行

    10、创建 init.d/rcS 脚本,并添加可执行权限

    xxx@ubuntu:~/myrootfs/rootfs/etc$ mkdir init.d
    xxx@ubuntu:~/myrootfs/rootfs/etc$ cd init.d/
    xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ touch rcS
    xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ chmod a+x rcS
    xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ vim rcS

      #! /bin/sh
      
      echo "-----myrootfs start-----"
      # 挂载 etc/fstab 中指定的所有文件系统
      /bin/mount -a

      # insmod 加载驱动是,会在 /dev 下创建设备节点
      /sbin/mdev -s
      
      echo "-----myrootfs end -----"

    11、创建 etc/fatab 文件

    xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ cd ..
    xxx@ubuntu:~/myrootfs/rootfs/etc$ touch fstab
    xxx@ubuntu:~/myrootfs/rootfs/etc$ vim fstab

      # <file system> <mount point> <type> <options> <dump> <pass>
      proc /proc proc defaults 0 0
      dev /dev tmpfs defaults 0 0
      sys /sys sysfs defaults 0 0
      tmp /tmp tmpfs defaults 0 0

    12、创建 /etc/profile 文件,命令提示符前会添加用户名和主机

    xxx@ubuntu:~/myrootfs/rootfs/etc$ touch profile
    xxx@ubuntu:~/myrootfs/rootfs/etc$ vim profile

      #!/bin/sh
      export HOSTNAME=ubuntu
      export USER=xxx
      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

    Linux 文件系统目录结构

  • 相关阅读:
    C# 综合练习题目 及 答案解析
    SQL数据库子查询练习题及解析
    SQL数据库 连接查询、变量、选择、循环、延时语句等
    SQL数据库中模糊查询、排序、聚合函数、数学函数、字符串函数、时间日期函数、转换、函数转换等
    SQL数据库的创建及简单增删改查语句运用
    SQL数据库简介
    ado.net操作数据库
    轻松美化窗体
    面向对象(委托)
    面向对象(五大原则)
  • 原文地址:https://www.cnblogs.com/lialong1st/p/8051563.html
Copyright © 2011-2022 走看看