linux 最小系统,用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=‘\[email protected]\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)即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值