当前位置:  编程技术>移动开发
本页文章导读:
    ▪解决ListView异步加载网络图片的各种有关问题(一)        解决ListView异步加载网络图片的各种问题(一)MainActivity如下: package com.example.testlistview; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ListView.........
    ▪ 含有边框的ListView和item        带有边框的ListView和item想为ListView和item四周添加边框有两种方法:   1.贴一张带有边框效果的背景图   2.自定义Draw的方法 第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张.........
    ▪ yaffs2的补丁资料patch-ker分析       yaffs2的补丁文件patch-ker分析yaffs2的补丁文件patch-ker分析 为内核打上yaffs2 补丁 (1)将yaffs2代码加入内核 这可以通过yaffs2目录下的脚本文件patch-ker.sh来给内核打补丁,用法如下: usage: ./patch-ker..........

[1]解决ListView异步加载网络图片的各种有关问题(一)
    来源: 互联网  发布时间: 2014-02-18
解决ListView异步加载网络图片的各种问题(一)

MainActivity如下:

package com.example.testlistview;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;
//解决的问题:
//1 ListView异步加载网络图片
//2 ListView滑动时,图片错位
public class MainActivity extends Activity {
    private ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
    public void initView(){
    	listView=(ListView) findViewById(R.id.listView);
    	ArrayList<ListViewItem> arrayList=new ArrayList<ListViewItem>();
    	
			ListViewItem item1=new ListViewItem("xxxx", "http://images.csdn.net/20121018/zazhi-68-78-1018.jpg");
			arrayList.add(item1);
			
			ListViewItem item2=new ListViewItem("xxxx", "http://info-database.csdn.net/Upload/2012-10-08/zazhi-210-90-1008.jpg");
			arrayList.add(item2);
			
			ListViewItem item3=new ListViewItem("xxxx", "http://images.csdn.net/20121119/20111211223655841.jpg");
			arrayList.add(item3);
			
			ListViewItem item4=new ListViewItem("xxxx", "http://images.csdn.net/20121119/20120619174604972.jpg");
			arrayList.add(item4);
			
			ListViewItem item5=new ListViewItem("xxxx", "http://csdnimg.cn/www/images/pic_foot_report110.png");
			arrayList.add(item5);
			
			ListViewItem item6=new ListViewItem("xxxx", "http://csdnimg.cn/www/images/pic_foot_report.png");
			arrayList.add(item6);		
			
			ListViewItem item7=new ListViewItem("xxxx", "http://csdnimg.cn/www/images/pic_foot_BNIA.png");
			arrayList.add(item7);
			
			ListViewItem item8=new ListViewItem("xxxx", "http://csdnimg.cn/www/images/pic_foot_gongshang.png");
			arrayList.add(item8);
			
			ListViewItem item9=new ListViewItem("xxxx", "http://images.csdn.net/20120803/logo-qixing02.jpg");
			arrayList.add(item9);
			
			ListViewItem item10=new ListViewItem("xxxx", "http://images.csdn.net/20120726/quanjing-logo-shouye.jpg");
			arrayList.add(item10);
			
			ListViewItem item11=new ListViewItem("xxxx", "http://images.csdn.net/20120726/nhn-logo-shouye.jpg");
			arrayList.add(item11);
			
			ListViewItem item12=new ListViewItem("xxxx", "http://images.csdn.net/20120510/shanghai-jiaoda-logo.jpg");
			arrayList.add(item12);
			
			ListViewItem item13=new ListViewItem("xxxx", "http://images.csdn.net/20120312/bigman2.gif");
			arrayList.add(item13);
			
			ListViewItem item14=new ListViewItem("xxxx", "http://images.csdn.net/20120216/csdn2.gif");
			arrayList.add(item14);
			
			ListViewItem item15=new ListViewItem("xxxx", "http://images.csdn.net/20121109/win8_100x74.jpg");
			arrayList.add(item15);
		
			ListViewItem item16=new ListViewItem("xxxx", "http://images.csdn.net/20120816/cf-20120816.jpg");
			arrayList.add(item16);
			
			ListViewItem item17=new ListViewItem("xxxx", "http://images.csdn.net/20120704/bi05.jpg");
			arrayList.add(item17);
			
			ListViewItem item18=new ListViewItem("xxxx", "http://images.csdn.net/20120816/amd-20120816.jpg");
			arrayList.add(item18);
	
		   MyListViewAdapter adapter=new MyListViewAdapter(arrayList, MainActivity.this,listView);
		   
    	   listView.setAdapter(adapter);
    }
}


ListViewItem的Bean如下:

package com.example.testlistview;
public class ListViewItem {
	String content;
	String imageURL;

	public ListViewItem(String content, String imageURL) {
		super();
		this.content = content;
		this.imageURL = imageURL;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getImageURL() {
		return imageURL;
	}

	public void setImageURL(/blog_article/String imageURL/index.html) {
		this.imageURL = imageURL;
	}

}


自定义BaseAdapter如下:

package com.example.testlistview;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.loadimages.AsycPicLoader;
import com.example.loadimages.AsycPicLoader.ImageCallback;
public class MyListViewAdapter extends BaseAdapter{
      private ArrayList<ListViewItem> mArrayList;
      private Context mContext;
      private AsycPicLoader asycPicLoader;
      private ListView listView;
      private HashMap<Integer, View> hashMap;
 
      public MyListViewAdapter(ArrayList<ListViewItem> mArrayList,Context mContext,ListView listView ) {
  		super();
  		this.mArrayList = mArrayList;
  		this.mContext = mContext;
  		this.listView=listView;
  	    asycPicLoader=new AsycPicLoader();
  	    hashMap=new HashMap<Integer, View>();
  	}

	public int getCount() {
		if (mArrayList==null) {
			return 0;
		} else {
			return mArrayList.size();
		}
		
	}

	public Object getItem(int position) {
		if (mArrayList==null) {
			return null;
		} else {
            return mArrayList.get(position);
		}
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		//从HashMap中取出此position对应的convertView
		convertView=hashMap.get(position);
		ViewHolder holder=null;
		if (convertView==null) {
			holder=new ViewHolder();
			convertView=LayoutInflater.from(this.mContext).inflate(R.layout.listviewitem, null, false);
			holder.textView=(TextView) convertView.findViewById(R.id.textView);
		    holder.imageView=(ImageView) convertView.findViewById(R.id.imageview);
		    convertView.setTag(holder);
		} else {
            holder=(ViewHolder) convertView.getTag();
		}
		
	
		//设置ListView的每个item
		if (this.mArrayList!=null) {
			ListViewItem listViewItem=this.mArrayList.get(position);
			if (holder.textView!=null) {
				holder.textView.setText(listViewItem.getContent());
			}
			if (holder.imageView!=null) {
				try {
					this.loadImage(listViewItem.getImageURL(),holder.imageView);
				} catch (Exception e) {
					e.printStackTrace();
				}
					
			}
		}	    
		
		//设置完成后的convertView放在HashMap中
	    if (!hashMap.containsKey(position)) {
	    	hashMap.put(position, convertView);
		}
		
		return convertView;
	}
	
	
	public void loadImage(String imgageURL, final ImageView imageView) {
		asycPicLoader.loadImages(imgageURL, new ImageCallback() {
			public void showLoadedImage(Drawable imageDrawable) {
				if (imageDrawable!=null&&imageDrawable.getIntrinsicWidth()>0) {
					imageView.setImageDrawable(imageDrawable);
				}	
			}
		});
	}
	
	private class ViewHolder{
		ImageView imageView;
		TextView textView;
	}
      
}


异步加载网络图片,方法如下:

package com.example.loadimages;
import java.io.IOException;
import java.lang.ref.SoftReference;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class AsycPicLoader {
   private Map<String, SoftReference<Drawable>> softReferenceMap;
   //构造方法
   public AsycPicLoader(){
	   softReferenceMap=new HashMap<String, SoftReference<Drawable>>();
   }
   //加载图片
   public Drawable loadImages(final String imageURL,final ImageCallback imageCallback){
	   //如果图片在SoftReference中,则将其取出
	   if (softReferenceMap.containsKey(imageURL)) {
		  SoftReference<Drawable> softReference=softReferenceMap.get(imageURL);
		  if (softReference!=null) {
			  Log.i("xx", "从缓存中取出来");
			 return softReference.get();
		}
	 }
	   //如果图片不在SoftReference中,则从网络获取图片.
	   final Handler handler=new Handler(){
		   @Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			Drawable drawable=(Drawable) msg.obj;
			imageCallback.showLoadedImage(drawable);
		}
	   };
	   new Thread(){
		  public void run() {
			  super.run();
			  Drawable drawable=LoadImageFromUrl(/blog_article/imageURL/index.html);
			  softReferenceMap.put(imageURL, new SoftReference<Drawable>(drawable));
			  Message message=new Message();
			  message.obj=drawable;
			  handler.sendMessage(message); 
		  };
	   }.start();
	   return null;
   }
   
  //从网络获取图片
   private Drawable LoadImageFromUrl(/blog_article/String url/index.html){
	   try {
		return Drawable.createFromStream((new URL(/blog_article/url/index.html)).openStream(), "src");
	}  catch (IOException e) {
		e.printStackTrace();
	}   
     return null;
   }
   
   //定义一个回调接口.用于图片下载完成后,在ImageView中显示图片
   public interface ImageCallback {
	   public void showLoadedImage(Drawable imageDrawable);
	}

}


 


main.xml如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
  
    <ListView 
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
     >
        
    </ListView>

</RelativeLayout>


listviewitem.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dip"
    android:orientation="horizontal" >   
    <ImageView 
        android:id="@+id/imageview"
        android:layout_width="50dip" 
        android:layout_height="50dip"     
     />
    
    <TextView 
        android:id="@+id/textView"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:text="haha"
        android:layout_marginLeft="150dip"
     />  
</LinearLayout>


 

1楼easyer2012昨天 10:40哪些代码是解决:“//2 ListView滑动时,图片错位 ”问题?

    
[2] 含有边框的ListView和item
    来源: 互联网  发布时间: 2014-02-18
带有边框的ListView和item

想为ListView和item四周添加边框有两种方法:

  1.贴一张带有边框效果的背景图

  2.自定义Draw的方法

第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些。

这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习

先看下Demo运行效果吧


下面是主要代码,主要是用到Canvas.drawLine(...)代码简单,我就不啰嗦了


BorderListView.java

package com.borderlistview.manymore13;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;

public class BorderListView extends ListView{

	public BorderListView(Context context) {
		super(context);
	}
	
	public BorderListView(Context context, AttributeSet attrs)
	{
		super(context, attrs);
	}

	
	@Override
	protected void onDraw(Canvas canvas) {

		float width = getWidth();
		float height= getHeight();
		int lineWidth = 10; // 线宽十个像素
 		int grayColor = Color.GRAY;
 		Paint mLinePaint = new Paint();
		mLinePaint.setColor(grayColor);
		mLinePaint.setStyle(Paint.Style.STROKE);
		
		mLinePaint.setAntiAlias(true);
		mLinePaint.setStrokeWidth(lineWidth);

		// 画四周的边框 注意下面的 lineWidth/2 不加的话四周的线可能不一样粗 
		canvas.drawLine(0f, 0+lineWidth/2, width, 0+lineWidth/2, mLinePaint);
		canvas.drawLine(width-lineWidth/2, 0, width-lineWidth/2, height, mLinePaint);
		canvas.drawLine(width-lineWidth/2, height-lineWidth/2, 0, height-lineWidth/2, mLinePaint);
		canvas.drawLine(0+lineWidth/2, height, 0+lineWidth/2, 0,mLinePaint);
		
		 
		super.onDraw(canvas);
		
	}

}


ListViewItem.java   ListView的item 添加虚线和红线

package com.borderlistview.manymore13;

import com.manymore13.MyListview.R;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

 public class ListViewItem extends RelativeLayout{

	private View viewHolder;

	private TextView tvEventName;
	private Context c;

	private FrameLayout leftFrame;
 	
	public ListViewItem(Context context) {
		super(context);
		LayoutInflater flater = LayoutInflater.from(context);
		viewHolder = flater.inflate(R.layout.item, this);
 		getViewAndSetClick();
 		c = context;
 	}
	
 	private void getViewAndSetClick()
	{

		tvEventName = (TextView)viewHolder.findViewById(R.id.eventName);
		leftFrame = (FrameLayout)viewHolder.findViewById(R.id.frame);

	}
	
	public void setEventName(String name)
	{
		tvEventName.setText(name);
	}
	
	public void updateView()
	{
		this.postInvalidate();
	}


    @Override
	protected void dispatchDraw(Canvas canvas) {
 		super.dispatchDraw(canvas);
 		Resources res = getResources();
 		int grayColor = Color.GRAY;
 		int redColor = res.getColor(R.color.red);
 		
 		int leftFramepos = leftFrame.getRight();
 		
 		Paint mLinePaint = new Paint();
		mLinePaint.setColor(redColor);
		mLinePaint.setStyle(Paint.Style.STROKE);
		
 		mLinePaint.setStrokeWidth(2);
		
 		//画两条直线
		canvas.drawLine(leftFramepos+20, 0f, leftFramepos+20, getHeight(), mLinePaint);
		canvas.drawLine(leftFramepos+25, 0f, leftFramepos+25, getHeight(), mLinePaint);
	
		// 画虚线
		mLinePaint.setColor(grayColor);
		DashPathEffect effect = new DashPathEffect(new float[] { 5,5, 5, 5, 5}, 3);
		mLinePaint.setAntiAlias(true);
		mLinePaint.setPathEffect(effect);

		canvas.drawLine(0, getHeight(), getWidth(), getHeight(), mLinePaint);

	}
	
	

}

MyBaseAdaper.java

package com.borderlistview.manymore13;

import java.util.List;

import android.content.Context;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class MyBaseAdaper extends BaseAdapter{
	
	private List<String> list;
	private Context c;
	
	MyBaseAdaper(Context c, List<String> list)
	{
		this.list = list;
		this.c = c;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int i) {
		// TODO Auto-generated method stub
		return list.get(i);
	}

	@Override
	public long getItemId(int i) {
		// TODO Auto-generated method stub
		return i;
	}

	
 	@Override
	public View getView(int i, View view, ViewGroup viewgroup) {

 		ListViewItem itemView = null ;
		if(view == null){
			itemView = new ListViewItem(c);
		}else{
			itemView = (ListViewItem)view;
		}
		itemView.setEventName(list.get(i));
 		return itemView;
 	}
 	
 	

}

另外,在写本次Demo的时候报了错误,有错就改 Caused by: java.lang.NoSuchMethodException:BorderListView(Context,AttributeSet)

在 BorderListView类中加一个构造函数 搞定

public BorderListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}





    
[3] yaffs2的补丁资料patch-ker分析
    来源: 互联网  发布时间: 2014-02-18
yaffs2的补丁文件patch-ker分析

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="/blog_article/Kconfig_multi/index.html"

elif [ $MULTIORSINGLE = s ]; then

   VFS_CODE="yaffs_vfs_single.c"

   MTD_CODE="yaffs_mtdif_single.c"

   YPORTENV="yportenv_single.h"

   KCONFIG_SRC="/blog_article/Kconfig_single/index.html"

   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

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3