在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 基于數(shù)字電視系統(tǒng)的嵌入式linux操作系統(tǒng)實現(xiàn)

            基于數(shù)字電視系統(tǒng)的嵌入式linux操作系統(tǒng)實現(xiàn)

            作者: 時間:2013-04-06 來源:網(wǎng)絡 收藏



            圖2 MCU和I2C總線之間的連接

            4.系統(tǒng)移植

            在這一部分中,我們將解釋的移植順序。包括修改內(nèi)核初始化代碼和編寫設(shè)備驅(qū)動程序。

            4.1重建內(nèi)核初始化代碼

            為了將內(nèi)核加載到嵌入式系統(tǒng)中,有必要修改與硬件相關(guān)的內(nèi)核初始化代碼。這個過程包括設(shè)置存儲器映射以便加載內(nèi)核映像,以及為支持內(nèi)核的運行而修改設(shè)備驅(qū)動程序。

            4.1.1設(shè)置存儲器映射

            Linux內(nèi)核映像是一種壓縮文件,存放在flash存儲器中,執(zhí)行時被拷貝到SDRAM中并解壓。圖3描述了內(nèi)存映像的加載順序。


            系統(tǒng)復位時,CPU只能接受flash ROM空間的代碼,同時執(zhí)行位于flash ROM底層的bootloader,它負責從主機端下載代碼并且將代碼存儲到flashROM中。

            1)bootloader將主機的linux內(nèi)核拷貝到數(shù)字處理模塊上的SDRAM中。

            2)SDRAM中被下載的linux內(nèi)核映像被存儲在flash ROM中位于bootloader頂層的空間中。

            3)系統(tǒng)初始化,同時,bootloader調(diào)用linux映像內(nèi)的一段執(zhí)行代碼(head.o),將全部flash ROM空間中的內(nèi)容拷貝到SDRAM中。

            4)CPU利用系統(tǒng)管理寄存器,將flash ROM中的初始地址空間與SDRAM的初始地址空間相交換。
            當flash ROM中的映像被加載到SDRAM之后,無需改變程序計數(shù)器就可以執(zhí)行代碼(head.o)。圖4中顯示了最終的存儲器映射。

            拷貝到SDRAM中的linux映像可解壓執(zhí)行,為了完成釋放功能,需要一些存儲器空間,例如符號開始段、用戶堆棧、分配的內(nèi)存等。在這些空間中,一個壓縮的linux內(nèi)核映像被解壓工具釋放出來,被釋放的代碼位于被分配的內(nèi)存空間的下一地址。

            4.1.2 內(nèi)核需要的設(shè)備

            內(nèi)核需要的基本設(shè)備包括中斷控制器、定時器和控制臺設(shè)備。這些設(shè)備被映像到MCU的內(nèi)部寄存器中,通過修改內(nèi)部寄存器而提供必要的功能。

            4.2設(shè)備驅(qū)動的設(shè)計

            包括視頻處理設(shè)備和模擬輸出設(shè)備以及內(nèi)核所必須的設(shè)備,本文為I2C總線接口(PCF8584)設(shè)計一個設(shè)備驅(qū)動。PCF8584設(shè)備驅(qū)動包括接口模塊、內(nèi)核模塊、算法模塊、適配器模塊,如圖5所示。

            接口模塊提供設(shè)備驅(qū)動程序與應用程序之間的接口,定義設(shè)備文件操作(open, read, write, ioctl,release)以及初始化設(shè)備文件(/dev/i2c0);內(nèi)核模塊用來增加或移除適配器、定義I2C總線的功能以及初始化包含系統(tǒng)信息的文件系統(tǒng)(/proc);算法模塊用來初始化PCF8584設(shè)備以及定義PCF8584的函數(shù)(i2c_start,i2c_stop(), wait_for_pin());適配器模塊通過被映射到MCU的存儲器地址將數(shù)據(jù)傳送到MCU。

            為了驅(qū)動PCF8584接口設(shè)備,需要對模塊進行初始化。在通常的linux系統(tǒng)中,設(shè)備驅(qū)動在運行時載入和初始化,而在嵌入式linux系統(tǒng)中,設(shè)備驅(qū)動將在啟動階段被加載和初始化。4個模塊的初始化程序被存儲在“.init”段的“_init”處,由“do_initcalls()”函數(shù)在啟動時調(diào)用執(zhí)行??刂茢?shù)據(jù)從接口模塊開始,依次經(jīng)內(nèi)核模塊、算法模塊、適配器模塊傳送。接口模塊接收應用程序的請求(open, write, read, ioctl),調(diào)用內(nèi)核模塊的接口程序(master_send(), master_receive(),transfer()),同時傳遞參數(shù)。內(nèi)核模塊將從地址、標記位、信息長度等數(shù)據(jù)傳送到算法模塊。算法模塊檢查I2C總線的狀態(tài)和從地址,設(shè)置PCF8584的控制寄存器。最后,適配器模塊從被映射到外部總線的地址空間中讀寫數(shù)據(jù)。

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉