某網(wǎng)上書店系統(tǒng)分析報(bào)告書(帶圖)_第1頁(yè)
某網(wǎng)上書店系統(tǒng)分析報(bào)告書(帶圖)_第2頁(yè)
某網(wǎng)上書店系統(tǒng)分析報(bào)告書(帶圖)_第3頁(yè)
某網(wǎng)上書店系統(tǒng)分析報(bào)告書(帶圖)_第4頁(yè)
某網(wǎng)上書店系統(tǒng)分析報(bào)告書(帶圖)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、某網(wǎng)上書店系統(tǒng)分析報(bào)告書 報(bào)告簡(jiǎn)介本報(bào)告在某網(wǎng)上書店系統(tǒng)規(guī)劃報(bào)告的基礎(chǔ)上,對(duì)要實(shí)現(xiàn)的電子商務(wù)系統(tǒng)進(jìn)行需求調(diào)查,使用UML用例圖和活動(dòng)圖來(lái)描述調(diào)查得到的需求。然后,對(duì)調(diào)查得到的需求進(jìn)行詳細(xì)的分析和描述,編寫需求模型報(bào)告。 本報(bào)告還要根據(jù)形成的需求模型一步步得到分析模型,使用類圖和協(xié)作圖來(lái)分析各個(gè)用例,畫出系統(tǒng)的分析類和用例實(shí)現(xiàn)過(guò)程,編寫分析模型報(bào)告。2 建立需求模型概述2.1 建立用例模型的體系結(jié)構(gòu)圖根據(jù)對(duì)某網(wǎng)上書店系統(tǒng)規(guī)劃報(bào)告中功能模塊的分析,結(jié)合對(duì)實(shí)際電子商務(wù)系統(tǒng)的調(diào)查,最終得出系統(tǒng)的體系結(jié)構(gòu)圖。該網(wǎng)上書店體系結(jié)構(gòu)圖如下圖所示。訂單管理訂單管理圖書管理管理員登錄圖書選購(gòu)用戶注冊(cè)用戶登錄購(gòu)物車

2、管理查看訂購(gòu)網(wǎng)上書店用戶子系統(tǒng)管理員子系統(tǒng)圖1 “網(wǎng)上書店”體系結(jié)構(gòu)圖在UML中,這種體系結(jié)構(gòu)的表現(xiàn)方式是通過(guò)分組元素(即包元素)來(lái)實(shí)現(xiàn)的,在Rational Rose中應(yīng)該按如下步驟建立該需求體系結(jié)構(gòu)。首先在Rational Rose的Use Case View中的Main用例圖中使用 建立“網(wǎng)上書店系統(tǒng)”包,如下圖2所示。圖2 “網(wǎng)上書店系統(tǒng)”包然后雙擊該包圖,進(jìn)入下一級(jí)用例圖中,建立“管理員子系統(tǒng) ”和“用戶子系統(tǒng) ”兩個(gè)包,再分別雙擊兩個(gè)包,進(jìn)入相應(yīng)的包以建立下一級(jí)結(jié)構(gòu),最終得到系統(tǒng)的體系結(jié)構(gòu)。用例模型的體系結(jié)構(gòu)圖如圖3所示。圖3 用例模型的體系結(jié)構(gòu)圖2.2 用例圖的畫法建立了用例模型

3、的體系結(jié)構(gòu)圖之后,下面以用戶子系統(tǒng)的“圖書選購(gòu)”功能為例介紹用例圖的畫法。在“圖書選購(gòu)”上單擊右鍵,建立“圖書選購(gòu)”用例圖,如圖4所示。圖4 創(chuàng)建“圖書選購(gòu)”用例圖在這個(gè)用例中,有一個(gè)參與者(即顧客)和一個(gè)用例(即圖書選購(gòu)),根據(jù)分析可知,“圖書選購(gòu)”用例可以分解成兩個(gè)用例,即“瀏覽圖書”和“加入購(gòu)物車”,最終得到用例圖“圖書選購(gòu)”,如圖5所示。圖5 “圖書選購(gòu)”用例圖創(chuàng)建“圖書選購(gòu)”活動(dòng)圖 在上述步驟中僅僅畫出“圖書選購(gòu)”的用例圖,是不能夠準(zhǔn)確地表達(dá)“圖書選購(gòu)”這一用例的商業(yè)流程的,還需要對(duì)這一用例進(jìn)行解釋和說(shuō)明,活動(dòng)圖就是一個(gè)對(duì)用例進(jìn)行解釋說(shuō)明的很好的工具,下面是創(chuàng)建“圖書選購(gòu)”活動(dòng)圖的過(guò)

4、程。 首先在“圖書選購(gòu)”包中通過(guò)單擊右鍵創(chuàng)建“圖書選購(gòu)”活動(dòng)圖,如圖6所示。圖6 創(chuàng)建“圖書選購(gòu)”活動(dòng)圖然后根據(jù)需求調(diào)查的結(jié)果,畫出活動(dòng)圖。使用泳道 來(lái)區(qū)分活動(dòng)的發(fā)出者,如圖7所示。圖中的 和 分別表示用例的啟動(dòng)和終止。要注意區(qū)分圖中狀態(tài)機(jī)的圖標(biāo) 和活動(dòng)圖中活動(dòng)圖標(biāo) 的不同, 用來(lái)表示一個(gè)個(gè)的活動(dòng)。圖7 “圖書選購(gòu)”活動(dòng)圖接下來(lái)的工作是對(duì)用例進(jìn)行描述,也就是對(duì)需求進(jìn)行文檔化描述。事實(shí)上有許多種描述方法,既可以只用一段自然文字和使用結(jié)構(gòu)化的一段文字描述,也可以使用圖形進(jìn)行描述(事實(shí)上,活動(dòng)圖就是對(duì)用例的一種描述)。下面通過(guò)使用給出的用例的文檔化模版對(duì)用例進(jìn)行描述,用例描述如下: 3 圖書選購(gòu)3.

5、1 簡(jiǎn)單描述 本用例允許用戶在線選購(gòu)圖書3.2 前置條件 用戶選書前必須登陸3.3 后置條件 用戶選擇自己需要的圖書,并將其添加到購(gòu)物車中3.4 事件流 3.4.1 基流 當(dāng)用戶想要進(jìn)行圖書選購(gòu)時(shí),用例啟動(dòng) (1)用戶單擊選擇選書頁(yè)面 (2)系統(tǒng)顯示圖書列表 (3)用戶提出選購(gòu)圖書 (4)系統(tǒng)檢查是否缺貨(E-1),購(gòu)物車中加入相應(yīng)的圖書信息 3.4.2 替代流 E-1:缺貨時(shí),屏幕顯示缺貨信息頁(yè)面。用戶選擇缺貨策略(放棄還是等待直到有貨)在給出的用例文檔化模版中,前置條件說(shuō)明了用例開始前應(yīng)該使系統(tǒng)所處的狀態(tài),后置條件說(shuō)明了用例結(jié)束后對(duì)系統(tǒng)的改變?;饕步凶鍪录某晒α鳎f(shuō)明了在整個(gè)過(guò)程中沒(méi)有

6、任何錯(cuò)誤的情況下用例的事件流程。實(shí)際上,作為用例描述,應(yīng)該可以在用例模型中顯示,Rational Rose在用例中添加了用例描述的功能。用戶雙擊用例“圖書選購(gòu)”圖標(biāo),得到它的細(xì)節(jié)界面,如圖8所示。圖8 添加用例描述在Documentation文本框中添加用例的描述和非功能性需求。對(duì)體系結(jié)構(gòu)中的每個(gè)包的每個(gè)元素都做完以上幾項(xiàng)(即用例圖、活動(dòng)圖和用例)描述之后,就基本完成了需求模型的建立。這里說(shuō)基本并不是完全的意思,即在系統(tǒng)的開發(fā)進(jìn)程中發(fā)現(xiàn)一些新的需求和描述不正確的需求時(shí),可繼續(xù)在此基礎(chǔ)上對(duì)其進(jìn)行修改和維護(hù)。 建立需求模型的詳細(xì)步驟3.1 “用戶注冊(cè)”模塊1)使用用例圖“用戶注冊(cè)”用例圖如圖9所示

7、圖9 “用戶注冊(cè)”用例圖2)使用活動(dòng)圖“用戶注冊(cè)”活動(dòng)圖如圖10所示圖10 “用戶注冊(cè)”活動(dòng)圖3)進(jìn)行需求描述1 “用戶注冊(cè)” 1.1 簡(jiǎn)單描述 本用例用于用戶的注冊(cè)和個(gè)人信息的填寫 1.2 前置條件 無(wú) 1.3 后置條件 用例成功后,添加一名新用戶 1.4 “事件流” 1.4.1 基流 當(dāng)用戶希望注冊(cè)個(gè)人信息以使用本系統(tǒng)時(shí),用例啟動(dòng) (1)系統(tǒng)轉(zhuǎn)到用戶注冊(cè)頁(yè)面,提示用戶輸入個(gè)人信息 (2)用戶輸入個(gè)人信息 (3)系統(tǒng)檢查信息是否由有效(E-1)(是否已注冊(cè),郵箱是否可用,密碼是否過(guò)于簡(jiǎn)單),將信息存入數(shù)據(jù)庫(kù) 1.4.2 替代流 E-1:如果用戶輸入的注冊(cè)信息無(wú)效,系統(tǒng)顯示錯(cuò)誤信息并轉(zhuǎn)到錯(cuò)誤頁(yè)

8、面,用戶重新填寫信息;或者取消注冊(cè),用例結(jié)束 3.2 “用戶登陸”模塊1)使用用例圖“用戶登陸”用例圖如圖11所示圖11 “用戶登陸”用例圖2)使用活動(dòng)圖“用戶登陸”活動(dòng)圖如圖10所示圖12“用戶登陸”活動(dòng)圖3)進(jìn)行需求描述2 “用戶登陸” 2.1 簡(jiǎn)單描述 本用例用于用戶登陸系統(tǒng) 2.2 前置條件 無(wú) 2.3 后置條件 用例成功后,用戶登陸進(jìn)入系統(tǒng) 2.4 事件流 2.4.1 基流 當(dāng)用戶提出登陸進(jìn)入系統(tǒng)請(qǐng)求時(shí),用例啟動(dòng) (1)系統(tǒng)轉(zhuǎn)到用戶登陸頁(yè)面,提示用戶輸入用戶名和密碼 (2)用戶填寫用戶名和密碼信息 (3)系統(tǒng)驗(yàn)證輸入的用戶名和密碼,若正確(E-1),則轉(zhuǎn)到首頁(yè),系統(tǒng)激活這一用戶 2.

9、4.2 替代流 E-1:如果用戶輸入無(wú)效的用戶名和(/或)密碼,系統(tǒng)顯示錯(cuò)誤信息。用戶可以選擇返回基流的起始點(diǎn),重新輸入正確的用戶名和(/或)密碼;或者取消登陸,用例結(jié)束 “圖書選購(gòu)”模塊1)使用用例圖“圖書選購(gòu)”用例圖如圖13所示圖13“圖書選購(gòu)”用例圖2)使用活動(dòng)圖“圖書選購(gòu)”活動(dòng)圖如圖14所示圖14“圖書選購(gòu)”活動(dòng)圖3)進(jìn)行需求描述3 圖書選購(gòu)3.1 簡(jiǎn)單描述 本用例允許用戶在線選購(gòu)圖書3.2 前置條件 用戶選書前必須登陸3.3 后置條件 用戶選擇自己需要的圖書,并將其添加到購(gòu)物車中3.4 事件流 3.4.1 基流 當(dāng)用戶想要進(jìn)行圖書選購(gòu)時(shí),用例啟動(dòng) (1)用戶單擊選擇選書頁(yè)面 (2)系

10、統(tǒng)顯示圖書列表 (3)用戶提出選購(gòu)圖書 (4)系統(tǒng)檢查是否缺貨(E-1),購(gòu)物車中加入相應(yīng)的圖書信息 3.4.2 替代流 E-1:缺貨時(shí),屏幕顯示缺貨信息頁(yè)面。用戶選擇缺貨策略(放棄還是等待直到有貨) “購(gòu)物車管理”模塊 1)使用用例圖“購(gòu)物車管理”用例圖如圖15所示圖15“購(gòu)物車管理”用例圖2)使用活動(dòng)圖“購(gòu)物車管理”活動(dòng)圖如圖16所示圖16“購(gòu)物車管理”活動(dòng)圖3)進(jìn)行需求描述4 “購(gòu)物車管理” 4.1 簡(jiǎn)單描述 本用例用于用戶管理購(gòu)物車 4.2 前置條件 用戶需登陸系統(tǒng) 4.3 后置條件 用例成功后,購(gòu)物車中商品狀態(tài)發(fā)生變化 4.4 事件流 4.4.1 基流 當(dāng)用戶提出管理購(gòu)物車時(shí),用例啟

11、動(dòng) (1)系統(tǒng)轉(zhuǎn)到購(gòu)物車管理頁(yè)面 (2)用戶提出所要執(zhí)行的操作 如果用戶需要添加圖書,則執(zhí)行分支流S-1:添加圖書 如果用戶需要?jiǎng)h除圖書,則執(zhí)行分支流S-2:刪除圖書 4.4.2 分支流 S-1:添加圖書 用戶輸入書號(hào),購(gòu)物車中加入相應(yīng)圖書 S-2:刪除圖書 用戶單擊刪除按鈕,相應(yīng)的圖書被刪除 “查看訂單”模塊 1)使用用例圖“查看訂單”用例圖如圖17所示圖17“查看訂單”用例圖2)使用活動(dòng)圖“查看訂單”活動(dòng)圖如圖18所示圖18“查看訂單”活動(dòng)圖3)進(jìn)行需求描述 5 “查看訂單”5.1 簡(jiǎn)單描述 本用例用于用戶查看訂單5.2 前置條件 用戶登陸5.3 后置條件 用例成功后,列出所有符合該用戶的

12、訂單5.4 事件流 5.4.1 基流 當(dāng)用戶提出查看訂單時(shí),用例啟動(dòng) 系統(tǒng)列出所有符合該用戶要求的訂單“管理員登陸”模塊 1)使用用例圖“管理員登陸”用例圖如圖19所示圖19“管理員登陸”用例圖2)使用活動(dòng)圖“管理員登陸”活動(dòng)圖如圖20所示圖20“管理員登陸”活動(dòng)圖3)進(jìn)行需求描述8 “管理員登陸” 8.1 簡(jiǎn)單描述 本用例用于管理員登陸系統(tǒng) 8.2 前置條件 無(wú) 8.3 后置條件 用例成功后,管理員登陸進(jìn)入系統(tǒng) 8.4 事件流 8.4.1 基流 當(dāng)管理員提出登陸進(jìn)入系統(tǒng)請(qǐng)求時(shí),用例啟動(dòng) (1)系統(tǒng)轉(zhuǎn)到管理員登陸頁(yè)面,提示用戶輸入用戶名和密碼 (2)管理員填寫用戶名和密碼信息 (3)系統(tǒng)驗(yàn)證輸

13、入的用戶名和密碼,若正確(E-1),則轉(zhuǎn)到首頁(yè),系統(tǒng)激活這一用戶 8.4.2 替代流 E-1:如果管理員輸入無(wú)效的用戶名和(/或)密碼,系統(tǒng)顯示錯(cuò)誤信息。管理員可以選擇返回基流的起始點(diǎn),重新輸入正確的用戶名和(/或)密碼;或者取消登陸,用例結(jié)束“圖書管理”模塊 1)使用用例圖“圖書管理”用例圖如圖21所示圖21“圖書管理”用例圖2)使用活動(dòng)圖“圖書管理”活動(dòng)圖如圖22所示圖22“圖書管理”活動(dòng)圖3)進(jìn)行需求描述6 “圖書管理”6.1 簡(jiǎn)單描述 本用例用于管理員管理圖書信息6.2 前置條件 管理員登陸6.3 后置條件 用例成功后,圖書信息被添加、改變或刪除6.4 事件流 6.4.1 基流 管理員

14、提出查看圖書時(shí),用例啟動(dòng) (1)系統(tǒng)列出所有符合該管理員要求的圖書 (2)管理員提出所要執(zhí)行的操作 如果管理員需要修改圖書信息,則執(zhí)行分支流S-1:修改圖書信息 如果管理員需要?jiǎng)h除圖書信息,則執(zhí)行分支流S-2:刪除圖書信息 如果管理員需要添加圖書信息,則執(zhí)行分支流S-3:添加圖書信息 6.4.2 分支流 S-1:修改圖書信息 進(jìn)入圖書信息修改界面,修改并保存圖書信息 S-2:刪除圖書信息 管理員單擊刪除按鈕,相應(yīng)的圖書被刪除并更新數(shù)據(jù)庫(kù) S-3:添加圖書信息 進(jìn)入圖書信息添加頁(yè)面,添加并保存圖書信息 “訂單管理”模塊 1)使用用例圖“訂單管理”用例圖如圖23所示圖23“訂單管理”用例圖2)使用

15、活動(dòng)圖“訂單管理”活動(dòng)圖如圖24所示圖24“訂單管理”活動(dòng)圖3)進(jìn)行需求描述7 “訂單管理” 7.1 簡(jiǎn)單描述 本用例用于管理員管理訂單 7.2 前置條件 管理員登陸 7.3 后置條件 用例成功后,訂單信息被修改或被刪除 7.4 事件流 7.4.1 基流 管理員提出符合該管理員要求的訂單時(shí),用例啟動(dòng) (1)系統(tǒng)列出所有符合該管理員要求的訂單 (2)管理員提出所要執(zhí)行的操作 管理員修改訂單,執(zhí)行分支流S-1:修改訂單 管理員刪除訂單,執(zhí)行分支流S-2:刪除訂單 7.4.2 分支流 S-1:修改訂單 進(jìn)入訂單修改界面,修改并保存 S-2:刪除訂單 管理員單擊刪除按鈕,相應(yīng)的訂單被刪除建立分析模型概

16、述 在前述內(nèi)容中,我們使用用例圖、活動(dòng)圖和用例的一種結(jié)構(gòu)化文檔描述方法對(duì)系統(tǒng)的需求進(jìn)行了分析。需求模型表現(xiàn)了業(yè)務(wù)人員眼中系統(tǒng)存在的狀態(tài)和工作的流程,而分析工作流程的目的是在于找出實(shí)體類、控制類和邊界類。這些類是業(yè)務(wù)活動(dòng)中應(yīng)該存在的一些實(shí)體概念,將其提取出來(lái)抽象成為類,然后再使用協(xié)作圖分析它們之間的交互情況,從而不僅又一次明確了功能需求,也為在設(shè)計(jì)階段設(shè)計(jì)出真正的可編程的類打下了基礎(chǔ),因此這是一個(gè)承前啟后的過(guò)程。 仍以“圖書選購(gòu)”這一個(gè)功能為例,下圖是對(duì)它進(jìn)行功能結(jié)構(gòu)的描述。3 圖書選購(gòu)3.1 簡(jiǎn)單描述 本用例允許用戶在線選購(gòu)圖書3.2 前置條件 用戶選書前必須登陸3.3 后置條件 用戶選擇自己

17、需要的圖書,并將其添加到購(gòu)物車中3.4 事件流 3.4.1 基流 當(dāng)用戶想要進(jìn)行圖書選購(gòu)時(shí),用例啟動(dòng) (1)用戶單擊選擇選書頁(yè)面 (2)系統(tǒng)顯示圖書列表 (3)用戶提出選購(gòu)圖書 (4)系統(tǒng)檢查是否缺貨(E-1),購(gòu)物車中加入相應(yīng)的圖書信息 3.4.2 替代流 E-1:缺貨時(shí),屏幕顯示缺貨信息頁(yè)面。用戶選擇缺貨策略(放棄還是等待直到有貨) 4.1 篩選得到分析類現(xiàn)在需要從上述功能結(jié)構(gòu)的描述中找出可以作為分析類存在的功能實(shí)體,進(jìn)而通過(guò)篩選得到分析類。發(fā)現(xiàn)類一般要依靠用例描述中的名詞或者動(dòng)賓短語(yǔ)。從上面的功能描述中篩選出所有的名詞和動(dòng)賓短語(yǔ),如“圖書”、“選購(gòu)圖書”、“用戶”、“購(gòu)物車”、“選書頁(yè)面

18、”等?,F(xiàn)在假設(shè)這5個(gè)詞就是分析模型中要找的類,下面分析它們的職責(zé)。“圖書”:其職責(zé)是很好界定的,即是客觀世界的圖書在軟件系統(tǒng)中的映射,用來(lái)保存圖書的基本信息?!斑x購(gòu)圖書” :其他的職責(zé)在于接收用戶選擇的圖書信息,并將信息轉(zhuǎn)移到購(gòu)物車類中,是一個(gè)控制其他類運(yùn)行的類。“用戶”:是客觀世界中書店的顧客,在軟件系統(tǒng)中的映射。“購(gòu)物車”:是顧客的購(gòu)物車或者是顧客挑完書后拿著書的手在軟件系統(tǒng)中的映射?!斑x書頁(yè)面” :從語(yǔ)言中可以看出它是一個(gè)用來(lái)交互的類,是用來(lái)瀏覽圖書信息的。實(shí)際上,分析類可以分為實(shí)體類、控制類和邊界類3類。從名字中可以看出:實(shí)體類對(duì)應(yīng)現(xiàn)實(shí)生活中的物體,是它們?cè)谲浖到y(tǒng)中的映射;控制類用來(lái)

19、對(duì)各個(gè)類之間進(jìn)行協(xié)調(diào)和控制;邊界類是軟件系統(tǒng)用來(lái)與參與者進(jìn)行交互的類。下面介紹3種類的不同表示方法。 下面介紹3 種類的不同表示方法。單擊創(chuàng)建一個(gè)類圖,然后點(diǎn)選 創(chuàng)建三個(gè)類1、2、3。雙擊打開各自的細(xì)節(jié)選項(xiàng)卡(class specification),在stereotype下拉條中選擇entity、control或者boundary,從而分別將其改變成實(shí)體類、控制類和邊界類,如圖25所示。圖25 實(shí)體類、控制類和邊界類畫出分析類圖 篩選得到分析類后就要畫出分析類圖了。 首先要弄清楚各類之間的關(guān)系,這時(shí)采用一個(gè)小技術(shù)CRC卡片就十分有效。CRC(Class Responsibility Card

20、)是一種如圖26所示的卡片。圖書用來(lái)保存圖書的基本信息選購(gòu)圖書圖26 CRC卡片卡片的上面為類的名稱,左面為類的職責(zé),右面標(biāo)示出與其有關(guān)系的類。因此,在一個(gè)存在很多類的系統(tǒng)中,可以逐個(gè)地考慮該類與其他所有類是否有關(guān)系、有什么樣的關(guān)系,保證不會(huì)遺漏類之間的關(guān)系。從而在完成了對(duì)發(fā)現(xiàn)的類之間的關(guān)系判斷之后,就可以畫出類圖了。當(dāng)然,在此之前還是要像上個(gè)實(shí)驗(yàn)一樣建立體系結(jié)構(gòu)。在logic view中加入包 “網(wǎng)上書店系統(tǒng)分析模型”,然后按照各自的功能模塊分包,最終得到體系結(jié)構(gòu)。通過(guò)以上步驟,得到“圖書選購(gòu)”用例的分析類圖,如圖27所示。圖27 “圖書選購(gòu)”用例分析類圖在畫出分析類圖后,仍然需要對(duì)類圖中的

21、每個(gè)類進(jìn)行描述,說(shuō)明其各自的職責(zé)。這些可以添加在細(xì)節(jié)選項(xiàng)卡(class specification)的documentation中。 進(jìn)行分析模型中的用例實(shí)現(xiàn) 畫出分析類圖后,就需要進(jìn)行分析模型中的用例實(shí)現(xiàn)了。所謂用例實(shí)現(xiàn)是指使用已經(jīng)發(fā)現(xiàn)的類并進(jìn)行交互,從而使其完成用例所應(yīng)該完成的功能。用例實(shí)現(xiàn)的關(guān)鍵就是弄清楚分析類是怎樣交互而完成任務(wù)的。用例實(shí)現(xiàn)是使用交互圖中的協(xié)作圖來(lái)完成的,以“選購(gòu)圖書”為例,在“選購(gòu)圖書”包上創(chuàng)建“選購(gòu)圖書”協(xié)作圖,如圖28所示。圖28 創(chuàng)建“圖書選購(gòu)”協(xié)作圖在圖中創(chuàng)建類對(duì)象以及它們之間的交互過(guò)程,如圖29所示。 圖29 “圖書選購(gòu)”協(xié)作圖建立分析模型的詳細(xì)步驟5.1

22、“用戶注冊(cè)” 模塊1)使用分析類圖“用戶注冊(cè)”分析類圖如圖30所示:圖30 “用戶注冊(cè)”分析類圖2)使用協(xié)作圖“用戶注冊(cè)”協(xié)作圖如圖31所示:圖31 “用戶注冊(cè)”協(xié)作圖5.2 “用戶登陸” 模塊1)使用分析類圖“用戶登陸”分析類圖如圖32所示:圖32 “用戶登陸”分析類圖2)使用協(xié)作圖“用戶登陸”協(xié)作圖如圖33所示:圖33 “用戶登陸”協(xié)作圖5.3 “圖書選購(gòu)” 模塊1)使用分析類圖“圖書選購(gòu)”分析類圖如圖34所示:圖34 “圖書選購(gòu)”分析類圖2)使用協(xié)作圖“圖書選購(gòu)”協(xié)作圖如圖35所示:圖35 “圖書選購(gòu)”協(xié)作圖5.4 “購(gòu)物車管理” 模塊1)使用分析類圖“購(gòu)物車管理”分析類圖如圖36所示:

23、圖36 “購(gòu)物車管理”分析類圖2)使用協(xié)作圖“購(gòu)物車管理”協(xié)作圖如圖37所示:圖37 “購(gòu)物車管理”協(xié)作圖5.5“查看訂單” 模塊1)使用分析類圖“查看訂單”分析類圖如圖38所示:圖38 “查看訂單”分析類圖2)使用協(xié)作圖“查看訂單”協(xié)作圖如圖39所示:圖39 “查看訂單”協(xié)作圖5.6“管理員登陸” 模塊1)使用分析類圖“管理員登陸”分析類圖如圖40所示:圖40 “管理員登陸”分析類圖2)使用協(xié)作圖“管理員登陸”協(xié)作圖如圖41所示:圖41 “管理員登陸”協(xié)作圖5.7 “圖書管理” 模塊1)使用分析類圖“圖書管理”分析類圖如圖42所示:圖42 “圖書管理”分析類圖2)使用協(xié)作圖“圖書管理”協(xié)作圖

24、如圖43所示:圖43 “圖書管理”協(xié)作圖5.8 “訂單管理” 模塊1)使用分析類圖“訂單管理”分析類圖如圖44所示:圖44 “訂單管理”分析類圖2)使用協(xié)作圖“訂單管理”協(xié)作圖如圖45所示:圖45 “訂單管理”協(xié)作圖附錄資料:不需要的可以自行刪除 busybox詳解制作根文件系統(tǒng)詳解制作根文件系統(tǒng) 一、FHS(Filesystem Hierarchy Standard)標(biāo)準(zhǔn)介紹當(dāng)我們?cè)趌inux下輸入ls / 的時(shí)候,見到的目錄結(jié)構(gòu)以及這些目錄下的內(nèi)容都大同小異,這是因?yàn)樗械膌inux發(fā)行版在對(duì)根文件系統(tǒng)布局上都遵循FHS標(biāo)準(zhǔn)的建議規(guī)定。該標(biāo)準(zhǔn)規(guī)定了根目錄下各個(gè)子目錄的名稱及其存放的內(nèi)容:目

25、錄名存放的內(nèi)容/bin必備的用戶命令,例如ls、cp等/sbin必備的系統(tǒng)管理員命令,例如ifconfig、reboot等/dev設(shè)備文件,例如mtdblock0、tty1等/etc系統(tǒng)配置文件,包括啟動(dòng)文件,例如inittab等/lib必要的鏈接庫(kù),例如C鏈接庫(kù)、內(nèi)核模塊/home普通用戶主目錄/rootroot用戶主目錄/usr/bin非必備的用戶程序,例如find、du等/usr/sbin非必備的管理員程序,例如chroot、inetd等/usr/lib庫(kù)文件/var守護(hù)程序和工具程序所存放的可變,例如日志文件/proc用來(lái)提供內(nèi)核與進(jìn)程信息的虛擬文件系統(tǒng),由內(nèi)核自動(dòng)生成目錄下的內(nèi)容/s

26、ys用來(lái)提供內(nèi)核與設(shè)備信息的虛擬文件系統(tǒng),由內(nèi)核自動(dòng)生成目錄下的內(nèi)容/mnt文件系統(tǒng)掛接點(diǎn),用于臨時(shí)安裝文件系統(tǒng)/tmp臨時(shí)性的文件,重啟后將自動(dòng)清除制作根文件系統(tǒng)就是要建立以上的目錄,并在其中建立完整目錄內(nèi)容。其過(guò)程大體包括:編譯安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄 利用交叉編譯工具鏈,構(gòu)建/lib目錄 手工構(gòu)建/etc目錄 手工構(gòu)建最簡(jiǎn)化的/dev目錄 創(chuàng)建其它空目錄 配置系統(tǒng)自動(dòng)生成/proc目錄 利用udev構(gòu)建完整的/dev目錄 制作根文件系統(tǒng)的jffs2映像文件 下面就來(lái)詳細(xì)介紹這個(gè)過(guò)程。二、編譯安裝busybox,生成/bin、/

27、sbin、/usr/bin、/usr/sbin目錄這些目錄下存儲(chǔ)的主要是常用命令的二進(jìn)制文件。如果要自己編寫這幾百個(gè)常用命令的源程序,my god, 這簡(jiǎn)直是一個(gè)噩夢(mèng)!好在我們有嵌入式Linux系統(tǒng)的瑞士軍刀busybox,事情就簡(jiǎn)單很多。1、從 HYPERLINK / / 下載busybox-1.7.0.tar.bz22、tar xjvf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux- 4、make menuconfig配置busyboxbusybox配置主要分兩部分。第一

28、部分是Busybox Settings,主要編譯和安裝busybox的一些選項(xiàng)。這里主要需要配置:1)、Build Options - Build BusyBox as a static binary (no shared libs),表示編譯busybox時(shí),是否靜態(tài)鏈接C庫(kù)。我們選擇動(dòng)態(tài)鏈接C庫(kù)。2)、Installation Options - Applets links (as soft-links) - (X) as soft-links,表示安裝busybox時(shí),將各個(gè)命令安裝為指向busybox的軟鏈接還是硬鏈接。我們選擇軟鏈接。3)、Installation Options -

29、 (/work/nfs_root/fs_mini3) BusyBox installation prefix,表示busybox的安裝位置。我們選擇/work/nfs_root/fs_mini34)Busybox Library Tuning。保留Command line editing以支持命令行編輯;保留History size以支持記憶歷史命令;選中Tab completion和Username completion以支持命令自動(dòng)補(bǔ)全 第二部分是Applets,他將busybox的支持的幾百個(gè)命令分門別類。我們只要在各個(gè)門類下選擇想要的命令即可。這里我們基本保持默認(rèn)設(shè)置。1)選中Netw

30、orking Utilities - httpd下的Enable -u option,以啟用http服務(wù)器的功能allows the server to run as a specific user5、編譯busyboxmake6、安裝busyboxmake install安裝完成后,可以看到在/work/nfs_root/fs_mini3目錄下生成了binsbinusr/binusr/sbin目錄,其下包含了我們常用的命令,這些命令都是指向bin/busybox的軟鏈接,而busybox本身的大小不到800K:dennisdennis-desktop:/work/nfs_root/fs_mi

31、ni3$ lsbin linuxrc sbin usrdennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l bintotal 740lrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 addgroup - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 adduser - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 ash - busybox-rwxr-xr-x 1 dennis den

32、nis 749632 2010-04-03 23:57 busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 cat busybox 而普通PC機(jī)上的ls命令就有差不多80K的大小: dennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l /bin/ls-rwxr-xr-x 1 root root 78004 2007-09-29 20:51 /bin/ls busybox以它嬌小的身軀容納了數(shù)以百計(jì)的命令代碼,實(shí)在是讓人佩服不已,其不愧嵌入式系統(tǒng)瑞士軍刀之美譽(yù)。據(jù)說(shuō),busybox的作者身患絕

33、癥,這更讓人欽佩GNU開源軟件的作者們。 三、利用交叉編譯工具鏈,構(gòu)建/lib目錄 光有應(yīng)用程序(命令)是不夠的,因?yàn)閼?yīng)用程序本身需要使用C庫(kù)的庫(kù)函數(shù),因此還必需制作for ARM的C庫(kù),并將其放置于/lib目錄。my god,要自己寫C庫(kù)的源代碼嗎?不用!還記得交叉編譯工具鏈的3個(gè)組成部分嗎?交叉編譯器、for ARM的C庫(kù)和二進(jìn)制工具。哈哈,for ARM的C庫(kù)是現(xiàn)成的,我們只需要拷貝過(guò)來(lái)就可以了。遺憾的是:整個(gè)C庫(kù)目錄下的文件總大小有26M。而我們根文件系統(tǒng)所在分區(qū)不過(guò)區(qū)區(qū)16M而已,根本放不下。怎么辦呢? dennisdennis-desktop:/work/nfs_root/fs_m

34、ini3$ du -s -si /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib26M /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib 需要C庫(kù)目錄下所有的文件嗎?no,absolutely no! 讓我們來(lái)分析一下glibc庫(kù)目錄下內(nèi)容的組成。該目錄下的子目錄和文件共分8類: 目標(biāo)文件,如crtn.o,用于gcc鏈接可執(zhí)行文件 libtool庫(kù)文件(.la),在鏈接庫(kù)文件時(shí)這些文件會(huì)被用到,比如他們列出了當(dāng)前庫(kù)文件所依賴的其它庫(kù)文件,程序運(yùn)行時(shí)無(wú)需這些文件 gconv目錄,里面是各種鏈接腳本,在編譯

35、應(yīng)用程序時(shí),他們用于指定程序的運(yùn)行地址,各段的位置等 靜態(tài)庫(kù)文件(.a),例如libm.a,libc.a 動(dòng)態(tài)庫(kù)文件 (.so、.so.0-9*) 動(dòng)態(tài)鏈接庫(kù)加載器ld-2.3.6.so、ld-linux.so.2 其它目錄及文件很顯然,第1、2、3、4、7類文件和目錄是不需要拷貝的。由于動(dòng)態(tài)鏈接的應(yīng)用程序本身并不含有它所調(diào)用的C庫(kù)函數(shù)的代碼,因此執(zhí)行時(shí)需要?jiǎng)討B(tài)鏈接庫(kù)加載器來(lái)為它加載相應(yīng)的C庫(kù)文件,所以第6類文件是需要拷貝的。除此之外,第5類文件當(dāng)然要拷貝。但第5類文件的大小也相當(dāng)大。dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/

36、arm-linux/lib$ du -c -si *.so* 7.2M total 需要全部拷貝嗎?非也,非也!其實(shí),需要哪些庫(kù)完全取決于要運(yùn)行的應(yīng)用程序使用了哪些庫(kù)函數(shù)。如果我們只制作最簡(jiǎn)單的系統(tǒng),那么我們只需要運(yùn)行busybox這一個(gè)應(yīng)用程序即可。通過(guò)執(zhí)行 dennisdennis-desktop:/work/nfs_root/fs_mini3$ arm-linux-readelf -a bin/busybox | grep Shared0 x00000001 (NEEDED) Shared library: libcrypt.so.10 x00000001 (NEEDED) Shared

37、 library: libm.so.60 x00000001 (NEEDED) Shared library: libc.so.6 可知:busybox只用到了3個(gè)庫(kù):通用C庫(kù)(libc)、數(shù)學(xué)庫(kù)(libm)、加密庫(kù)(libcrypt),因此我們只需要拷貝這3個(gè)庫(kù)的庫(kù)文件即可。但是每個(gè)庫(kù)都有4個(gè)文件,4個(gè)文件都要拷貝嗎?當(dāng)然不是。 dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libcrypt.-*-rwxr-xr-x 1 dennis dennis 30700 2008-01-22 05

38、:32 libcrypt-2.3.6.so-rw-r-r- 1 dennis dennis 23118 2008-01-22 05:32 libcrypt.alrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libcrypt.so - libcrypt.so.1lrwxrwxrwx 1 dennis dennis 17 2008-12-22 15:38 libcrypt.so.1 - libcrypt-2.3.6.sodennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/li

39、b$ ls -l libm.-*-rwxr-xr-x 1 dennis dennis 779096 2008-01-22 05:31 libm-2.3.6.so-rw-r-r- 1 dennis dennis 1134282 2008-01-22 05:32 libm.alrwxrwxrwx 1 dennis dennis 9 2008-12-22 15:38 libm.so - libm.so.6lrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libm.so.6 - libm-2.3.6.sodennisdennis-desktop:/work/

40、tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libc.-*-rwxr-xr-x 1 dennis dennis 1435660 2008-01-22 05:48 libc-2.3.6.so-rw-r-r- 1 dennis dennis 2768280 2008-01-22 05:31 libc.a-rw-r-r- 1 dennis dennis 195 2008-01-22 05:34 libc.solrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libc.so.6 - libc-2.3.6.

41、so 4個(gè)文件中的.a文件是靜態(tài)庫(kù)文件,是不需要拷貝的。另外3個(gè)文件是: 實(shí)際的共享鏈接庫(kù):libLIBRARY_NAME-GLIBC_VERSION.so。當(dāng)然需要拷貝。 主修訂版本的符號(hào)鏈接,指向?qū)嶋H的共享鏈接庫(kù):libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦鏈接了特定的鏈接庫(kù),將會(huì)參用該符號(hào)鏈接。程序啟動(dòng)時(shí),加載器在加載程序前,會(huì)檢索該文件。所以需要拷貝。 與版本無(wú)關(guān)的符號(hào)鏈接,指向主修訂版本的符號(hào)連接(libc.so是唯一的例外,他是一個(gè)鏈接命令行:libLIBRARY_NAME.so,是為編譯程序時(shí)提供一個(gè)通用條目)。這些文件在程序被編譯

42、時(shí)會(huì)被用到,但在程序運(yùn)行時(shí)不會(huì)被用到,所以不必拷貝它。關(guān)于共享庫(kù)的2個(gè)符號(hào)鏈接的作用的特別說(shuō)明:當(dāng)我們使用gcc hello.c -o hello -lm編譯程序時(shí),gcc會(huì)根據(jù)-lm的指示,加頭(lib)添尾(.so)得到libm.so,從而沿著與版本無(wú)關(guān)的符號(hào)鏈接(libm.so - libm.so.6)找到libm.so.6并記錄在案(hello的ELF頭中),表示hello需要使用libm.so.6這個(gè)庫(kù)文件所代表的數(shù)學(xué)庫(kù)中的庫(kù)函數(shù)。而當(dāng)hello被執(zhí)行的時(shí)候,動(dòng)態(tài)鏈接庫(kù)加載器會(huì)從hello的ELF頭中找到libm.so.6這個(gè)記錄,然后沿著主修訂版本的符號(hào)鏈接(libm.so.6 -

43、 libm-2.3.6.so)找到實(shí)際的共享鏈接庫(kù)libm-2.3.6.so,從而將其與hello作動(dòng)態(tài)鏈接??梢姡c版本無(wú)關(guān)的符號(hào)鏈接是供編譯器使用的,主修訂版本的符號(hào)鏈接是供動(dòng)態(tài)鏈接庫(kù)加載器使用的,而實(shí)際的共享鏈接庫(kù)則是供應(yīng)用程序使用的。通過(guò)以上分析,我們只需要拷貝3個(gè)庫(kù)(每個(gè)庫(kù)各1個(gè)主修訂版本的符號(hào)鏈接和1個(gè)實(shí)際的共享鏈接庫(kù))以及動(dòng)態(tài)鏈接庫(kù)加載器(1個(gè)符號(hào)鏈接和1個(gè)實(shí)體文件)。步驟如下:dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ mkdir /work/nfs_root/fs_mini3/li

44、b dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libcrypt-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libcrypt.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$

45、cp libm-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libm.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libc-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-

46、glibc-2.3.6/arm-linux/lib$ cp -l libc.so.* /work/nfs_root/fs_mini3/lib dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l ld-* /work/nfs_root/fs_mini3/lib 四、手工構(gòu)建/etc目錄 /etc目錄存放的是系統(tǒng)程序的主配置文件,因此需要哪些配置文件取決于要運(yùn)行哪些系統(tǒng)程序。即使最小的系統(tǒng)也一定會(huì)運(yùn)行1號(hào)用戶進(jìn)程init,所以我們至少要手工編寫init的主配置文件inittab。busybox的in

47、ittab文件的語(yǔ)法、語(yǔ)義與傳統(tǒng)的SYSV的inittab有所不同。 inittab文件中每個(gè)條目用來(lái)定義一個(gè)需要init啟動(dòng)的子進(jìn)程,并確定它的啟動(dòng)方式,格式為:。例如:ttySAC0:askfirst:-/bin/sh 表示子進(jìn)程要使用的控制臺(tái),若省略則使用與init進(jìn)程一樣的控制臺(tái) 表示運(yùn)行級(jí)別,busybox init程序這個(gè)字段沒(méi)有意義 表示init進(jìn)程如何控制這個(gè)子進(jìn)程 sysinit:系統(tǒng)啟動(dòng)后最先執(zhí)行,只執(zhí)行一次,init進(jìn)程等待它結(jié)束后才繼續(xù)執(zhí)行其它動(dòng)作 wait:系統(tǒng)執(zhí)行完sysinit條目后執(zhí)行,只執(zhí)行一次,init進(jìn)程等待它結(jié)束后才繼續(xù)執(zhí)行其它動(dòng)作 once:系統(tǒng)執(zhí)行完

48、wait條目后執(zhí)行,只執(zhí)行一次,init進(jìn)程不等待它結(jié)束 respawn:?jiǎn)?dòng)完once進(jìn)程后,init進(jìn)程監(jiān)測(cè)發(fā)現(xiàn)子進(jìn)程退出時(shí),重新啟動(dòng)它 askfirst:?jiǎn)?dòng)完respawn進(jìn)程后,與respawn類似,不過(guò)init進(jìn)程先輸出” Please press Enter to activate this console“,等用戶輸入回車后才啟動(dòng)子進(jìn)程 shutdown:當(dāng)系統(tǒng)關(guān)機(jī)時(shí) restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init進(jìn)程接收到SIGUP信號(hào)時(shí)執(zhí)行,先重新讀取、解析/etc/inittab文件,再執(zhí)行restart程序 ctr

49、laltdel:按下ctrl+alt+del鍵時(shí)執(zhí)行,不過(guò)在串口控制臺(tái)中無(wú)法輸入它 表示進(jìn)程對(duì)應(yīng)的二進(jìn)制文件。如果前面有-號(hào),表示該程序是“可以與用戶進(jìn)行交互的”我們制作最簡(jiǎn)單的/etc/inittab文件,其內(nèi)容如下::sysinit:/etc/init.d/rcS:askfirst:-/bin/sh:ctrlaltdel:/sbin/reboot:shutdown:/bin/umount -a r 制作最簡(jiǎn)單的腳本程序文件/etc/init.d/rcS,其內(nèi)容如下: #!/bin/shifconfig eth0 7修改shell腳本文件/etc/init.d/rcS的權(quán)限,以使其可被執(zhí)行:

50、# chmod a+x /etc/init.d/rcS五、手工構(gòu)建最簡(jiǎn)化的/dev目錄 在linux機(jī)器上,執(zhí)行l(wèi)s /dev可看到幾百個(gè)設(shè)備文件,我需要手工創(chuàng)建它們嗎?maybe,我只需要手工創(chuàng)建幾個(gè)設(shè)備文件!我怎么知道我應(yīng)該創(chuàng)建哪幾個(gè)設(shè)備文件呢?管它呢,先看看開發(fā)板上可愛的linux的反應(yīng)再說(shuō)。 啟動(dòng)Linux操作系統(tǒng),顯示: VFS: Mounted root (nfs filesystem).Freeing init memory: 112KWarning: unable to open an initial console. 這說(shuō)明,內(nèi)核已經(jīng)成功掛載根文件系統(tǒng),但卻未能成功啟動(dòng)第1個(gè)

51、用戶進(jìn)程init。通過(guò)錯(cuò)誤消息“unable to open an initial console”搜索內(nèi)核源代碼,找到init/main.c文件。748 static int noinline init_post(void)749 750 free_initmem();751 unlock_kernel();752 mark_rodata_ro();753 system_state = SYSTEM_RUNNING;754 numa_default_policy();755 756 if (sys_open(const char _user *) /dev/console, O_RDWR,

52、0) 0)757 printk(KERN_WARNING Warning: unable to open an initial console.n);758 759 (void) sys_dup(0);760 (void) sys_dup(0);761 762 if (ramdisk_execute_command) 763 run_init_process(ramdisk_execute_command);764 printk(KERN_WARNING Failed to execute %sn,765 ramdisk_execute_command);766 767 768 /*769 *

53、 We try each of these until one succeeds.770 *771 * The Bourne shell can be used instead of init if we are772 * trying to recover a really broken machine.773 */774 if (execute_command) 775 run_init_process(execute_command);776 printk(KERN_WARNING Failed to execute %s. Attempting 777 defaults.n, exec

54、ute_command);778 779 run_init_process(/sbin/init);780 run_init_process(/etc/init);781 run_init_process(/bin/init);782 run_init_process(/bin/sh);783 784 panic(No init found. Try passing init= option to kernel.);785 顯然,內(nèi)核錯(cuò)誤是由175行不能打開/dev/console所致。通過(guò)查看已經(jīng)安裝好的linux機(jī)器的/dev/console設(shè)備文件,可知其是字符設(shè)備文件,主設(shè)備號(hào)為5,次

55、設(shè)備號(hào)為1: dennisdennis-desktop:/work/nfs_root/fs_mini3/etc$ ls -l /dev/consolecrw- 1 root root 5, 1 2010-04-08 08:40 /dev/console 因此,我們使用下面的命令創(chuàng)建它: HYPERLINK mailto:dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod console c 5 1 還需要?jiǎng)?chuàng)建其它設(shè)備文件嗎?只

56、有天知道!再看看linux的反應(yīng)。 VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit: cant open /dev/null: No such file or directory 這次我們有經(jīng)驗(yàn)了,如法炮制,創(chuàng)建/dev/null設(shè)備文件:dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod null c 1 3 再次重啟開發(fā)板上的linux,顯示 VFS: Mounted root (nfs filesystem).Freeing init m

57、emory: 112Kinit started: BusyBox v1.7.0 (2010-04-03 23:53:55 CST)starting pid 229, tty : /etc/init.d/rcS Please press Enter to activate this console.starting pid 231, tty : /bin/sh# 哈哈,我們成功了,終于可以K歌去了。六、創(chuàng)建其它空目錄K完歌回來(lái),繼續(xù)戰(zhàn)斗。dennisdennis-desktop:/work/nfs_root/fs_mini3$ mkdir home root proc sys tmp mnt var再次重啟動(dòng)開發(fā)板上的linux。咦,似乎有些問(wèn)題。VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit started: BusyBox v1.7.0 (2010-04-03 23:53:55 CST)starting pid 229, tty : /etc/init.d/r

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論