Linux内核移植(5)

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 1217 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 1217 11:09 rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$ 

至此,根文件系已经制作完成,下一步就要挂载启动!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值