当前位置:  编程技术>综合
本页文章导读:
    ▪linux3.6.5内核移植到S3C6410      ***********************准备工作*************************** 1, 硬件平台:S3C6410       软件平台:Fedora14/16 + arm-linux-gcc 4.2.2-eabi 2,下载linux-3.6.5.tar.bz2,解压源码到目录 urdir (你选择要放.........
    ▪大整数的求和和乘积      简介:     对于一些大的整数,由于计算机本身能够显示的内置数据类型精度有限,在处理一些比较大的整数运算时就不能适用。因此需要考虑用一些结构来辅助运算。一种典型的方式就是.........
    ▪java之base64code      最近在做项目中遇到base64code处理的问题。下面是我写的示例: package com.juck.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.misc.BASE64Decoder; .........

[1]linux3.6.5内核移植到S3C6410
    来源: 互联网  发布时间: 2013-11-19

***********************准备工作***************************

1, 硬件平台:S3C6410

      软件平台:Fedora14/16 + arm-linux-gcc 4.2.2-eabi

2,下载linux-3.6.5.tar.bz2,解压源码到目录 urdir (你选择要放的目录,下同)

3,添加yaffs文件系统所需的准备。(独立完整的过程请参考:http://blog.csdn.net/cocoxiaomei/article/details/8498161)

1)下载源代码命令:git clonegit://www.aleph1.co.uk/yaffs2(@qingwu:一般在终端下都有git支持)

也可以在windows下用git工具下载(这里请注意:windows下的文件可能会出现回车换行的错误,比如^M不能识别等,可以参考:

http://blog.csdn.net/cocoxiaomei/article/details/8497929 

2)yaffs源代码下载完后,进入yaffs2源代码目录,执行:#./patch-kernel.sh c  m  ../linux-3.6.5(其中c:复制代码 ,m:使用支持多版本代码)

因为我们选择的系统为mini6410,因此接下来的修改以及配置都是在此基础上的。


************************内核源码文件修改*******************************

4,进入解压后的内核源码目录 ,修改Makefile文件。

[root@localhost linux-3.6.5]# vi Makefile
line 195      ARCH       ?= $(SUBARCH)       改为:ARCH ?= arm
line 196      CROSS_COMPILE ?=                改为:CROSS_COMPILE     = arm-linux-  

前者是对体系架构的定义,我们是arm平台。后者是交叉编译工具的选择。修改完成后保存退出。

5,执行 make s3c6400_defconfig,Makefile能够针对S3C6410做一系列默认配置

  注:这个命令可能会出错,说没有s3c6410_defoncig的信息,如下:*** Can't find default configuration"arch/arm/configs/s3c6410_defconfig"!

这时可以执行:

[root@localhostlinux-3.6.5]#cp  arch/arm/configs/s3c6400_defconfig .config,然后再运行:

[root@localhost linux-3.6.5]# make s3c6400_defconfig 。【注:这里我用的s3c6400,因为目录下只有6400跟6410最近。】

6,修改flash分区信息(line121 of mach-mini6410.c)

 [root@localhost linux-3.6.5]# vim arch/arm/mach-s3c64xx/mach-mini6410.c

结构体 mtd_partition mini6410_nand_part[]保存了nand flash的分区信息,修改如下:

static structmtd_partition mini6410_nand_part[] = {
    [0] = {
        .name   = "uboot",
        .size   = SZ_1M,
        .offset = 0,
    },
    [1] = {
        .name   ="kernel",
        .size   = SZ_2M,
        .offset = SZ_1M,
    },
    [2] = {
        .name   ="rootfs",
        .size   = SZ_1M * 0x30,
        .offset = SZ_1M + SZ_2M,
    },
    [3] = {
        .name   ="file_system",
        .size   =MTDPART_SIZ_FULL,
        .offset = SZ_1M * 0x33,
    },
};

修改之后分区情况就如下表所示:

表3-1 NAND FLASH分区表



*******************************内核配置界面************************************

在内核源码目录执行:make menuconfig,进入内核配置界面(如图):

插播:我在fedora16下运行这一步,报错如下:

*** Unable to find the ncurses libraries or the

 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** Install ncurses (ncurses-devel) and try again.

解决办法:yum install ncurses-devel,安装完之后 make menuconfig,就能进入正常配置界面了。


接下来按照自上而下的顺序进行配置

******************************内核配置过程*************************************
1,System Type:

有很多板级相关的配置选项,可以根据自己的需要选择合适的系统,这里我选择mini6410。

注意:S3C64XXDMA下只能选一个,多选可能会出现板级直接的兼容问题。

2,Device Drivers

2.1)<*> Memory Technology Device (MTD) support:

Caching block device access to MTD devices选项在mtdblock会用到。

进入NAND Device Support下,选择 N

    
[2]大整数的求和和乘积
    来源:    发布时间: 2013-11-19
简介:

    对于一些大的整数,由于计算机本身能够显示的内置数据类型精度有限,在处理一些比较大的整数运算时就不能适用。因此需要考虑用一些结构来辅助运算。一种典型的方式就是通过数组的方式来保存这些大整数。然后通过模拟手工运算的逐位运算。下面对整数的加法和乘法做一个总结。

加法: 位相加的关系:

    笼统的来说,加法中数组的每一个元素都对应着整数的每一位。当两个数相加的时候,要把前面的进位和当前的和相加,然后根据结果来进行进位。如果仔细考虑的话,会发现有如下的情况存在:

假设有两个数组a[], b[], 和进位标志carryBit.

如果a[i] + b[i] + carryBit > 当前的数制,则carryBit要置位,相加的结果要减去当前的数制。

比如a[i] = 5, b[i] = 7, carryBit = 1。考虑10进制的情况。则相加的结果为13. 那么根据讨论,后面一位的进位标志为1, 当前的结果为13 - 10 = 3.

    如果对上一步的讨论做进一步的提炼,我们会发现他们的运算实际上满足这么一个关系:

当前位的求和结果 = (a[i] + b[i] + carryBit) % 10,

下一位的进位标志(carryBit) = (a[i] + b[i] + carryBit) % 10

    对于更加通用的数制运算,我们可以发现有同样对应的关系:

 当前位的求和结果 = (a[i] + b[i] + carryBit) % 数制,

下一位的进位标志(carryBit) = (a[i] + b[i] + carryBit) % 数制。

数据的表示:

        在前面的逻辑关系理请之后,剩下的就是如何保存对应的数据了。一般我们展示的数字比如:12345,一般都是高位在前面,低位在后面。而在进行数组的加法运算的时候,需要从低位到高位,那么在数组中的保存方式比较合理的方式应该为int[] a = {5, 4, 3, 2, 1}.这样,当两个数组相加的时候,我们只要从数组的开头遍历就可以了。同时,因为我们保存数据的顺序和显示数据的顺序是相反的,如果后续需要显示对应的数字的话,则需要倒序输出。

        另外,两个数字相加之后,保存相加结果的数组长度必须要加1,这样才能保证有足够的空间将结果保存下来。

实现:

        有了前面的讨论,我们就可以很容易实现如下的方法:

public static int[] genericPlus(int[] a, int[] b, int numberSystem)
{
	int[] c = new int[a.length + 1];
	int carryBit = 0;
	for(int i = 0; i < a.length; i++)
	{
		c[i] = (a[i] + b[i] + carryBit) % numberSystem;
		carryBit = (a[i] + b[i] + carryBit) / numberSystem;
	}
	c[a.length] = carryBit;
	return c;
}
  乘法:

        有了前面加法讨论的基础,再考虑乘法则相对方便一些了。我们在考虑一下原来乘法的思路。对于两个数组a[], b[],假定结果数组为c[]。我们对数组相乘的步骤一般如下:

1. 取b[]中的一个元素,和a[]相乘,得到一个a.length + 1长度的中间数组。

经过遍历b[],我们就得到b.length长度这么多个中间数组。

2. 对于这些中间数组,如果对应的是b[i]乘积的结果,则后面求和的时候将这个数组左移i位,然后和总结果数组c[]相加。

这样得到的结果就是乘积。对于两个数组相乘,其结果的长度为两个数组长度之和。

实现:

        经过前面的分析,我们可以得到如下的代码:

public static int[] arrayMultiply(int[] a, int[] b)
{
	int[] c = new int[a.length + b.length];

	for(int i = 0; i < b.length; i++)
	{
		// Generate a multiply result from b[i] * a
		int[] middleResult = new int[a.length + 1];
		int carryBit = 0;
		for(int j = 0; j < a.length; j++)
		{
			middleResult[j] = (b[i] * a[j] + carryBit) % 10;
			carryBit = (b[i] * a[j] + carryBit) / 10;
		}
		middleResult[a.length] = carryBit;
			
		// Plus middle result to c
		carryBit = 0;
		for(int k = 0; k < middleResult.length; k++)
		{
			int sum  = middleResult[k] + c[i + k] + carryBit;
			c[i + k] = sum  % 10;
			carryBit = sum / 10;
		}
	}
	return c;
}
注:前面这种实现只是针对10进制的方式。如果需要换成更加通用的方式,可以将10换成传进来的进制参数。当然函数签名也要做相应的修改。

另外,这种写法只是一个比较粗略的写法,从可读性的角度来说完全可以将生成中间结果数组和将中间结果数组加到最终结果数组的两部分分成两个方法。

 

总结:

        这里主要讨论了大整数的加法和乘法,对于减法来说,思路也很近似,相信看过这个之后大家也该知道怎么做了。这种问题本身不是很难,只是如果要在很短的时间内理清思路并不出问题,确实还是有点挑战性。前面kissinger同学曾经在这个问题上栽了,在此聊表慰问一下吧:)。



已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—




    
[3]java之base64code
    来源:    发布时间: 2013-11-19
最近在做项目中遇到base64code处理的问题。下面是我写的示例:

package com.juck.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


public class Base64Code{ 

	//测试主方法
	public static void main(String[] args){
	
		final String fileName = "示例文件";
		final String fileSuffix = ".jpg";
		final String url = "XXXXXXX";//文件路径

		try{
			String base64Code=encoderToBase64Code(url);
			base64CodeToFile(base64Code,"D:\\BASE64编码字符串"+fileName+".txt");
			decoderToBase64Code(base64Code,"D:\\解码"+fileName+fileSuffix);
		}catch(Exception e){
			e.printStackTrace();
		}

	}


    //文件转换程BASE64编码
	public static String encoderToBase64Code(String path)throws IOException{
	
	      File file = new File(path);
		  FileInputStream input = new FileInputStream(file);
		  byte[] buffer = new byte[(int)file.length()];
		  input.read(buffer);
		  input.close();
		  System.out.print(new BASE64Encoder().encode(buffer));//打印文件经过编码后的字符串
		  return new BASE64Encoder().encode(buffer);
	}


	//BASE64字符串解码并保存文件
	public static void decoderToBase64Code(String base64Code,String targetPath) throws IOException{
	      byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code);
		  FileOutputStream out = new FileOutputStream(targetPath);
		  out.write(buffer);
		  out.close();



     //BASE64字符串保存成文本
	 public static void base64CodeToFile(String base64Code,String targetPath) throws IOException{
	       byte[] buffer = base64Code.getBytes();
		   FileOutputStream out = new FileOutputStream(targetPath);
		   out.write(buffer);
		   out.close();
	 }
	
	}

}


http://juck.iteye.com

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—




    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


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

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

浙ICP备11055608号-3