Linux系统编程之最小 linux 文件系统的制作及烧写

迅为iTop4412核心板Exynos-4412 不仅可以运行 Android ,还可以运行简单的 Linux 最小文件系统。 最小 Linux 系统可谓是“麻雀虽小,五脏俱全”,它虽是不带图形界面的 linux 系统,可以用来学习 linux 系 统编程,便于理解。

一、概述

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 包含了一些简单的工具,例如 lscat echo 等等,还包含了一些更大、更复杂的工具, 例 grep、findmount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的 shell。

Busybox 的下载网址是 http://www.busybox.net/,这是一个开源的程序,并且一直在更新中,这里使用的版本是 busybox-1.22.1.tar.bz2

二、BusyBox 制作最小文件系统

1. 虚拟机里创建Busybox

首先,可以在虚拟机的 Ubuntu 的目录“ /home ”下新建目录“ minilinux”,为了后续操作方便,也可以把其所有权限都打开,具体过程如下图所示。
拷贝 “  busybox-1.22.1.tar.bz2 ” 到虚拟机的Ubuntu 系统目录“  /home/minilinux  ”下,然后在目录“ /home/minilinux ”下,执行解压命令,如下图所示。
tar -xvf busybox-1.22.1.tar.bz2

 2. 配置Busybox

这里的操作同根文件系统的移植。

进入到busybox-1.22.1目录下,如下图所示。


修改下图所示部分配置,保存退出。如下图。执行下述命令 “ source /etc/profile  ”使编译器生效 。如下图

source /etc/profile

进入Busybox根文件夹,用gedit打开Makefile文件,如下图所示:

Busybox 的编译配置和 Linux 内核编译配置使用的命令是一样的,下面开始配置 Busybox,如下图所示,使用命令“  make menuconfig  ” ,如下图所示,之后会出现 Busybox 的配置界面。
make menuconfig 

 如上图,选中 Busybox Settings,然后按回车进入到 Busybox Settings 界面,如下图。

Busybox Settings 配置选项里面需要修改两个地方,第一个是“  Build Optiions-> Cross Compiler prefix  ”, 它是指定用什么编译器来编译 Busybox ,选中 Build Options 如上图,然后按回车,进入到 Build Options 配 置界面,如下图。
选中 Build Options 配置界面的 Cross Compiler prefix 如上图,然后按回车,进入 Cross Compiler prefix 配 置界面,如下图。

 输入使用的交叉编译工具 arm-none-linux-gnueabi-,如下图。

然后按回车返回到 Build Options 配置界面,这时可以看到刚才设置的交叉编译工具,如下图。

 然后使用键盘的左右按键选中 Exit,如下图。

然后按回车,回到 Busybox Settings 设置界面,如下图。

 选中 Installation Options 如上图,然后按回车,进入 Installation Options 配置界面,如下图。

选中 BusyBox installation prefix 如上图所示,然后按回车进入 BusyBox installation prefix 配置界面。
说明:这个界面是设置编译完 Busybox ,把最终生成的二进制文件安装到哪个目录下面),如下图。

 删除上图里面的./_install,然后输入“../system”,也就是说最终生成的二进制文件会安装到当前目录的上一级目录下的 system 目录里面,注意有两个点,如下图。

然后按回车,回到 Installation Options,再使用键盘的向右方向键移动光标到“Exit”,然后按回车,返回到 Busybox Settings,使用键盘向右的方向键,移动光标到“Exit”, 如下图。

然后回车,弹出保存配置界面,使用键盘向右的方向键,移动光标到“ Yes”,然后按回车保存配置,退出配置界面,如下图。

然后按回车保存配置,退出配置界面。如下图。

 3. 编译和安装 BusyBox

 现在 Busybox 的配置已经完成了,接下来开始编译 Busybox,在 Ubuntu 的终端输入“ make ”命令开始编译 Busybox,如下图。

如下图,编译完成。

现在编译完成了,接下来需要把编译生成的二进制文件安装到刚才指定的 “ ../system ” 目录里面,使用命令 “ make install ” 安装二进制文件到“../system”目录,如下图。

make install

如下图所示,执行完成。

 三、完善最小 Linux 系统文件

制作的文件系统还需要 dev,etc,lib,mnt,proc,sys,tmp,var 文件夹,使用命令“ mkdir dev etc lib mnt proc sys tmp var  ” 创建文件夹,如下图所示。
mkdir dev etc lib mnt proc sys tmp var

进入到刚才创建的 etc 文件夹,如下图所示。 

etc 目录下使用命令 vi 或者 vim 建立 eth0-setting 文件,并在 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

然后保存并退出 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 文件,如下图所示。 

然后在 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

使用命令“  chmod 755 ifconfig-eth0  ”修改 ifconfig- eth0 的权限,如下图所示。

然后在 init.d 文件夹下面使用 “  vim rcS  ” 命令建立 rcS 文件,如下图。 

然后在 rcS 文件输入下面的内容。且保存并退出 rcS ,使用命令  “   chmod 755 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

 

接下来使用  “   cd ../   ”  命令返回到 init.d 的上一级目录 etc ,如下图所示。

接下来在 etc 目录下使用命令  “ vim passwd ” 建立文件 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,如下图所示。 

接下来使用命令  “   cd rc.d/   ”  进入 rc.d 目录,在 rc.d 目录下使用命令  “   mkdir init.d   ”  建立 init.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 目录,如下图所示。 

因为使用的交叉编译环境和编译内核的相同,所以编译器是 /usr/local/arm/arm- 2009q3 Busybox 编译 生成的二进制文件十一动态链接库的形式运行,所以需要拷贝编译器里面的库文件到 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 目录下建立 liblocklogruntmp 五个目录, 如下图所示。

 

 到了这一步,文件夹“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 系统的烧写

最后需要把制作好的 system.img 烧写到 iTOP-4412 开发板上,烧写的方式和 Android 文件系统的烧 写一样。 uboot 文件不用烧写,是和安卓4.0.3通用的。 内核 zImage 使用 QtE 的即可,可以参考“ QT 文件系统 /zImage ”目录下的 zImage 文件 。详细过程如下所述。
说明:最小 linux 系统与QtE4.7 系统的 U-boot 镜像( u-boot-iTOP-4412.bin ), Kernel
zImage )镜像通用。

1. Qt简述

Qt 是一种基于 C++的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到 嵌入式 GUI ,上天入地无所不能。
Qt 一般指代桌面版本,例如在 Linux x86 ), Windows Mac 系统上运行的。
QtE 全称是 Qt embedded ,特指嵌入式版本。它是 Qt Embedded Linux 分支平台,在原始 Qt 的基 础上,做了许多出色的调整以适合嵌入式环境。
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以 绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
总起来说, Qt 主要用于桌面程序开发和嵌入式图形界面的开发。

2. 烧写方法及流程

安装完 ADB 驱动,并且准备好 platform-tools 文件夹后即可进行烧写。
准备好编译好的 QtE4.7 系统的内核与根文件系统镜像,如下图所示。
1 )打开超级终端,然后上电启动开发板,按“回车”,进入 Uboot 模式, 如下图所示,进入 uboot 模式。
2 )创建 eMMC 分区并格式化。如果原来已经做过此步骤,则可以跳过,不必每次烧写前都分区和格 式化。在超级终端中,输入下面分区和格式化命令。
如下图所示,输入分区命令: fdisk -c 0
如下图所示,输入命令: fatformat mmc 0:1
如下图所示,输入命令: ext3format mmc 0:2
如下图所示,输入命令: ext3format mmc 0:3

如下图所示,输入命令:ext3format mmc 0:4 

如下图所示,在超级终端中,输入命令:fastboot 

注意: fastboot 命令需要与 PC 上的 USB_fastboot_tool 工具配套使用,而且 fastboot 命令需要进入 uboot 模式中才能使用。
3 )用 OTG 线将开发板 OTG 接口和 PC USB 接口相连。除了硬件连接,还要 安装 adb 驱动。
4 )在 PC 机上运行 “05-USB_fastboot_tool”-->“platform-tools” 文件夹中的文件 “cmd.exe” cmd.exe 可执行文件是 Windows 自带的命令行工具,如果用户使用时不兼容 ,请使用用户自己 Windows 系统里面的 cmd.exe 工具,具体可以参考下述过程:
(1 ) 首先打开电脑桌面系统的“开始”菜单,在下图矩形框查找栏中输入“ cmd ”。
(2) 如下图,出现这个操作系统自带的“ cmd.exe ”小程序。
(3) 如下图,(不同的操作系统有点区别),找到选项“打开文件设置”。

(4) 如下图,可以找到用户自己操作系统的小程序“cmd.exe”。 

然后我们将自己操作系统的 “ cmd.exe ” 程序拷贝到 “ USB_fastboot_tool ” 文件夹中,将“ cmd.exe ”覆
盖,这样我们再次运行 cmd.exe 程序的时候就可以进入 Windows 命令行工作模式了。如下图。
5)如下图所示,在 Windows 命令行中,输入烧写 zImage 内核命令: fastboot.exe flash kernel zImage
如下图所示,输入烧写 ramdisk 命令: fastboot.exe flash ramdisk ramdisk-uboot.img

 

如下图所示,输入烧写 system 文件系统命令:fastboot.exe flash system system.img 

如下图所示,输入擦除命令:fastboot -w 

注意:上述 fastboot.exe flash 命令可以分开执行,这样可以只烧写单个的镜像。

6)在 Windows 命令行中,输入重启开发板命令:fastboot reboot

到此为止,Linux最小系统烧写完毕,重启开发板后直到进入最小系统非图形化界面,超级终端如下图:

 

开发板如下图,即linux最小系统制作并烧写成功。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值