制作生产yaffs映像文件的工具_林晓海的博客-程序员秘密

技术标签: FreeRTOS/Linux  linux内核  ARM  文件系统  


进入yaffs2/util目录,修改mkyaffsimage.c文件
(1)在头文件引用中增加#include "yaffs_packedtags1.h"
(2)修改write_chunkh函数
233行-258行修改为如下:
#ifdef CONFIG_YAFFS_9BYTE_TAGS
yaffs_Tags t;
yaffs_Spare s;
error = write(outFile,data,512);
if(error < 0) return error;
memset(&t,0xff,sizeof (yaffs_Tags));
memset(&s,0xff,sizeof (yaffs_Spare));
t.chunkId = chunkId;
t.serialNumber = 0;
t.byteCount = nBytes;
t.objectId = objId;
if (convert_endian)
{
little_to_big_endian(&t);
}
yaffs_CalcTagsECC(&t);
yaffs_LoadTagsIntoSpare(&s,&t);
yaffs_CalcECC(data,&s);
nPages++;
return write(outFile,&s,sizeof(yaffs_Spare));
#else
yaffs_PackedTags1 pt1;
yaffs_ExtendedTags etags;
__u8 ecc_code[6];
__u8 oobbuf[16];
/* ÐŽÒ³ÊýŸÝ£¬512×ÖoeÚ */
error = write(outFile,data,512);
if(error < 0) return error;
/* ¹¹Ôìtag */
etags.chunkId = chunkId;
etags.serialNumber = 0;
etags.byteCount = nBytes;
etags.objectId = objId;
etags.chunkDeleted = 0;
/*
* ÖØ¶šÎ»oobÇøÖÐμÄ¿ÉÓÃÊýŸÝ(³ÆÎªtag)
*/
yaffs_PackTags1(&pt1, &etags);
/* OEÆËãtag±ŸÉíμÄECCÂë */
yaffs_CalcTagsECC((yaffs_Tags *)&pt1);
memset(oobbuf, 0xff, 16);
memcpy(oobbuf+8, &pt1, 8);
/*
* ʹÓÃÓëÄÚºËMTD²ãÏàͬμÄ·oe·šOEÆËãÒ»Ò³ÊýŸÝ(512×ÖoeÚ)μÄECCÂë
* ²¢°ÑËüÃÇÌîÈëoob
*/
nand_calculate_ecc(data, &ecc_code[0]);
nand_calculate_ecc(data+256, &ecc_code[3]);
oobbuf[0] = ecc_code[0];
oobbuf[1] = ecc_code[1];
oobbuf[2] = ecc_code[2];
oobbuf[3] = ecc_code[3];
oobbuf[6] = ecc_code[4];

oobbuf[7] = ecc_code[5];
nPages++;
/* ÐŽoobÊýŸÝ£¬16×ÖoeÚ */
return write(outFile, oobbuf, 16);
#endif
(3)把内核源文件drivers/mtd/nand/nand_ecc.c复制到yaffs2/utils目录下面,保留nand_ecc_precalc_table数组和
nand_calculate_ecc函数
和#include <linux/types.h>宏定义,并加上定义
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
再把nand_calculate_ecc中的形参“struct mtd_info *mtd”去掉。
(4)把/utils上层目录中的yaffs_packedtags1.c复制到utils目录下;
(5)修改/utils目录下的Makefile。
MKYAFFSSOURCES = mkyaffsimage.c
修改为
MKYAFFSSOURCES = mkyaffsimage.c yaffs_packedtags1.c nand_ecc.c
在/utils目录下执行make命令,就可以生成mkyaffsimage工具了。
并修改属性:
chmod +x mkyaffsimage就可以了。
使用:与其它工具的使用没有区别
./mkyaffsiamge gauss gauss.yaffs
下载前,需要将yaffs镜像文件改为可执行的
chmod +x
使用内核把nanf_flash分为3个区
(1)0x0-0x100000:"uboot&env",q其中0x0-0x30000存放u-boot.bin,0x30000-0x40000存放env
(2)0x100000-0x300000:"kernel"
(3)剩下的空间为:“yaffs”
对应者mtdblock0 mtdblock1 mtdblock2
烧写yaffs命令
tftp 0x30000000 fs_mini.yaffs
nand erase 0x300000 0xB00000(fs_mini.yaffs大小为7.8M)
nand write.yaffs 0x30000000 0x300000 0x7cf770
0x7cf770是fs_mini.yaffs的大小。
烧写的过程中出现了很多警告信号,有待解决。
修改启动变量
setenv bootargs console=ttySAC0 root=ttySAC0 root=/dev/mtdblock2 rootfstype=yaffs
重新启动
挂载文件系统后,输入df命令,看是不是mtdblock2

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jimmy2013_1_1/article/details/10418001

智能推荐

python多线程-共享全局变量_python 多线程 全局变量_小飞侠v科比的博客-程序员秘密

多线程-共享全局变量from threading import Threadimport timeg_num = 100def work1(): global g_num for i in range(3): g_num += 1 print("----in work1, g_num is %d---"%g_num)def work2()...

一个转行学习前端的初学者,应该如何计划自己的学习规划?_BOM485480的博客-程序员秘密

就目前的发展来看,在语言排行中,前端多年霸主的地位还未被撼动,前端语言的特点就注定了很多公司会选用它,强大的第三方库使前端正在web端的强大无法被替代。目前由于大数据,人工智能的发展,互联网成为了发展前景最好,需求人才最多的行业,现在电子行业,机械行业,通信行业,相继的在转行,因为在如今的时代中,貌似看不到前景,而前端就成为了大家选择的对象,但是一个什么都不懂的新手如何学习前端就成为了大家的苦恼,今天我花点时间给转行的新手一些建议。第一:了解这个行情,不要在不知情的时候去选择如今的市场选择做前端,如果你

WPF:关于Slider控件的一些说明_滴水梵音的博客-程序员秘密

来跟随我,细数一下WPF Slider控件一些需要说明的东西。 WPF的Slider控件继承自RangeBase类型,同继承自RangeBase的控件还有ProgressBar和ScrollBar,这类控件都是在一定数值范围内表示一个值的用途。 首先注意而RangeBase是基于浮点double类型的,不是基于整数int的,WPF中的许多度量单位都是基于浮点

python tkinter mainloop,如何处理tkinter mainloop中的错误?_典农中郎将冯习的博客-程序员秘密

I have a python program which is scraping web data for a client. tkinter is used for the interface. Outline is:Window 1 lets the user select what information to scrape.Window 1 closesSeparate thread i...

每天一个问题_嘿吖嘿嘿~的博客-程序员秘密

问题一:新建一个ps文档,如下设置时,无法新建图层 但是改变颜色模式里边的32位位16位或8位时,都可以正常新建图层,暂时没明白是什么原因,相信会有人遇到我同样的问题,先记下  ...

CSS笔记01_KempRong的博客-程序员秘密

CSS笔记01CSS的注释为:/* 这是一段注释 */行内式:&amp;lt;标签名 style=&quot;属性:属性值1 ; 属性2:属性值2;&quot;&amp;gt;内容&amp;lt;/标签名&amp;gt;&amp;lt;h3 style=&quot;color:#ccc; font-size: 20px;&quot;&amp;gt;青春不常在,抓紧谈恋爱&amp;lt;/h3&amp;gt;内部样式表:在开头的-head-里面&amp;lt

随便推点

在使用WeifenLuo Suite时遇到的问题,自己记录一下,备忘_mlzboy的博客-程序员秘密

在一个Form继承了DockContent后,若要使这个Form的Text属性生效,必须将TabText置空,费了半天,才查到个这个问题,以记之

[JSOI2016]独特的树叶 树Hash_独特的树叶 xor_ShɑΙteж的博客-程序员秘密

[JSOI2016]那么我们考虑一下用异或+子树大小的方式结合Hash的进制规则来做。 设计Hash函数为H[x]=\xor H[y]*p+size[y] 那么我们只要先求出以某个点为根时的Hash值,然后在递推到每一个点为根的情况即可(换根树形DP),这个直接用异或的性质异或回去抵消即可。 unsigned long long不影响异或Code#include&amp;lt;bi...

H3C BFD MAD检测方式的IRF典型配置举例_weixin_33813128的博客-程序员秘密

H3C BFD MAD检测方式的IRF典型配置举例1. 组网需求 由于网络规模迅速扩大,当前中心交换机(Device A)转发能力已经不能满足需求,现需要在保护现有投资的基础上将网络转发能力提高一倍,并要求网络易管理、易维护。2. 组网图3. 配置思路 Device A处于局域网的汇聚层,为了将汇聚层的转发能力提高一倍,需要另外增加一台设备Device B...

hive建表与数据的导入导出_weixin_30706507的博客-程序员秘密

建表:create EXTERNAL table tabtext(IMSI string,MDN string,MEID string,NAI string,DestinationIP string,DestinationPort string,SourceIP string,SourcePort string,PDSNIP string,PCFIP string,HAIP stri...

HDOJ 2044 一只小蜜蜂..._weixin_34320159的博客-程序员秘密

Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。 Input 输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b( 0 &lt; a &lt; b &lt; 50 ...

window.onresize可以实现同步页面更新问题+js判断是否为手机_是兮兮呀的博客-程序员秘密

判断是否为手机: function isMobile() { var userAgentInfo = navigator.userAgent; var mobileAgents = [ "Android", "iPhone", "SymbianOS", "Windows Phone", "iPad","iPod"]; var mobile_flag = false; //根据userAgent判断是否是手机 f

推荐文章

热门文章

相关标签