BeagleBoardNAND

Software

以下的部分软件可以存储和从NAND启动/运行:

  • X-Loader
  • U-Boot (+ environment/configuration data)
  • Linux kernel
  • Linux file system

这些软件在beagleboard上的存储分配如下:

-------------------------------------
0x00000000-0x00080000 : "X-Loader"
0x00080000-0x00260000 : "U-Boot"
0x00260000-0x00280000 : "U-Boot Env"

0x00280000-0x00680000 : "Kernel"

0x00680000-0x10000000 : "File System"

-------------------------------------

为了能够写东西到nandflash,首先你需要从其他源,如MMC/SD卡启动。此外,你需要把那些从MMC/SD卡启动的文件(MLO & U-Boot),写进MMC/SD卡得第一个分区。然后你可以在那里读取到这些文件和写入到NAND。

X-Loader

编译x-loader。放到MMC/SD卡的FAT分区,然后开始从存储卡中的引导和使用下面的命令写x-loader到NAND:

-------------------------------------

mmc init

fatload mmc 0:1 80000000 x-load_revc_v3.bin.ift

nand unlock

nandecc hw

nand erase 0 80000

nand write 80000000 0 80000

------------------------------------------

注:命令nandecc hw 在这里是必须的。x-loader是OMAP引导ROM的第一段程序。在读NAND的时候,使用命令nandecc hw 。所以,在写NAND时,同样使用使用命令nandecc hw 。如果你不使用nandecc hw 将不能从NAND 引导ROM。

U-Boot

编译U-Boot。放到MMC/SD卡的FAT分区,然后开始从存储卡中的引导和使用下面的命令写U-Boot到NAND:

-------------------------------------

mmc init

fatload mmc 0:1 80000000 u-boot.bin

nand unlock

nandecc sw

nand erase 80000 160000

nand write 80000000 80000 160000

-------------------------------------

注意:你可以使用引导MMC/SD卡启动的u-boot.bin来引导NAND启动。他们之间没有区别。

注意:这儿,你不需要nandecc hw选项。X-loader用于加载和引导u-boot,能够识别u-boot写入的SW ECC。

Kernel

相比于只能通过u-boot写入NAND的x-loader和u-boot,这里有两种方法将kernel和file system写入NAND:通过u-boot(与上面的x-loader和u-boot相似) 或者从运行中的内核(比如,从MMC卡引导)。

注意:x-loader和u-boot不能从运行中得内核中写入,因为从内核的角度, x-loader和u-boot的NAND分区是标记为只读的。

Writing kernel with U-Boot

-------------------------------------

mmc init

fatload mmc 0:1 80000000 uImage

nandecc sw

nand erase 280000 400000

nand write 80000000 280000 400000

-------------------------------------

当做了上述工作之后,使用U-Boot命令从NAND引导kernel (uImage):

nand read 80000000 280000 400000 ; bootm 80000000

这里,你可以保存U-Boot命令,这样你的板子就可以自动的从NAND引导uImage。

Writing kernel with kernel

当你有一个内核启动了,比如:从MMC卡。你可以使用该内核去写自己的kernel (uImage)去NAND。然后从MMC卡启;动切换到NAND卡启动。对于这一点,观察内核的引导信息。这些应该是这样的:
-------------------------------------
omap2-nand driver initializing
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bit)
cmdlinepart partition parsing not available
Creating 5 MTD partitions on "omap2-nand":
0x00000000-0x00080000 : "X-Loader"
0x00080000-0x00260000 : "U-Boot"
0x00260000-0x00280000 : "U-Boot Env"
0x00280000-0x00680000 : "Kernel"
0x00680000-0x10000000 : "File System"
-------------------------------------

在内核的提示命令 cat /proc/mtd 下会给出类似的输出信息:

-------------------------------------
root@beagleboard:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00020000 "X-Loader"
mtd1: 001e0000 00020000 "U-Boot"
mtd2: 00020000 00020000 "U-Boot Env"
mtd3: 00400000 00020000 "Kernel"
mtd4: 0f980000 00020000 "File System"
-------------------------------------

虽然前三个分区(x-loader,u-boot和u-boot Env),从内核的角度查看是只读的。但是kernel和file system 分区对于内核本身来说是可写的。要做到这一点,你需要有MTD用户模块在你的内核根文件系统里。

在这个例子中,我们挂在MMC卡得FAT分区去读kernel(uImage)。如果你的内核有网络连接,你可以使用此。或者把uImage放在你的根文件系统。这样做的目的是能够从正在运行的内核中将uImage写入到NAND。

-------------------------------------
root@beagleboard:~# mkdir -p /mnt/fat
root@beagleboard:~# mount /dev/mmcblk0p1 /mnt/fat/
root@beagleboard:~# ls -la /mnt/fat
-rwxr-xr-x    1 root     root        16740 Jul  7 17:28 mlo
-rwxr-xr-x    1 root     root       717116 Jul 24  2008 u-boot.bin
-rwxr-xr-x    1 root     root      2106940 Jul 26  2008 uImage
root@beagleboard:~# cp /mnt/fat/uImage .
root@beagleboard:~# ls -la
-rwxr-xr-x    1 root     root      2106940 Jul 22 00:30 uImage
root@beagleboard:~# flash_eraseall /dev/mtd3
Erasing 128 Kibyte @ 3e0000 -- 96 % complete.
root@beagleboard:~# nandwrite -p /dev/mtd3 uImage
Writing data to block 0 at offset 0x0
<...>
Writing data to block 20 at offset 0x280000
root@beagleboard:~#
-------------------------------------

File system

与内核一样,相比于只能通过u-boot写入NAND的x-loader和u-boot,这里有两种方法将file system写入NAND:通过u-boot(与上面的x-loader和u-boot相似) 或者 从运行中的内核(比如,从MMC卡引导)。很多用户反映,他们在用u-boot写根文件系统时遇到了问题。主要的问题是,u-boot必须格式化内核去写file system。如果有轻微的不兼容,内核将不能读取到被u-boot写入的文件系统。

所以,我们在这里记录了如何去用u-boot写入文件系统。推荐的方法是通过内核本身去写根文件系统。有了这个,可以确保用内核写入一个文件系统,稍后能够读取到。

Writing file system with U-Boot

该方法不推荐,原因见上。

-------------------------------------
OMAP3 beagleboard.org # mmc init
OMAP3 beagleboard.org # fatload mmc 0:1 80000000 rootfs.jffs2
reading rootfs.jffs2
12976128 bytes read
OMAP3 beagleboard.org # nand unlock
device 0 whole chip
nand_unlock: start: 00000000, length: 268435456!
NAND flash successfully unlocked
OMAP3 beagleboard.org # nandecc sw
OMAP3 beagleboard.org # nand erase 680000 F980000
NAND erase: device 0 offset 0x680000, size 0xf980000
Erasing at 0xffe0000 -- 100% complete.
OK
OMAP3 beagleboard.org # nand write.jffs2 80000000 680000 ${file_size}
NAND write: device 0 offset 0x680000, size 0xc60000
Writing data at 0x12df800 -- 100% complete.
 12976128 bytes written: OK
-------------------------------------

Writing file system with kernel

推荐该方法。

首先,我们用SD卡上的根文件系统启动内核。在正在运行的内核中,用SD卡上的文件系统映像把根文件系统写入到Beagle的NAND上去。在这些做完之后,我们切换内核的启动参数去从NAND上执行根文件系统来替代SD卡得根文件系统。

然后,为了能够从内核的用户空间去操纵/擦除/写NAND,我们需要MTD Utils。如果你没有这个工具,你可以通过该方法获取:opkg install mtd-utils 

对于在Beagle’s NAND 中的文件系统,我们使用JFFS2。JFFS2是标准的git内核的一部分,只需要配置内核使能JFFS2。使用make menuconfig检查是否已启用。

-------------------------------------

CONFIG_JFFS2_FS=y

CONFIG_JFFS2_FS_DEBUG=0

CONFIG_JFFS2_FS_WRITEBUFFER=y

CONFIG_JFFS2_ZLIB=y

CONFIG_JFFS2_RTIME=y

-------------------------------------

在内核支持JFFS2和MTD Utils后,我们先擦除文件系统分区并在该分区中创建JFFS2。

-------------------------------------

root@beagleboard:~# cat /proc/mtd

dev:    size   erasesize  name

mtd0: 00080000 00020000 "X-Loader"

mtd1: 001e0000 00020000 "U-Boot"

mtd2: 00020000 00020000 "U-Boot Env"

mtd3: 00400000 00020000 "Kernel"

mtd4: 0f980000 00020000 "File System"

root@beagleboard:~# flash_eraseall -j /dev/mtd4

Erasing 128 Kibyte @ f960000 -- 99 % complete. Cleanmarker written at f960000.

-------------------------------------

然后,我们可以挂载文件系统分区:

-------------------------------------

root@beagleboard:~# cd /mnt

root@beagleboard:~# mkdir nand

root@beagleboard:~# mount -t jffs2 /dev/mtdblock4 /mnt/nand

-------------------------------------

并提取到他的根文件系统映像:

-------------------------------------

root@beagleboard:~# cd nand

root@beagleboard:~# tar xfz <where_ever_your_root_fs_image_is_at_sd_card>/rootfs.tar.gz .

... wait ...

root@beagleboard:~# cd ..

root@beagleboard:~# sync

root@beagleboard:~# umount nand

-------------------------------------

现在,你应该重启你的主板并在u-boot中编辑启动参数去配置在NAND中的根文件系统。

-------------------------------------

root=/dev/mtdblock4 rootfstype=jffs2

-------------------------------------

NAND flash 文件系统制作相关推荐

  1. HI3521D 烧录128M nand flash文件系统

    1.nand flash信息: SPI Nand(cs 0) ID: 0xef 0xaa 0x21 Name:"W25N01GV" Block:128KB Page:2KB Chi ...

  2. linux擦除nandflash分区,【Linux公开课】NAND Flash存储器分区、烧写流程图、格式化NAND Flash...

    摘要本章主要讲述EasyARM-iMX283A Linux固件的烧写方法,可以通过TF卡.USB两种方式进行整体固件烧写,也可以通过网络进行局部固件升级. 第9章 系统固件烧写 本章主要讲述EasyA ...

  3. EMMC与NAND FLASH核心对比

    通俗的来说,eMMC=NAND闪存+闪存控制芯片+标准接口封装.本文大致做下边几个小结: (1)MMC与Host之间的连接 连接由下图可见 (2)eMMC和NAND Flash与Host的连接比较 N ...

  4. emmc、Nand flash、Nor flash之间的区别

    一.定义及区别 emmc:全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成,以BGA方式封装在一款chip上 ...

  5. Linux NAND Flash调试

    很久没接触过 nandflash 驱动,最近工作又摸了,于是顺便整理总结一下.nandflash 在我看来算是比较落后的存储设备,所以文章里没有太多细节的东西,更多的是一些开发思路和经验,希望能帮助到 ...

  6. rt-thread驱动篇(08)---STM32F429单片机NAND FLASH驱动

    目录 参考资料 一.NAND FLASH 1.1.特性 1.2.存储单元结构 1.3.NAND FLASH寻址 1.4.坏块管理与磨损均衡 1.5.ECC校验 二.uffs 1.uffs配置相关宏 参 ...

  7. 从单片机开发转向Linux开发系列博客五:Nand Flash根文件系统制作

    版本 作者 参与者 日期 备注 V1.0 wuya(微信号:wangwenxue1989) 2019/05/17 创建 1.引言 之前系列的文章介绍了如何编译Uboot.Kernel以及使用默认的ra ...

  8. 内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的

      原文 初始化代码读取uboot到内存里面,然后跳转到uboot那里去执行uboot,uboot初始化必要的硬件,加载一些驱动,其中包括nand flash的驱动,然后根据uboot里面设置的一个启 ...

  9. 解压ubi文件_请问为什么AM3352 NAND FLASH UBI文件系统挂载失败?

    本帖最后由 一只耳朵怪 于 2018-6-21 11:08 编辑 各位好: 在NAND FLASH中写入ubi文件系统,内核启动时出现挂载失败. SDK:ti-processor-sdk-linux- ...

最新文章

  1. Rancher 2.0正式发布:简化、加速企业Kubernetes落地
  2. fabric shim安装合约_hyperledger fabric 开发第一个智能合约
  3. NB-IOT(6)---NB-IoT物联网行业解决方案
  4. 40-400-044-运维-优化-MySQL order by 优化
  5. window 常用软件
  6. 科普 | 到底什么是移动边缘计算?
  7. 华为P6-C00电信版,刷机总是失败? FAIL
  8. linux 命令行 过滤,linux过滤命令
  9. 使用Excel在图片上添加正方形网格线
  10. PPT之如何设置一个箭头围绕一个顶点旋转?
  11. 常见的网络协议有哪些?
  12. PIAO网址PIAO
  13. VS2010播放.WAW音频文件
  14. mysql utl_file_pl/sql应用之利用utl_file写文件
  15. 27. hall霍尔传感器
  16. Java斗地主界面实现_通过Java实现斗地主
  17. 【机器学习】深度解析机器学习五大流派中主算法精髓
  18. 基于谁也不信任的安全建设思路 打造安全防御体系
  19. 计算机二级c语言考试真题及答案详解,全国计算机二级考试C语言复习题与答案解析...
  20. 看看谁获得了CodeM编程大赛的10万奖金

热门文章

  1. 如何用好售后服务卡/评价有礼卡,高比率留存老客户,提升店铺复购率
  2. emif接口速率问题_基于EMIF接口的双速率1553B总线设备通信方法与流程
  3. CNN卷积神经网络的理解(Draft)
  4. 2.1 Python图像的空域增强处理-灰度映射
  5. swift中performSegue连线的使用storyboard加载多个控制器方法和demo下载
  6. 用于大规模图像缩放识别的Vision Transformer
  7. coot怎么调用python_CSE207作业代写、代做Coot project作业、代写CS/python编程作业, C/C++/Java设计作业代做...
  8. 编程英语:RegExp 正则表达式
  9. 新能源汽车与三电技术
  10. oracle 改变时间戳,Oracle时间戳 与时间之间的相互转换