构建根文件系统之busybox
配置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的更多相关文章
- linux2.6.30.4内核移植(5)——构建根文件系统(yaffs文件系统格式的镜像)
一.首先编译并安装BusyBox 这里使用的交叉编译器还是3.4.5. 注意:编译内核.编译BusyBox以及编译文件系统中的所有应用程序的交叉编译器要使用同一个版本. 1.获取BusyBox源码 下 ...
- 使用busybox构建根文件系统
当我们在Qemu上运行起来自己编译的内核之后,需要使用busybox构建一个文件系统,将此文件系统挂载上去就可以使用busybox提供的各种命令了. 1.编译安装busybox 源码下载地址:http ...
- Busybox构建根文件系统和制作Ramdisk
定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统.它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整.功能丰富的文件系统,其中包括大量常用的应用 ...
- 根文件系统及Busybox简介
转:http://blog.csdn.net/wqc02/article/details/8930184 1.根文件系统简介...2 2.Busybox简介...2 2.1Busybox简介...2 ...
- 制作根文件系统之Busybox init进程的启动过程分析
先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中. 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它 ...
- 构建根文件系统之init进程分析
busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...
- 韦东山笔记之用busybox构建根文件系统
1 百度搜索busybox进入busybox官网(https://busybox.net/)作者:恒久力行 QQ:624668529 点击左侧DownloadSource下载最新稳定版的busybo ...
- linux根文件系统制作之busybox编译和系统构建【转】
转自:http://blog.chinaunix.net/uid-29401328-id-5019660.html 介绍完相关文件后我们开始构建文件系统,涉及到的文件等到具体用到的时候再讲. 一.编译 ...
- 使用BusyBox制作根文件系统【转】
本文转载自:http://www.cnblogs.com/lidabo/p/5300180.html 1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.Busy ...
随机推荐
- ADB端口5037被占用 导致adb 停止工作
解决ADB端口占用问题 方式一 5037为adb默认端口,若5037端口被占用,打开cmd,输入以下指令, 1.查看占用端口的进程PID netstat -aon|findstr 5037 2. 通 ...
- 浅谈js的事件冒泡和事件捕获
本文地址:https://www.cnblogs.com/christineqing/p/7607113.html 前言: 这篇文章起源于上次工作上的原因,在事件上出的bug,所以就抽空写出一篇 ...
- 浅谈C++ STL queue 容器
浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们 ...
- 树莓派4b+linux
用Win32DiskImager烧录系统 先在boot根目录下新建ssh空文件夹来开启ssh功能,否则ssh是关闭的,用putty一直连不上,显示拒绝连接 1.联网: 初次 (实践证明:直接在sd卡根 ...
- 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)
题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...
- 宝塔面板+djiango+mod wsgi +apache 配置多项目站点
在一台服务器上同时有多个djiango项目,那么就需要配置多站点,利用不同的域名不同的端口 同时存在多个项目. 环境,centos + 宝塔面板+apache+django 1.在centos环境下 ...
- 使用Docker搭建HttpRunnerManager环境
建立一个HttpRunnerManager的环境需要Mysql,RabbitMQ服务,为简单部署,全部使用Docker 1. 在服务器建立Docker环境 2.建立Mysql容器 docker run ...
- Vue.js 源码分析(二十三) 指令篇 v-show指令详解
v-show的作用是将表达式值转换为布尔值,根据该布尔值的真假来显示/隐藏切换元素,它是通过切换元素的display这个css属性值来实现的,例如: <!DOCTYPE html> < ...
- jdk-8u151-nb-8_2-windows-x64软件安装教程及环境配置
1.双击jdk-8u151-windows-x64.exe文件 2.进入安装向导 3.配置环境变量 (1)计算机→属性→高级系统设置→高级→环境变量 (2)系统变量→新建 JAVA_HOME 变量 . ...
- Window权限维持(十):Netsh Helper DLL
Netsh是Windows实用程序,管理员可以使用它来执行与系统的网络配置有关的任务,并在基于主机的Windows防火墙上进行修改.可以通过使用DLL文件来扩展Netsh功能.此功能使红队可以使用此工 ...