u-boot nand flash read/write cmd

支援的命令函數說明
1. nand info/nand device
功能:顯示當前nand flash晶片資訊。
函數調用關係如下(按先後順序):
static void nand_print(struct nand_chip *nand) ;

2. nand erase
功能:擦除指定塊上的數據。
函數調用關係如下(按先後順序):
int nand_erase(struct nand_chip* nand, size_t ofs, size_t len, int clean);
3. nand bad
功能:顯示壞塊。
函數調用關係如下(按先後順序):
static void nand_print_bad(struct nand_chip* nand);
int check_block (struct nand_chip *nand, unsigned long pos);
4. nand read
功能:讀取nand flash信息到SDRAM。
函數調用關係如下(按先後順序):
int nand_rw (struct nand_chip* nand, int cmd,size_t start, size_t len, size_t * retlen, u_char * buf);
static int nand_read_ecc(struct nand_chip *nand, size_t start, size_t len,
size_t * retlen, u_char *buf, u_char *ecc_code);
static void NanD_ReadBuf (struct nand_chip *nand, u_char * data_buf, int cntr);
READ_NAND(adr);
5. nand write
功能:從SDRAM寫數據到nand flash中。
函數調用關係如下(按先後順序):
int nand_rw (struct nand_chip* nand, int cmd,size_t start, size_t len, size_t * retlen, u_char * buf);
static int nand_write_ecc (struct nand_chip* nand, size_t to, size_t len,
size_t * retlen, const u_char * buf, u_char * ecc_code);
static int nand_write_page (struct nand_chip *nand, int page, int col, int last, u_char * ecc_code);
WRITE_NAND(d , adr);

?

4.2.32 nand info
列印nand flash資訊
CRANE2410 # nand info
Device 0: Samsung K9F1208U0B at 0x4e000000 (64 MB, 16 kB sector)
4.2.33 nand device <n>
顯示某個nand設備
CRANE2410 # nand device 0
Device 0: Samsung K9F1208U0B at 0x4e000000 (64 MB, 16 kB sector)
... is now current device
4.2.34 nand bad
CRANE2410 # nand bad
Device 0 bad blocks:
4.2.35 nand read
nand read InAddr FlAddr size
InAddr: 從nand flash中讀到記憶體的起始位址。
FlAddr: nand flash 的起始位址。
size: 從nand flash中讀取的數據的大小。
CRANE2410 # nand read 0x30008000 0 0x100000
NAND read: device 0 offset 0, size 1048576 ...
1048576 bytes read: OK
4.2.36 nand erease
nand erase FlAddr size
FlAddr: nand flash 的起始位址
size: 從nand flash中擦除資料塊的大小
CRANE2410 # nand erase 0x100000 0x20000
NAND erase: device 0 offset 1048576, size 131072 ... OK
4.2.37 nand write
nand write InAddr FlAddr size
InAddr: 寫到Nand Flash中的資料在記憶體的起始位址
FlAddr: Nand Flash的起始位址
size: 數據的大小
CRANE2410 # nand write 0x30f00000 0x100000 0x20000

NAND write: device 0 offset 1048576, size 131072 ...
131072 bytes written: OK

?

4.2.37 nboot
u-boot-1.1.4代碼對於nboot命令的幫助不正確,修改如下:
正確的順序為:
nboot InAddr dev FlAddr
InAddr: 需要裝載到的記憶體的位址。
FlAddr: 在nand flash上uImage存放的地址
dev: 設備號
需要提前設置環境變數,否則nboot不會調用bootm
CRANE2410 #setenv autostart yes
CRANE2410 # nboot 30008000 0 100000
Loading from device 0: <NULL> at 0x4e000000 (offset 0x100000)
Image Name: Linux-2.6.14.3
Created: 2006-07-06 7:31:52 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 897428 Bytes = 876.4 kB
Load Address: 30008000
Entry Point: 30008040
Automatic boot of image at addr 0x30008000 ...
## Booting image at 30008000 ...
Starting kernel ...
4.3 命令簡寫說明
所以命令都可以簡寫,只要命令前面的一部分不會跟其他命令相同,就可以不用寫全整個命令.
save命令
CRANE2410 # sa
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...Erasing sector 10 ... Erased 1 sectors
4.4 把文件寫入NandFlash
如果把一個傳到記憶體中的檔寫入到Nand Flash中, 如:新的uboot.bin, zImage(內核),
rootfs等, 如果做呢?我們可以用Nand Flash命令來完成. 但是Nand Flash寫時,必須先要把Nand
Flash的寫入區全部擦除後,才能寫. 下面以把記憶體0x30008000起長度為0x20000的內容寫到Nand
Flash中的0x100000為例
.
CRANE2410 # nand erase 0x100000 0x20000
NAND erase: device 0 offset 1048576, size 131072 ... OK
CRANE2410 # nand write 0x30008000 0x100000 0x20000
NAND write: device 0 offset 1048576, size 131072 ...
131072 bytes written: OK

我的nand flash 32M,kernel 2.6.18, rootfs emb linux, cramfs.

nand flash分區如下:
static struct mtd_partition nand_partitions[] = {
? /* bootloader (UBL, U-Boot, BBT) in sectors: 0 - 14 */
? {
? .name = "bootloader",
? .offset = 0,
? .size = 32 * NAND_BLOCK_SIZE, //32x16 = 512k
? .mask_flags = MTD_WRITEABLE, /* force read-only */
? },
? /* bootloader params in the next sector 15 */
? {
? .name = "params",
? .offset = MTDPART_OFS_APPEND,
? .size = 96 * NAND_BLOCK_SIZE, //96x16 = 1536k = 1.5M
? .mask_flags = MTD_WRITEABLE, /* force read-only */
? },
? /* kernel in sectors: 16 */
? {
? .name = "kernel",
? .offset = MTDPART_OFS_APPEND,
? .size = SZ_2M, //2M
? .mask_flags = 0
? },
? /* rootfs */
? {
? .name = "filesystem1",
? .offset = MTDPART_OFS_APPEND,
? .size = SZ_16M + SZ_8M, //24M
? .mask_flags = 0
? },
? /*parameter*/
? {
? .name = "filesystem2",
? .offset = MTDPART_OFS_APPEND,
? .size = MTDPART_SIZ_FULL, //4M, /mnt/nand, save log,sysenv,
? .mask_flags = 0
? }
};

//系統啟動后
# cat /proc/partitions ?
major minor #blocks name ?
? ?
? 31 0 512 mtdblock0 ?
? 31 1 1536 mtdblock1 ?
? 31 2 2048 mtdblock2 ?
? 31 3 24576 mtdblock3 ?
? 31 4 4096 mtdblock4 ?
254 0 512 sbulla ?
#
# cat /proc/mtd ?
dev: size erasesize name ?
mtd0: 00080000 00004000 "bootloader" ?
mtd1: 00180000 00004000 "params" ?
mtd2: 00200000 00004000 "kernel" ?
mtd3: 01800000 00004000 "filesystem1" ?
mtd4: 00400000 00004000 "filesystem2" ?
#


我的問題是, 以下命令是廠家提供的,是可以執行成功的命令,我不理解其中到某些命令:
在U-boot燒寫時,用以下命令:

tftpboot 0x80700000 uImage_ipnc_dm365 //可以理解
tftpboot 0x82000000 cramfsImage_ipnc_dm365.v1.2.4-debug-param //可以理解

nand erase 0x200000 0xDF0000 //不理解,本句的意思是把kernel分區和rootfs分區擦除,0xDF0000 = 13.9375M, 而內核和文件系統共2M+24M=26M,為什么不是#nand erase 0x200000 0x1A00000 (26M).

nand write 0x80700000 0x200000 0x200000 //可以理解,寫內核到NAND FLASH, 從內存地址 0x80700000 讀取大小為 0x200000(2M)的數據,寫入nand flash,寫入的起始地址為0x200000。

nand write 0x82000000 0x400000 0xBF0000 //不理解,寫文件系統到NAND FLASH, 意思是從內存地址 0x82000000 讀取大小為 0xBF0000(11.9375M)的數據,寫入nand flash,寫入的起始地址為0x400000。為什么只寫0xBF0000(11.9375M)的數據,我的文件系統分區24M啊,實際的文件系統也 22M左右,why?

請各路高手看看。

,比如我在U-boot燒寫文件系統時,我只想對文件系統filesystem1分區擦除然后升級文件系統,不擦內核和最后的分區(filesystem2),該怎么用nand erase命令,偏移多少,大小多少。如何精確的調整,我覺得這個值必須很精確,不然會影響到前一個分區和最后的分區的數據。
啟動NFS
/usr/sbin/exportfs -a
/sbin/service nfs restart

開啟tftp服務
/sbin/chkconfig tftp on

啟動NFS服務
/etc/init.d/portmap start
/etc/init.d/nfs start

停止NFS服務
/etc/init.d/nfs stop
/etc/init.d/portmap stop


重新啟動NFS服務
/etc/init.d/nn/se

--------------------------------------------------------------------------------------
/etc/init.d/ssh restart
mount -t vfat /dev/sda1 /mnt
fdisk -l

----------------------------------------------------------------------------------------
DVS6446環境變量設置

NFS booot

setenv bootargs mem=60M console=ttyS0,115200n8 root=/dev/nfs noinitrd rw ip=192.168.253.130:255.255.255.0:192.168.253.1 nfsroot=192.168.253.229:/opt/nfs video=dm64xxfb:output=pal


NAND boot

setenv bootargs mem=60M console=ttyS0,115200n8 init=/linuxrc root=/dev/mtdblock0 rw noinitrd rootfstype=yaffs ip=192.168.253.140:255.255.255.0:192.168.253.1 video=dm64xxfb:output=pal


硬盤boot

setenv bootargs mem=60M console=ttyS0,115200n8 root=/dev/hda1 noinitrd rw ip=192.168.253.183:255.255.255.0:192.168.253.1 video=dm64xxfb:output=pal

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

DVS6467
setenv bootargs mem=80M console=ttyS0,115200n8 root=/dev/mtdblock3 rootfstype=jffs2 noinitrd rw ip=192.168.253.183:192.168.253.1:255.255.255.0 video=dm64xxfb:output=pal



vlc rtsp://192.168.253.130/TSStream-1 --clock-synchro=0

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

IPC365板卡網絡文件系統;

setenv bootargs console=ttyS0,115200n8 noinitrd rw ip=192.168.253.130 root=/dev/nfs nfsroot=192.168.253.229:/opt/nfs, nolock mem=80M video=davincifb dm365_imp.oper_mode=0 davinci_capture.device_type=4



IPC365 FLASH文件系統
setenv bootargs mem=80M console=ttyS0,115200n8 noinitrd rw ip=192.168.253.130:192.168.253.1:255.255.255.0 root=/dev/mtdblock3 rootfstype=yaffs video=davincifb:osd0=720x576x16,4050K dm365_imp.oper_mode=0 davinci_capture.device_type=4



IPC365板卡的環境變量設置

bootdelay=4
baudrate=115200
bootargs=console=ttyS0,115200n8 noinitrd rw ip=192.168.253.130 root=/dev/nfs nfsroot=192.168.253.229:/opt/nfs, nolock mem=80M video=davincifb dm365_imp.oper_mode=0 davinci_capture.device_type=4
stdin=serial
stdout=serial
stderr=serial
ver=U-Boot 1.3.4 (Dec 7 2009 - 11:07:06)
bootfile="uImage-dm365"
bootcmd=tftp 0x80700000 uImage-dm365;bootm
serverip=192.168.253.229
ipaddr=192.168.253.120
autostart=yes
ethaddr=11:22:23:24:15:19

setenv bootcmd 'tftp 0x80700000 uImage-dm365;bootm'
setenv bootcmd 'tftp 0x80700000 uImage-dm365;bootm'
setenv ethaddr 11:22:23:24:15:19
setenv autostart

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

DM365 開發板 環境變量

bootdelay=4
baudrate=115200
bootfile="uImage"
ipadd=192.168.1.3
server=192.168.1.2
filesize=1FC08C
fileaddr=80800000
autostart=yes
bootcmd=nboot 0x80800000 0 0x200000
serverip=192.168.15.110
ethaddr=00:11:11:11:11:11

setenv bootargs mem=80M console=ttyS0,115200n8 noinitrd rw ip=192.168.253.186:255.255.255.0:192.168.253.1 root=/dev/mtdblock3 rootfstype=yaffs video=davincifb:osd0=720x576x16,4050K dm365_imp.oper_mode=0 davinci_capture.device_type=4
ipaddr=192.168.15.3
stdin=serialip
stdout=serial

stderr=serial
ver=U-Boot 1.3.4 (Dec 7 2009 - 11:07:06)

Environment size: 544/262140 bytes

setenv bootargs mem=80M console=ttyS0,115200n8 root=/dev/nfs noinitrd rw ip=192.168.253.144:255.255.255.0:192.168.253.1 nfsroot=192.168.253.229:/opt/nfs video=davincifb:osd0=720x576x16,4050K dm365_imp.oper_mode=0 davinci_capture.device_type=4

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

SEED-DEC138板卡環境變量修改:

網絡文件系統啟動
setenv bootargs mem=128M console=tty0 root=/dev/nfs nfsroot=192.168.253.229:/opt/nfs rw ip=192.168.253.145:192.168.253.1:255.255.255.0
setenv bootcmd 'tftp 0xc80800000 uImage; bootm'
0x80700000
setenv bootcmd 'tftp 0xc0700000 uImage_dec138; bootm'

FLASH文件系統啟動



SEED-OMAP3530

DNS設置
vi etc/resolv.conf
nameserver 202.113.196.115
nameserver 202.113.0.20

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253851.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253851.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253851.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

APP測試瞎話

APP測試 一、功能性 1、APP的安裝、卸載 2、APP中業務功能 二、性能測試 1、高、中、低端機上運行效果 2、APP安裝過程、卸載過程的耗時 3、APP運行時&#xff0c;手機的CPU、內存、耗電量、流量、FPS&#xff08;畫面每…

網絡七層協議之物理層

我們以一個非常簡單的例子開始&#xff1a; 兩服務器通訊問題 如上圖&#xff0c;有兩臺服務器&#xff0c;分別是 Server 1 和 Server 2 。 我們先做一個假設&#xff1a;計算機網絡現在還沒有被發明出來&#xff0c; 作為計算機科學家的你&#xff0c;想在這兩臺服務器間傳遞…

靜態時序分析——On-chip Variation

OCV&#xff08;on-chip variation&#xff09;是指在同一個芯片上, 由于制造工藝和環境等原因導致芯片上各部分特征不能完全一樣&#xff0c;從而造成偏差&#xff0c;對時序分析造成影響。這些偏差對互聯線和cell的延時都是有影響的。 由于OCV對延時有影響&#xff0c;那么我…

Exception和RuntimeException的區別

1.Exception表示程序運行過程中可能出現的非正常狀態 RuntimeException表示虛擬機的通常操作中可能遇到的異常&#xff0c;是一種常見運行錯誤。 Java編譯器要求方法必須聲明拋出可能發生的費運行異常&#xff0c;但是并不要求必須聲明拋出未被捕獲的運行時異常&#xff0c; 即…

[轉載]IIS7報500.23錯誤的解決方法

原文出處&#xff1a; 原文作者&#xff1a;pizibaidu 原文鏈接&#xff1a;http://pizibaidu.blog.51cto.com/1361909/1794446 背景&#xff1a;今天公司終端上有一個功能打開異常&#xff0c;報500錯誤&#xff0c;我用Fiddler找到鏈接&#xff0c;然后在IE里打開&#xff0c…

關于用戶空間和內核空間

當一個任務&#xff08;進程&#xff09;執行系統調用而陷入內核代碼中執行時&#xff0c;我們就稱進程處于內核運行態&#xff08;內核態&#xff09;。在內核態下&#xff0c;CPU可執行任何指令。當進程在執行用戶自己的代碼時&#xff0c;則稱其處于用戶運行態&#xff08;用…

kaggle中zillow比賽中模型融合的方法及其代碼

在機器學習這個領域&#xff0c;尤其是做多媒體&#xff08;聲音、圖像、視頻&#xff09;相關的機器學習方法研究&#xff0c;會涉及很多特征、分類模型&#xff08;分類任務&#xff09;的選擇。以聲音識別為例&#xff0c;常見的特征有MFCC、LPCC、spectrogram-like feature…

靜態時序分析——Timing borrow

Timing Borrow技術又稱為cycle stealing技術&#xff0c;主要是利用latch的電平敏感特性&#xff0c;通過有效電平獲取數據&#xff0c;通過無效電平保持被鎖存的數據&#xff0c;主要用于解決路徑時序不滿足電路要求的情況。 通過TimingBorrow可以對電路進行加速,當路徑延遲較…

homebrew 常用命令

安裝&#xff08;需要 Ruby&#xff09;&#xff1a;ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/Go/install)" 搜索&#xff1a;brew search MySQL 查詢&#xff1a;brew info mysql 主要看具體的信息&#xff0c;比如目前的版本&#xff0c…

從Mysql某一表中隨機讀取n條數據的SQL查詢語句

若要在i ≤ R ≤ j 這個范圍得到一個隨機整數R &#xff0c;需要用到表達式 FLOOR(i RAND() * (j – i 1))。例如&#xff0c; 若要在7 到 12 的范圍&#xff08;包括7和12&#xff09;內得到一個隨機整數, 可使用以下語句&#xff1a; SELECT FLOOR(7 (RAND() * 6)); 以上摘…

基于MTD的NAND驅動開發(二)

基于MTD的NAND驅動開發(二) 基于MTD的NAND驅動開發(三) http://blog.csdn.net/leibniz_zsu/article/details/4977853 http://blog.csdn.net/leibniz_zsu/article/details/4977869 四、基于MTD的NAND 驅動架構 1 、platform_device 和platform_driver 的定義和注冊 對于我們的…

靜態時序分析——Data to data check

setup和hold的檢查也有可能發生在任意兩個數據端口&#xff0c;其中不包括時鐘端口。 我們將其中一個端口&#xff08;pin&#xff09;設置為約束端口&#xff08;constrainted pin&#xff09;&#xff0c;就像觸發器中的數據端口&#xff1b;將另一個一個端口&#xff08;pin…

開源數據庫中間件-MyCa初探與分片實踐

如今隨著互聯網的發展&#xff0c;數據的量級也是撐指數的增長&#xff0c;從GB到TB到PB。對數據的各種操作也是愈加的困難&#xff0c;傳統的關系性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候NoSQL的出現暫時解決了這一危機。它通過降低數據的安全性&#xff0c;減…

【JAVA設計模式】外觀模式(Facade Pattern)

一 定義 為子系統中的一組接口提供一個一致的界面。Facade模式定義了一個高層的接口&#xff0c;這個接口使得這一子系統更加easy使用。二 案例 一個子系統中擁有3個模塊。每一個模塊中都有3個方法。當中一個為client調用方法&#xff0c;其它兩個則為各子模塊間互相調用方法…

return的用處

#include "stdio.h" main() {int a,b1,c0;for(a1;a<5;a){ cca;}printf("%d",c);return ;printf("hello word"); } 輸出結果是10并沒有hello word&#xff1b;return將不會執行下面的語句。轉載于:https://www.cnblogs.com/doublekai/p/6148…

靜態時序分析——Clock Gating check

門控時鐘是RTL級進行低功耗設計的最常用方法&#xff0c;能夠有效降低動態功耗。在實際使用中&#xff0c;一般用ICG&#xff08;集成門控時鐘單元&#xff09;來完成clock gating。ICG電路和時序如下&#xff1a; 通常來說&#xff0c;工藝庫已經集成了ICG&#xff0c;在做門控…

U-boot中TFTP 解釋

http://www.cnblogs.com/heaad/archive/2009/08/10/1542538.html

BlackHat Arsenal USA 2018 ToolsWatch黑客工具庫

原文鏈接&#xff1a;https://medium.com/hack-with-github/black-hat-arsenal-usa-2018-the-w0w-lineup-7de9b6d32796 Black Hat Arsenal USA 2018?—?The w0w lineup After the huge success of Black Hat Arsenal USA 2017, toolswatch has now announced the list of too…

SOA是什么

SOA是什么&#xff1f; SOA是面向服務的架構&#xff0c;是一個組件模型&#xff0c;它將應用程序的不同功能單元&#xff08;稱為服務&#xff09;通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的&#xff0c;它獨立于實現服務的硬件平臺、操作…

redis 優化

系統優化echo "vm.overcommit_memory1" > /etc/sysctl.conf 0&#xff0c; 表示內核將檢查是否有足夠的可用內存供應用進程使用&#xff1b;如果有足夠的可用內存&#xff0c;內存申請允許&#xff1b;否則&#xff0c;內存申請失敗&#xff0c;并把錯誤返回給應…