国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于嵌入式Linux系統(tǒng)的一鍵安全升級(jí)方法

2023-11-07 11:36:04李龍杰李競(jìng)擇李澤銀
電腦知識(shí)與技術(shù) 2023年26期
關(guān)鍵詞:內(nèi)核校驗(yàn)命令

李龍杰,李競(jìng)擇,李澤銀

(中國(guó)兵器裝備集團(tuán)自動(dòng)化研究所有限公司,四川綿陽(yáng) 621000)

傳統(tǒng)的嵌入式linux系統(tǒng)升級(jí)過(guò)程中,首次升級(jí)通常使用串口或者專(zhuān)用燒寫(xiě)設(shè)備將bootloader 燒寫(xiě)至目標(biāo)板的flash中作為基礎(chǔ)程序,然后通過(guò)該基礎(chǔ)程序?qū)?nèi)核以及文件系統(tǒng)升級(jí),該過(guò)程均通過(guò)網(wǎng)絡(luò)下載至內(nèi)存中,然后燒寫(xiě)至flash 完成。在首次flash 成功燒寫(xiě)映像后,后續(xù)對(duì)所有映像的升級(jí)均可在bootloader 或linux 系統(tǒng)下使用網(wǎng)絡(luò)下載命令結(jié)合flash 擦寫(xiě)命令共同完成。

上述無(wú)論是在bootloader 還是linux 系統(tǒng)下,升級(jí)任何程序都會(huì)經(jīng)歷網(wǎng)絡(luò)下載、擦除flash 分區(qū)、寫(xiě)映像到flash 分區(qū)的過(guò)程。這種升級(jí)方式首先由于是手動(dòng)單步完成,需要升級(jí)人員對(duì)操作命令以及對(duì)系統(tǒng)分區(qū)(擦寫(xiě)固定地址及大小的)熟悉,這增加了升級(jí)難度,特別是有需求升級(jí)多映像多分區(qū)時(shí),極易出錯(cuò)。其次網(wǎng)絡(luò)下載映像后,沒(méi)有任何校驗(yàn)檢查映像是否損壞就直接寫(xiě)入分區(qū),若映像下載過(guò)程中損壞或者出錯(cuò),則會(huì)直接導(dǎo)致升級(jí)后設(shè)備不可用的風(fēng)險(xiǎn),特別是升級(jí)bootloader 出錯(cuò)時(shí),將導(dǎo)致設(shè)備無(wú)法啟動(dòng),風(fēng)險(xiǎn)極大。最后,在bootloader 和linux 系統(tǒng)下保留了這些升級(jí)必要的flash 擦寫(xiě)命令,將給系統(tǒng)帶來(lái)極大的安全隱患,如系統(tǒng)維護(hù)人員誤操作擦除或?qū)懭肓薴lash某區(qū)塊,誤操作系統(tǒng)所在分區(qū)將導(dǎo)致系統(tǒng)無(wú)法啟動(dòng),誤操作文件系統(tǒng)所在分區(qū)將導(dǎo)致文件丟失,造成系統(tǒng)運(yùn)行異常,更有甚者將遭到商務(wù)競(jìng)爭(zhēng)對(duì)手進(jìn)入設(shè)備后對(duì)設(shè)備的破壞或惡意升級(jí)。本文將結(jié)合某工程中使用的uboot 作為bootloader 以及l(fā)inux2.6 內(nèi)核作為參考,介紹了一種將手動(dòng)升級(jí)過(guò)程進(jìn)行整合且裁剪系統(tǒng)級(jí)相關(guān)升級(jí)命令的方法,成功解決了手動(dòng)單步執(zhí)行繁雜易出錯(cuò)、升級(jí)映像可靠性不明確、安全性較低的問(wèn)題。

1 嵌入式linux系統(tǒng)簡(jiǎn)介

嵌入式linux 系統(tǒng)軟件部分主要包含bootloader、linux 內(nèi)核、文件系統(tǒng)[1]。bootloader 是嵌入式板卡CPU上電后執(zhí)行的第一段代碼,通常CPU會(huì)根據(jù)配置在啟動(dòng)引腳上的電平組合方式?jīng)Q定從NAND FLASH、NOR FLASH 還是網(wǎng)絡(luò)等啟動(dòng)。bootloader 的主要功能是完成基本硬件初始化(如內(nèi)存、調(diào)試串口、網(wǎng)絡(luò)等外設(shè))、鏡像的搬移(將bootloder、內(nèi)核、文件系統(tǒng)拷貝至內(nèi)存中),并跳轉(zhuǎn)到內(nèi)核處執(zhí)行。內(nèi)核是操作系統(tǒng)核心,負(fù)責(zé)系統(tǒng)的進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、網(wǎng)絡(luò)功能、硬件驅(qū)動(dòng)、安全機(jī)制等[2]??筛鶕?jù)自身需要定制編譯的內(nèi)核運(yùn)行更快具有更少更簡(jiǎn)化的代碼[3]。文件系統(tǒng)定義了文件組成方式、存儲(chǔ)方式以及查找方式等。Linux常見(jiàn)的文件系統(tǒng)包括磁盤(pán)的文件系統(tǒng),如ext2、ext3、ext4、XFS、JFS、NTFS 等,閃存文件系統(tǒng),如JFFS2、YAFFS等,特殊用途的文件系統(tǒng),如sysfs、tmpfs、squashfs 等。嵌入式linux系統(tǒng)啟動(dòng)過(guò)程如圖1所示。

圖1 Linux啟動(dòng)過(guò)程

2 方案設(shè)計(jì)與實(shí)現(xiàn)

2.1 總體方案設(shè)計(jì)

當(dāng)前目標(biāo)板提供了128MB的NAND FLASH,筆者將系統(tǒng)劃分為6個(gè)分區(qū),分區(qū)名以及功能如表1。

表1 系統(tǒng)分區(qū)情況

該方案將系統(tǒng)設(shè)計(jì)為雙分區(qū)系統(tǒng),mtd0存儲(chǔ)的是uboot 鏡像,mtd1存儲(chǔ)uboot 運(yùn)行過(guò)程中使用的環(huán)境變量,其中,mtd2 和mtd3 兩個(gè)分區(qū)互為工作區(qū)和備份區(qū),增強(qiáng)設(shè)備可靠性,一般升級(jí)過(guò)程中僅升級(jí)備份區(qū),升級(jí)完成后,備份區(qū)切換為工作區(qū),工作區(qū)切換為備份區(qū)。mtd5分區(qū)存儲(chǔ)設(shè)備硬件形態(tài)關(guān)鍵數(shù)據(jù),軟件通過(guò)建立硬件抽象層識(shí)別和操作這些硬件,對(duì)上層軟件屏蔽了硬件形態(tài)差異,實(shí)現(xiàn)多形態(tài)硬件兼容。

針對(duì)上述分區(qū)設(shè)計(jì)情況,筆者首先實(shí)現(xiàn)了一個(gè)自編寫(xiě)命令行打包工具,該工具將所有需要升級(jí)的映像打包為一個(gè)映像,該映像奠定了一鍵安全升級(jí)的基礎(chǔ)。映像包含一個(gè)頭,記錄了文件所包含的固件類(lèi)型、大小、位置、校驗(yàn)和、廠商信息、版本信息等內(nèi)容,如下所示:

在uboot 和linux 系統(tǒng)下分別實(shí)現(xiàn)一個(gè)升級(jí)命令,該升級(jí)命令實(shí)現(xiàn)了映像的下載、校驗(yàn)、識(shí)別、flash 擦除、flash寫(xiě)入、分區(qū)切換功能,可實(shí)現(xiàn)映像的一鍵下載及升級(jí)。同時(shí),筆者裁剪掉了uboot 和linux 系統(tǒng)下的flash相關(guān)操作命令以及ftp、tftp下載命令,所有的升級(jí)映像下載均在自編寫(xiě)升級(jí)命令中用代碼實(shí)現(xiàn)。

2.2 映像打包

自編寫(xiě)程序打包工具是一個(gè)在linux虛擬機(jī)上運(yùn)行的命令行工具,名稱(chēng)為”fw_pack”,使用方法如圖2所示。

該工具根據(jù)傳入的命令參數(shù)將升級(jí)固件uboot、uImage、rootfs 等打包為一個(gè)大的映像文件,該文件包含如前面描述的一個(gè)文件頭。打包并發(fā)布固件時(shí),僅支持五類(lèi)文件,如表2所示。

圖2 打包工具用法

表2 文件類(lèi)型

根據(jù)需要升級(jí)的內(nèi)容添加或裁減命令行參數(shù),可打包成不同的映像。如需打包fw_all.bin,首先將uboot、uImage、rootfs 拷貝至打包工具所在目錄,然后執(zhí)行命令“fw_pack-t 4-u uboot.bin-k uImage-r rootfs.bin”,命令執(zhí)行后,將根據(jù)傳入的參數(shù)把所有文件信息填充到映像頭對(duì)應(yīng)域,然后將合并成一個(gè)bin文件,合并后的文件計(jì)算MD5校驗(yàn)和并填充在映像頭的ucMd5Sum域。最后在命令行工具所在目錄輸出對(duì)應(yīng)的fw_all.bin。打包后,fw_all.bin文件映像結(jié)構(gòu)如表3所示(這里假定所有文件大小均為1Mbytes):

表3 映像結(jié)構(gòu)說(shuō)明

2.3 升級(jí)過(guò)程

在uboot 和linux 系統(tǒng)下分別實(shí)現(xiàn)一個(gè)升級(jí)命令,名稱(chēng)為upgrade,使用用法如圖3所示。

圖3 升級(jí)命令

執(zhí)行升級(jí)命令后,升級(jí)程序根據(jù)傳入?yún)?shù)從對(duì)應(yīng)的ftp 服務(wù)器上下載指定文件名的映像,下載成功后將對(duì)映像的廠商以及校驗(yàn)和進(jìn)行合法性檢查,通過(guò)后寫(xiě)入映像包含的內(nèi)容到參數(shù)指定分區(qū)。升級(jí)成功后根據(jù)傳入?yún)?shù)決定是否重啟設(shè)備,若需重啟,則立即重啟設(shè)備。升級(jí)過(guò)程如圖4所示。

由上述過(guò)程可以看出,無(wú)論需要升級(jí)系統(tǒng)哪些內(nèi)容,只有一個(gè)升級(jí)文件,且升級(jí)過(guò)程全由程序代碼邏輯控制,無(wú)任何人為干擾因素,提高了升級(jí)過(guò)程的自動(dòng)化水平。并且在升級(jí)時(shí)對(duì)升級(jí)映像進(jìn)行廠商合法性校驗(yàn)以及對(duì)整個(gè)影響進(jìn)行校驗(yàn)和檢驗(yàn),當(dāng)且僅當(dāng)兩層校驗(yàn)通過(guò)時(shí)才開(kāi)始升級(jí)操作,提高了升級(jí)過(guò)程的安全性,防止設(shè)備開(kāi)發(fā)或維護(hù)人員的誤操作或來(lái)自競(jìng)爭(zhēng)對(duì)手的惡意升級(jí)。實(shí)現(xiàn)升級(jí)程序后,將uboot 下和系統(tǒng)下關(guān)于flash 的所有操作命令以及程序下載命令全部刪除,即該升級(jí)工具是實(shí)現(xiàn)升級(jí)功能的唯一通道。

2.4 uboot引導(dǎo)

如表1所示,系統(tǒng)采用雙分區(qū)系統(tǒng),且兩個(gè)分區(qū)互為工作區(qū)和備份區(qū),uboot 默認(rèn)情況下將引導(dǎo)啟動(dòng)工作區(qū)系統(tǒng),如果工作區(qū)系統(tǒng)損壞,則引導(dǎo)啟動(dòng)備份區(qū)系統(tǒng)。那么uboot 如何檢測(cè)到工作區(qū)系統(tǒng)損壞?通常情況下,uboot 在將flash中的linux 內(nèi)核和根文件系統(tǒng)加載到內(nèi)存后,跳轉(zhuǎn)執(zhí)行內(nèi)核前,將計(jì)算一次內(nèi)核校驗(yàn)和,校驗(yàn)通過(guò)則啟動(dòng)內(nèi)核,校驗(yàn)不通過(guò)則放棄啟動(dòng)[4]。這就為雙分區(qū)系統(tǒng)設(shè)計(jì)提供了可能,但這樣的設(shè)計(jì)顯然有問(wèn)題,當(dāng)存儲(chǔ)根文件系統(tǒng)的flash區(qū)域存在壞塊或根文件系統(tǒng)遭遇破壞時(shí),系統(tǒng)啟動(dòng)時(shí)無(wú)法成功掛載根文件系統(tǒng),導(dǎo)致設(shè)備無(wú)法啟動(dòng)。在使用本方案設(shè)置的系統(tǒng)中,將增加對(duì)根文件系統(tǒng)的校驗(yàn),內(nèi)核的校驗(yàn)和可由mkimage生成,但根文件系統(tǒng)的校驗(yàn)則沒(méi)有對(duì)應(yīng)工具可生成。因此,通過(guò)自編寫(xiě)根文件生成工具在根文件系統(tǒng)文件前加上固定幀頭,幀頭中就存儲(chǔ)了根文件系統(tǒng)的校驗(yàn)和,當(dāng)且僅當(dāng)內(nèi)核和根文件系統(tǒng)均校驗(yàn)通過(guò)后,啟動(dòng)內(nèi)核,uboot 引導(dǎo)啟動(dòng)過(guò)程如圖5所示。

圖4 升級(jí)過(guò)程

圖5 uboot引導(dǎo)過(guò)程

3 測(cè)試驗(yàn)證

筆者根據(jù)使用場(chǎng)景以及本升級(jí)方法重點(diǎn)解決的問(wèn)題設(shè)計(jì)了以下幾種測(cè)試案例,案例中均使用fw_all.bin同時(shí)升級(jí)雙分區(qū)的方式進(jìn)行:

1)升級(jí)映像不做任何修改,觀察是否成功升級(jí)。

2)更改升級(jí)映像廠商名為0x12345678,觀察是否成功升級(jí)

3) 更改升級(jí)映像校驗(yàn)和為0xFFFFFFFF,觀察是否成功升級(jí)。

測(cè)試結(jié)果見(jiàn)表4。

表4 測(cè)試結(jié)果

4 結(jié)束語(yǔ)

本文介紹了一種在uboot 以及l(fā)inux 系統(tǒng)下,將所有系統(tǒng)升級(jí)內(nèi)容、升級(jí)過(guò)程進(jìn)行整合,并結(jié)合裁剪系統(tǒng)級(jí)相關(guān)升級(jí)命令的方式,達(dá)到一鍵升級(jí)、安全升級(jí)的目的[5]。該方法增加了升級(jí)過(guò)程的自動(dòng)化程度及安全性,可大大提高設(shè)備維護(hù)人員對(duì)設(shè)備的升級(jí)效率,更能防止競(jìng)爭(zhēng)對(duì)手對(duì)設(shè)備的惡意升級(jí)。同時(shí)本系統(tǒng)設(shè)計(jì)為雙分區(qū)系統(tǒng),增加了設(shè)備的使用壽命以及遠(yuǎn)程升級(jí)的安全性。該方法具有普遍適用性,可供其他嵌入式開(kāi)發(fā)者參考使用。

猜你喜歡
內(nèi)核校驗(yàn)命令
萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
只聽(tīng)主人的命令
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
移防命令下達(dá)后
爐溫均勻性校驗(yàn)在鑄鍛企業(yè)的應(yīng)用
這是人民的命令
大型電動(dòng)機(jī)高阻抗差動(dòng)保護(hù)穩(wěn)定校驗(yàn)研究
基于加窗插值FFT的PMU校驗(yàn)方法
柘城县| 高州市| 察隅县| 嵩明县| 遂平县| 德钦县| 通榆县| 来宾市| 土默特右旗| 息烽县| 桃园市| 新郑市| 区。| 五家渠市| 安义县| 璧山县| 潼南县| 巴南区| 贺州市| 尉氏县| 启东市| 新晃| 汨罗市| 揭西县| 浦江县| 新河县| 邢台市| 华池县| 延津县| 博客| 宁都县| 易门县| 安溪县| 乃东县| 黑河市| 长丰县| 汉川市| 兴安县| 绥宁县| 南陵县| 循化|