一、概述
1.最小 Linux 系统简介
我们总说linux系统,但到底什么是linux系统?又什么是最小linux系统?
一个操作系统宏观上分为两个部分:kernel和shell(核和壳)。
kernel就是操作系统内核,shell在kernel之上,提供与用户交互的界面,包括CLI(命令行界面)和GUI(图形用户界面),除此之外还有基础运行库(如c库、posix)等基础软件。
最小Linux系统(Minimal Linux System)是一种超小型系统,它是一种使用Linux系统内核和一些必要的包(程序,驱动程序等)来替换复杂操作系统的方法。最小Linux系统是运行时环境,不支持多用户模式,不运行X图形界面,只使用服务器或终端用户界面,而且只运行N。最小Linux系统可以在低功率设备上得到良好的性能,并有助于将Linux系统部署到现有环境中。最小Linux系统可以更快速地启动,也可以在较少的时间内完成配置更改。
最小Linux系统由内核,根文件系统,用户空间,驱动程序等组成。内核是作为一个可执行程序存储在磁盘上,它负责处理硬件请求和虚拟内存管理。根文件系统用于存储系统文件,包括系统应用程序、用户帐户和文件管理器配置文件等。用户空间包括一些应用程序编译器,如GCC,以及相应的库函数,可用于在内核空间运行应用程序。最后,驱动程序通过Linux系统内核来控制硬件,从而实现这些设备的正常运行。
使用最小Linux系统是一种获得针对各种设备的最佳性能和可靠性的轻松方法。这是因为它可以有效地利用低功耗设备的资源,减少安装和配置需要的时间,并降低维护成本。另外,它还可以使用虚拟机运行多个应用程序,以及允许开发人员动态部署和调试应用程序,这帮助他们更好地利用Linux系统的灵活性和可靠性。
总之,最小Linux系统是一个超小型,高效,可靠的Linux系统,它可以很方便地运行在多种低功率设备上,使用虚拟机来运行多个应用程序,允许开发人员轻松地安装和配置系统,以及以较少的时间实现配置更改等。因此,最小Linux系统为这类设备提供最佳的运行环境和性能,使他们成为相对稳定的解决方案。
2. Busybox 工具简介
制作文件系统需要使用到 Busybox 工具。BusyBox 是一个集成了一百多个最常用 linux 命令和工具的 软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具, 例 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的 shell。
Busybox 的下载网址是 http://www.busybox.net/,这是一个开源的程序,并且一直在更新中,这里使用的版本是 busybox-1.22.1.tar.bz2。
二、BusyBox 制作最小文件系统
1. 虚拟机里创建Busybox
tar -xvf busybox-1.22.1.tar.bz2
2. 配置Busybox
这里的操作同根文件系统的移植。
进入到busybox-1.22.1目录下,如下图所示。
修改下图所示部分配置,保存退出。如下图。执行下述命令 “ source /etc/profile ”使编译器生效 。如下图
source /etc/profile
进入Busybox根文件夹,用gedit打开Makefile文件,如下图所示:
make menuconfig
如上图,选中 Busybox Settings,然后按回车进入到 Busybox Settings 界面,如下图。
输入使用的交叉编译工具 arm-none-linux-gnueabi-,如下图。
然后按回车返回到 Build Options 配置界面,这时可以看到刚才设置的交叉编译工具,如下图。
然后使用键盘的左右按键选中 Exit,如下图。
然后按回车,回到 Busybox Settings 设置界面,如下图。
选中 Installation Options 如上图,然后按回车,进入 Installation Options 配置界面,如下图。
删除上图里面的./_install,然后输入“../system”,也就是说最终生成的二进制文件会安装到当前目录的上一级目录下的 system 目录里面,注意有两个点,如下图。
然后按回车,回到 Installation Options,再使用键盘的向右方向键移动光标到“Exit”,然后按回车,返回到 Busybox Settings,使用键盘向右的方向键,移动光标到“Exit”, 如下图。
然后按回车保存配置,退出配置界面。如下图。
3. 编译和安装 BusyBox
现在 Busybox 的配置已经完成了,接下来开始编译 Busybox,在 Ubuntu 的终端输入“ make ”命令开始编译 Busybox,如下图。
如下图,编译完成。
现在编译完成了,接下来需要把编译生成的二进制文件安装到刚才指定的 “ ../system ” 目录里面,使用命令 “ make install ” 安装二进制文件到“../system”目录,如下图。
make install
如下图所示,执行完成。
三、完善最小 Linux 系统文件
mkdir dev etc lib mnt proc sys tmp var
进入到刚才创建的 etc 文件夹,如下图所示。
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
然后保存并退出 eth0-setting,使用 “ chmod 755 eth0-setting ” 命令修改 eth0- setting 的权限,如下图。
在 etc 目录下用 “ mkdir init.d ” 命令建立 init.d 文件夹,并使用命令 “ cd init.d ” 命令进入到 init.d 文件夹,如下图所示。
在 init.d 文件夹下面使用 “ vim ifconfig-eth0 ” 命令建立 ifconfig-eth0 文件,如下图所示。
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttySAC2
if [ -f /etc/eth0-setting ] ; then
source /etc/eth0-setting
if grep -q "/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC2
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/ttySAC2
else
/sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
fi
fi
echo Done > /dev/ttySAC2
然后在 init.d 文件夹下面使用 “ vim rcS ” 命令建立 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-4412
#/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 " " #sleep 1
#echo "*************************************" > /dev/ttySAC2
#echo " http://www.topeet.com.cn " > /dev/ttySAC2
#echo "*************************************" > /dev/ttySAC2
#echo "*************************************" #echo " http://www.topeet.com.cn " #echo "*************************************" mkdir /mnt/disk
sleep 1
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0
接下来在 etc 目录下使用命令 “ vim passwd ” 建立文件 passwd,如下图。
root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
然后保存并退出 passwd,使用 “ chmod 755 passwd ” 命令修改 passwd 的权限,如下图所示。
然后使用命令 “ vim profile ” 在 etc 目录建立 profile 文件,如下图所示。
然后在 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] \w# '
PATH=$PATH
HOSTNAME=`/bin/hostname` export USER LOGNAME PS1 PATH
然后保存并退出 profile,使用 “ chmod 755 profile ” 命令修改 profile 的权限,如下图所示。
接下来使用 “ mkdir rc.d ” 命令在 etc 目录建立文件夹 rc.d,如下图所示。
接着在 init.d 文件夹,使用 “ vim netd ” 命令建立 netd 文件,如下图所示。
然后在 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
然后保存并退出 netd,使用 “ chmod 755 netd ” 命令修改 netd 的权限,如下图所示。
接着使用 “ cd ../../../ ” 命令返回到 system 目录。 如下图。
接着使用 “ cd lib ” 命令进入到 lib 目录,如下图所示。
cp -P /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./ -lr
执行结果如下图所示。
库文件拷贝完成后,使用 “ cd ../ var ” 命令进入上层目录 system里的var 目录。
然后使用 “ mkdir lib lock log run tmp ” 命令在 var 目录下建立 lib,lock,log,run, tmp 五个目录, 如下图所示。
到了这一步,文件夹“system”即制作好了。如下图。
四、安装打包软件和编译
拷贝压缩包 “ linux_tools.tgz ” 到 Ubuntu 系统的“/” 目录下,注意目录是“/”。
注意,根目录是不能直接复制粘贴的,可以先拷贝到桌面再利用复制命令拷贝到根目录。如下图,这是其中的一个方法仅供参考。
使用解压命令 “ tar -vxf linux_tools.tgz ” 解压,如下图所示。
安装好打包编译工具 “ make_ext4fs ” 之后。使用命令 “ cd /home/minilinux/ ” 进入目录“/home/minilinux/”, 再使用命令 “ make_ext4fs -s -l 314572800 -a root -L linux system.img system ” 生成 system.img 文件系统镜像,如下图所示。
接着可以使用 ls 命令查看一下生成的 system.img。
至此为止,已经完成了 linux 文件系统的制作,最终生成的二进制文件即system.img 。
五、最小 Linux 系统的烧写
1. Qt简述
2. 烧写方法及流程
如下图所示,输入命令:ext3format mmc 0:4
如下图所示,在超级终端中,输入命令:fastboot
(4) 如下图,可以找到用户自己操作系统的小程序“cmd.exe”。
如下图所示,输入烧写 system 文件系统命令:fastboot.exe flash system system.img
如下图所示,输入擦除命令:fastboot -w
注意:上述 fastboot.exe flash 命令可以分开执行,这样可以只烧写单个的镜像。
6)在 Windows 命令行中,输入重启开发板命令:fastboot reboot
到此为止,Linux最小系统烧写完毕,重启开发板后直到进入最小系统非图形化界面,超级终端如下图:
开发板如下图,即linux最小系统制作并烧写成功。