写在前面:
我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看。
此外目前我在gitHub上准备一些李航的《统计学习方法》的实现算法,目标将书内算法全部手打实现,欢迎参观并打星。GitHib传送门
正文
uboot启动以后,先烧写jffss看看能不能用
tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 0x00260000 5b89a8
“5b89a8”是实际文件的大小,下载以后会显示的,直接copy过来就可以了。这个时候还不能直接启动,uboot传给内核的参数需要修改
bootargs=console=ttySAC0 root=/dev/mtdblock3
修改为
bootargs=console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2
说明根文件系统的格式是jffs2的。
命令:boot 启动。
结果:成功启动jffs格式的根文件系统
再来试试yaffs格式的根文件
uboot的参数修改为
bootargs=console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs2
烧写YAFFS
tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0
出现错误,说没有yaffs,进入文件查找
#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
CONFIG_CMD_NAND_YAFFS
没有宏定义,将其在s3c2440.h文件中宏定义。
此外还需要一些修改,我直接跟着韦东山改的,是uboot里面逻辑之类的错误,不好好查代码根本查不出来。
在刚才的函数中找到nand_write_skip_bad
函数,进入
a.找到下面这段代码
for (page = 0; page < pages; page++) {
WATCHDOG_RESET();
ops.datbuf = p_buffer;
ops.oobbuf = ops.datbuf + pagesize;
rval = nand->write_oob(nand, offset, &ops);
if (!rval)
break;
offset += pagesize;
p_buffer += pagesize_oob;
}
修改为
for (page = 0; page < pages; page++) {
WATCHDOG_RESET();
ops.datbuf = p_buffer;
ops.oobbuf = ops.datbuf + pagesize;
rval = nand->write_oob(nand, offset, &ops);
if (rval) /* 原先是非,这样是错的,把非去掉 */
break;
offset += pagesize;
p_buffer += pagesize_oob;
}
b.在上面代码的上方的
ops.mode = MTD_OOB_AUTO;
修改为
ops.mode = MTD_OOB_RAW;
编译,烧写。成功启动根文件系统