<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于數字電視系統的嵌入式linux操作系統實(shí)現

基于數字電視系統的嵌入式linux操作系統實(shí)現

作者: 時(shí)間:2013-04-06 來(lái)源:網(wǎng)絡(luò ) 收藏



圖2 MCU和I2C總線(xiàn)之間的連接

4.系統移植

在這一部分中,我們將解釋的移植順序。包括修改內核初始化代碼和編寫(xiě)設備驅動(dòng)程序。

4.1重建內核初始化代碼

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

4.1.1設置存儲器映射

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


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

1)bootloader將主機的linux內核拷貝到數字處理模塊上的SDRAM中。

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

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

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

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

4.1.2 內核需要的設備

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

4.2設備驅動(dòng)的設計

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

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

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>