Exynos-4412不仅可以运行Android,还可以运行简单的linux最小文件系统(不带显示界面的linux系统),下面我们来讲解一下这种文件系统的制作。
制作文件系统我们需要使用到Busybox工具。BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。
Busybox的下载网址是http://www.busybox.net/,这是一个开源的程序,并且一直在更新中,我们使用的版本是busybox-1.21.1.tar.bz2。下面我们来讲解一下如何使用BusyBox制作最小文件系统:
首先拷贝busybox-1.21.1.tar.bz2到我们的虚拟机的Ubuntu系统上,然后执行解压命令:tar -xvf busybox-1.21.1.tar.bz2,解压完成后:
然后使用cd命令进入到Busybox文件夹中,:
Busybox的编译配置和Linux内核编译配置使用的命令是一样的,下面我们开始配置Busybox,使用命令make menuconfig会出现Busybox的配置界面,:
我们选中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”,:
然后按回车,返回到Busybox Configuration,使用键盘向右的方向键移动光标到“Exit”,:
然后输入回车,弹出保存配置界面,:
使用键盘向右的方向键,移动光标到“Yes”,然后按回车保存配置,退出配置界面,:
现在Busybox的配置已经完成了,接下来我们开始编译Busybox,在Ubuntu的终端输入make命令开始编译Busybox,:
下图为编译过程中的截图:
下图为编译完成的截图:
现在编译完成了,接下来我们需要把编译生成的二进制文件安装到刚才我们指定的../system目录里面,输入make install命令安装二进制文件到../system目录,:
下图为make install执行完成的截图:
现在我们使用cd命令,打开../system,看看里面安装的文件,:
制作的文件系统还需要dev,etc,lib,mnt,proc,sys,tmp,var文件夹,我们需要用命令mkdir 来创建一下,:
使用cd命令进入到刚才创建的etc文件夹,:
在etc目录下使用vi建立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命令修改eth0-setting的权限,:
在etc目录下用mkdir命令建立init.d文件夹,如下如:
然后使用cd命令进入到init.d文件夹,:
在init.d文件夹下面使用vi命令建立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
:
然后保存并退出ifconfig-eth0,使用chmod命令修改ifconfig-eth0的权限,:vim
然后在init.d文件夹下面使用vi命令建立rcS文件,:
/home/cym/system/etc/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-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
:
然后保存并退出rcS,使用chmod命令修改rcS的权限,:
接下来输入ls命令可以看到我们创建的两个文件ifconfig-eth0和rcS,:
接下来使用cd ..命令返回到init.d的上一级目录etc,:
接下来在etc目录下使用vi建立文件passwd,:
在新建立的passwd文件输入下面的内容:
root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
输入结果:
然后保存并退出passwd,使用chmod命令修改passwd的权限,:
然后使用vi命令在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=‘[[email protected]$HOSTNAME]# ‘
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
输入结果:
然后保存并退出profile,使用chmod命令修改profile的权限,:
接下来使用mkdir命令在etc目录建立文件夹rc.d,:
使用cd命令进入到刚才建立的rc.d文件夹,:
接下来在rc.d目录下使用mkdir建立init.d文件夹,:
然后使用cd命令进入到刚才建立的init.d文件夹,:
接着在init.d文件夹,使用vi命令建立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命令修改netd的权限,
接着使用cd ../../命令返回到etc目录,
接着使用cd ..命令返回到system目录,
接着使用cd命令进入到lib目录,
因为我们使用的交叉编译环境和编译内核是一样的,所以我们的编译器是/usr/local/arm/arm-2009q3,Busybox编译生成的二进制文件十一动态链接库的形式运行,所以我们需要拷贝编译器里面的库文件到lib目录,使用下面的命令:
/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./
执行结果:
可以使用ls命令查看下拷贝过来的库文件,
库文件拷贝完成后,使用cd ..命令返回到system目录,
接下来使用cd命令进入到var目录,
然后使用mkdir命令在var目录下建立lib,lock,log,run,tmp五个目录,
我们可以使用ls命令查看一下创建的这几个目录,
至此,文件系统所需要的文件都已经创建好了,使用cd ../../命令返回到system文件夹的上一级目录
制作压缩包的工具,拷贝“光盘\tools中的linux_tools.tgz”文件到Ubuntu的”/”目录,解压到“/”目录。
下面我们可以使用命令make_ext4fs -s -l 314572800 -a root -L linux system.img system生成system.img文件系统镜像
我们可以使用ls命令查看一下生成的system.img
现在我们已经完成了linux文件系统的制作,可以把我们制作的system.img烧写到iTOP-4412开发板上,烧写的方式和Android文件系统的烧写一样。