今天,我们来移植U-BOOT让其支持YAFFS文件系统映像的烧写,以及最后的终极目标,制作Uboot补丁,因为我们信心苦苦移植好了Uboot,如果换一个地方的或者换一台电脑之类的,我们也不想再浪费时间从头开始移植,毕竟重复造轮子,并不是一件高明的事,所以我们制作Uboot补丁,方便以后的使用。

前一阵子已经花费了巨大的功夫,将Uboot支持了串口,nand flash,nor flash,网络下载文件等功能,今天我们来实现最后一个功能,实现Uboot烧写YAFFS文件系统。点击查看之前的文章:点击查看之前的文章

该Uboot已经支持JFFS2文件系统的烧写了,我们先来烧写JFFS2文件系统:
tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 0x00260000 5b89a8 (这里因为文件系统的东西比较多,所以就直接烧写它固定的大小,而不用上一篇文章说的用rootfs这个字符代替烧写的区域)

烧写完成后,还需要先设置一下文件系统的类型,在Uboot命令行:
set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2
然后启动:
boot
显示如下:

果然可以正常启动挂载文件系统了。
那么我们的Uboot可以下载YAFFS文件系统么?
我们来试验一下:
reboot(重启)
tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0
显示:

这说明我们的Uboot源码没有支持烧写YAFFS文件系统。
我们去源码中看,在cmd_nand.c中,有函数:

#ifdef CONFIG_CMD_NAND_YAFFS} else if (!strcmp(s, ".yaffs")) {if (read) {printf("Unknown nand command suffix '%s'.\n", s);return 1;}ret = nand_write_skip_bad(nand, off, &rwsize,(u_char *)addr, WITH_YAFFS_OOB);
#endif

说明要支持烧写YAFFS类型的文件系统,必须定义这个宏:CONFIG_CMD_NAND_YAFFS。那么我们就去配置文件中定义这个宏:

#define CONFIG_CMD_NAND_YAFFS

然后重新编译烧写Uboot:tftp 30000000 u-boot.bin; protect off all; erase 0 3ffff; cp.b 30000000 0 40000 (分号隔开相关命令)
然后烧写文件系统:
tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0
启动之前设置:
set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs
set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs2
重启后:

很显然,没有完全挂载上。

yaffs文件系统包含两部分数据,页数据,和OOB数据。我们现在来对比一下我们少烧写的yaffs文件系统的数据与原有的数据的差别:
在uboot命令行输入:
nand dump 260000
显示的就是yaffs文件系统的的16进制数据。通过对比,发现OOB数据区的数据不一样。

修改源码:
在drivers/mtd/nand/nand_util.c中的nand_write_skip_bad函数中:

 if (!rval)  break;

这个地方写错了,导致只写了一页的OOB数据,应该是:

 if (rval)   /*lyy*/break;

还有一个地方需要修改:
drivers/mtd/nand/nand_util.c中
if (!need_skip && !(flags & WITH_DROP_FFS)) {
改为:
if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {
否则:如果分区中没有坏块(need_skip=0)时, 将执行这个分支, 导致oob区烧写不正确

最后编译uboot,更新uboot,下载文件系统,启动,一切OK啦!!!

最后,我们的文件系统就完整移植完了,现在我们来制作U-BOOTY的补丁文件:

分别输入:
make distclean
rm u-boot.dis
cd …
mv u-boot-2012.04.01 u-boot-2012.04.01_100ask
tar jxf u-boot-2012.04.01.tar.bz2 (解压未经修改的uboot源文件)
diff -urN u-boot-2012.04.01 u-boot-2012.04.01_100ask > u-boot-2012.04.01_100ask.patch (生成补丁)

补丁文件生成后,以后换电脑或者换系统之类的,就可以直接打补丁给U-boot了:
cd u-boot-2012.04.01
patch -p1 < …/u-boot-2012.04.01_100ask.patch

想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

移植U-BOOT之支持烧写YAFFS文件系统以及制作U-BOOT补丁相关推荐

  1. u-boot-2012.04.01移植到TQ2440(八):支持烧写yaffs文件系统

    一.支持yaffs烧写文件系统 先直接烧写试一下 TQ2440 # nand write.yaffs32000000 rootfs $filesize NAND write: device 0 off ...

  2. Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写

    很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot ...

  3. 转”使用UBOOT烧写根文件系统和内核的方法

    "转"使用UBOOT烧写根文件系统和内核的方法 2012-08-13 20:39:28 分类: 原文地址:"转"使用UBOOT烧写根文件系统和内核的方法 作者: ...

  4. 【Tiny4412】烧写Qt文件系统到EMMC

    00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写Qt文件系统到EMMC 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命 ...

  5. 【Tiny4412】烧写Qt文件系统到SD卡

    00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写Qt文件系统到SD卡 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命令 ...

  6. ESP8266乐鑫版本的(支持云端升级 (Boot 模式)烧写方法,(V1.5.4官方介绍如下)(BOOT模式)...

    硬件平台: nodeMCU devkit核心板,带ch340g,应该是仿造的,官方是cp2102驱动,安信可科技有连接https://wiki.ai-thinker.com/esp8266/board ...

  7. 【Tiny4412】烧写最小文件系统到EMMC

    00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写文件系统到EMMC 04. 问题讨论 05. 附录 01. 烧写内核 1.1 在minicom中输入如下命令 ...

  8. 【Tiny4412】烧写最小文件系统到SD卡

    00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写文件系统到SD卡 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命令 D ...

  9. linux内核烧写erasing failed,mfgtool烧写mx28文件系统失败

    内核烧写成功后,接下来烧写文件系统,烧写过程中内核core掉,日志如下 lib/libBrokenLocale-2.11.1.so lib/libcrypt.so.1 lib/librt.so.1 l ...

最新文章

  1. _extend用法总结
  2. HTTP协议那些不得不说的事
  3. http2.0 的时代来了
  4. pytorch nn.Softmax
  5. [转载] Python机器学习库scikit-learn使用小结(二)
  6. This content should also be served over HTTPS
  7. macOS中LaTeX报错Package fontspec Error: The font “SimHei“ cannot be found
  8. 计算机 高级软件工程师考试试题,高级软件工程师8月考试试题A卷带答案.doc
  9. Power query (Power BI)一步到位傻瓜式合并工作簿,史上最好用
  10. win10输入法看不见选字框_Win10更新后微软拼音输入法没有选字框怎么办?
  11. 极光推送上线7周年大庆,777件礼物送给大家
  12. Linux下Oracle安装宝典(转)
  13. 计算机综合能力描述,计算机综合应用能力实训报告
  14. 新页微NY7503S无线充芯片10w
  15. Java入门教程:最全面最简单的Java基础教程
  16. TCP/UDP端口大全
  17. 音视频OSD——制作ASCII点阵字模并叠加到YUV图像中
  18. git 颜色扩展_GIT:扩展
  19. 00 后程序员就要为“你”加班?呵呵
  20. 开源神器:可快速在 iOS 设备上安装 Windows、Linux 等操作系统!

热门文章

  1. 玩转oracle 11g(52):Oracle导出导入表(.sql、.dmp文件)两种方法
  2. 第十三期:你所了解的javascript?
  3. java学习(25):三目运算符
  4. java序列化表单同步请求_Ajax serialize() 表单进行序列化方式上传文件
  5. qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?
  6. [LeetCode] 547. Friend Circles Java
  7. String.equals用法注意
  8. Information_Schema系统表
  9. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
  10. 回溯法 -数据结构与算法