聯詠IPCAM/DVR/NVR產品上使用mtd-utils更新NAND Flash


聯詠IPCAM/DVR/NVR產品的儲存裝置除了少數採用eMMC外,大多數都選用NAND或NOR flash。不論是NAND或NOR flash,在Linux系統驅動程式皆採用通用儲存裝置介面為基礎的Linux MTD (Memory Technologies Device)架構。開發階段可以透過USB/SD/ethernet更新flash,出貨後不一定會能保留上述方式,其中一套工具mtd-utils是基於Linux MTD開發出來的一套opensource工具,附有實用的更新工具,提供彈性運用或搭配OTA更新,首先確認聯詠的實際partition分割狀態。

 

root@NVTEVM:~$ cat /proc/mtd

dev:    size   erasesize  name

mtd0: 00040000 00020000 "loader"

mtd1: 00040000 00020000 "fdt"

mtd2: 00040000 00020000 "fdt.restore"

mtd3: 00200000 00020000 "uboot"

mtd4: 00040000 00020000 "uenv"

mtd5: 00460000 00020000 "kernel"

mtd6: 03200000 00020000 "rootfs"

mtd7: 02500000 00020000 "rootfs1"

mtd8: 021a0000 00020000 "app"

mtd9: 08000000 00020000 "all"

 

 

上述資訊即為每個partition對應的mtd編號,另外可以透過/dev/mtd* 來檢視mtd的區塊,可能會注意到mtd裝置分成/dev/mtd與/dev/mtdblock



/dev/mtdblock並非是eraseblock,不能對其做read/write操作,而/dev/mtd是Linux的mtdcore驅動實作mtd partition的裝置,mtdcore驅動內部支援ioctl並可以對實體位址進行操作,因此下面表格的工具皆透過此ioctl來完成對flash的寫入。

工具

命令

範例

$ flash_eraseall

$ flash_eraseall [-jNq] MTD_DEVICE

$ flash_eraseall /dev/mtd6

$ nandwrite

$ nandwrite [-p] [-s ADDR] MTD_DEVICE [FILE]

$nandwrite -p /dev/mtd6 rootfs.ramdisk.bin.raw


更新rootfs的方法為

$ flash_eraseall /dev/mtd6

$nandwrite -p /dev/mtd6 rootfs.ramdisk.bin.raw



這樣的操作並不會影響當前的檔案系統,重開機後就可以看到更新後的內容,同理其他的mtd partition也同樣可以更新。

 

mtd-utils其他實用的工具如下

  • flashcp可以將image寫入mtd裝置
  • nanddump可以檢查mtd裝置資訊,一般常用於檢查mtd寫入是否有問題

工具

命令

範例

$ flashcp

$ flashcp -v FILE MTD_DEVICE

$ flashcp -v rootfs.ramdisk.bin.raw /dev/mtd6

$ nanddump

$nanddump [-o] [--bb=padbad|skipbad] [-s ADDR] [-l LEN] [-f FILE] MTD_DEVICE

$nanddump -f nandinfo.txt /dev/mtd6

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能