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 文件系统目录结构

Linux 利用busybox制作根文件系统的更多相关文章

  1. 利用busybox制作根文件系统

    实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...

  2. 通过busybox制作根文件系统

    通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...

  3. 通过busybox制作根文件系统详细过程

    我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...

  4. zju(4)使用busybox制作根文件系统

    1.实验目的 1.学习和掌握busybox相关知识及应用: 2.学会使用交叉编译器定制一个busybox: 3.利用该busybox制作一个文件系统: 4.熟悉根文件系统组织结构: 5.定制.编译ra ...

  5. 使用BusyBox制作根文件系统【转】

    本文转载自:http://www.cnblogs.com/lidabo/p/5300180.html 1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.Busy ...

  6. 使用BusyBox制作根文件系统

    1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 gre ...

  7. tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04

    http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里, ...

  8. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

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

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

随机推荐

  1. 011——数组(十一)array_merge array_merge_recursive array_change_key_case

    <?php /** */ //array_merge() 将多个数组合并,生成新数组.当键名相同时,后者覆盖前者 /*$array1=array('weburl'=>"bbs.b ...

  2. Java复习6异常处理

    Java复习6.异常处理 20131005 前言: Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统.但是我们开发人员没有很好的使用这一点.一些小的程序是没有什么问题的,但是对于大型项 ...

  3. Prism 4 文档 ---第3章 管理组件间的依赖关系

     基于Prism类库的应用程序可能是由多个松耦合的类型和服务组成的复杂应用程序,他们需要根据用户的动作发出内容和接收通知进行互动,由于他们是松耦合的,他们需要一种方式来互动和交流来传递业务功能的需求. ...

  4. CF910C

    题解: 首先考虑暴力不行 然后采用贪心 按位展开 然后注意不能有前缀0 代码: #include<bits/stdc++.h> using namespace std; ],ans; ], ...

  5. QT帮助文档 英文

    http://doc.qt.io/archives/qtquick-components-symbian-1.1/qml-button.html

  6. (转)Mac os x 下配置Intellij IDEA + Tomcat 出现权限问题的解决办法

    出现的错误提示如下: 下午9:11:27 All files are up-to-date下午9:11:27 All files are up-to-date下午9:11:27 Error runni ...

  7. SpringInAction--Spring Web应用之SpringMvc 注解配置

    Spring MVC 是当前Web服务器中常用的结构,今天就来学习这相关的知识,首先上图——Spring请求的时候所经历的坎坷之路: (书上原话,算是解释..) 在请求离开浏览器时① ,会带有用户所请 ...

  8. 2017北京赛区J题

    类型:三维动态规划 题目链接 题意: 合并连续石头块,最终要合并成一块,求时间最短,每次只能连续合并L~R块石头,不能合并成一块时输出-1 题解: 利用动态规划解决两种分问题 dp[l][r][k]: ...

  9. shell脚本实例二

    练习题一:对已经存在的用户做密码的修改等操作 vim  user_ctrl.sh                 ##进行如下编写 #!/bin/bashShow(){        read -p ...

  10. 《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件

    结果条件 在Java中,如果有重复的代码我们会考虑进行重构,抽取公共方法或继承父类,以减少相同的代码在多处出现,达到代码的最优管理和不必要的麻烦.Drools同样提供了类似的功能.下面我们以实例来逐步 ...