yaffs2在am335x上实施
一.yaffs2文件烧写(通过网口)
uboot下输入如下命令:
setenv ipaddr 192.168.2.110;setenv serverip 192.168.2.222;saveenv
nandecc hw 2
nand erase 0 0x80000
tftp 81000000 MLO
nand write 81000000 0 8f5b; nand write 81000000 20000 8f5b; nand write 81000000 40000 8f5b; nand write 81000000 60000 8f5b
nand erase 0x80000 0x200000
tftp 81000000 u-boot.img
nand write 81000000 80000 3e1cc
nand erase 700000 0x80000
tftp 81000000 logo.bmp
nand write 81000000 700000 12f96
run erase_kernel
tftp 81000000 uImage
nand write 81000000 280000 2ca930
run erase_rootfs
tftp 81000000 rootfs_yaffs2;
nand write.yaffs 81000000 780000 406bc0
nandecc hw 0
nand erase 700000 0x80000
tftp 81000000 logo.bmp
nand write 81000000 700000 12f96
setenv bootargs noinitrd root=/dev/mtdblock7 init=/linuxrc console=ttyO0,115200n8 rootfstype=yaffs2 mem=253M;setenv bootcmd nandecc hw 2\; nand read.i ${kloadaddr} ${nand_src_addr} ${nand_img_siz}\;nandecc hw 0\; nand read.i ${logoaddr} ${splashimage} 0x80000\; bootm ${kloadaddr};saveenv
简单方法:借助SD卡,将镜像拷贝到SD中,最后uboot执行如下命令:
setenv ipaddr 192.168.2.110;setenv serverip 192.168.2.222;saveenv;
run erase_rootfs;tftp 81000000 rootfs_yaffs2;nand write.yaffs 81000000 780000 406bc0
setenv bootargs noinitrd root=/dev/mtdblock7 init=/linuxrc console=ttyO0,115200n8 rootfstype=yaffs2 mem=253M;setenv bootcmd nandecc hw 2\; nand read.i ${kloadaddr} ${nand_src_addr} ${nand_img_siz}\;nandecc hw 0\; nand read.i ${logoaddr} ${splashimage} 0x80000\; bootm ${kloadaddr};saveenv
注:通过原来u-boot可知,在烧写MLO时,nandecc hw 2,此后MLO,u-boot.img,uImage,ubi.img都是该ECC校验;在烧写logo.bmp时又修改ECC,nandecc hw 0。uboot的ENV也是nandecc hw 0。
注:nand dump 0x780000显示nand内容包含oob,从而可了解yaffs烧写时oob内容;刚开始按照yaffs2中mkyaffs2img工具制作的yaffs2在烧写后,再次u-boot启动时提示均为坏块,是因为oob的ECC布局不对(默认oob的前两个字节保留为坏块标识,不应被占用,好块标识为0xFF 0xFF)。可通过scrube命令擦除坏块后重新烧写。
二.烧写应用程序
烧写应用程序与原来完全相同。
三.yaffs文件系统修改及制作
文件系统内容修改
1)配置文件/etc/setup.sh和/etc/mount.sh已修改,修改了与803相关的挂测内容。
/etc/setup.sh
146 elif [ $product = 803s -o $product = 803e ];then
147 # mount -t ubifs ubi0:app /usr/app_install/
148 # sync
149 flash_eraseall /dev/mtd8
150 flash_eraseall /dev/mtd9
151
152 mount -t yaffs2 /dev/mtdblock8 /usr/app_install/
153 fi
/etc/mount.sh
6 echo "mount app partition..."
7 if [ "${HW_PLATFORM}" = "803s" -o "${HW_PLATFORM}" = "803e" ];then
8 # mount -t ubifs ubi0:app ${APP_INSTALL_DIR}/
9 mount -t yaffs2 /dev/mtdblock8 ${APP_INSTALL_DIR}/
26 #mount database partiton
27 echo "mount database partition..."
28 if [ "${HW_PLATFORM}" = "803s" -o "${HW_PLATFORM}" = "803e" ];then
29 # mount -t ubifs ubi0:db ${APP_INSTALL_DIR}/db/database
30 # sync
31 mount -t yaffs2 /dev/mtdblock9 ${APP_INSTALL_DIR}/db/database
2)增加分区设备文件mtd7-9,mtdblock7-9
crw-r--r-- 1 root root 90, 14 Sep 22 20:02 mtd7
crw-r--r-- 1 root root 90, 16 Sep 22 20:02 mtd8
crw-r--r-- 1 root root 90, 18 Sep 22 20:03 mtd9
brw-r--r-- 1 root root 31, 7 Sep 7 17:01 mtdblock7
brw-r--r-- 1 root root 31, 8 Sep 7 17:01 mtdblock8
brw-r--r-- 1 root root 31, 9 Sep 7 17:02 mtdblock9
3) 文件系统制作
仅需要使用一条命令:
./mkyaffs2image-128M rootfs_yaffs2 rootfs_yaffs2_20160923
四.uboot修改(详情可参考git)
修改内容在yaffs文件烧写的实现部分,修改处在nand_write_skip_bad()如下:
drivers/mtd/nand/nand_util.c
531 #ifndef CONFIG_CMD_NAND_YAFFS //wqh add
532 if (!need_skip && !(flags & WITH_DROP_FFS)) {
533 rval = nand_write (nand, offset, length, buffer);
534 if (rval == 0)
535 return 0;
536
537 *length = 0;
538 printf ("NAND write to offset %llx failed %d\n",
539 offset, rval);
540 return rval;
541 }
542 #endif
563 #ifdef CONFIG_CMD_NAND_YAFFS
564 if (flags & WITH_YAFFS_OOB) {
565 int page, pages;
566 size_t pagesize = nand->writesize;
567 size_t pagesize_oob = pagesize + nand->oobsize;
568 struct mtd_oob_ops ops;
569
570 ops.len = pagesize;
571 ops.ooblen = nand->oobsize;
572 // ops.mode = MTD_OOB_AUTO; //wqh add
573 ops.mode = MTD_OOB_RAW;
574 ops.ooboffs = 0;
575
576 pages = write_size / pagesize_oob;
577 for (page = 0; page < pages; page++) {
578 WATCHDOG_RESET();
579
580 ops.datbuf = p_buffer;
581 ops.oobbuf = ops.datbuf + pagesize;
582
583 printf("----write at offset 0x%08llx.\n", offset);
584 rval = nand->write_oob(nand, offset, &ops);
585 // if (rval) //wqh mod
586 // break; //wqh mod
587
588 offset += pagesize;
589 p_buffer += pagesize_oob;
590 }
591
592 printf("write %d bytes end offset 0x%08llx\n", write_s ize, offset);
593 }
五.内核修改(详情可参考git)
内核中主要修改Nand的ECC校验,现在修改为“无校验”,为更好扩展,主要修改内容如下:
>>arch/arm/mach-omap2/board-am335xevm.c中修改evm_nand_init()中ECC选项
2016 //pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW;
2017 pdata->ecc_opt =OMAP_ECC_NONE; //wqh fix for yaffs2
2018 pdata->elm_used = true;
2019 gpmc_device[0].pdata = pdata;
2020 gpmc_device[0].flag = GPMC_DEVICE_NAND;
>>arch/arm/plat-omap/include/plat/gpmc.h中增加OMAP_ECC_NONE选项
89 enum omap_ecc {
90 /* 1-bit ecc: stored at end of spare area */
91 OMAP_ECC_HAMMING_CODE_DEFAULT = 0, /* Default, s/w method */
92 OMAP_ECC_HAMMING_CODE_HW, /* gpmc to detect the error */
93 /* 1-bit ecc: stored at beginning of spare area as romcode */
94 OMAP_ECC_HAMMING_CODE_HW_ROMCODE, /* gpmc method & romcode lay out */
95 OMAP_ECC_BCH4_CODE_HW, /* gpmc bch detection & s/w method corr ection */
96 OMAP_ECC_BCH8_CODE_HW, /* gpmc bch detection & s/w method corr ection */
97 OMAP_ECC_NONE, /*wqh add for NAND_ECC_NONE */
98 };
>>drivers/mtd/nand/omap2.c中修改选项的驱动omap_nand_probe()
1201 /* selsect the ecc type */
1202 if(pdata->ecc_opt == OMAP_ECC_NONE) /* wqh add for NADN_ECC _NONE */
1203 info->nand.ecc.mode = NAND_ECC_NONE;
1204 else if (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_DEFAULT)
1205 info->nand.ecc.mode = NAND_ECC_SOFT;
1236 /* select ecc lyout */
1237 /* wqh add for NADN_ECC_NONE */
1238 if (info->nand.ecc.mode == NAND_ECC_NONE)
1239 {
1240 // nothing for NAND_ECC_NONE
1241 }
1242 else if (info->nand.ecc.mode != NAND_ECC_SOFT) {
六.文件系统启动参数修改
yaffs文件系统作为linux根文件系统时需要配置bootargs和bootcmd参数。
setenv bootargs noinitrd root=/dev/mtdblock7 init=/linuxrc console=ttyO0,115200n8 rootfstype=yaffs2 mem=253M;setenv bootcmd nandecc hw 2\; nand read.i ${kloadaddr} ${nand_src_addr} ${nand_img_siz}\;nandecc hw 0\; nand read.i ${logoaddr} ${splashimage} 0x80000\; bootm ${kloadaddr};
注:实际测试中发现如下事项
》》bootargs必须包含mem选项,mem=253M;若不包含,终端信息显示到内核解压处,之后无其他信息。
》》bootargs应制定文件系统类型,否则VFS挂载不了文件系统yaffs2。
》》无论烧写不烧写文件系统,都提示“Failed to execute /linuxrc”(找不到根文件也提示这个)。
七.linux支持最新的yaffs(详情参考git)
将最新yaffs文件从官网下载后,整合到内核中。从官网下载的内核支持yaffs所有操作,但编译完成的制作工具mkyaffs2image仍不能很好制作根文件系统,该工具需要修改。
从友善之臂下载的mkyaffs2image-128M可很好完成yaffs2文件制作。
版本备注:
u-boot-2011.09-psp04.06.00.07
linux-3.2-psp04.06.00.07.sdk
yaffs2_20160708
yaffs2在am335x上实施的更多相关文章
- 在ASP.NET Core上实施每个租户策略的数据库
在ASP.NET Core上实施每个租户策略的数据库 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://g ...
- ffmpeg在am335x上的移植
交叉编译工具:arm-linux-gcc 一.先下载一下文件 1. yasm-1.2.0.tar.gz 2. x264-snapshot-20140424-2245.tar.bz2 3. xvidco ...
- 记录一次线上实施snmp
公司要实施一个部级的项目,我们公司的提供的产品要对接下客户的一个平台监控平台,该监控平台使用snmp,我们公司的产品不支持snmp,所以由我负责在现网实施snmp,记录这次现网 一.生成编译规则 1. ...
- 4G模块在AM335x上的移植
关于4G模块的移植 看到一个很实用的写的比较好的 借鉴一下 参考:https://e2echina.ti.com/question_answer/dsp_arm/sitara_arm/f/25/ ...
- iozone文件系统测试工具在AM335x上的移植
IOzone下载 下载地址:http://www.iozone.org 如下: 解压iozone,并进入到解压路径下的src/current 我的是 iozone3_487 命令:cd i ...
- 什么是商业智能BI和实施BI的解决方案【转】
商业智能,或BI,是一种统称,泛指用于对一个企业的原始数据进行分析的各种各样的软件系统.商业智能(BI)是由若干相关的活动组成的领域,包括数据挖掘,在线分析处理,查询和报表. 企业用商业智能(BI)来 ...
- Git详解之四:服务器上的Git
服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做 ...
- 2.移植3.4内核-使内核支持烧写yaffs2
在上章-制作文件系统,并使内核成功启动jffs2文件系统了 本章便开始使内核支持烧写yaffs2文件系统 1.首先获取yaffs2源码(参考git命令使用详解) cd /work/nfs_root g ...
- 卷积神经网络(CNN)在句子建模上的应用
之前的博文已经介绍了CNN的基本原理,本文将大概总结一下最近CNN在NLP中的句子建模(或者句子表示)方面的应用情况,主要阅读了以下的文献: Kim Y. Convolutional neural n ...
随机推荐
- spring属性注入
1,set方法注入 (1)对于值类型的属性: 在对象中一定要有set方法 package com.songyan.demo1; import com.songyan.injection.Car; /* ...
- 彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误、安装包与之前设备上的安装包签名不一致
有时候开发的问题:会遇到在公司上班的时候,公司的IDE能跑程序,把程序拷贝回家,再跑一次,就会出现以下错误: INSTALL_FAILED_UPDATE_INCOMPATIBLE 原因:就是你的安装包 ...
- MySQL索引,如何正确创建MySQL索引?
索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本.排序分组操作主要消耗的就是CPU资源和内存,所以能够在排序分组操作中好好的利用索引将会极大地降低CPU资源的 ...
- A system tap script to detect UDP beacons
https://gist.github.com/jbradley89/178bbf3944786c494bd78f3df16a5472
- Vue.js 2.0源码解析之前端渲染篇
一.前言 Vue.js框架是目前比较火的MVVM框架之一,简单易上手的学习曲线,友好的官方文档,配套的构建工具,让Vue.js在2016大放异彩,大有赶超React之势.前不久Vue.js 2.0正式 ...
- 本地启动tomcat的时候报内存溢出错误:java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
问题分析: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Load ...
- tensorflow cnn+rnn基本结构
#CNN x = tf.placeholder(tf.float32,[None,input_node],name="x_input") y_ = tf.placeholder(t ...
- EffectiveJava(8)覆盖equals是要遵守的约定
覆盖equals是要遵守的约定 1.覆盖种类: -类的每个1实例本质上都是唯一的 -不关心类是否提供了"逻辑相等"的测试功能(Random测试是否能随机相同数字) -超类已经覆盖了 ...
- 【使用 DOM】理解 DOM
DOM(Document Object Model,文档对象模型)允许我们用 JavaScript 来探查和操作 HTML 文档里的内容.它对于创建丰富性内容而言是必不可少的一组功能. 1. 理解文档 ...
- IOS 开发环境,证书和授权文件是什么?
一.成员介绍 1. Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1) Developer Certification(开发证书) 安装 ...