日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 网络在线升级,linux在线升级

發布時間:2023/12/1 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 网络在线升级,linux在线升级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//=======================================

前提信息:

1.系統分區信息

SPI-Flash:

[0] 0x000000000000-0x000000020000 : "SPL,128KB"

[1] 0x000000020000-0x0000000e0000 : "U-Boot,768KB"

[2] 0x0000000e0000-0x000000100000 : "U-Boot Env,128KB"

[3] 0x000000100000-0x000000200000 : "Reseved,1024KB"

Nand-Flash:

[4] 0x000000000000-0x000000500000 : "Kernel,5MB"

[5] 0x000000500000-0x000004500000 : "Rootfs,64MB"

[6] 0x000004500000-0x000010000000 : "Data,187MB"

#cat /proc/partitions

major minor? #blocks? name

31??????? 0??????? 128 mtdblock0

31??????? 1??????? 768 mtdblock1

31??????? 2??????? 128 mtdblock2

31??????? 3?????? 1024 mtdblock3

31??????? 4?????? 5120 mtdblock4

31??????? 5????? 65536 mtdblock5

31??????? 6???? 191488 mtdblock6

# cat /proc/mtd

dev:??? size?? erasesize? name

mtd0: 00020000 00001000 "SPL,128KB"

mtd1: 000c0000 00001000 "U-Boot,768KB"

mtd2: 00020000 00001000 "U-Boot Env,128KB"

mtd3: 00100000 00001000 "Reseved,1024KB"

mtd4: 00500000 00020000 "Kernel,5MB"

mtd5: 04000000 00020000 "Rootfs,64MB"

mtd6: 0bb00000 00020000 "Data,187MB"

2.用到以下工具,均在根文件系統里有,需要拷出來

注意:以下文件一定是解壓到在SDRAM中或Data分區[需要掛載在/dev/mtdblock6]中執行,否則影響rootfs的升級。

$ ls

flash_erase? flash_eraseall? nanddump? nandwrite

//=======================================

1.制作升級包update.tar.gz,解壓里面應該有

|-- update.sh

|-- uImage

|--?ubi.img

`--?util/

|-- flash_erase

`-- nandwrite

2.升級Kernel

/tmp/updatefile/util/flash_erase /dev/mtd4 0 0

/tmp/updatefile/util/nandwrite -p /dev/mtd4 /tmp/updatefile/$NAME_KERNEL

說明:-p參數,表示如果要寫入的數據不是頁大小的整數倍,會自己加填充數據即,如需要,自動padding

3.升級rootfs

升級rootfs的話,盡量把其他非內核必須的進程都關閉掉,防止在升級過程中,還有進程或和程序去讀取nand flash上的rootfs

方法一:以下兩條命令,不能使用reboot命令[直接斷電或看門狗]

/tmp/updatefile/util/flash_erase /dev/mtd5 0 0

/tmp/updatefile/util/nandwrite -p /dev/mtd5/tmp/updatefile/$NAME_ROOTFS

方法二:失敗!!

/tmp/updatefile/util/ubidetach -p /dev/mtd5

/tmp/updatefile/util/flash_erase /dev/mtd5 0 0

/tmp/updatefile/util/ubiformat?/dev/mtd5?-f?/tmp/updatefile/$NAME_ROOTFS

另外,發現有個更加好用的命令:

mtd_debug

# mtd_debug

usage: mtd_debug info mtd_debug read mtd_debug write mtd_debug erase

=================MLO的升級=======================

root@am335x-evm:/tmp#mtd_debug info /dev/mtd0

mtd.type = MTD_NORFLASH

mtd.flags = MTD_CAP_NORFLASH

mtd.size =131072(128K)

mtd.erasesize = 4096 (4K)

mtd.writesize = 1

mtd.oobsize = 0

regions = 0

root@am335x-evm:/tmp#mtd_debug erase /dev/mtd0 0131072【擦除整個分區】

Erased 131072 bytes from address 0x00000000 in flash

root@am335x-evm:/tmp# du -sh /tmp/MLO.byteswap

100.0K? /tmp/MLO.byteswap

root@am335x-evm:/tmp##ls -l MLO.byteswap | awk '{print $5}'

101169

root@am335x-evm:/tmp#mtd_debug write /dev/mtd0 0101169/tmp/MLO.byteswap【寫入新內容,寫入大小等于實際文件大小,否則出錯!】Copied 101169 bytes from /tmp/MLO.byteswap to address 0x00000000 in flash

=================U-boot的升級=======================

root@am335x-evm:/tmp#mtd_debug info /dev/mtd1

mtd.type = MTD_NORFLASH

mtd.flags = MTD_CAP_NORFLASH

mtd.size =786432(768K)

mtd.erasesize = 4096 (4K)

mtd.writesize = 1

mtd.oobsize = 0

regions = 0

root@am335x-evm:/tmp#mtd_debug erase /dev/mtd1 0786432?【擦除整個分區】

Erased 786432 bytes from address 0x00000000 in flash

root@am335x-evm:/tmp# ls -l /tmp/u-boot.img

-rw-r--r--??? 1 root???? root???????482400Jun 26 12:01 /tmp/u-boot.img

root@am335x-evm:/tmp#mtd_debug write /dev/mtd1 0482400/tmp/u-boot.img? ?【寫入新內容,寫入大小等于實際文件大小,否則出錯!】

Copied 482400 bytes from /tmp/u-boot.img to address 0x00000000 in flash

root@am335x-evm:/tmp#

參考資料:

//-------------------------------------------------------------------------------------------------

對于yaffs2系統(僅參考):

./util/nandwrite -o /dev/mtd2 rootfs.4k.arm.yaffs2

因為此處的rootfs鏡像文件是yaffs2文件系統,包含了oob數據。所以此處加上參數-o,意思是寫入頁數據同時也寫入oob數據,而且,加

了-o 參數同時就不能再像之前的uboot和uImage一樣,加-p參數了,因為包含了oob數據的rootfs,本身就是頁大小的整數倍,不需要

padding。

不論實際使用的是4K+128 還是對于4K+218(內部處理為4K+192)的nand,此處都是使用4K+128的rootfs鏡像。

//-------------------------------------------------------------------------------------------------

在燒寫某個文件之后,如果希望查看當前寫入的數據,是否是我們所期望的,那么可以用nanddump工具,將對應部分的數據“打印”出來,比

如:

查看uboot的第一page的數據:

./nanddump -l 0x1000 -s 0x80000 -p /dev/mtd0

//-------------------------------------------------------------------------------------------------

把東西放到ramdisk中以避免影響

之前遇到很多人問這個問題了。那就是,如果在升級的時候,由于也會升級rootfs,但是本身升級過程中,所利用到的文件,如果是放在rootfs中,豈

不是會導致系統崩潰了?

答案是,不會。因為我之前介紹的方法中,是把升級所需的mtd工具,放到U盤的。而U盤是單獨mount系統中的。

不過,更加好的做法是,把此處升級所相關的,所有的文件,包括mtd工具,要升級的各個文件,甚至其他可能用到的reboot等工具,設置是這些工具

可能依賴的到庫文件等等,都全部拷貝到ramdisk中。這樣,通過運行ramdisk中的所有工具,訪問ramdisk中的要升級的文件,去升級系統,就不會對

升級rootfs而有啥負面影響,也不會由于升級rootfs而可能導致任何的系統崩潰了

$cat update.sh

#!/bin/bash

# =============================================================

# Author???? : QiuWeibo

# Date????????? : 2014.5.12

# Version???? : V1.0.0

# Comment???? : For update aPM.MCU

#????????? 1.Support Kernel update

#????????? 2.Support Rootfs update

#????????? 3.Support Monitor App update

#

# =============================================================

# Author???? : QiuWeibo

# Date????????? : 2014.6.9

# Version???? : V1.0.1

# Comment???? : Add MLO and uboot update

#????????? 1.Support MLO update

#????????? 2.Support uboot update

# =============================================================

echo "firmware update shell start..."

UPDATE_MLO="Y"

UPDATE_UBOOT="Y"

UPDATE_KERNEL="Y"

UPDATE_ROOTFS="Y"

CLEAR_UBOOT_ENV="Y"

MONITOR_APP="Y"

NAME_MLO="MLO.byteswap"

NAME_UBOOT="u-boot.img"

NAME_KERNEL="uImage"

NAME_ROOTFS="ubi.img"

NAME_MONITOR="Monitor"

echo "?? UPDATE_MLO=$UPDATE_MLO=$NAME_MLO"

echo " UPDATE_UBOOT=$UPDATE_UBOOT=$NAME_UBOOT"

echo "UPDATE_KERNEL=$UPDATE_KERNEL=$NAME_KERNEL"

echo "UPDATE_ROOTFS=$UPDATE_ROOTFS=$NAME_ROOTFS"

echo "CLEAR_UBOOT_ENV=$CLEAR_UBOOT_ENV"

echo "MONITOR_APP=$MONITOR_APP"

rm -rf /var/ftp/pub/*.tar.gz

echo "end rm -rf /var/ftp/pub/*.tar.gz "

cd /tmp/

# ============== handle for Monitor App Update start============

case "$MONITOR_APP" in

Y )

cp -f /tmp/updatefile/$NAME_MONITOR /mnt/userfs/Monitor

echo "update /mnt/userfs/Monitor success"

;;

* )

echo "Monitor App do not update"

;;

esac

rm -rf /tmp/updatefile/$NAME_MONITOR

echo "end rm -rf /tmp/updatefile/$NAME_MONITOR "

# ============== handle for Monitor App Update end============

# ============== handle for MLO update start============

case "$UPDATE_MLO" in

Y )

filesize=`ls -l /tmp/updatefile/$NAME_MLO | awk '{print $5}'`

if [[ $filesize -gt 1024 ]];then

mtd_debug erase /dev/mtd0 0 131072

mtd_debug write /dev/mtd0 0 $filesize /tmp/updatefile/$NAME_MLO

echo "mtd_debug write /dev/mtd0 0 $filesize /tmp/updatefile/$NAME_MLO"

else

echo "/tmp/updatefile/$NAME_MLO error! filesize= $filesize lt 1024!"

fi

;;

* )

echo "MLO do not update"

;;

esac

rm -rf /tmp/updatefile/$NAME_MLO

echo "end rm -rf /tmp/updatefile/$NAME_MLO "

# ============== handle for MLO update end============

# ============== handle for Uboot update start============

case "$UPDATE_UBOOT" in

Y )

filesize=`ls -l /tmp/updatefile/$NAME_UBOOT | awk '{print $5}'`

if [[ $filesize -gt 1024 ]];then

mtd_debug erase /dev/mtd1 0 786432

mtd_debug write /dev/mtd1 0 $filesize /tmp/updatefile/$NAME_UBOOT

echo "mtd_debug write /dev/mtd1 0 $filesize /tmp/updatefile/$NAME_UBOOT"

else

echo "/tmp/updatefile/$NAME_UBOOT filesize error! $filesize lt 1024"

fi

;;

* )

echo "u-boot do not update"

;;

esac

rm -rf /tmp/updatefile/$NAME_UBOOT

echo "end rm -rf /tmp/updatefile/$NAME_UBOOT "

# ============== handle for Uboot update end============

# ============== handle for clear u-boot env start============

case "$CLEAR_UBOOT_ENV" in

Y )

flash_erase /dev/mtd2 0 0

echo "end clear uboot env at eraseall /dev/mtd2"

;;

* )

echo "uboot env do not erase!"

;;

esac

# ============== handle for clear u-boot env end============

# ============== handle for kernel update start============

case "$UPDATE_KERNEL" in

Y )

flash_erase /dev/mtd4 0 0

nandwrite -p /dev/mtd4 /tmp/updatefile/$NAME_KERNEL

echo "end nandwrite /tmp/updatefile/$NAME_KERNEL /dev/mtd4"

;;

* )

echo "KERNEL do not update"

;;

esac

rm -rf /tmp/updatefile/$NAME_KERNEL

echo "end rm -rf /tmp/updatefile/$NAME_KERNEL "

# ============== handle for kernel update end============

# ============== handle for rootfs update start============

case "$UPDATE_ROOTFS" in

Y )

if [ -e "/tmp/updatefile/util/flash_erase" ] && [ -e "/tmp/updatefile/util/nandwrite" ];then

/tmp/updatefile/util/flash_erase /dev/mtd5 0 0

/tmp/updatefile/util/nandwrite -p /dev/mtd5 /tmp/updatefile/$NAME_ROOTFS

echo "end nandwrite /tmp/updatefile/$NAME_ROOTFS /dev/mtd5"

else

echo "/tmp/updatefile/util/flash_erase or nandwrite not exist! error"

fi

;;

* )

echo "rootfs do not update"

;;

esac

rm -rf /tmp/updatefile/

echo "end rm -rf /tmp/updatefile/ "

# ============== handle for rootfs update end============

rm -rf /tmp/rarlist.txt/

echo "end rm -rf /tmp/rarlist.txt/ "

rm -rf /tmp/update.sh/

echo "end rm -rf /tmp/update_firmware.sh/ "

echo "firmware update shell end"

總結

以上是生活随笔為你收集整理的linux 网络在线升级,linux在线升级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。