前言:我在JZ2440烧写linux内核镜像(uImage)之后,内核可以正常启动,但是我烧写玩Yaffs2格式的根文件系统之后,内核启动不了,根据我以往的学习和工作经验,可能是nand flash出现了坏块,(nand flash是比较容易出现坏块的),下面是我的解决办法。

CPU   : jz2440
u-boot: u-boot-1.1.6
kernel: linux-4.19-rc3
root  :fs_mini_mdev_new

1. 我在烧写是通过串口打印,可以看出uImage大小、起始地址、结束地址、根据uImage烧写的结束地址,设置根文件系统的起始地址(即使uImage的结束地址)

2. 通过串口打印我知道我的uImage烧写成功的地址在0xlde0000地址处,我在这里偷懒了,我在u-boot里面直接给kernel分配了32M的空间,如下图所示:

3. 烧写经过修改的uboot,然后重新烧写kernel、根文件系统烧写然后进行重启,会打印出下面的错误信息,大概的意思

就是根文件系统在nand flash读取失败。

print_req_error: I/O error, dev mtdblock4, sector 0
FAT-fs (mtdblock4): unable to read boot sector
VFS: Cannot open root device "mtdblock4" or unknown-block(31,4): error -5
Please append a correct "root=" boot option; here are the available partitions:
0100           65536 ram0
 (driver?)
0101           65536 ram1
 (driver?)
0102           65536 ram2
 (driver?)
0103           65536 ram3
 (driver?)
0104           65536 ram4
 (driver?)
0105           65536 ram5
 (driver?)
0106           65536 ram6
 (driver?)
0107           65536 ram7
 (driver?)
0108           65536 ram8
 (driver?)
0109           65536 ram9
 (driver?)
010a           65536 ram10
 (driver?)
010b           65536 ram11
 (driver?)
010c           65536 ram12
 (driver?)
010d           65536 ram13
 (driver?)
010e           65536 ram14
 (driver?)
010f           65536 ram15
 (driver?)
1f00             256 mtdblock0
 (driver?)
1f01             128 mtdblock1
 (driver?)
1f02             128 mtdblock2
 (driver?)
1f03            4096 mtdblock3
 (driver?)
1f04          257536 mtdblock4
 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,4)
CPU: 0 PID: 1 Comm: swapper Not tainted 4.19.0-rc3 #1
Hardware name: SMDK2440
[<c00106d4>] (unwind_backtrace) from [<c000dca0>] (show_stack+0x10/0x18)
[<c000dca0>] (show_stack) from [<c04dfdfc>] (dump_stack+0x18/0x24)
[<c04dfdfc>] (dump_stack) from [<c0019ce4>] (panic+0xc0/0x25c)
[<c0019ce4>] (panic) from [<c0633274>] (mount_block_root+0x1b4/0x2ac)
[<c0633274>] (mount_block_root) from [<c06335d0>] (mount_root+0x114/0x158)
[<c06335d0>] (mount_root) from [<c0633774>] (prepare_namespace+0x160/0x1b8)
[<c0633774>] (prepare_namespace) from [<c0632ec0>] (kernel_init_freeable+0x180/0x1cc)
[<c0632ec0>] (kernel_init_freeable) from [<c04f4d08>] (kernel_init+0x8/0xf8)
[<c04f4d08>] (kernel_init) from [<c00090e0>] (ret_from_fork+0x14/0x34)
Exception stack(0xc3833fb0 to 0xc3833ff8)
3fa0:                                     00000000 00000000 00000000 00000000
3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3fe0: 00000000 00000000 00000000 00000000 00000013 00000000
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,4) ]---
random: crng init done

了解uboot、kernel、根文件系统它们之间的关系可以知道,uboot负责启动kernel,根文件系统的启动是kernel负责的,所以我们需要修改kernel,所以在内核中需要修改各个部分分区的大小,打开linux-4.19-rc3/arch/arm/mach-s3c24xx/common-smdk.c文件,把kernel分区的大小由4M改为32M即可(分配的空间大小要和uboot里面大小和位置保持一致)

kernel修改完成之后,重启启动发现kernel、根文件系统都可以正常启动了

JZ2440开发板nand flash出现坏块的解决办法相关推荐

  1. jz2440开发板修改UBOOT支持NAND FLASH

    很多天没有看嵌入式的东西了,今天来看一下,继续之前移植uboot到jz2440开发板.今天我们来实现Uboot支持NAND FLASH. 在之前的文章里(点击连接查看之前的记录),我们为了编译通过把N ...

  2. 移植u-boot-2012.04.01到jz2440开发板

    今天我给大家分享一下如何移植一个纯净的uboot到jz2440开发大版,通过记录学习分享,与大家一起进步!!! 1.首先我们在uboot官网下载u-boot-2012.04.01.tar.bz2,建立 ...

  3. 移植Linux 3.4.2内核到JZ2440开发板(超精讲)

    Linux 3.4.2内核移植到JZ2440开发板 0.开发环境 虚拟机:VMware workstation 16 pro 宿主机操作系统:Ubuntu 16.04 开发板:JZ2440 移植内核版 ...

  4. uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  5. linux中使用串口(dnw)下载程序到jz2440开发板

    对于大多数使用韦东山jz2440开发板的用户来说,使用OpenJTAG或EasyOpenJTAG是非常方便的,并且视频教程中也是用这两种 来教学的,对于没有OpenJTAG. EasyOpenJTAG ...

  6. jz2440开发板移植U-boot之修改代码支持DM9000网卡

    今天我们来移植U-boot到jz2440开发板,修改代码支持DM9000网卡.查看之前写的移植记录请点击链接:点击查看之前的移植记录 现在大多数开发板都支持DM9000网卡.我们的U-boot源码里面 ...

  7. 关于修改jz2440开发板IP以及开发板与Windows互ping问题

    一.如何修改jz2440开发板IP 开头注意:在进行以下操作前必须已经跟着u-boot内核到开发板上,此外还要移植根文件系统到开发板上. 修改开发板IP有两种方式: 1.临时修改IP 2.永久修改IP ...

  8. JZ2440开发板与电脑通过网线直连,实现开发板、虚拟机、PC机三者互Ping,并成功挂接网络根文件系统

    声明: 本文提及的部分图片与内容属于韦东山老师的教学视频课程内容,本文提出的解决方案是基于韦老师教学视频中提及方案的扩展. 转载内容来自: [005_ARM裸机1期加强版_第006课_第006节_一句 ...

  9. oracle强制拉库跳过recovery,学习笔记:Oracle坏块 数据库recover恢复时遇到坏块的解决思路案例...

    天萃荷净 recover遇到坏块处理本质探讨,记录一次在Oracle数据库recover恢复过程中,遇到数据库坏块无法恢复的解决思路案例 如果在还原出来的数据文件中有坏块,而归档日志和联机日志是正常的 ...

最新文章

  1. IndexedDB 索引数据库
  2. 音频数据文件格式(PCM,WAV,MIDI)简记
  3. BZOJ-1968: [Ahoi2005]COMMON 约数研究 (思想)
  4. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
  5. 一张图看懂 SQL 的各种 join 用法
  6. ThreadLocal 从源码角度简单分析
  7. Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述
  8. 如果你不懂备案,那我简单点跟你说
  9. 关于水题POJ2159
  10. 【python】获取http响应
  11. 【基础教程】基于matlab图像处理(读写+显示+运算+转换+变换+增强+滤波+分析+统计)【含Matlab源码 144期】
  12. 推荐 Word、EXCEL必备工具箱
  13. 两个月的一些工作总结
  14. 揭秘空手套白狼的灰色产业,人性背后的暴利
  15. win10访问不了win7文件服务器,win10和win7共享文件教程 win10和win7共享文件无法访问...
  16. Mac (M1) 软件及环境搭建
  17. 用flask和html制作个人相册页面,Python编程flask使用页面模版的方法
  18. 背景图片宽高自适应实现
  19. 51.N皇后(N-Queens)
  20. 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)

热门文章

  1. CODE RO RW ZI的区别
  2. 加州欧文计算机工程专业,加州大学欧文分校计算机工程博士专业排名
  3. 内存不能为读的解决办法
  4. L1-6 吉老师的回归 (15 分)
  5. Linux 简要大纲
  6. C++ opencv viz位姿可视化
  7. Windows预览体验计划空白等一些问题的解决办法
  8. Modbus串行传输方式
  9. css 让图标上下跳,使用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果
  10. 单片机(中断系统-串口通信)