姓名:鄧皓軒? 學(xué)號:19020100151? 學(xué)院:電子工程學(xué)院
轉(zhuǎn)自:
https://blog.csdn.net/wangkaiming123456/article/details/80518977
【嵌牛導(dǎo)讀】嵌入式linux 運行期間升級u-boot语婴,kernel和文件系統(tǒng)
【嵌牛鼻子】嵌入式linux 運行期間升級u-boot唐责,kernel和文件系統(tǒng)流程
【嵌牛提問】嵌入式linux如何在運行期間升級u-boot喇聊,kernel和文件系統(tǒng)
【嵌牛正文】
本文主要就是介紹牛柒,在嵌入式Linux 系統(tǒng)下泪蔫,已經(jīng)實現(xiàn)了nand 驅(qū)動后棒旗, 如何利用mtd 工具,進行在線升級u-boot撩荣,Linux和文件系統(tǒng)铣揉。
主要使用到的工具是mtd-utils-1.3.1,如果你需要源碼餐曹,可以到官網(wǎng)下載http://www.linux-mtd.infradead.org/source.html逛拱。也
在利用 mtd 工具升級系統(tǒng)前,需要有nand flash驅(qū)動.在目標(biāo)板上使用cat /proc/mtd 命令朽合。即可以看到你的mtd設(shè)備。
mtd-util? 饱狂,即 mtd?? 的 utilities? ,是 mtd? 相關(guān)的很多工具的總稱 嗡官,包括常用的mtdinfo,flash_erase, flash_eraseall, nanddump, nandwrite 等箭窜,每一個工具衍腥,基本上都對應(yīng)著一個同文件名的C 文件。
MTD 工具名稱??????? 功能簡介
flash_erase???? 擦除flash (nand 戒nor )的某個部分
flash_eraseall? 擦除整個mtd 的分區(qū)(某個nor 戒nand 分區(qū))
nanddump??????? 用亍查看當(dāng)前某個mtd分區(qū)的數(shù)據(jù)(nand的話,也支持顯示oob數(shù)據(jù))
nandwrite?????? 用亍將某個文件/數(shù)據(jù)婆咸,寫入到某個mtd 分區(qū)(的某個位置)
升級Uboot
1.? 擦除uboot 所在分區(qū)的所有數(shù)據(jù)
./util/flash_eraseall /dev/mtd0
2.擦除舊的uboot 的環(huán)境變量:
./util/flash_erase /dev/mtd1 0x700000 2
注:
A? .0x800000~0x900000? 即/dev/mtd1??? 中的 0x700000~0x800000,? 用亍存放 uboot
中的環(huán)境變量。
重新升級uboot 的同時尚骄,先把舊的環(huán)境變量擦除掉块差。
3.寫入uboot 數(shù)據(jù)
./util/nandwrite? -p? -s 0x80000 /dev/mtd0 u -boot_addHeader.bin
注:
A. -p 參數(shù)表示倔丈,如果要寫入的數(shù)據(jù)丌是頁大小的整數(shù)倍憨闰,會自己加填充數(shù)據(jù)即,如需要需五,
自動padding鹉动。
B. 0x80000 是當(dāng)前4K 的pagesize 的nand flash 的一個塊的大小。
升級Kernel
1.擦除舊的kernel 數(shù)據(jù)
./util/flash_erase /dev/mtd1 0 10
注:
A.? 其中的參數(shù)0 宏邮,表示從/dev/mtd1 起始位置開始擦除泽示。
B. 參數(shù)10 是表示要擦除的block 數(shù)目缸血。
/dev/mtd1? 的物理起始地址是 0x100000 ,而0x100000~0x600000 乊間械筛,是用亍保存
uImage 的數(shù)據(jù)捎泻,所以 :
要擦除的block 的數(shù)目
=要擦除的大小/塊大小
=0x500000/塊大小
=5M/512KB
=10
其中 ,當(dāng)前用的是這個4K pagesize 的nand 的塊大小是512KB埋哟。
2.寫入kernel 數(shù)據(jù)
./util/nandwrite? -p /dev/mtd1 uImage
升級rootfs
1.擦除rootfs 所在分區(qū)數(shù)據(jù)
./util/flash_eraseall /dev/mtd2
2.寫入新的rootfs
./util/nandwrite? -o /dev/mtd2 rootfs.4k.arm.yaffs2
注:
A.? 因為此處的rootfs 鏡像文件是yaffs2 文件系統(tǒng)族扰,包含了oob 數(shù)據(jù)。所以此處加上參數(shù)
-o 定欧,意思是寫入頁數(shù)據(jù)同時也寫入oob 數(shù)據(jù),而且怒竿,加了-o? 參數(shù)同時就丌能再像乊前的
uboot 和 uImage 一樣砍鸠,加-p 參數(shù)了,因為包含了oob 數(shù)據(jù)的 rootfs 耕驰,本身就是頁大小
的整數(shù)倍爷辱,丌需要padding。
B. 丌論實際使用的是4K+128? 還是對亍4K+218 (內(nèi)部處理為4K+192 )的nand 朦肘,此處
都是使用4K+128 的rootfs 鏡像饭弓。