本發(fā)明涉及嵌入式Linux操作系統(tǒng)的設(shè)備驅(qū)動領(lǐng)域,尤其是涉及一種Linux系統(tǒng)加載設(shè)備的方法。
背景技術(shù):
在嵌入式Linux操作系統(tǒng)中,將設(shè)備信息使用設(shè)備樹文件保存在存儲設(shè)備中,系統(tǒng)啟動時,加載并解析設(shè)備樹文件,根據(jù)設(shè)備樹文件中的設(shè)備信息,來加載設(shè)備驅(qū)動。設(shè)備樹文件中沒有的設(shè)備信息,Linux操作系統(tǒng)會認(rèn)為相關(guān)的設(shè)備不存在。目前的Linux操作系統(tǒng),只有一個設(shè)備樹文件。
在實際產(chǎn)品中,如果采用主電路板和擴(kuò)展電路板的拼裝形式,擴(kuò)展電路板往往由用戶自行開發(fā),主電路板提供商往往無法確定擴(kuò)展電路板使用了主電路板的哪些擴(kuò)展功能。對于用戶可以選擇的功能,主電路板提供商更是無法確定擴(kuò)展電路板上選擇了哪個功能。
目前的Linux操作系統(tǒng)中,只有一個設(shè)備樹文件,在主電路板出廠時就存放在存儲設(shè)備中,用戶自行開發(fā)的擴(kuò)展電路板,無法使用設(shè)備樹文件,就必須自行為擴(kuò)展電路板增加驅(qū)動文件,導(dǎo)致很多不便。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就是為了解決目前Linux操作系統(tǒng)中只有一個設(shè)備樹文件而導(dǎo)致擴(kuò)展電路板無法將其設(shè)備信息并入設(shè)備樹文件的問題,提供一種Linux系統(tǒng)加載設(shè)備的方法,其使得擴(kuò)展電路板上的設(shè)備信息能夠整合到設(shè)備樹中,從而使用戶自行開發(fā)擴(kuò)展電路板變得更為容易,同時降低了對擴(kuò)展電路板軟件開發(fā)的要求。
為解決上述技術(shù)問題,本發(fā)明的實施方式提供了一種Linux系統(tǒng)加載設(shè)備的方法,該方法包括如下步驟:步驟一,于Linux系統(tǒng)的存儲設(shè)備中為Linux系統(tǒng)配備主設(shè)備樹文件和附屬設(shè)備樹文件;步驟二,于所述存儲設(shè)備中加載主設(shè)備樹文件和附屬設(shè)備樹文件到內(nèi)存中,解析主設(shè)備樹文件和附屬設(shè)備樹文件在內(nèi)存中形成設(shè)備樹;步驟三,Linux系統(tǒng)根據(jù)解析主設(shè)備樹文件和附屬設(shè)備樹文件在內(nèi)存中形成的設(shè)備樹,加載設(shè)備驅(qū)動。
從上述內(nèi)容不難發(fā)現(xiàn),本發(fā)明所提供的Linux系統(tǒng)加載設(shè)備的方法將單一設(shè)備樹文件,拆分為主設(shè)備樹文件和附屬設(shè)備樹文件,將附屬設(shè)備樹文件與主設(shè)備樹文件存放在同一存儲設(shè)備中,或者存放在不同存儲設(shè)備中,分階段加載、解析主設(shè)備樹文件和附屬設(shè)備樹文件,使得擴(kuò)展電路板上的設(shè)備信息能夠整合到設(shè)備樹中,從而使用戶自行開發(fā)擴(kuò)展電路板變得更為容易,同時降低了對擴(kuò)展電路板軟件開發(fā)的要求。
步驟一中,主設(shè)備樹文件和附屬設(shè)備樹文件位于同一個存儲設(shè)備的不同區(qū)域。
步驟一中,主設(shè)備樹文件和附屬設(shè)備樹文件位于不同存儲設(shè)備中。
所述附屬設(shè)備樹文件的數(shù)量為0個、1個、2個或者多個。
所述附屬設(shè)備樹文件位于同一個存儲設(shè)備的不同區(qū)域,或者位于不同存儲設(shè)備中。
步驟二具體包括以下步驟:
步驟S101.系統(tǒng)BOOT啟動系統(tǒng)時,從存儲設(shè)備中加載主設(shè)備樹文件到內(nèi)存中,并將主設(shè)備樹文件在內(nèi)存中的地址和偏移作為Linux系統(tǒng)啟動的參數(shù)之一;
步驟S102.Linux系統(tǒng)啟動時,解析主設(shè)備樹文件,在內(nèi)存中形成設(shè)備樹;
步驟S103.Linux系統(tǒng)在設(shè)備樹中,查找新出現(xiàn)的附屬設(shè)備樹文件的數(shù)量,地址,偏移,然后把附屬設(shè)備樹文件加載到內(nèi)存中;
步驟S104.Linux系統(tǒng)解析附屬設(shè)備樹文件,將解析得到的設(shè)備信息添加到設(shè)備樹中;
步驟S105.解析附屬設(shè)備樹文件得到的設(shè)備信息,其中部分設(shè)備信息在設(shè)備樹中可能已經(jīng)存在,檢查重疊的設(shè)備信息;
步驟S106.檢查設(shè)備信息中的覆蓋條目,如果不存在,則執(zhí)行步驟S107,如果存在,則執(zhí)行步驟S108;
步驟S107.忽略重疊的設(shè)備信息;
步驟S108.覆蓋設(shè)備樹中的重疊設(shè)備信息;
步驟S109.此時得到更新的設(shè)備樹文件,然后跳轉(zhuǎn)到步驟S103~S109,直到?jīng)]有新出現(xiàn)的附屬設(shè)備樹文件后,跳轉(zhuǎn)到步驟S110;
步驟S110.在設(shè)備樹中查找合并設(shè)備樹文件的條目;
步驟S111.如果存在合并的條目則跳轉(zhuǎn)到步驟S112;
步驟S112.將設(shè)備樹導(dǎo)出覆蓋主設(shè)備樹文件,并刪除所有附屬設(shè)備樹文件。
附圖說明
圖1為基于本發(fā)明的一種Linux系統(tǒng)加載設(shè)備的方法所提供的主設(shè)備樹和附屬設(shè)備樹存儲與加載的示例圖;
圖2為本發(fā)明的一種Linux系統(tǒng)加載設(shè)備的方法中加載主設(shè)備樹和附屬設(shè)備樹詳細(xì)流程圖。
具體實施方式
為了使本發(fā)明實現(xiàn)的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解,下面結(jié)合具體實施例,進(jìn)一步闡述本發(fā)明。
本發(fā)明的實施方式提供了一種Linux系統(tǒng)加載設(shè)備的方法,系統(tǒng)啟動分為兩個階段,參見圖1所示,系統(tǒng)BOOT啟動階段10和Linux系統(tǒng)啟動階段20,主設(shè)備樹文件存儲在主電路板的NAND Flash存儲器中12,在系統(tǒng)BOOT啟動階段10,加載主設(shè)備樹文件到內(nèi)存11,然后,進(jìn)入Linux系統(tǒng)啟動階段20,Linux系統(tǒng)解析主設(shè)備樹文件形成設(shè)備樹,并將附屬設(shè)備樹文件加載到內(nèi)存12,在這個步驟中,擴(kuò)展電路板1的SPI Flash中存儲有附屬設(shè)備樹文件22,擴(kuò)展電路板2的Data Flash中存儲有附屬設(shè)備樹文件23,Linux系統(tǒng)解析附屬設(shè)備樹文件,將設(shè)備信息加到設(shè)備樹24中,最后,Linux系統(tǒng)根據(jù)設(shè)備樹中的設(shè)備信息,加載設(shè)備驅(qū)動25。
從上述內(nèi)容不難發(fā)現(xiàn),本發(fā)明將單一設(shè)備樹文件拆分為主設(shè)備樹文件和附屬設(shè)備樹文件,并將附屬設(shè)備樹文件與主設(shè)備樹文件存在于同一/不同存儲設(shè)備中,分階段加載、解析主設(shè)備樹和附屬設(shè)備樹文件,相較于目前Linux操作系統(tǒng)中只有一個設(shè)備樹文件的情況,更有利于用戶自行開發(fā)的擴(kuò)展電路板使用設(shè)備樹文件,而無需自行為擴(kuò)展電路板增加驅(qū)動文件。因此,將設(shè)備樹文件擴(kuò)展為主設(shè)備樹文件和附屬設(shè)備樹文件的形式,附屬設(shè)備樹文件用于記錄擴(kuò)展電路板上的設(shè)備信息,就能使得擴(kuò)展電路板上的設(shè)備信息,也能夠被加入到設(shè)備樹中,從而使用戶自行開發(fā)擴(kuò)展電路板變得更為容易,同時降低了對擴(kuò)展電路板軟件開發(fā)的要求。
本發(fā)明所提供的Linux系統(tǒng)加載設(shè)備的方法中所囊括的三個步驟,即:為Linux系統(tǒng)配備主設(shè)備樹文件和附屬設(shè)備樹文件的步驟、解析主設(shè)備樹文件和附屬設(shè)備樹文件在內(nèi)存中形成設(shè)備樹的步驟、加載設(shè)備驅(qū)動的步驟在圖1中有所說明,而對于解析主設(shè)備樹文件和附屬設(shè)備樹文件在內(nèi)存中形成設(shè)備樹的步驟,下文對其具有更加詳細(xì)的闡述。
參見圖2所示,從存儲設(shè)備中加載主設(shè)備樹文件和附屬設(shè)備樹文件到內(nèi)存中,解析主設(shè)備樹文件和附屬設(shè)備樹文件在內(nèi)存中形成設(shè)備樹的詳細(xì)步驟為:
步驟S101.系統(tǒng)BOOT啟動系統(tǒng)時,從存儲設(shè)備中加載主設(shè)備樹文件到內(nèi)存中,并將主設(shè)備樹文件在內(nèi)存中的地址和偏移作為Linux系統(tǒng)啟動的參數(shù)之一。
步驟S102.Linux系統(tǒng)啟動時,解析主設(shè)備樹文件,在內(nèi)存中形成設(shè)備樹。
步驟S103.Linux系統(tǒng)在設(shè)備樹中,查找新出現(xiàn)的附屬設(shè)備樹文件的數(shù)量,地址,偏移,然后把附屬設(shè)備樹文件加載到內(nèi)存中。
步驟S104.Linux系統(tǒng)解析附屬設(shè)備樹文件,將解析得到的設(shè)備信息添加到設(shè)備樹中。
步驟S105.解析附屬設(shè)備樹文件得到的設(shè)備信息,其中部分設(shè)備信息在設(shè)備樹中可能已經(jīng)存在,檢查重疊的設(shè)備信息。
步驟S106.檢查設(shè)備信息中的覆蓋條目,如果不存在,則執(zhí)行步驟S107,如果存在,則執(zhí)行步驟S108。
步驟S107.忽略重疊的設(shè)備信息。
步驟S108.覆蓋設(shè)備樹中的重疊設(shè)備信息。
步驟S109.此時得到更新的設(shè)備樹文件,然后跳轉(zhuǎn)到步驟S103~S109,直到?jīng)]有新出現(xiàn)的附屬設(shè)備樹文件后,跳轉(zhuǎn)到步驟S110。
步驟S110.在設(shè)備樹中查找合并設(shè)備樹文件的條目。
步驟S111.如果存在合并的條目則跳轉(zhuǎn)到步驟S112。
步驟S112.將設(shè)備樹導(dǎo)出覆蓋主設(shè)備樹文件,并刪除所有附屬設(shè)備樹文件。
基于前文所述的Linux系統(tǒng)加載設(shè)備的方法,對于主設(shè)備樹文件和附屬設(shè)備樹文件的存儲而言,既可以是位于不同存儲設(shè)備中,也可以是位于同一存儲設(shè)備的不同區(qū)域,兩者根據(jù)實際情況進(jìn)行運用,并不影響本方法的實施。
與此同時,附屬設(shè)備樹文件的數(shù)量則同樣根據(jù)實際情況進(jìn)行選擇,數(shù)量不定,可以是0個,也可以是1個或者更多。
本領(lǐng)域的普通技術(shù)人員可以理解,上述各實施方式是實現(xiàn)本發(fā)明的具體實施例,而在實際應(yīng)用中,可以在形式上和細(xì)節(jié)上對其作各種改變,而不偏離本發(fā)明的精神和范圍。