本帖最后由 fuqiye 于 2016-1-14 18:09 编辑
busybox-1.24.0制作AM335X文件系统 第二天
/*****************************************************************************************************************************/
开始:
1、创建根文件系统目录,主要包括以下目录 /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys #mkdir rootfs #cd rootfs #mkdir dev etc lib usr var proc tmp home root mnt sys 将第一天编译好的文件复制到根文件系统目录(注意:复制的时候加上-rfa参数) 2、构建etc目录 在etc目录下创建inittab文件 文件内容: # /etc/inittab init(8) configuration for BusyBox
#
# Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
#
#
# Note, BusyBox init doesn't support runlevels. The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use sysvinit.
#
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# <id>: WARNING: This field has a non-traditional meaning for BusyBox init!
#
# The id field is used by BusyBox init to specify the controlling tty for
# the specified process to run on. The contents of this field are
# appended to "/dev/" and used as-is. There is no need for this field to
# be unique, although if it isn't you may have strange results. If this
# field is left blank, it is completely ignored. Also note that if
# BusyBox detects that a serial console is in use, then all entries
# containing non-empty id fields will be ignored. BusyBox init does
# nothing with utmp. We don't need no stinkin' utmp.
#
# <runlevels>: The runlevels field is completely ignored.
#
# <action>: Valid actions include: sysinit, respawn, askfirst, wait, once,
# restart, ctrlaltdel, and shutdown.
#
# Note: askfirst acts just like respawn, but before running the specified
# process it displays the line " lease press Enter to activate this
# console." and then waits for the user to press enter before starting
# the specified process.
#
# Note: unrecognised actions (like initdefault) will cause init to emit
# an error message, and then go along with its business.
#
# <process>: Specifies the process to be executed and it's command line.
#
# Note: BusyBox init works just fine without an inittab. If no inittab is
# found, it has the following default behavior:
# ::sysinit:/etc/init.d/rcS
# ::askfirst:/bin/sh
# ::ctrlaltdel:/sbin/reboot
# ::shutdown:/sbin/swapoff -a
# ::shutdown:/bin/umount -a -r
# ::restart:/sbin/init
#
# if it detects that /dev/console is _not_ a serial console, it will
# also run:
# tty2::askfirst:/bin/sh
# tty3::askfirst:/bin/sh
# tty4::askfirst:/bin/sh
#
# Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
#
::sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
#
# Note below that we prefix the shell commands with a "-" to indicate to the
# shell that it is supposed to be a login shell. Normally this is handled by
# login, but since we are bypassing login in this case, BusyBox lets you do
# this yourself...
#
# Start an "askfirst" shell on the console (whatever that may be)
: nce:-/bin/sh
# Start an "askfirst" shell on /dev/tty2-4
#tty2::askfirst:-/bin/sh
#tty3::askfirst:-/bin/sh
#tty4::askfirst:-/bin/sh
# /sbin/getty invocations for selected ttys
#tty4::respawn:/sbin/getty 38400 tty5
#tty5::respawn:/sbin/getty 38400 tty6
# Example of how to put a getty on a serial line (for a terminal)
#::respawn:/sbin/getty -L ttyS0 9600 vt100
#::respawn:/sbin/getty -L ttyS1 9600 vt100
#
# Example how to put a getty on a modem line.
#::respawn:/sbin/getty 57600 ttyS2
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a 在etc目录下创建fstab文件 文件内容: #device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 在etc目录下创建mdev.conf文件 文件内容: mmcblk([0-9]+)p([1]+) 0:0 660 */etc/sd_automount.sh $MDEV
sd([a-z]+)([0-9]+) 0:0 660 @/etc/usbdisk_inserting.sh $MDEV
sd([a-z]+) 0:0 660 $/etc/usbdisk_removing.sh $MDEV
在etc目录下创建profile文件 文件内容: #!/bin/sh
export HOSTNAME=VoipBoxServer-V0.0.1
export USER=root
export HOME=root
#export PS1="\[\u@\h \W\]\$ "
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
echo "************************************************************************"
echo "================= Welcome to VoipBoxServer Console ^_^ ================="
echo "************************************************************************"
拷贝虚拟机上的/etc/passwd, /etc/group到rootfs/etc下 在etc目录下创建NetConfig.ini文件 文件内容: [NetConfig] NetCardType=LAN AddrConfigType=MANUAL IpAddr=192.168.1.114 Netmask=255.255.255.0 Gateway=192.168.1.1 MacAddr=00:02:AC:55:88:A8 在etc目录下创建sd_automount.sh文件 文件内容: #! /bin/sh echo "sd_automount*************$1****************" > /dev/console if [ "$1" == "" ]; then echo "parameter is none" > /dev/console exit 1 fi MNT=$1 if echo "$1" | grep mmcblk; then MNT=sdcard else echo "is not SD" > /dev/console exit 1 fi mounted=`mount | grep $MNT | wc -l` if [ $mounted -ge 1 ]; then umount -l "/mnt/$MNT" rm -rf "/mnt/$MNT" echo "[Umount FS]: /dev/$1 -X-> /mnt/$MNT" > /dev/console else mkdir -p "/mnt/$MNT" mount -t vfat -o noatime,shortname=mixed,utf8 "/dev/$1" "/mnt/$MNT" echo "[Mount VFAT]: /dev/$1 --> /mnt/$MNT" > /dev/console fi 在etc目录下创建usbdisk_inserting.sh文件 文件内容: #! /bin/sh echo "usb_inserting*************$1****************" > /dev/console if [ "$1" == "" ]; then echo "parameter is none" > /dev/console exit 1 fi MNT=$1 if echo "$1" | grep sd; then MNT=UsbDisk else echo "is not UsbDisk" > /dev/console exit 1 fi mounted=`mount | grep $MNT | wc -l` if [ $mounted -ge 1 ]; then echo "/mnt/$MNT used!!!!!!!!!!!" > /dev/console else mkdir -p "/mnt/$MNT" mount -t vfat -o noatime,shortname=mixed,utf8 "/dev/$1" "/mnt/$MNT" echo "[Mount VFAT]: /dev/$1 --> /mnt/$MNT" > /dev/console fi 在etc目录下创建usbdisk_removing.sh文件 文件内容: #! /bin/sh echo "usb_removing*************$1****************" > /dev/console if [ "$1" == "" ]; then echo "parameter is none" > /dev/console exit 1 fi MNT=$1 if echo "$1" | grep sd; then MNT=UsbDisk else echo "is not UsbDisk" > /dev/console exit 1 fi mounted=`mount | grep $MNT | wc -l` if [ $mounted -ge 1 ]; then umount -l "/mnt/$MNT" rm -rf "/mnt/$MNT" echo "[Umount FS]: /dev/$1 -X-> /mnt/$MNT" > /dev/console else echo "/mnt/$MNT not found!!!!!!!!!!!" > /dev/console fi 在etc目录下创建init.d目录 #mkdir init.d #cd init.d 在etc/init.d目录下创建rcS文件 文件内容: #!/bin/sh ##设置机器名字; /bin/hostname VoipBoxServer-V0.0.1 echo "#mount all.........." mount -a mkdir /dev/pts /bin/mknod /dev/pts/0 c 136 0 /bin/mknod /dev/pts/1 c 136 1 /bin/mknod /dev/pts/2 c 136 2 /bin/mknod /dev/pts/3 c 136 3 /bin/mknod /dev/pts/4 c 136 4 /bin/mknod /dev/pts/5 c 136 5 /bin/mount -t devpts devpts /dev/pts mount -o remount,rw /dev/root echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s echo "#StarNet.........." StartNetwork.sh & |