基于busybox制作linux最小文件系统

老小孩
原创
发布时间: 2025-06-14 15:44:01 | 阅读数 0收藏数 0评论数 0
封面
最近在跟着讯飞的法师老师学习嵌入式Linux系统,今天通过busybox制作一个linux最小文件系统,我用的是虚拟机ubuntu,开发板是泰山派。

准备工作:

材料:

  1. 一台装有虚拟机Ubuntu的PC
  2. 一个Linux开发板
1

准备材料

先从busybox官网http://www.busybox.net下载busybox源码,

2

平台环境布置

在Ubuntu上新建一个文件夹,命名为busybox,把刚才下载的busybox源码复制进去。

然后确认你的Ubuntu上是否部署了瑞芯微的SDK,泰山派官网教程上有。

3

配置busybox

先cd到busybox文件夹下,解压busybox源码压缩包,然后cd到解压出来的文件夹里面。

用make menuconfig 命令打开图形化配置界面,配置busybox:

1.配置交叉编译器

settings->Cross compiler prefix 回车,在弹出的对话框中输入你开发板的交叉编译器绝对路径: /home/wht/tspi/linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-lin ux-gnu/bin(在bin后面再加上编译器的前缀aarch64-linux-gnu-)然后退出保存。

2.检查库文件选项

检查 settings->Build static binary 这个选项不要选上,这是静态库选项,我们一般不用这种方式。

3.检查vi命令选项

检查 settings->vi-style line editing commands 选上。

4.检查mdev(17 kb)选项 (热拔插)

检查 Linux System Utilities->mdev(17 kb) 选上。退出 保存。

添加支持中文功能:

1.用vi打开libbb/printable_string.c 按图修改,保存退出。

2.用vi打开libbb/unicode.c 按图修改 ,保存退出。

3.打开图形化配置界面选项 settings->Support Unicode 选中,下面的选项Check $LC_CTYPE and ... 也选中, 然后退出保存。

编译busybox:

用make命令编译

安装busybox:

用make install CONFIG_PREFIX=../sys命令安装,../sys是路径,这里为上一级的sys文件夹(自动创建)。

4

完善文件系统

首先cd 到刚创建的sys文件夹,用mkdir命令创建其他需要的文件夹:mkdir dev etc lib mnt proc sys tmp var

完善lib库文件:

先cd到lib文件夹下,先找到刚才交叉编译器的位置:/home/wht/tspi/linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu再进到它下面的libc/lib/,复制所有文件到刚新建的lib目录下:cp /home/wht/tspi/linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib/* . -rffd


完善etc文件:

1.eth0-setting文件:

先进到etc目录下,使用vim eth0-setting命令创建这个网络配置信息文件,输入以下内容:

                IP=192.168.1.230
                Mask=255.255.255.0
                Gateway=192.168.1.1
                DNS=192.168.1.1
                MAC=08:90:90:90:90:90

然后保存退出,用chmod 777 etho-setting命令修改权限。

2.ifconfig-eth0文件:

在etc目录下用创建initial.d文件夹,然后进入到文件夹里面使用vim ifconfig-eth0命令创建这个文件, 输入以下内容:

#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttymxc0
if [ -f /etc/eth0-setting ] ; then
source /etc/eth0-setting
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttymxc0
else
ifconfig eth0 down
ifconfig eth0 hw ether $MAC
ifconfig eth0 $IP netmask $Mask up
route add default gw $Gateway
fi
echo nameserver $DNS > /etc/resolv.conf
else
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttymxc0
else
/sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
fi
fi
echo Done > /dev/ttymxc0

然后保存退出,用chmod 777 ifconfig-eth0命令修改权限。

3.rcS文件:

在init.d文件夹下创建rcS文件,并输入如下内容:

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
/bin/hostname iTOP-iMX6UL
#/bin/mount -n -t proc none /proc
#/bin/mount -n -t sysfs none /sys
#/bin/mount -n -t usbfs none /proc/bus/usb
#/bin/mount -t ramfs none /dev
[ -e /proc/1 ] || /bin/mount -n -t proc none /proc
[ -e /sys/class ] || /bin/mount -n -t sysfs none /sys
[ -e /dev/tty ] || /bin/mount -t ramfs none /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
#/bin/hotplug
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm
/bin/mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
#/bin/mount -n -t ramfs none /tmp
#/bin/mount -n -t ramfs none /var
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/log/boa
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
#ln -sf /dev/ttyS2 /dev/tty2
#ln -sf /dev/ttyS2 /dev/tty3
#ln -sf /dev/ttyS2 /dev/tty4
syslogd
/etc/rc.d/init.d/netd start
echo " " > /dev/tty1
echo "Starting networking..." > /dev/tty1
#sleep 1
#/etc/rc.d/init.d/httpd start
#echo " " > /dev/tty1
#echo "Starting web server..." > /dev/tty1
#sleep 1
#/etc/rc.d/init.d/leds start
#echo " " > /dev/tty1
#echo "Starting leds service..." > /dev/tty1
#echo " " 55 #sleep 1
#echo "*************************************" > /dev/ttySAC2
#echo " http://www.nihao.com.cn " > /dev/ttySAC2
#echo "*************************************" > /dev/ttySAC2
#echo "*************************************"
#echo " http://www.nihao.com.cn "
#echo "*************************************"
mkdir /mnt/disk
sleep 1
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0

然后保存退出,用chmod 777 rcS命令修改权限。

4.passwd文件

用vi命令在etc目录下创建passwd文件,并输入以下内容:

root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:

然后保存退出,用chmod 777 passwd命令修改权限。

5.profile文件

用vi命令在etc目录下创建profile文件,并输入以下内容:

# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH

然后保存退出,用chmod 777 profile命令修改权限。

6.netd文件

在etc目录下创建rc.d文件夹,再在rc.d文件夹下创建init.d文件夹,再在init.d文件夹下用vi命令创建netd文件,并输入以下内容:

#!/bin/sh
base=inetd
# See how we were called.
case "$1" in
start)
/usr/sbin/$base
;;
stop)
pid=`/bin/pidof $base`
if [ -n "$pid" ]; then
kill -9 $pid
fi
;;
esac
exit 0

然后保存退出,用chmod 777 netd命令修改权限

7.inittab文件:

在etc目录下创建inittab文件,并输入以下内容:

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

然后保存退出,用chmod 777 inittab命令修改权限.

8.fstab文件:

在etc目录下创建fstab文件,并输入以下内容:

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0

然后保存退出,用chmod 777 fstab命令修改权限.

9.medv.conf文件:

在etc目录下创建medv.conf文件,并输入以下内容:

sd[a-z][0-9] 0:0 666 @/etc/hotplug/udisk inserting
sd[a-z]0:0 666 $/etc/hotplug/udisk removing

然后保存退出,用chmod 777 medv.conf命令修改权限.

在etc目录下创建hotplug文件夹,在hotplug文件夹下创建udisk_inserting文件,并输入以下内容:

#!/bin/sh
echo "usbdisk insert!">/dev/console
if[ -e"/dev/$MDEV"]:then
mkdir -p/mnt/usbdisk/$MDEV
mount/dev/$MDEV/mnt/usbdisk/$MDEV
echo "/dev/$MDEV mounted in /mnt/usbdisk/$MDEV">/dev/console
fi

再在hotplug文件夹下创建udisk_removing文件,并输入以下内容:

#!/bin/sh
echo "usbdisk remove!">/dev/console
umount-l/mnt/usbdisk/sd*
rm-rf/mnt/usbdisk/sd

然后保存退出,用chmod 777 ./*命令修改两个文件权限.

10.mtab文件

在etc目录下创建mtab文件,在etc目录下输入命令: ln -s /proc/mounts mtab 把它链接到/proc/mou nts。






5

打包文件系统镜像

打包busybox文件系统成你开发板的格式镜像(泰山派是RK3566,格式为.img):

1.先返回到文件系统的上一级目录。

2.创建文件夹rootfs.

3.使用命令查看sys文件夹大小:du sys -h

3.创建容器:dd if=/dev/zero of=rootfs.img bs=1M count=300

4.格式化容器:mkfs.ext4 rootfs.img

5.将rootfs.img挂载到rootfs这个文件夹上: sudo mount rootfs.img rootfs 然后用df命令查看结果。

6.把sys的内容复制到rootfs文件夹里面:sudo cp -rfpd sys/* ./rootfs ,这样就等于把sys中的内容复制到 了 rootfs.img里面了。

7.取消rootfs挂载:sudo umount rootfs

这样这个rootfs.img就是制作好的文件系统镜像啦。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载