日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

yaffs2的补丁文件patch-ker分析

發布時間:2023/12/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yaffs2的补丁文件patch-ker分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為內核打上yaffs2 補丁

(1)將yaffs2代碼加入內核

這可以通過yaffs2目錄下的腳本文件patch-ker.sh來給內核打補丁,用法如下:

usage: ./patch-ker.sh c/l kernelpath

if c/l is c, then copy. if l then link.

這表明,如果c/l是c,則yaffs2的代碼會被復制到內核目錄下,如果是l,則在內核的目錄下創建一些鏈接文件。這里yaff2所在的目錄/root/linux-test/,和linux-2.6.32.2在同一個目錄下,執行如下命令打補丁:

[root@localhost yaffs2]# ./patch-ker.sh c /root/linux-test/linux-2.6.32.2
usage: ./patch-ker.sh c/l m/s kernelpath
if c/l is c, then copy. If l then link
if m/s is m, then use multi version code. If s then use single version code
[root@localhost yaffs2]# ./patch-ker.sh c s /root/linux-test/linux-2.6.32.2

*** Warning ***
You have chosen to use the single kernel variant of the yaffs VFS glue code
that only works with the latest Linux kernel tree. If you are using an older
version of Linux then you probably wanted to use the multi-version variant by
re-running the patch-ker.sh script using m as a the second argument.
ie ./patch-ker.sh c m /root/linux-test/linux-2.6.32.2

Updating /root/linux-test/linux-2.6.32.2/fs/Kconfig
Updating /root/linux-test/linux-2.6.32.2/fs/Makefile
[root@localhost yaffs2]#

注意第二個參數m/s,如果不指定,有時會執行失敗。

上述命令完成下面三件事:

<1>修改內核文件/fs/Kconfig,增加下面兩行(在177行附近):

if MISC_FILESYSTEMS

source "fs/adfs/Kconfig"
source "fs/affs/Kconfig"
source "fs/ecryptfs/Kconfig"
source "fs/hfs/Kconfig"
source "fs/hfsplus/Kconfig"
source "fs/befs/Kconfig"
source "fs/bfs/Kconfig"
source "fs/efs/Kconfig"
source "fs/yaffs2/Kconfig"
source "fs/jffs2/Kconfig"
# UBIFS File system configuration

<2>修改內核文件/fs/Makefile,增加下面兩行(在129行附近):

obj-$(CONFIG_GFS2_FS) += gfs2/
obj-$(CONFIG_EXOFS_FS) += exofs/
obj-$(CONFIG_YAFFS_FS) += yaffs2/

<3>在內核文件的fs目錄下創建yaffs2子目錄,然后復制如下文件:

將yaffs2源碼目錄下的Makefile.kernel文件復制為內核fs/yaffs2/Makefile文件。

將yaffs2源碼目錄下的Kconfig文件復制為內核fs/yaffs2/目錄下。

將yaffs2源碼目錄下的*.c、*.h文件(不包括子目錄下的文件)復制為內核fs/yaffs2/目錄下。

(2)配置內核選項

閱讀內核fs/Kconfig文件可以了解各配置選項的作用。

以下是用到的幾個選項:

<1>CONFIG_YAFFS_FS:支持yaffs文件系統。

<2>CONFIG_YAFFS_YAFFS2:支持yaffs2文件系統,對于每頁大小為2k字節nand flash,需要選中這個選項。

<3>CONFIG_YAFFS_AUTO_YAFFS2:自動選擇yaffs2文件格式,如果不配置這個選項,必須使用yaffs2字樣來表示yaffs2文件系統格式,如果配置這個選項,則可以使用yaffs字樣來統一表示yaffs1和yaffs2文件系統格式,驅動程序會根據nand flash的頁大小自動分辨是yaffs1還是yaffs2。

patch-ker源代碼分析:


#!/bin/sh

#? args:? l/c : link or copy

#? kpath? : Full path to kernel sources to be patched

#

#? Somewhat "inspired by" the mtd patchin script

#


VERSION=0

PATCHLEVEL=0

SUBLEVEL=0

COPYORLINK=$1

MULTIORSINGLE=$2

LINUXDIR=$3


# To be a Linux directory, it must have a Makefile

?

# shell函數應用:usage()函數顯示如何使用

usage () {

echo "usage:? $0? c/l m/s kernelpath"

echo " if c/l is c, then copy. If l then link"

echo " if m/s is m, then use multi version code. If s then use single version code"

exit 1

}

?


if [ -z $LINUXDIR ]

then

? ? usage;? //調用usage()函數

fi


if [ $COPYORLINK = l ]; then

? CPY="ln -s"

elif [ $COPYORLINK = c ]; then

? CPY="cp"

else

? echo "unknown copy or link type"

? usage;

fi


if [ $MULTIORSINGLE = m ]; then

? VFS_CODE="yaffs_vfs_multi.c"

? MTD_CODE="yaffs_mtdif_multi.c"

? YPORTENV="yportenv_multi.h"

? KCONFIG_SRC="Kconfig_multi"

elif [ $MULTIORSINGLE = s ]; then

? VFS_CODE="yaffs_vfs_single.c"

? MTD_CODE="yaffs_mtdif_single.c"

? YPORTENV="yportenv_single.h"

? KCONFIG_SRC="Kconfig_single"


? echo ""

? echo "*** Warning ***"

? echo "You have chosen to use the single kernel variant of the yaffs VFS glue code"

? echo "that only works with the latest Linux kernel tree. If you are using an older"

? echo "version of Linux then you probably wanted to use the multi-version variant by"

? echo "re-running the patch-ker.sh script using m as a the second argument."

? echo " ie $0 $COPYORLINK m $LINUXDIR"

? echo ""

else

? echo "unknown multi/single version selection"

? usage;

fi

?

# 判斷Linux kernel根目錄下是否有Makefile文件

if [ ! -f $LINUXDIR/Makefile ]?

then

echo "Directory $LINUXDIR does not exist or is not a kernel source directory";

exit 1;

fi


# 獲取內核版本

#sed s表示使用替換模式替換相應模式

VERSION=`grep -s VERSION <$LINUXDIR/Makefile | head -n 1 | sed s/'VERSION = '//`? ? //查詢成功后用//替換VERSION

PATCHLEVEL=`grep -s PATCHLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'PATCHLEVEL = '//`

SUBLEVEL=`grep -s SUBLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'SUBLEVEL = '//`


if [ $VERSION$PATCHLEVEL -lt 26? ]

then

echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher"

exit 1;

fi

?

KCONFIG=$LINUXDIR/fs/Kconfig

KCONFIGOLD=$LINUXDIR/fs/Kconfig.pre.yaffs

YAFFS_PATCHED_STRING=`grep -s yaffs <$KCONFIG | head -n 1`


MAKEFILE=$LINUXDIR/fs/Makefile

MAKEFILEOLD=$LINUXDIR/fs/Makefile.pre.yaffs


#判斷是否存在yaffs?

if [ ! -z "$YAFFS_PATCHED_STRING" ]?

then

? ? YAFFS_PATCHED=0

? ? echo "$KCONFIG already mentions YAFFS, so we will not change it"

else

? # Change the fs/Kconfig file

? # Save the old Kconfig

? # Copy all stuff up to JFFS

? # Insert some YAFFS stuff

? # Copy all the rest of the stuff


#linux/fs不存在yaffs,則創建。

? ? YAFFS_PATCHED=1

? ? echo "Updating $KCONFIG"

? ? mv -f $KCONFIG? $KCONFIGOLD

? ? sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 ! p" $KCONFIGOLD >$KCONFIG

? ? # echo "">>$KCONFIG

? ? # echo "# Patched by YAFFS" >>$KCONFIG

? ? echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG

? ? # echo "">>$KCONFIG

? ? sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 p" $KCONFIGOLD >>$KCONFIG


? # now do fs/Makefile -- simply add the target at the end

? ? echo "Updating $MAKEFILE"

? ? cp -f $MAKEFILE $MAKEFILEOLD

? ? # echo "">>$MAKEFILE

? ? # echo "# Patched by YAFFS" >>$MAKEFILE

? ? echo "obj-\$(CONFIG_YAFFS_FS) += yaffs2/" >>$MAKEFILE


fi


YAFFSDIR=$LINUXDIR/fs/yaffs2


if [ -e $YAFFSDIR ]

then

? echo "$YAFFSDIR exists, so not patching. If you want to replace what is"

? echo "already there then delete $YAFFSDIR and re-run this script"

? echo " eg.? \"rm -rf $YAFFSDIR\" "

else

? rm yaffs*.mod.c 2> /dev/null

? mkdir $LINUXDIR/fs/yaffs2

? $CPY? $PWD/Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile

? $CPY $PWD/$KCONFIG_SRC $LINUXDIR/fs/yaffs2/Kconfig

? $CPY $PWD/*.c $PWD/*.h? $LINUXDIR/fs/yaffs2

? rm $LINUXDIR/fs/yaffs2/yaffs_vfs*.c $LINUXDIR/fs/yaffs2/yaffs_mtdif*.c

? rm $LINUXDIR/fs/yaffs2/yportenv*.h

? rm $LINUXDIR/fs/yaffs2/moduleconfig.h

? $CPY $PWD/$VFS_CODE $LINUXDIR/fs/yaffs2/yaffs_vfs.c

? $CPY $PWD/$MTD_CODE $LINUXDIR/fs/yaffs2/yaffs_mtdif.c

? $CPY $PWD/$YPORTENV $LINUXDIR/fs/yaffs2/yportenv.h

fi


總結

以上是生活随笔為你收集整理的yaffs2的补丁文件patch-ker分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。