<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于嵌入式設(shè)備上的Linux 系統(tǒng)開發(fā)

          關(guān)于嵌入式設(shè)備上的Linux 系統(tǒng)開發(fā)

          作者: 時(shí)間:2012-08-28 來源:網(wǎng)絡(luò) 收藏

          };

          setup_arch 還需要對閃存存儲庫、寄存器和其它特定執(zhí)行內(nèi)存映射。一旦完成了特定于體系結(jié)構(gòu)的設(shè)置,控制就返回到初始化其余部分的 start_kernel 函數(shù)。這些附加的初始化任務(wù)包含:

          設(shè)置陷阱

          初始化中斷

          初始化計(jì)時(shí)器

          初始化控制臺

          調(diào)用 mem_init ,它計(jì)算各種區(qū)域、高內(nèi)存區(qū)等內(nèi)的頁面數(shù)量

          初始化 slab 分配器并為 VFS、緩沖區(qū)高速緩存等創(chuàng)建 slab 高速緩存

          建立各種文件,如 proc、ext2 和 JFFS2

          創(chuàng)建 kernel_thread ,它執(zhí)行文件系統(tǒng)中的 init 命令并顯示 lign 提示符。 如果在 /bin、/sbin 或 /etc 中沒有 init 程序,那么內(nèi)核將執(zhí)行文件系統(tǒng)的 /bin 中的 shell。

          驅(qū)動程序

          系統(tǒng)通常有許多用于與用戶交互,象觸摸屏、小鍵盤、滾動輪、傳感器、RA232 接口、LCD 等等。除了這些設(shè)備外,還有許多其它專用設(shè)備,包括閃存、USB、GSM 等。內(nèi)核通過所有這些設(shè)備各自的設(shè)備驅(qū)動程序來控制它們,包括 GUI 用戶應(yīng)用程序也通過訪問這些驅(qū)動程序來訪問設(shè)備。本節(jié)著重討論通常幾乎在每個環(huán)境中都會使用的一些重要設(shè)備的設(shè)備驅(qū)動程序。

          幀緩沖區(qū)驅(qū)動程序

          這是最重要的驅(qū)動程序之一,因?yàn)橥ㄟ^這個驅(qū)動程序才能使系統(tǒng)屏幕顯示內(nèi)容。幀緩沖區(qū)驅(qū)動程序通常有三層。最底層是基本控制臺驅(qū)動程序 drivers/char/console.c,它提供了文本控制臺常規(guī)接口的一部分。通過使用控制臺驅(qū)動程序函數(shù),我們能將文本打印到屏幕上 D 但圖形或動畫還不能(這樣做需要使用視頻模式功能,通常出現(xiàn)在中間層,也就是 drivers/video/fbcon.c 中)。這個第二層驅(qū)動程序提供了視頻模式中繪圖的常規(guī)接口。

          幀緩沖區(qū)是顯卡上的內(nèi)存,需要將它內(nèi)存映射到用戶空間以便可以將圖形和文本能寫到這個內(nèi)存段上:然后這個信息將反映到屏幕上。幀緩沖區(qū)支持提高了繪圖的速度和整體性能。這也是頂層驅(qū)動程序引人注意之處:頂層是非常特定于硬件的驅(qū)動程序,它需要支持顯卡不同的硬件方面 D 象啟用/禁用顯卡控制器、深度和模式的支持以及調(diào)色板等。所有這三層都相互依賴以實(shí)現(xiàn)正確的視頻功能。與幀緩沖區(qū)有關(guān)的設(shè)備是 /dev/fb0(主設(shè)備號 29,次設(shè)備號 0)。

          輸入設(shè)備驅(qū)動程序

          可觸摸板是用于設(shè)備的最基本的用戶交互設(shè)備之一 D 小鍵盤、傳感器和滾動輪也包含在許多不同設(shè)備中以用于不同的用途。

          觸摸板設(shè)備的主要功能是隨時(shí)報(bào)告用戶的觸摸,并標(biāo)識觸摸的坐標(biāo)。這通常在每次發(fā)生觸摸時(shí),通過生成一個中斷來實(shí)現(xiàn)。

          然后,這個設(shè)備驅(qū)動程序的角色是每當(dāng)出現(xiàn)中斷時(shí)就查詢觸摸屏控制器,并請求控制器發(fā)送觸摸的坐標(biāo)。一旦驅(qū)動程序接收到坐標(biāo),它就將有關(guān)觸摸和任何可用數(shù)據(jù)的信號發(fā)送給用戶應(yīng)用程序,并將數(shù)據(jù)發(fā)送給應(yīng)用程序(如果可能的話)。然后用戶應(yīng)用程序根據(jù)它的需要處理數(shù)據(jù)。

          幾乎所有輸入設(shè)備 D 包括小鍵盤 D 都以類似原理工作。

          閃存 MTD 驅(qū)動程序

          MTD 設(shè)備是象閃存芯片、小型閃存卡、記憶棒等之類的設(shè)備,它們在嵌入式設(shè)備中的使用正在不斷增長。

          MTD 驅(qū)動程序是在 下專門為嵌入式環(huán)境的新的一類驅(qū)動程序。相對于常規(guī)塊設(shè)備驅(qū)動程序,使用 MTD 驅(qū)動程序的主要優(yōu)點(diǎn)在于 MTD 驅(qū)動程序是專門為基于閃存的設(shè)備所設(shè)計(jì)的,所以它們通常有更好的支持、更好的管理和基于扇區(qū)的擦除和讀寫操作的更好的接口。 下的 MTD 驅(qū)動程序接口被劃分為兩類模塊:用戶模塊和硬件模塊。

          用戶模塊

          這些模塊提供從用戶空間直接使用的接口:原始字符訪問、原始塊訪問、FTL(閃存轉(zhuǎn)換層,F(xiàn)lash Transition Layer D 用在閃存上的一種文件系統(tǒng))和 JFS(即日志文件系統(tǒng),Journaled File System D 在閃存上直接提供文件系統(tǒng)而不是模擬塊設(shè)備)。用于閃存的 JFS 的當(dāng)前版本是 JFFS2(稍后將在本文中描述)。

          硬件模塊

          這些模塊提供對內(nèi)存設(shè)備的物理訪問,但并不直接使用它們。通過上述的用戶模塊來訪問它們。這些模塊提供了在閃存上讀、擦除和寫操作的實(shí)際例程。

          MTD 驅(qū)動程序設(shè)置

          為了訪問特定的閃存設(shè)備并將文件系統(tǒng)置于其上,需要將 MTD 子系統(tǒng)編譯到內(nèi)核中。這包括選擇適當(dāng)?shù)?MTD 硬件和用戶模塊。當(dāng)前,MTD 子系統(tǒng)支持為數(shù)眾多的閃存設(shè)備 D 并且有越來越多的驅(qū)動程序正被添加進(jìn)來以用于不同的閃存芯片。

          有兩個流行的用戶模塊可啟用對閃存的訪問: MTD_CHAR 和 MTD_BLOCK 。

          MTD_CHAR 提供對閃存的原始字符訪問,而 MTD_BLOCK 將閃存設(shè)計(jì)為可以在上面創(chuàng)建文件系統(tǒng)的常規(guī)塊設(shè)備(象 IDE 磁盤)。與 MTD_CHAR 關(guān)聯(lián)的設(shè)備是 /dev/mtd0、mtd1、mtd2(等等),而與 MTD_BLOCK 關(guān)聯(lián)的設(shè)備是 /dev/mtdblock0、mtdblock1(等等)。由于 MTD_BLOCK 設(shè)備提供象塊設(shè)備那樣的模擬,通常更可取的是在這個模擬基礎(chǔ)上創(chuàng)建象 FTL 和 JFFS2 那樣的文件系統(tǒng)。

          為了進(jìn)行這個操作,可能需要創(chuàng)建分區(qū)表將閃存設(shè)備分拆到引導(dǎo)裝載程序節(jié)、內(nèi)核節(jié)和文件系統(tǒng)節(jié)中。樣本分區(qū)表可能包含以下信息:

          清單 5. MTD 的簡單閃存設(shè)備分區(qū)

          struct mtd_partition sample_partition = {

          {

          /* First partition */

          name : bootloader, /* Bootloader section */

          size : 0x00010000, /* Size */

          offset : 0, /* Offset from start of flash- location 0x0*/

          mask_flags : MTD_WRITEABLE /* This partition is not writable */

          },

          { /* Second partition */

          name : Kernel, /* Kernel section */

          size : 0x00100000, /* Size */

          offset : MTDPART_OFS_APPEND, /* Append after bootloader section */

          mask_flags : MTD_WRITEABLE /* This partition is not writable */

          },

          { /* Third partition */

          name : JFFS2, /* JFFS2 filesystem */

          size : MTDPART_SIZ_FULL, /* Occupy rest of flash */

          offset : MTDPART_OFS_APPEND /* Append after kernel section */

          }

          }

          上面的分區(qū)表使用了 MTD_BLOCK 接口對閃存設(shè)備進(jìn)行分區(qū)。這些分區(qū)的設(shè)備節(jié)點(diǎn)是:

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


          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();