Linux3.8.3内核移植-根文件系统制作
根文件系统,是在linux内核启动后,第一个挂载的文件系统。
mkyaffs2image工具制作
mkyaffs2image是制作根文件系统必要的工具,由yaffs2源码编译生成
1、修改flash属性定义,mkyaffs2image.c
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ gedit mkyaffs2image.c
根据板载flash容量进行修正
// Adjust these to match your NAND LAYOUT:
#define chunkSize 2048
#define spareSize 64
#define pagesPerBlock 64
2、修改yportenv.h,添加文件系统类型定义
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/direct$ gedit yportenv.h
添加如下 CONFIG_YAFFS_DEFINES_TYPES 定义
#ifndef __YPORTENV_H__
#define __YPORTENV_H__
#define CONFIG_YAFFS_DEFINES_TYPES //eric++ 2017-12-17
3、make
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ make
之后生成mkyaffs2image
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ ls mk*
mkyaffs2image mkyaffs2image.o mkyaffsimage.c
mkyaffs2image.c mkyaffsimage mkyaffsimage.o
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$
4、将mkyaffs2image复制到系统用户目录,供制作根文件系统使用
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ cp mkyaffs2image /usr/bin/
eric@eric-PC:/usr/bin$ ls mk*
mkfifo mkfontscale mkmanifest mksquashfs
mkfontdir mkimage mk_modmap mkyaffs2image
eric@eric-PC:/usr/bin$
根文件系统制作
制作根文件系统需要使用到BusyBox下载地址,和yaffs2同理,需要下载和linux3.8.3同时期的版本,以便避免版本之间的不兼容性。在此我们使用的版本为:
29 June 2013 – BusyBox 1.21.1 (stable)
1、解压后,修改Makefile
eric@eric-PC:~/Documents/busybox-1.21.1$ gedit Makefile
完善交叉编译路径,以及编译CPU类型
CROSS_COMPILE ?= /usr/local/arm/arm-linux-gcc-4.4.3/bin/arm-linux-#eric++ 2017-12-17
ARCH ?= arm#$(SUBARCH) eric++ 2017-12-17
2、进行配置
eric@eric-PC:~/Documents/busybox-1.21.1$ make menuconfig
进入目录
Busybox Settings --->
Build Options --->
() Cross Compiler prefix (NEW)
键入
/usr/local/arm/arm-linux-gcc-4.4.3/bin/arm-linux-
选择Don’t use /usr
General Configuration --->
[*] Don't use /usr
3、make
eric@eric-PC:~/Documents/busybox-1.21.1$ make
成功之后,生成busybox文件
eric@eric-PC:~/Documents/busybox-1.21.1$ ls busybox
busybox
4、make install
eric@eric-PC:~/Documents/busybox-1.21.1$ make install
生成_install文件夹,同时包含如下文件/文件夹
eric@eric-PC:~/Documents/busybox-1.21.1$ ls _install/
bin linuxrc sbin
eric@eric-PC:~/Documents/busybox-1.21.1$
5、完善_install目录
_install目录下,仅有这些文件还是不够的,,还需要添加系统所需要的其他文件,才能构成一个完整的根文件系统
新建脚本文件create_yaffs2.sh,用于批量生成所需的文件以及目录
#生成根文件系统所必须的其他文件夹!!!~
#!/bin/sh
echo “生成根文件系统所必须的其他文件夹!”
mkdir root dev etc bin sbin mnt sys proc lib home tmp var usr
mkdir usr/sbin usr/bin usr/lib usr/modules usr/etc
mkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.d
mkdir lib/modules
chmod 777 tmp
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3
echo “***end***”
执行脚本之后,就可以看到自动生成的目录
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ ls
bin create_yaffs2.sh linuxrc sbin
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ sh create_yaffs2.sh
“生成根文件系统所必须的其他文件夹!”
mkdir: 无法创建目录"bin": 文件已存在
mkdir: 无法创建目录"sbin": 文件已存在
[sudo] eric 的密码:
“***end***”
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ ls
bin dev home linuxrc proc sbin tmp var
create_yaffs2.sh etc lib mnt root sys usr
eric@eric-PC:~/Documents/busybox-1.21.1/_install$
etc/目录下
a)新建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='[\u@\h \W]\# '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
b)新建fstab文件
proc /proc proc default 0 0
none /tmp ramfs default 0 0
none /var ramfs default 0 0
mdev /dev ramfs default 0 0
sysfs /sys sysfs default 0 0
c)新建inittab
::sysinit:/etc/init.d/rcS
::askfirst:-bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff -a
d)新建init.d子目录,同时在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 hcm
/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
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/lock
mkdir -p /var/run
mkdir -p /var/tmp
/sbin/hwclock -s -f /dev/rtc
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 "*************************************"
echo " Welcome to Root FileSystem! "
echo " "
echo " http://write.blog.youkuaiyun.com/postlist "
echo "*************************************"
mkdir /mnt/disk
mount -t yaffs2 /dev/mtdblock3 /mnt/disk
mount -t vfat /dev/mmcblk0p1 /home/
mount -t yaffs2 /dev/mtdblock3 /mnt/
cd /mnt/
tar zxvf /home/urbetter-rootfs-qt-2.2.0.tgz
sync
cd /
umount /mnt/
umount /home/
/sbin/ifconfig lo 127.0.0.1
chmod +x etc/init.d/ifconfig-eth0
/etc/init.d/ifconfig-eth0
/bin/qtopia &
echo " " > /dev/tty1
echo "Starting Qtopia, please waiting..." > /dev/tty1
echo " "
echo "Starting Qtopia, please waiting..."
同时赋予rcS最大权限
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$ chmod 777 rcS
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$ ls -l
总用量 4
-rwxrwxrwx 1 eric eric 1779 12月 17 10:53 rcS
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$
e)建立mdev.config空文件
f)新建init文件,同时将权限设置为最高
#!/bin/sh
ifcofig eth0 192.168.1.0 up
ifconfig lo 127.0.0.1
ect/目录完成后,包含如下文件及目录
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc$ ls
fstab init init.d inittab mdev.config profile
为lib目录添加所需库文件
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ cp /usr/local/arm/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib/*lib* lib/
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ cd lib/
eric@eric-PC:~/Documents/busybox-1.21.1/_install/lib$ ls
libanl-2.9.so libmudflap.la libresolv-2.9.so
libanl.so.1 libmudflap.so libresolv.so.2
libBrokenLocale-2.9.so libmudflap.so.0 librt-2.9.so
libBrokenLocale.so.1 libmudflap.so.0.0.0 librt.so.1
libc-2.9.so libmudflapth.a libSegFault.so
libcrypt-2.9.so libmudflapth.la libssp.a
libcrypt.so.1 libmudflapth.so libssp.la
libc.so.6 libmudflapth.so.0 libssp_nonshared.a
libdl-2.9.so libmudflapth.so.0.0.0 libssp_nonshared.la
libdl.so.2 libnsl-2.9.so libssp.so
libgcc_s.so libnsl.so.1 libssp.so.0
libgcc_s.so.1 libnss_compat-2.9.so libssp.so.0.0.0
libgomp.a libnss_compat.so.2 libstdc++.a
libgomp.la libnss_dns-2.9.so libstdc++.la
libgomp.so libnss_dns.so.2 libstdc++_pic.a
libgomp.so.1 libnss_files-2.9.so libstdc++.so
libgomp.so.1.0.0 libnss_files.so.2 libstdc++.so.6
libgomp.spec libnss_hesiod-2.9.so libstdc++.so.6.0.13
libiberty.a libnss_hesiod.so.2 libsupc++.a
libid3tag.so libnss_nis-2.9.so libsupc++.la
libid3tag.so.0 libnss_nisplus-2.9.so libthread_db-1.0.so
libid3tag.so.0.3.0 libnss_nisplus.so.2 libthread_db.so.1
libjpeg.so libnss_nis.so.2 libts-0.0.so.0
libjpeg.so.62 libpcprofile.so libts-0.0.so.0.1.1
libjpeg.so.62.0.0 libpng12.so libts.so
libm-2.9.so libpng12.so.0 libutil-2.9.so
libmad.so libpng12.so.0.35.0 libutil.so.1
libmad.so.0 libpng.so libuuid.so
libmad.so.0.2.1 libpng.so.3 libuuid.so.1
libmemusage.so libpng.so.3.35.0 libuuid.so.1.2
libm.so.6 libpthread-2.9.so libz.a
libmudflap.a libpthread.so.0 modules
用mkyaffs2image工具制作根文件系统
eric@eric-PC:~/Documents/busybox-1.21.1$ mkyaffs2image _install/ rootfs.yaffs
之后生成rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$ ls
applets Config.in include Makefile.custom runit
applets_sh configs init Makefile.flags scripts
arch console-tools _install Makefile.help selinux
archival coreutils INSTALL miscutils shell
AUTHORS debianutils libbb modutils sysklogd
busybox docs libpwdgrp networking testsuite
busybox.links e2fsprogs LICENSE printutils TODO
busybox_unstripped editors loginutils procps TODO_unicode
busybox_unstripped.map examples mailutils README util-linux
busybox_unstripped.out findutils Makefile rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$ ls -l rootfs.yaffs
-rw------- 1 eric eric 21356544 12月 17 11:09 rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$
至此,根文件系已经制作完成,下一步就要挂载启动!