配置busybox

首先将busybox的压缩包放入服务器进行解压缩;

busybox集合了几百个命令,在一般的系统中并不需要全部使用。可以通过配置busybox来选择这些命令、定制某些命令的功能(选项)、指定busybox的连接方法(动态连接还是静态连接)

在解压之后的INSTALL文件里,有这样的提示:

The BusyBox build process is similar to the Linux kernel build:

make menuconfig    # This creates a file called ".config"
make          # This creates the "busybox" executable
make install       # or make CONFIG_PREFIX=/path/from/root install

首先,执行make menuconfig。

HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
scripts/basic/split-include.c: 在函数‘main’中:
scripts/basic/split-include.c:133:11: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
scripts/kconfig/conf.c: 在函数‘conf_string’中:
scripts/kconfig/conf.c:174:20: 警告: 变量‘help’被设定但未被使用 [-Wunused-but-set-variable]
scripts/kconfig/conf.c: 在函数‘conf_sym’中:
scripts/kconfig/conf.c:208:6: 警告: 变量‘type’被设定但未被使用 [-Wunused-but-set-variable]
scripts/kconfig/conf.c: 在函数‘conf_choice’中:
scripts/kconfig/conf.c:283:6: 警告: 变量‘type’被设定但未被使用 [-Wunused-but-set-variable]
scripts/kconfig/conf.c:359:9: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
scripts/kconfig/conf.c: 在函数‘conf_askvalue’中:
scripts/kconfig/conf.c:104:8: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/mconf.o
scripts/kconfig/mconf.c: 在函数‘show_textbox’中:
scripts/kconfig/mconf.c:836:7: 警告: 忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]
scripts/kconfig/mconf.c: 在函数‘exec_conf’中:
scripts/kconfig/mconf.c:470:6: 警告: 忽略声明有 warn_unused_result 属性的‘pipe’的返回值 [-Wunused-result]
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
scripts/kconfig/lex.zconf.c:1606:16: 警告: ‘input’定义后未使用 [-Wunused-function]
HOSTLD scripts/kconfig/mconf
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: 致命错误: curses.h:没有那个文件或目录
编译中断。
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make[1]: *** [menuconfig] 错误 2
make: *** [menuconfig] 错误 2

如果执行make menuconfig时,出现上面的这一坨东西,说明Ubuntu系统中缺少一个套件ncurses devel,只需要把这个套件按上即可。

sudo apt-get install libncurses5-dev

再次执行make menuconfig,你会看到下面这东东:

(1)busybox的性能微调

  设置TAB键补全,需要进行如下配置:(不是必须的,为了开发方便)
  busybox  setting   --->

    busybox  library  tuning  --->

      [*]  tab  completion

其余的使用默认配置即可,保存、退出。

编译busybox,注意:一定要切换为root权限,否则在执行安装时,会出现找不到arm-linux-gcc的命令。在这里废了好多事,一定要注意。

编译之前,先修改busybox根目录的Makefile,使用交叉编译器。

修改前:

ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=

修改后:

ARCH ?= arm
CROSS_COMPILE ?=arm-linux-

先运行source /etc/profile,使改过的makefile生效

执行make命令,编译busybox。这时会让你感到崩溃,又会出现问题,如下所示:

CC ipsvd/tcpudp.o
In file included from /home/glb/armtoolchain/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter_ipv4.h:8,
from ipsvd/tcpudp.c:33:
/home/glb/armtoolchain/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:44: error: field 'in' has incomplete type
/home/glb/armtoolchain/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:45: error: field 'in6' has incomplete type
ipsvd/tcpudp.c: In function 'tcpudpsvd_main':
ipsvd/tcpudp.c:314: warning: ignoring return value of 'write', declared with attribute warn_unused_result
make[1]: *** [ipsvd/tcpudp.o] 错误 1
make: *** [ipsvd] 错误 2

解决办法:arm-linux交叉编译工具链

进入~/armtoolchain/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux目录

打开netfilter.h这个文件,添加#include <netinet/in.h>,保存,退出。

然后再进如busybox目录下,执行make,你会看到

AR util-linux/lib.a
LINK busybox_unstripped
Trying libraries: crypt m
Library crypt is needed
Library m is needed
Final link with: crypt m

这说明编译成功了。

安装busybox

注意注意注意!!!!千万不要直接make  install,你如果这样做的话,就将它安装到pc机上了。把pc机给破坏掉

创建一个文件:

mkdir /work/nfs_root/first_fs

make  CONFIG_PREFIX=/work/nfs_root/first_fs  install

安装完成后,在该目录下生成了如下文件和目录

drwxr-xr-x 2 root root 4096 6月 27 11:27 bin
lrwxrwxrwx 1 root root 11 6月 27 11:27 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 6月 27 11:27 sbin

其中,linuxrc和/sbin/init程序功能完全一样,其他目录下是各种命令,不过他们都是/bin/busybox的符号链接。

构建根文件系统之busybox的更多相关文章

  1. linux2.6.30.4内核移植(5)——构建根文件系统(yaffs文件系统格式的镜像)

    一.首先编译并安装BusyBox 这里使用的交叉编译器还是3.4.5. 注意:编译内核.编译BusyBox以及编译文件系统中的所有应用程序的交叉编译器要使用同一个版本. 1.获取BusyBox源码 下 ...

  2. 使用busybox构建根文件系统

    当我们在Qemu上运行起来自己编译的内核之后,需要使用busybox构建一个文件系统,将此文件系统挂载上去就可以使用busybox提供的各种命令了. 1.编译安装busybox 源码下载地址:http ...

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

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

  4. 根文件系统及Busybox简介

    转:http://blog.csdn.net/wqc02/article/details/8930184 1.根文件系统简介...2 2.Busybox简介...2 2.1Busybox简介...2 ...

  5. 制作根文件系统之Busybox init进程的启动过程分析

    先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中. 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它 ...

  6. 构建根文件系统之init进程分析

    busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...

  7. 韦东山笔记之用busybox构建根文件系统

    1 百度搜索busybox进入busybox官网(https://busybox.net/)作者:恒久力行 QQ:624668529  点击左侧DownloadSource下载最新稳定版的busybo ...

  8. linux根文件系统制作之busybox编译和系统构建【转】

    转自:http://blog.chinaunix.net/uid-29401328-id-5019660.html 介绍完相关文件后我们开始构建文件系统,涉及到的文件等到具体用到的时候再讲. 一.编译 ...

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

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

随机推荐

  1. JDOJ3004 超级楼梯

    JDOJ3004 超级楼梯 https://neooj.com/oldoj/problem.php?id=3004 题目描述 有一个超级楼梯共N级,刚开始时你在第一级,若每次只能跨上一级或两级,要走上 ...

  2. FFT_应用和例题

    卷积 现有两个定义在 N 上的函数 \(f(n),g(n)\),定义 \(f\) 和 \(g\) 的卷积(convolution)为 \(f \otimes g\) \[ (f \otimes g)( ...

  3. hdu6470 矩阵快速幂+构造矩阵

    http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意 \(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n] 题 ...

  4. VS2017项目升级 error LNK2005: "public: __thiscall ATL::CTime::

    我是将项目升级到从VS2012 升级VS2017, 报错如下 1>atlsd.lib(atltime.obj) : error LNK2005: "public: __thiscall ...

  5. usb设备在sysfs中的命名规范

    "root-hub的编号"-"设备(或者hub)插入的端口号"[."设备(或者hub)插入的端口号"]:"USB设备配置号&quo ...

  6. webpack与vue环境搭建(转载)

    原文:https://www.cnblogs.com/lgx5/p/10732016.html npm安装教程   一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理 ...

  7. Kubernetes容器集群管理环境 - Node节点的移除与加入

    一.如何从Kubernetes集群中移除Node比如从集群中移除k8s-node03这个Node节点,做法如下: 1)先在master节点查看Node情况 [root@k8s-master01 ~]# ...

  8. Vue.js 源码分析(二十) 指令篇 v-once指令详解

    数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值,例如:<p>Message: {{ msg }}</p>以后每当msg属性发生了改变,插值处的内 ...

  9. 【转】asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  10. 关于kubernetes服务对外提供访问

    一.kubernetes exposed servcie 暴露服务的几种方式: LoadBalancer NodePort Ingress HostNetwork HostPort LoadBalan ...