Linux内核移植(5)

来源:互联网 发布:北京金汤js防水 编辑:程序博客网 时间:2024/06/05 02:25

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.cmkyaffs2image.c  mkyaffsimage     mkyaffsimage.oeric@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  mksquashfsmkfontdir  mkimage      mk_modmap   mkyaffs2imageeric@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 busyboxbusybox

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  sbineric@eric-PC:~/Documents/busybox-1.21.1$ 

5、完善_install目录

_install目录下,仅有这些文件还是不够的,,还需要添加系统所需要的其他文件,才能构成一个完整的根文件系统

新建脚本文件create_yaffs2.sh,用于批量生成所需的文件以及目录

#生成根文件系统所必须的其他文件夹!!!~#!/bin/shecho “生成根文件系统所必须的其他文件夹!”mkdir root dev etc bin sbin mnt sys proc lib home tmp var usrmkdir usr/sbin usr/bin usr/lib usr/modules usr/etcmkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.dmkdir lib/moduleschmod 777 tmpsudo mknod -m 600 dev/console c 5 1sudo mknod -m 666 dev/null c 1 3echo “***end***”

执行脚本之后,就可以看到自动生成的目录

eric@eric-PC:~/Documents/busybox-1.21.1/_install$ lsbin  create_yaffs2.sh  linuxrc  sbineric@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$ lsbin               dev  home  linuxrc  proc  sbin  tmp  varcreate_yaffs2.sh  etc  lib   mnt      root  sys   usreric@eric-PC:~/Documents/busybox-1.21.1/_install$ 

etc/目录下
a)新建profile文件

# Ash profile # vim: syntax=sh# No core files by defaultulimit -S -c 0 > /dev/null 2>&1USER="'id -un'"LOGNAME=$USERPS1='[\u@\h \W]\# 'PATH=$PATHHOSTNAME='/bin/hostname'export USER LOGNAME PS1 PATH

b)新建fstab文件

proc /proc proc default 0 0none /tmp ramfs default 0 0none /var ramfs default 0 0mdev /dev ramfs default 0 0sysfs /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/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export 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 /devecho /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s/bin/hotplug# mounting file system specified in /etc/fstabmkdir -p /dev/ptsmkdir -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 /varmkdir -p /var/emptymkdir -p /var/logmkdir -p /var/lockmkdir -p /var/runmkdir -p /var/tmp/sbin/hwclock -s -f /dev/rtcsyslogd/etc/rc.d/init.d/netd startecho " " > /dev/tty1echo "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 1echo "*************************************" echo " Welcome to Root FileSystem! " echo " " echo " http://write.blog.csdn.net/postlist "echo "*************************************" mkdir /mnt/diskmount -t yaffs2 /dev/mtdblock3 /mnt/diskmount -t vfat /dev/mmcblk0p1 /home/mount -t yaffs2 /dev/mtdblock3 /mnt/cd /mnt/tar zxvf /home/urbetter-rootfs-qt-2.2.0.tgzsynccd /umount /mnt/umount /home//sbin/ifconfig lo 127.0.0.1chmod +x etc/init.d/ifconfig-eth0 /etc/init.d/ifconfig-eth0/bin/qtopia &echo " " > /dev/tty1echo "Starting Qtopia, please waiting..." > /dev/tty1echo " "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 rcSeric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$ 

e)建立mdev.config空文件
f)新建init文件,同时将权限设置为最高

#!/bin/shifcofig eth0 192.168.1.0 upifconfig lo 127.0.0.1

ect/目录完成后,包含如下文件及目录

eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc$ lsfstab  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$ lslibanl-2.9.so           libmudflap.la          libresolv-2.9.solibanl.so.1             libmudflap.so          libresolv.so.2libBrokenLocale-2.9.so  libmudflap.so.0        librt-2.9.solibBrokenLocale.so.1    libmudflap.so.0.0.0    librt.so.1libc-2.9.so             libmudflapth.a         libSegFault.solibcrypt-2.9.so         libmudflapth.la        libssp.alibcrypt.so.1           libmudflapth.so        libssp.lalibc.so.6               libmudflapth.so.0      libssp_nonshared.alibdl-2.9.so            libmudflapth.so.0.0.0  libssp_nonshared.lalibdl.so.2              libnsl-2.9.so          libssp.solibgcc_s.so             libnsl.so.1            libssp.so.0libgcc_s.so.1           libnss_compat-2.9.so   libssp.so.0.0.0libgomp.a               libnss_compat.so.2     libstdc++.alibgomp.la              libnss_dns-2.9.so      libstdc++.lalibgomp.so              libnss_dns.so.2        libstdc++_pic.alibgomp.so.1            libnss_files-2.9.so    libstdc++.solibgomp.so.1.0.0        libnss_files.so.2      libstdc++.so.6libgomp.spec            libnss_hesiod-2.9.so   libstdc++.so.6.0.13libiberty.a             libnss_hesiod.so.2     libsupc++.alibid3tag.so            libnss_nis-2.9.so      libsupc++.lalibid3tag.so.0          libnss_nisplus-2.9.so  libthread_db-1.0.solibid3tag.so.0.3.0      libnss_nisplus.so.2    libthread_db.so.1libjpeg.so              libnss_nis.so.2        libts-0.0.so.0libjpeg.so.62           libpcprofile.so        libts-0.0.so.0.1.1libjpeg.so.62.0.0       libpng12.so            libts.solibm-2.9.so             libpng12.so.0          libutil-2.9.solibmad.so               libpng12.so.0.35.0     libutil.so.1libmad.so.0             libpng.so              libuuid.solibmad.so.0.2.1         libpng.so.3            libuuid.so.1libmemusage.so          libpng.so.3.35.0       libuuid.so.1.2libm.so.6               libpthread-2.9.so      libz.alibmudflap.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$ lsapplets                 Config.in      include     Makefile.custom  runitapplets_sh              configs        init        Makefile.flags   scriptsarch                    console-tools  _install    Makefile.help    selinuxarchival                coreutils      INSTALL     miscutils        shellAUTHORS                 debianutils    libbb       modutils         sysklogdbusybox                 docs           libpwdgrp   networking       testsuitebusybox.links           e2fsprogs      LICENSE     printutils       TODObusybox_unstripped      editors        loginutils  procps           TODO_unicodebusybox_unstripped.map  examples       mailutils   README           util-linuxbusybox_unstripped.out  findutils      Makefile    rootfs.yaffseric@eric-PC:~/Documents/busybox-1.21.1$ ls -l rootfs.yaffs -rw------- 1 eric eric 21356544 1217 11:09 rootfs.yaffseric@eric-PC:~/Documents/busybox-1.21.1$ 

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

原创粉丝点击