用BusyBox制作Linux最小系统
1、下载busybox-1.30.1 地址:https://busybox.net/downloads/busybox-1.30.1.tar.bz2
2、解压:tar xvf busybox-1.30.1.tar.bz2
3、安装交叉编译器
4、安装libncurses5-dev:sudo apt-get install libncurses5-dev
5、配置busybox:make menuconfig
使用默认的配置项就可以,下面是一些重要的配置项说明:
Setting->Build Options->Build BusyBox as a static binary (no shared libs) 是否使用静态编译,如果不是静态编译,则busybox运行时还需要复制几个动态库文件,否则不能运行
settings->build options->Cross compiler prefix设置交叉编译前缀(如果设了环境变量CROSS_COMPILE或make指定了则这里不需要设置)
settings->installation options->Destination path for 'make install'设置安装目录,默认是./_install
Linux System Utilities->mdev支持mdev
6、编译
make CROSS_COMPILE=arm-linux-gnueabihf-
make install
就会安装在_install目录下有如下目录:bin sbin usr,还有一个linuxrc指向bin/busybox
7、进入_install目录创建目录
mkdir dev etc lib var proc tmp home root mnt sys
8、生成etc配置文件(在etc目录下操作):
再复制配置文件:cp -rf ~/busybox-1.30.1/examples/bootfloppy/etc/* .
最终生成的配置文件如下:
etc/inittab(开机免登录):
::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
#::respawn:-/bin/login
console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
etc/inittab(开机需要登录):
::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
::respawn:-/bin/login #如果这里加上 -f root 则自动登录
#console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
如果需要密码,则:
sudo cp /etc/passwd .
sudo cp /etc/group .
sudo cp /etc/shadow .
再编辑这三个文件,只保留root那一行,这样root的密码与虚拟机(123456)相同,最终passwd,group,shadow三个文件内容依次为:
root:x:0:0:root:/root:/bin/sh #将x去掉就root没有密码了
root:x:0:
root:$6$99hUh1hc$NptxbUGmNiX1zQYM08SAVq.2xbDHqEEy6rKbIHWozgJ2cjoIP39OjmkHgSkr2vR6fXRmy5BXfDQW4lgHH/
ect/profile文件:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
PS1='\u@\w\$'
etc/fstab文件:
/dev/mmcblk0p2 / ext4 defaults 0 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
etc/init.d/rc.S文件(添加自动执行命令,该文件需有执行属性chmod +x rcS):
#! /bin/sh
/bin/mount -n -t ramfs ramfs /var
/bin/mount -n -t ramfs ramfs /tmp
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none /dev
/bin/mkdir /var/tmp
/bin/mkdir /var/modules
/bin/mkdir /var/run
/bin/mkdir /var/log
/bin/mkdir -p /dev/pts #telnet服务需要
/bin/mkdir -p /dev/shm #telnet服务需要
/bin/mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug #USB自动挂载需要
/sbin/mdev -s #启动mdev在/dev下自动创建设备文件节点
/bin/hostname maxonic
#######配置网络################################
#/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
#/sbin/ifconfig eth0 192.168.1.70
#/sbin/ifconfig eth0 netmask 255.255.255.0
#/sbin/route add default gw 192.168.1.1 eth0
#/sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0
#/sbin/route add default gw 192.168.1.1 eth1
9、创建设备结点
进入dev目录,执行如下命令
sudo mknod console c 5 1
sudo mknod null c 1 3
#sudo mknod ttySAC0 c 204 64
#sudo mknod tty2 c 204 65
#sudo mknod mtdblock0 b 31 0
#sudo mknod mtdblock1 b 31 1
#sudo mknod mtdblock2 b 31 2
10、复制引用的库(如果是静态编译则不需要复制)
如果busybox不是配置为静态编译,则需要复制使用到的动态库,动态库在交叉编译器中有:
arm-linux-gnueabihf-readelf -d bin/busybox #查看引用了哪些动态库,发现有三个(再递归查看引用还有一个),复制四个库到lib目录
sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libm.so.6 .
sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libresolv.so.2 .
sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libc.so.6 .
sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3 .
只需要复制这四个库就可以了,当然也可直接整个lib目录一起复制:
sudo cp -a ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/* .
11、复制到目标盘
进入_install目录,执行如下命令:
sudo cp -rfav * /mnt/disk
进入目标盘然后执行:
sudo chown root:root . -R
12、如果运行时停在:
Run /sbin/init as init process
random: fast init done
则是console参数没有传对,所以串口显示不了,更改内核启动console参数即可
13、登录时会打印出root login on 'UNKNOWN'看着不舒服,找到busybox源码login.c注释掉syslog(LOG_INFO, "root login%s", fromhost)即可
用BusyBox制作Linux最小系统的更多相关文章
- Linux 最小系统制作
Linux 最小系统制作 一.制作工具Busybox 在制作文件系统的时候,我们需要使用“Busybox 工具”,即为附件压缩包“busybox-1.21.1.tar.bz2”.“BusyBox 工具 ...
- 基于busybox的Linux小系统制作 (initrd)
我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明.准备环境:1.一个Redhat完整系统的虚拟机,本次 ...
- [嵌入式开发入门]4412开发板从零建立Linux最小系统
本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...
- Linux最小系统移植之早期打印CONFIG_EARLY_PRINTK
请先参考先前博文: Linux最小系统移植之早期打印CONFIG_DEBUG_LL , 因为eraly_printk其实就是对printch()封装的 一. 必要选项(在上面链接选中的前提下再新增 ...
- Linux最小系统移植之早期打印CONFIG_DEBUG_LL
一.几个关键宏定义 CONFIG_DEBUG_LL. CONFIG_DEBUG_LL_INCLUDE 容我慢慢道来, 首先要使能早期打印, menuconfig必须选中CONFIG_DEBUG_LL, ...
- 使用BusyBox制作linux根文件系统(CramFS+mdev)
转:http://www.360doc.com/content/10/0428/11/496343_25245348.shtml 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 ...
- ZYNQ学习之路1. Linux最小系统构建
https://blog.csdn.net/u010580016/article/details/80430138?utm_source=blogxgwz1 开发环境:window10, vivado ...
- 在Linux最小系统上编译运行第一个helloworld程序
一.安装和使用SSH软件 1.安装SSH 软件 1)SSH 软件压缩包可以在网盘下载,下载后解压,进入解压出来的文件夹,如下图. 2)单击上图中的“SSHSecureShellClient-3.2.9 ...
- 使用BusyBox制作Linux根文件系统
STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin ...
随机推荐
- idea取消参数标记
- Js判断值是否是NaN
方法一:window.isNaN() 注意: window.isNaN 只对数值有效,如果传入其他值,会被先转成数值.比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别 ...
- win10 免安装版本的MySQL的下载安装和配置
一.概述 网上找了好多,发现好多不是linux系统的就是与现在新版本有出入,自己做小项目亲手实践了一下,供大家借鉴. MySQL版本:mysql-5.7.17 下载方法: 1.MySQL官方网址htt ...
- Linux(Centos)安装图形化界面步骤
最近有重新来捣鼓捣鼓Linux了,这次撸的版本是centos7.4的,虽然说是不要桌面,但是感觉还是安装一下比较好balalalala.........废话不说的直接进入正题: 安装X 首先安装X(X ...
- Servlet 学习(九)
Listener 1.功能 Servlet 2.3 中新增加的另一个功能 作用是监听Java Web 程序中的事件 对应设计模式中的Listener 模式,当事件发生的时候会自动触发该事件对应的Lis ...
- 1007 Maximum Subsequence Sum (25分) 求最大连续区间和
1007 Maximum Subsequence Sum (25分) Given a sequence of K integers { N1, N2, ..., NK }. A ...
- Java面向对象编程 -1
面向对象简介 C语言是面向过程开发的代表 C++ 或者Java 是面向对象的编程语言 所谓的面向过程指的是面对于一个问题的解决方案,更多的情况下是不会做出重用的设计思考的. 而面向对象的主要设计形式是 ...
- 树莓派4B踩坑指南 - (5)设置阿里云的源及解决apt提示依赖
解决树莓派apt升级/安装提示依赖问题: 注意!!buster是根据系统版本(cat /etc/os-release)来写的,如果是jessie或者stretch要改为buster.参考解决树莓派ap ...
- python学习 —— python3简单使用pymysql包操作数据库
python3只支持pymysql(cpython >= 2.6 or >= 3.3,mysql >= 4.1),python2支持mysqldb. 两个例子: import pym ...
- Codeforces1303D. Fill The Bag
1e18对应2进制有58位,可以直接暴力模拟,因为读入的数都是2次幂,__builtin_ctz这个内置gcc函数可以算出二进制下末尾有几个0,读入时统计,然后从n的最低位开始判断,注意每次升位的时候 ...