移植U-BOOT之支持烧写YAFFS文件系统以及制作U-BOOT补丁
今天,我们来移植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补丁相关推荐
- u-boot-2012.04.01移植到TQ2440(八):支持烧写yaffs文件系统
一.支持yaffs烧写文件系统 先直接烧写试一下 TQ2440 # nand write.yaffs32000000 rootfs $filesize NAND write: device 0 off ...
- Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写
很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot ...
- 转”使用UBOOT烧写根文件系统和内核的方法
"转"使用UBOOT烧写根文件系统和内核的方法 2012-08-13 20:39:28 分类: 原文地址:"转"使用UBOOT烧写根文件系统和内核的方法 作者: ...
- 【Tiny4412】烧写Qt文件系统到EMMC
00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写Qt文件系统到EMMC 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命 ...
- 【Tiny4412】烧写Qt文件系统到SD卡
00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写Qt文件系统到SD卡 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命令 ...
- ESP8266乐鑫版本的(支持云端升级 (Boot 模式)烧写方法,(V1.5.4官方介绍如下)(BOOT模式)...
硬件平台: nodeMCU devkit核心板,带ch340g,应该是仿造的,官方是cp2102驱动,安信可科技有连接https://wiki.ai-thinker.com/esp8266/board ...
- 【Tiny4412】烧写最小文件系统到EMMC
00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写文件系统到EMMC 04. 问题讨论 05. 附录 01. 烧写内核 1.1 在minicom中输入如下命令 ...
- 【Tiny4412】烧写最小文件系统到SD卡
00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写文件系统到SD卡 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命令 D ...
- linux内核烧写erasing failed,mfgtool烧写mx28文件系统失败
内核烧写成功后,接下来烧写文件系统,烧写过程中内核core掉,日志如下 lib/libBrokenLocale-2.11.1.so lib/libcrypt.so.1 lib/librt.so.1 l ...
最新文章
- _extend用法总结
- HTTP协议那些不得不说的事
- http2.0 的时代来了
- pytorch nn.Softmax
- [转载] Python机器学习库scikit-learn使用小结(二)
- This content should also be served over HTTPS
- macOS中LaTeX报错Package fontspec Error: The font “SimHei“ cannot be found
- 计算机 高级软件工程师考试试题,高级软件工程师8月考试试题A卷带答案.doc
- Power query (Power BI)一步到位傻瓜式合并工作簿,史上最好用
- win10输入法看不见选字框_Win10更新后微软拼音输入法没有选字框怎么办?
- 极光推送上线7周年大庆,777件礼物送给大家
- Linux下Oracle安装宝典(转)
- 计算机综合能力描述,计算机综合应用能力实训报告
- 新页微NY7503S无线充芯片10w
- Java入门教程:最全面最简单的Java基础教程
- TCP/UDP端口大全
- 音视频OSD——制作ASCII点阵字模并叠加到YUV图像中
- git 颜色扩展_GIT:扩展
- 00 后程序员就要为“你”加班?呵呵
- 开源神器:可快速在 iOS 设备上安装 Windows、Linux 等操作系统!
热门文章
- 玩转oracle 11g(52):Oracle导出导入表(.sql、.dmp文件)两种方法
- 第十三期:你所了解的javascript?
- java学习(25):三目运算符
- java序列化表单同步请求_Ajax serialize() 表单进行序列化方式上传文件
- qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?
- [LeetCode] 547. Friend Circles Java
- String.equals用法注意
- Information_Schema系统表
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- 回溯法 -数据结构与算法