一個(gè)簡(jiǎn)單的shell的軟件設(shè)計(jì)方法_第1頁(yè)
一個(gè)簡(jiǎn)單的shell的軟件設(shè)計(jì)方法_第2頁(yè)
一個(gè)簡(jiǎn)單的shell的軟件設(shè)計(jì)方法_第3頁(yè)
一個(gè)簡(jiǎn)單的shell的軟件設(shè)計(jì)方法_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、個(gè)簡(jiǎn)單的shell的軟件設(shè)計(jì)方法姓名:黃崇 學(xué)號(hào):131040061shell是操作系統(tǒng)提供給用戶操作的必備窗口,用戶通過這個(gè)窗口調(diào)用操作系統(tǒng)提供的服務(wù)。本文并不是在操作系統(tǒng)上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的shell,而是在單片機(jī)上用C語言編寫一個(gè)shell實(shí)現(xiàn)的框架,以闡述shell的工作原理。關(guān)鍵詞:shell單片機(jī)命令解析概述1、shell 概念Shell (命令解析器),它用于接收用戶輸入的命令,進(jìn)行解析,然后調(diào)用相 應(yīng)的應(yīng)用程序,為使用者提供了使用軟件的界面。shell是操作系統(tǒng)最外面的一層。shell管理你與操作系統(tǒng)之間的交互:等待你輸入,向操作系統(tǒng)解釋你的輸入,執(zhí)行相應(yīng)的應(yīng)用程序,并且輸出各種各

2、樣的處理結(jié)果。2、shell 分類按照界面類型,可以分為圖形界面shell和命令行式shell。即 GUI shell ),應(yīng)用圖形界面 shell ( Grap hical User In terface shell最為廣泛的 Windows Explorer(微軟的windows系列制作系統(tǒng)),還有也包括 廣為人知的 Linux shell,其中 linux shell 包括 X window manger (BlackBox和FluxBox),以及功能更強(qiáng)大的CDE GNOMEKDE XFCE命令行式 shell ( Comma nd Line In terface shell ,即 C

3、LI shell ),被廣泛熟知的有 bash / sh / ksh / csh( Unix/linux系統(tǒng))、cmd.exe(Windows XP系統(tǒng))、(DO系統(tǒng))。3、shell的運(yùn)行模式Shell的運(yùn)行模式可以分為:交互式和非交互式。交互式模式就是shell等待你的輸入,并且執(zhí)行你提交的命令。這種模式被 稱作交互式是因?yàn)閟hell與用戶進(jìn)行交互。這種模式也是大多數(shù)用戶非常熟悉的:登錄、執(zhí)行一些命令、簽退。當(dāng)你簽退后,shell也終止了。shell也可以運(yùn)行在另外一種模式:非交互式模式。在這種模式下,shell不與你進(jìn)行交互,而是讀取存放在文件(shell script ),并且執(zhí)行其中

4、的命令。當(dāng)它讀到文件的結(jié)尾,shell也就終止了。二、shell軟件功能需求分析1、本文的開發(fā)環(huán)境本文希望在單片機(jī)上運(yùn)行這個(gè) shell程序,單片機(jī)可以是STM32AVR等等,本文的測(cè)試是在S3C2440開發(fā)板上完成的。用戶輸入通常選用PC機(jī)的鍵盤,由于硬件運(yùn)行平臺(tái)是單片機(jī),就選用串口進(jìn)行交互數(shù)據(jù)的傳輸。軟件開發(fā)環(huán)境選用linux系統(tǒng)下的arm-linux-gcc交叉編譯工具鏈,該工具鏈功能強(qiáng)大,可配置性較集成開發(fā)環(huán)境尤其獨(dú)到之處。2、本文shell的基本功能要求本文目的在于實(shí)現(xiàn)一個(gè)簡(jiǎn)單的shell,功能不要求很多,但是要求完全描繪 出一個(gè)shell的工作原理和shell軟件結(jié)構(gòu)。有了這樣的軟

5、件結(jié)構(gòu),再向 shell里添加其他的功能,就好像做填空題一樣。簡(jiǎn)單的shell功能可支持的命令雖然很少,但是也要確定選擇哪些命令比較合適。實(shí)現(xiàn)這樣簡(jiǎn)單的命令最好不需要增添其他的外設(shè),比如說硬盤、網(wǎng)卡,利用最小的單片機(jī)系統(tǒng)就能搞定。這樣可以節(jié)省工作量,將主要精力集中到shell軟件結(jié)構(gòu)上,而不是具體命令的實(shí)現(xiàn)上。基于這樣的考慮,本文選擇echo (回 顯)、md(內(nèi)存顯示)和hello (打印“ hello world ”)三個(gè)命令作為測(cè)試。另 外,還必須提供shell必備的命令help或者?(打印所有命令的幫助信息)。而 且對(duì)于每一個(gè)命令,通過“ help+命令”的輸入打印單個(gè)命令的詳細(xì)信息。

6、三、shell軟件設(shè)計(jì)方案在shell運(yùn)行期間,無非涉及兩個(gè)模塊。一個(gè)模塊是等待用戶輸入,并把用戶輸入的字符保存起來。另外一個(gè)模塊,就是把之前保存的用戶輸入解析出來, 并且根據(jù)解析到的命令找到對(duì)應(yīng)的函數(shù)地址。 再根據(jù)用戶輸入命令的參數(shù),將參 數(shù)傳給這個(gè)函數(shù)地址,進(jìn)行函數(shù)調(diào)用。shell的核心是如何根據(jù)命令字符串,找到對(duì)應(yīng)的函數(shù)地址,這是一個(gè)算法問題。因?yàn)槊钭址鄬?duì)應(yīng)著一個(gè)函數(shù)地址, 需要將它們用一個(gè)數(shù)據(jù)結(jié)構(gòu)包含 在一起,所以也是一個(gè)數(shù)據(jù)結(jié)構(gòu)的問題。有什么樣的數(shù)據(jù)結(jié)構(gòu),就有什么樣的算法,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)成了關(guān)鍵。一個(gè)命 令的結(jié)構(gòu)體應(yīng)該包含這樣的內(nèi)容: 命令的名字、命令參數(shù)的最大個(gè)數(shù)、命令對(duì)應(yīng) 函

7、數(shù)的地址、命令的簡(jiǎn)要幫助信息、命令的詳細(xì)幫助信息。有了命令數(shù)據(jù)結(jié)構(gòu),在設(shè)計(jì)一個(gè)命令的時(shí)候,就將這些命令的必要信息提供好,然后將這些信息填充到它對(duì)應(yīng)的結(jié)構(gòu)體變量中。 最后,再將所有命名對(duì)應(yīng)的 結(jié)構(gòu)體變量保存在一個(gè)數(shù)據(jù)段中。 通過編譯器產(chǎn)生的參數(shù),我們可以掌握這個(gè)數(shù) 據(jù)段的起始地址和結(jié)束地址,從而知道命令數(shù)據(jù)段的長(zhǎng)度,進(jìn)而知道命令的個(gè)數(shù)。只要我們知道這個(gè)數(shù)據(jù)段的起始地址,因?yàn)槊罱Y(jié)構(gòu)體的長(zhǎng)度固定,我們就可以 準(zhǔn)確的遍歷整個(gè)命令數(shù)據(jù)段,找到匹配的命令。如果設(shè)計(jì)好這樣的命令數(shù)據(jù)結(jié)構(gòu),再來思考如何實(shí)現(xiàn)根據(jù)命令字符串找到對(duì)應(yīng)的函數(shù)地址,其實(shí)就是一個(gè)遍歷命令數(shù)據(jù)段的問題。 從命令數(shù)據(jù)段的開頭,拿所要找的命令

8、子?jì)D產(chǎn)依次與命令數(shù)據(jù)段中的每個(gè)命令結(jié)構(gòu)體進(jìn)行比較,直到找到 匹配的那個(gè)為止。找到了匹配的命令結(jié)構(gòu)體,也就找到了命令字符串對(duì)應(yīng)的調(diào)用 函數(shù)地址。四、shell軟件實(shí)現(xiàn)1、命令結(jié)構(gòu)體根據(jù)上一章節(jié)的分析,命令結(jié)構(gòu)體的實(shí)現(xiàn)代碼如下:struct cmd_tbl_s charn ame; /* Comma nd Name*/intmaxargs; /* maximum nu mber of argume nts*/* ImpI eme ntati on function*/int(*cmd)(struct cmd_tbl_s *, in t, i nt, char *);charusage;/* Usa

9、ge message (short)*/char*help;/* Help message (lo ng) */;其中,核心成員是命令對(duì)應(yīng)的函數(shù)指針 cmd cmd的參數(shù)有4個(gè)。第一個(gè)參數(shù)是當(dāng)前函數(shù)指針對(duì)應(yīng)的命令結(jié)構(gòu)體的地址, 傳遞這樣的參數(shù)的好處是命令函 數(shù)可以根據(jù)這個(gè)指針找到命令所有的信息, 為程序拓展帶來了方便。最后一個(gè)參 數(shù)是一個(gè)字符型指針,保存了輸入?yún)?shù)的存放地址,以供函數(shù)調(diào)用。2、讀取輸入函數(shù)讀取輸入函數(shù)名為readiine,這個(gè)函數(shù)就是將用戶的輸入按照一定的格式存儲(chǔ)到一個(gè)緩沖區(qū)console_buffer中,并且將用戶的輸入在返回到顯示界面中。當(dāng)用戶輸入Enter鍵的時(shí)候,這個(gè)函

10、數(shù)就認(rèn)為用戶輸入結(jié)束。3、查找并執(zhí)行命令的函數(shù)此函數(shù)的函數(shù)名為run_cmmand它通過調(diào)用查找命令函數(shù)find_cmd,將存 入緩沖區(qū)con sole buffer中的內(nèi)容逐一與命令數(shù)據(jù)存儲(chǔ)區(qū)中命令結(jié)構(gòu)體的命令字符串比較。如果完全匹配,就調(diào)用命令結(jié)構(gòu)體對(duì)應(yīng)的函數(shù),并傳入?yún)?shù)。五、shell軟件完善本文實(shí)現(xiàn)的簡(jiǎn)單shell軟件,功能還有待補(bǔ)充,比如說 使用環(huán)境變量保存用戶配置、Flash管理等等。但是,由于本文已將shell框架 搭好,再向其中添加其他的命令已經(jīng)變得非常容易。只需要新建一個(gè)實(shí)現(xiàn)新命令 的C源文件,然后將必要的頭文件加入,再編寫具體的命令實(shí)現(xiàn)代碼。下一步再 將新命令的信息填入到新

11、命令對(duì)應(yīng)的命令結(jié)構(gòu)體變量中,重新編譯執(zhí)行即可。出師表兩漢:諸葛亮先帝創(chuàng)業(yè)未半而中道崩殂,今天下三分,益州疲弊,此誠(chéng)危急存亡之秋也。然侍衛(wèi)之臣 不懈于內(nèi),忠志之士忘身于外者,蓋追先帝之殊遇,欲報(bào)之于陛下也。誠(chéng)宜開張圣聽,以光 先帝遺德,恢弘志士之氣,不宜妄自菲薄,引喻失義,以塞忠諫之路也。宮中府中,俱為一體;陟罰臧否,不宜異同。若有作奸犯科及為忠善者,宜付有司論其 刑賞,以昭陛下平明之理;不宜偏私,使內(nèi)外異法也。侍中、侍郎郭攸之、費(fèi)祎、董允等,此皆良實(shí),志慮忠純,是以先帝簡(jiǎn)拔以遺陛下:愚 以為宮中之事,事無大小,悉以咨之,然后施行,必能裨補(bǔ)闕漏,有所廣益。能”是以眾議舉寵為督:將軍向?qū)櫍孕惺缇?,曉暢軍事,試用于昔日,先帝稱之曰 愚以為營(yíng)中之事,悉以咨之,必能使行陣和睦,優(yōu)劣得所。親賢臣,遠(yuǎn)小人,此先漢所以興隆也; 親小人,遠(yuǎn)賢臣,此后漢所以傾頹也。 先帝在時(shí), 每與臣論此事,未嘗不嘆息痛恨于桓、 靈也。侍中、尚書、長(zhǎng)史、參軍,此悉貞良死節(jié)之臣,臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達(dá)于諸侯。先帝不以臣卑鄙,猥自枉 屈,三顧臣于草廬之中,咨臣以當(dāng)世之事,由是感激,遂許先帝以驅(qū)馳。后值傾覆,受任于 敗軍之際,奉命于危難之間,爾來二十有一年矣。先帝知臣謹(jǐn)慎,故臨崩寄臣以大事也。受命以來,夙夜憂嘆,恐托付不效,以傷先帝之 明;故五月渡瀘,深入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論