IES101 嵌入式系統基本軟體技術
(6) 裝置驅動程式(解題說明)
-----------------------------------------------------------------------------------------------------------------
6-01 ----------------------------------------------------------------------------------------------------------
- 裝置驅動程式是核心之中,由一些函式與資料所組成的 I/O 裝置的軟體介面
- 裝置驅動程式可以被多個使用者的應用程式所同時共享
- Linux 裝置驅動程式有以下幾點特徵
- 包含可以與硬體裝置溝通的常式,並提供作業系統統一的使用介面
- 裝置驅動程式是一個自訂的元件,可以動態地從作業系統中加入或移除
- 可以管理並控制在使用者程式與週邊裝置之間的資料傳遞
- 包含一段使用者所定義的核心,可以讓程式或是週邊裝置以 "/dev" 目錄下的檔案形式供其他行程使用
- 字元和區塊裝置是 Linux 中兩種最主要的裝置類別
- 字元裝置與檔案相似,利用位元組串流方式存取資料
裝置驅動程式(英語:device driver),簡稱驅動程式(driver),是一個允許高階(High level)電腦軟體(computer software)與硬體(hardware)互動的程式,這種程式建立了一個硬體與硬體,或硬體與軟體溝通的介面,經由主機板上的匯流排(bus)或其它溝通子系統(subsystem)與硬體形成連接的機制,這樣的機制使得硬體裝置(device)上的資料交換成為可能。
驅動程式的開發工作是很具挑戰性的,因為必須配合著硬體與軟體上相當明確與高級的平台技術。由於大多數的驅動程式(device drivers)執行在核心模式(kernel mode),軟體的錯誤經常造成系統嚴重的不穩定,例如藍色當機畫面(blue screen),這跟過去的使用者模式(user mode)下的程式設計(例如Delphi、VB、Java)有明顯的差異性。
Windows平台
為了大量減輕驅動程式開發人員的負擔,微軟不斷的改進驅動程式的開發軟體與架構,從早期複雜深晦的VxD,到Windows XP上的Windows Driver Model(以下簡稱WDM)開發架構,如今Windows Driver Foundation(以下簡稱WDF)已成為新一代的Windows平台驅動程式發展架構,這個架構大量簡化了驅動程式的開發流程,更符合物件導向的精神,此架構包含了User Mode Driver Framework 與 Kernel Mode Driver Framework兩種開發模式。在開發Windows平台上的驅動程式之前,必須先安裝DDK套件,目前DDK最新版本為5600,同時支援WDM與WDF兩種架構。
Linux平台
虛擬裝置驅動程式
有一種特殊的驅動程式名為虛擬裝置驅動程式(virtual device drivers),可用於虛擬化的環境(virtualization environments),例如DOS程式要執行於Windows平台上,就必須要利用這種虛擬裝置驅動程式,像是VMware就是一種「虛擬PC」的軟體,可以在一台機器上同時執行兩個或兩個以上的Windows、DOS、LINUX 系統,VMWare是真正實現了「同時」執行,多個作業系統在主系統的平台上,就像標準Windows應用程式那樣切換一樣容易。
-----------------------------------------------------------------------------------------------------------------
6-02 ----------------------------------------------------------------------------------------------------------
驅動程式的開發工作是很具挑戰性的,因為必須配合著硬件與軟件上相當明確與高級的平台技術。由於大多數的驅動程式(device drivers)運行在核心模式(kernel mode),軟件的錯誤經常造成系統嚴重的不穩定,例如藍色當機畫面(blue screen),這跟過去的使用者模式(user mode)下的程式設計(例如Delphi、VB、Java)有明顯的差異性。
The Uniform Driver Interface (UDI) is a defunct project developed by several companies to define a portable interface for device drivers.
The Uniform Driver Interface (UDI) allowed device drivers to be portable across both hardware platforms and operating systems without any changes to the driver source. With the participation of multiple OS, platform and device hardware vendors, UDI was intended to be the first interface which was likely to achieve such portability on a wide scale. UDI provided an encapsulating environment for drivers with well-defined interfaces which isolated drivers from OS policies and from platform and I/O bus dependencies. In principle, this allowed driver development to be totally independent of OS development. In addition, the UDI architecture was intended to insulate drivers from platform specifics such as byte-ordering, DMA implications, multi-processing, interrupt implementations and I/O bus topologies.
While UDI could potentially benefit open source operating systems such as Linux and *BSD by providing more driver support from companies, some open source/free software advocates feared that UDI would cause a proliferation of closed source drivers and a reduction in open source support by companies, undermining the purpose of the free software and open source movements. Richard Stallman (the leader of the free software movement) has claimed that the project does not benefit the free software movement. [1]
WDDM是改良舊有的Windows XP上的XPDM架構,XPDM是使用2D 的GDI(Graphics Device Interface)或 GDI+,與XPDM相比,WDDM是3D加速桌面,最早適用於WIndows Vista之上[1] 。Window7 上支援有 WDDM 1.1。
-----------------------------------------------------------------------------------------------------------------
6-03 ----------------------------------------------------------------------------------------------------------
送分題
-----------------------------------------------------------------------------------------------------------------
6-04 ----------------------------------------------------------------------------------------------------------
中斷向量(Interrupt vector)是中斷服務程序的入口地址,或中斷向量表(它是一個數組)的下標,中斷服務程序的入口地址存放在該數組中。
系統程式必須maintain一個中斷向量表,這是一個很單純的表格,每一個entry紀錄一個位址,這個位址指到一段程式(或說一個函數),稱為中斷處理程式(或ISR,Interrupt Service Routine)
- 系統程式必須告訴CPU或中斷處理器,中斷向量表放在哪裡(位於哪個位址)
- 當外部事件或exception產生時,CPU或中斷處理器會知道第幾號中斷產生了,並參考中斷向量表,再將CPU「跳」到中斷向量表相對entry裡紀錄的位址
- 中斷處理程式執行完畢後,會返回被中斷的程式
-----------------------------------------------------------------------------------------------------------------
6-05 ----------------------------------------------------------------------------------------------------------
Linux 驅動程式的 I/O, #2: I/O 存取相關函數
I/O 存取相關函數
要提到「I/O 處理」當然要整理 Linux 提供的相關函數,以下分 3 大類來整理:
1. I/O port
2. I/O memory
3. PCI configuration space
4. ioremap
2. I/O memory
3. PCI configuration space
4. ioremap
I/O Port
以下是 Linux 提供最原始的 I/O port 存取函數:
˙ unsigned inb(unsigned port);
˙ unsigned inw(unsigned port);
˙ unsigned inl(unsigned port);
˙ void outb(unsigned char byte, unsigned port);
˙ void outw(unsigned short word, unsigned port);
˙ void outl(unsigned long word, unsigned port);
˙ unsigned inw(unsigned port);
˙ unsigned inl(unsigned port);
˙ void outb(unsigned char byte, unsigned port);
˙ void outw(unsigned short word, unsigned port);
˙ void outl(unsigned long word, unsigned port);
I/O Memory
以下是 Linux 提供最原始的 I/O memory 存取函數:
˙ unsigned readb(unsigned port);
˙ unsigned readw(unsigned port);
˙ unsigned readl(unsigned port);
˙ void writeb(unsigned char byte, unsigned port);
˙ void writew(unsigned short word, unsigned port);
˙ void writel(unsigned long word, unsigned port);
˙ unsigned readw(unsigned port);
˙ unsigned readl(unsigned port);
˙ void writeb(unsigned char byte, unsigned port);
˙ void writew(unsigned short word, unsigned port);
˙ void writel(unsigned long word, unsigned port);
對於 I/O memory 的操作,Linux 也提供 memory copy 系列函數如下:
˙ memset_io(address, value, count);
˙ memcpy_fromio(dest, source, num);
˙ memcpy_toio(dest, source, num);
˙ memcpy_fromio(dest, source, num);
˙ memcpy_toio(dest, source, num);
PCI Configuration Space
Linux 也提供讀寫 PCI configuration space(PCI BIOS)的函數:
˙ int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);
˙ int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);
˙ int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);
˙ int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);
˙ int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
˙ int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
˙ int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);
˙ int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);
˙ int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);
˙ int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
˙ int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
有些朋友可能看過開頭是 pcibios_* 的函數版本,「不過這是舊的函數,請勿再使用」。
ioremap()
這個 API 就重要到不行了,任何時候,Linux device driver 都「不能直接存取 physical address」。所以,「使用以上的 I/O 相關函數時,只能傳 virtual address,不能傳入 physical address」,ioremap() 就是用來將 physical address 對應到 virtual address 的 API。
小結
對於 I/O 函數的使用,應該在「深諳」Linux驅動程式架構與Linux作業系統原理的情況下使用,「單純的 kernel module + IO APIs」並不叫做 Linux 驅動程式,再更進一步的「kernel module + read/write/ioctl + IO APIs」也只是小聰明(編註),還是稱不上 Linux「驅動程式」。建構在作業系統裡的驅動程式,90% 都是在實作良好的機制與行為,因此「OS 原理與機制的研究」,才是正確的思考方向。與大家分享自己的心得,希望對您的學習有幫助。
編註:這是 Linux device driver 的「開始」但不是全部,也只是冰山一角。但是許多教育訓練機構的課程卻是以此為做為規劃方向,並不是很妥當。
-----------------------------------------------------------------------------------------------------------------
6-06 ----------------------------------------------------------------------------------------------------------
Ref. 6-01
-----------------------------------------------------------------------------------------------------------------
6-07 ----------------------------------------------------------------------------------------------------------
(B)
對于做嵌入式或者熟悉linux內核的人來說,對printk這個函數一定不會感到陌生。printk相當于printf的孿生姐妹,她們一個運行在用戶態,另一個則在內核態被人們所熟知。
printk是在內核中運行的向控制台輸出顯示的函數,Linux內核首先在內核空間分配一個靜態緩沖區,作爲顯示用的空間,然後調用sprintf,格式化顯示字符串,最後調用tty_write向終端進行信息的顯示。
printk與printf的差異,是什麽導致一個運行在內核態而另一個運行用戶態?其實這兩個函數的幾乎是相同的,出現這種差異是因爲tty_write函數需要使用fs指向的被顯示的字符串,而fs是專門用于存放用戶態段選擇符的,因此,在內核態時,爲了配合tty_write函數,printk會把fs修改爲內核態數據段選擇符ds中的值,這樣才能正確指向內核的數據緩沖區,當然這個操作會先對fs進行壓棧保存,調用tty_write完畢後再出棧恢複。總結說來,printk與printf的差異是由fs造成的,所以差異也是圍繞對fs的處理。
printk是在內核中運行的向控制台輸出顯示的函數,Linux內核首先在內核空間分配一個靜態緩沖區,作爲顯示用的空間,然後調用sprintf,格式化顯示字符串,最後調用tty_write向終端進行信息的顯示。
printk與printf的差異,是什麽導致一個運行在內核態而另一個運行用戶態?其實這兩個函數的幾乎是相同的,出現這種差異是因爲tty_write函數需要使用fs指向的被顯示的字符串,而fs是專門用于存放用戶態段選擇符的,因此,在內核態時,爲了配合tty_write函數,printk會把fs修改爲內核態數據段選擇符ds中的值,這樣才能正確指向內核的數據緩沖區,當然這個操作會先對fs進行壓棧保存,調用tty_write完畢後再出棧恢複。總結說來,printk與printf的差異是由fs造成的,所以差異也是圍繞對fs的處理。
(D)
核心空間(kernel space)/使用者空間與核心空間
- 模組存活在kernel space(核心空間)而應用程式存在user space(使用者空間).
- 作業系統必須負責讓程式得以獨立運作並保護系統資源避免非授權的存取.
- 由CPU來保護系統軟體所以CPU本身提供了不同層級的作業模式(operating modality).
- Unix系統提供兩個層級而現在CPU也至少有兩種層級,故Unix系統只使用最高與最低層級,Unix核心運作在最高層級(supervisor mode)應用程式運作在最低層級(user mode).
- execution mode:包括kernel-space 與user-space分別有各自的memory mapping(記憶體對應關係)的關係與各自的address space(定址空間).
-----------------------------------------------------------------------------------------------------------------
6-08 ----------------------------------------------------------------------------------------------------------
中斷基本觀念題
(7) 應用軟體與系統整合(解題說明)
-----------------------------------------------------------------------------------------------------------------
7-01 ----------------------------------------------------------------------------------------------------------
在嵌入式系統中,Board Support Package(簡稱BSP,中譯開發板支援套裝軟體)是實作特定的支援程式碼讓所給的板來符合所給的作業系統,通常會與 bootloader 一起建置,bootloader包含最小的裝置驅動來載入作業系統與所有在板上的裝置的驅動程式。
歷史
大約從1988年開始出現這個詞。這詞的來源最常被歸於 溫瑞爾公司(Wind River Systems) 給它的 VxWorks 嵌入式作業系統,不過現在已經廣泛的在業界使用。如 QNX Software Systems 也提供 BSPs。Microsoft也提供有 Windows CE 作業系統的 BSPs。
Windows CE 作業系統的 BSP 包含有:
- bootloader
- 驅動
- OEM Adaptation Layer(OAL)
- 配置檔案
範例
溫瑞爾公司為 ARM Integrator 920T 開發板提供的 BSP 包含以下部分(還有其他部分未列出):
- 一個 config.h 檔案, 定義了一些常量例如 ROM_SIZE 和 RAM_HIGH_ADRS
- 一個 bootrom 檔案, 定義了這個板相關的啟動參數等
- 一個 target.ref 檔案, 描述了板相關的資訊,例如開關和跳線設定,中斷等
- 一個 VxWorks 映像
- C 程式碼,包含有:
- flashMem.c -- 開發板的快閃記憶體的驅動
- pciIomapShow.c -- 將 PCI 匯流排對映成檔案
- primeCellSio.c -- TTY 驅動
- sysLib.c -- 開發板系統相關的範例程式
- romInit.s -- 開發板的 ROM 初始化模組,包含開發板從 ROM 操作程式的入口程式碼
-----------------------------------------------------------------------------------------------------------------
7-02 ----------------------------------------------------------------------------------------------------------
以空間換時間
-----------------------------------------------------------------------------------------------------------------
7-03 ----------------------------------------------------------------------------------------------------------
AB
(B)通常標準程式庫功能設計較完整,執行也通常可能較慢。
-----------------------------------------------------------------------------------------------------------------
7-04 ----------------------------------------------------------------------------------------------------------
Bit-banging 是一种用软件替代专职硬件的串行通信的技术。软件直接对微处理器的管脚的状态进行设置和采样,其功能涵盖诸如:时钟,电平,同步等所有参数。与此不同的是(传统的串行通信技术中),专职硬件诸如 modem、UART 或者 位移寄存器等一般是用来处理这些参数并且提供一个(缓存)的数据接口,软件在这种情况下同信号处理无关。实现 Bit-banging 技术的成本可以是很低的,比如利用 嵌入式系统。
尽管它同“骇客”有些关联,bit-banging 具有明显优点诸如:让相同的设备运行不同的协议而只需很小的(甚至不需)硬件的改动。借助很少的额外设备,我们也许可以从数字管脚(数字终端)可以得到视频信号。
bit-banging 也有一些明显的缺点。在软件仿真的过程中消耗的能量比同样功能的专职硬件大。微处理器过忙地从管脚采样和发送采样信号到管脚。在同等微处理器处理能力下,系统常常会有些噪音。尽管如此,如果bit-banging 仅仅是相应硬件中断的例程的话,这些影响便微乎其微。
-----------------------------------------------------------------------------------------------------------------
7-05 ----------------------------------------------------------------------------------------------------------
觀念題
-----------------------------------------------------------------------------------------------------------------
7-06 ----------------------------------------------------------------------------------------------------------
送分題
-----------------------------------------------------------------------------------------------------------------
7-07 ----------------------------------------------------------------------------------------------------------
uClibc
在計算術語中,uClibc 是一個面向嵌入式Linux系統的小型的C標準庫。最初uClibc是為了支援uClinux而開發,這是一個不需要內部記憶體管理單元的Linux版本,因此適合於微控制器系統(uCs;此處"u"是代表"micro"的μ的羅馬化).[2]
uClibc比一般用於Linux發行版的C庫GNU C 函式庫 (glibc)要小得多,glibc標的是要支援最大範圍的硬體和核心平台的所有C標準,而uClibc專注於嵌入式Linux。很多功能可以根據空間需求進行取捨。
uClibc執行於標準的以及無MMU的Linux系統上,支援i386,x86 64,ARM (big/little endian), AVR32,Blackfin,h8300,m68k,MIPS (big/little endian),PowerPC,SuperH (big/little endian),SPARC,和v850等處理器。
uClinux
----------------------------------------------------------------------------------------------------------------
GNU較寬鬆公共許可證
GNU較寬鬆公共許可證,簡稱LGPL(GNU Lesser General Public License),被用於一些(但不是全部)的GNU程序庫。這個許可證以前被稱為GNU庫(Library)通用公共許可證。此許可證最新版本為「版本3」,2007年6月29日發布,較早的版本有2.0和2.1版。此種授權之出現,是為了在GPL與許可式授權(如MIT及柏克萊大學的BSD)間取得折衝。
採用LGPL之計畫本身雖然仍有"著作權脫離"("Copyleft")之限制條件,但這些限制不感染僅僅只聯結到本計畫的軟體。不過此等軟體仍會受到其他限制。
LGPL主要使用之標的為軟體函式庫("Software Libraries"),雖然其亦可使用於獨立存在的應用程式。比較有名的例子為Mozilla跟OpenOffice.Org.
(8) 嵌入式系統的開發環境(解題說明)
-----------------------------------------------------------------------------------------------------------------
8-01 ----------------------------------------------------------------------------------------------------------
Ref. 7-07
-----------------------------------------------------------------------------------------------------------------
8-02 ----------------------------------------------------------------------------------------------------------
JTAG
JTAG是聯合測試工作群組(Joint Test Action Group)的簡稱,是在名為標準測試存取埠和邊界掃描結構的IEEE的標準1149.1的常用名稱。此標準用於測試存取埠,使用邊界掃描的方法來測試印刷電路板。
1990年JTAG正式由IEEE的1149.1-1990號文件標準化,在1994年,加入了補充文件對邊界掃描描述語言(BSDL)進行了說明。從那時開始,這個標準被全球的電子企業廣泛採用。邊界掃描幾乎成為了JTAG的同義詞。
在設計印刷電路版時,目前最主要用在測試積體電路的副區塊,而且也提供一個在嵌入式系統很有用的偵錯機制,提供一個在系統中方便的"後門"。當使用一些偵錯工具像電路內類比器用JTAG當做訊號傳輸的機制,使得程式設計師可以經由JTAG去讀取整合在CPU上的偵錯模組。偵錯模組可以讓程式設計師偵錯嵌入式系統中的軟體 。
電氣特性
JTAG的介面是一種特殊的4/5個接腳介面連到晶片上 ,所以在電路版上的很多晶片可以將他們的JTAG接腳透過Daisy Chain的方式連在一起,並且Probe只需連線到一個「JTAG埠」就可以存取一塊電路板上的所有IC。這些連線引腳是:
- TDI(測試資料輸入)
- TDO(測試資料輸出)
- TCK(測試時鐘)
- TMS(測試模式選擇)
- TRST(測試複位)可選。
因為只有一條資料線,通訊協議有必要像其他序列裝置介面,如SPI一樣為串列傳輸。時鐘由TCK引腳輸入。配置是透過TMS引腳採用狀態機的形式一次操作一位來實作的。每一位資料在每個TCK時鐘脈衝下分別由TDI和TDO引腳傳入或傳出。可以透過載入不同的命令模式來讀取晶片的標識,對輸入引腳採樣,驅動(或懸空)輸出引腳,操控晶片功能,或者旁路(將TDI與TDO連通以在邏輯上短接多個晶片的鏈路)。TCK的工作頻率依晶片的不同而不同,但其通常工作在10-100MHz(每位10-100ns)。
當在積體電路中進行邊界掃描時,被處理的訊號是在同一塊IC的不同功能模組間的,而不是不同IC之間的。
TRST引腳是一個可選的相對待測邏輯低電平有效的複位開關——通常是非同步的,但有時也是同步的,依晶片而定。如果該引腳沒有定義,則待測邏輯可由同步時鐘輸入複位指令而複位。
廣泛的應用
-----------------------------------------------------------------------------------------------------------------
8-03 ----------------------------------------------------------------------------------------------------------
所謂「Black Box Testing」,是指只知道受測元件的介面與功能等規格(例如它應當執行哪些功能,以及「什麼樣的 input 該得到什麼樣的 output」等等),但完全不瞭解或是完全不在乎受測元件是如何完成這些功能;在這樣的環境與條件下所執行的測試,就是 black box testing。
就「Test Case Design」而言,因為 black box test case 完全不涉及受測元件的內部架構與實作的細節,所以它的可重複使用性很高,而且不需要等到受測元件完成之後才能設計 test case。
所謂「White Box Testing」,是指根據受測元件的規格、以及其內部的架構、實作的細節與設計意圖(design intention),而所執行的測試。white box testing 的優點是:除了可驗證實作細節的設計意圖之外,亦能操控受測元件的內部機制,使得測試者可以進一步地以更有效率的方式來測試受測元件;例如藉由操控內部的某些機制,可以更方便地產生某些特殊的 input pattern,或是讓受測元件以更短的時間進入某種狀態等等。
就「Test Case Design」而言,因為 black box test case 完全不涉及受測元件的內部架構與實作的細節,所以它的可重複使用性很高,而且不需要等到受測元件完成之後才能設計 test case。
所謂「White Box Testing」,是指根據受測元件的規格、以及其內部的架構、實作的細節與設計意圖(design intention),而所執行的測試。white box testing 的優點是:除了可驗證實作細節的設計意圖之外,亦能操控受測元件的內部機制,使得測試者可以進一步地以更有效率的方式來測試受測元件;例如藉由操控內部的某些機制,可以更方便地產生某些特殊的 input pattern,或是讓受測元件以更短的時間進入某種狀態等等。
-----------------------------------------------------------------------------------------------------------------
8-04 ----------------------------------------------------------------------------------------------------------
殼層
-----------------------------------------------------------------------------------------------------------------
8-05 ----------------------------------------------------------------------------------------------------------
BDM
1.background debug mode(BDM)
背景调试模式,是一种通讯手段,是当代单片机普遍采用的调试方式之一,BDM能在单片机运行时对单片机动态调试,比如在飞思卡尔单片机制作智能小车中的应用
Background Debug Mode interface
Background Debug Mode (BDM) interface is an electronic interface that allows debugging of embedded systems. Specifically, it provides in-circuit debugging functionality in microcontrollers. It requires a single wire and specialized electronics in the system being debugged. It appears in many Freescale Semiconductor products.
The interface allows a Host to manage and query a Target. Specialized hardware is required in the target device. No special hardware is required in the host; a simple bi-directional I/O pin is sufficient.
I/O signals
The signals used by BDM to communicate data to and from the target are initiated by the host processor. The host negates the transmission line, and then either
- Asserts the line sooner, to output a 1,
- Asserts the line later, to output a 0,
- Tri-states its output, allowing the target to drive the line. The host can sense a 1 or 0 as an input value.
At the start of the next bit time, the host negates the transmission line, and the process repeats. Each bit is communicated in this manner.
In other words the increasing complexity of today’s software and hardware designs is leading to some fresh approaches to debugging. Silicon manufacturers offer more and more on-chip debugging features for emulation of new processors.
This capability, implemented in various processors under such names as Background Debug Mode (BDM), JTAG and on-chip emulation[dubious – discuss], puts basic debugging functions on the chip itself. With a BDM (1 wire interface) or JTAG (standard JTAG) debug port, you control and monitor the microcontroller solely through the stable on-chip debugging services.
This debugging mode runs even when the target system crashes and enables developers to continue investigating the cause of the crash.
Microcontroller application development
A good development tool environment is important to reduce total development time and cost. Users want to debug their application program under conditions that imitate the actual setup of their system. Because of that, the capability to debug a user program in an actual target system is required. This is known as in-circuit debugging. Furthermore, most new MCUs have nonvolatile memory such as flash memory so that programming code on the target system is also required.[dubious – discuss] This is known as in-circuit programming.
To support in-circuit debugging and programming requirements, the HC08 Family has the monitor mode and the HCS08 and RS08 utilize a background debug mode (BDM). The background debug hardware on the HCS08 consists of a background debug controller (BDC) and debug module (DBG). The background debug hardware on the RS08 consists of the background debug controller (BDC) only.
BDM commands
The BDM host can issue commands with parameters to the target. Some commands allow reading or writing of blocks of the target's memory, individual registers in the CPU, or registers not available to the target.
Examples include:
BDM commands
| |
READ_BYTE
|
Read a byte from memory
|
WRITE_BYTE
|
Write a byte to memory
|
GO
|
Start/resume executing at current program counter location
|
WRITE_PC
|
Write a value to the program counter
|
READ_PC
|
Read the value of the program counter
|
WRITE_X
|
Write a value to the index register
|
READ_X
|
Read the value of the index register
|
READ_SP
|
Read the value of the stack pointer
|
BDM functions
Depending on the target part, the BDM controller may feature a hardware breakpoint register. The register holds a value indicating an address in memory. When the target part's CPU accesses that location in memory, the BDM hardware can take control of the target part, stop program execution, and begin operating in Background Mode.
(9) 最新趨勢(解題說明)
-----------------------------------------------------------------------------------------------------------------
9-01 ----------------------------------------------------------------------------------------------------------
Android
Android
| |
程式語言
| |
運作狀態
|
開發中
|
原始碼模式
| |
初始版本
| |
平板電腦:
4.2(Jelly Bean) / 2012年10月29日;36天前
行動電話:
4.2(Jelly Bean) / 2012年10月29日;36天前 | |
支援平台
| |
核心型別
| |
預設使用者介面
| |
官方網站
|
早期Android裝置
2011年,首款採用Android 4.0系統的Galaxy Nexus
Android(讀音:['ændrɔid],中文俗稱安卓)是一個以Linux為基礎的半開放原始碼作業系統,主要用於行動設備,由Google成立的Open Handset Alliance(OHA,開放手機聯盟)持續領導與開發中。
Android系統最初由安迪·魯賓(Andy Rubin)開發製作[4],最初主要支援手機,於2005年8月被美國科技企業Google收購。[5]2007年11月,Google與84家硬體製造商、軟體開發商及電信營運商成立開放手持設備聯盟來共同研發改良Android系統,隨後,Google以Apache免費開源許可證的授權方式,發布了Android的源代碼[6]。讓生產商推出搭載Android的智慧型手機[7][8][9][10],Android作業系統後來更逐漸拓展到平板電腦及其他領域上[11]。
Google透過官方網上商店平台Google Play,提供應用程式和遊戲供用戶下載,截止至2012年6月,Google Play商店擁有超過60萬個官方認證應用程式[12][13]。同時用戶亦可以通過第三方網站來下載。
系統設計
[] Linux內核
Android作業系統的內核屬於Linux內核的一個分支,具有典型的Linux週期和功能,[37]除此之外,Google為了能讓Linux在移動設備上良好的執行,對其進行了修改和擴充。Android去除了Linux中的本地X Window System,也不支援標準的GNU庫,這使得Linux平台上的應用程式移植到Android平台上變得困難[38]。2008年,Patrick Brady於Google I/O演講「Anatomy & Physiology of an Android」,並提出的Android HAL架構圖。HAL以*.so檔的形式存在,可以把Android framework與Linux kernel隔開,這種中介層的方式使得Android能在移動設備上獲得更高的執行效率。這種獨特的系統結構被Linux核心開發者Greg Kroah-Hartman和其他內核維護者稱讚。Google還在Android的內核中加入了自己開發製作的一個名為「wakelocks」的移動設備電源管理功能,該功能用於管理移動設備的電池效能,但是該功能並沒有被加入到Linux內核的主線開放和維護中,因為Linux內核維護者認為Google沒有向他們展示這個功能的意圖和代碼。
2010年2月3日,由於Google在Android內核開發方面和Linux社區方面開發的不同步,Linux核心開發者Greg Kroah-Hartman將Android的驅動程式從Linux核心「狀態樹」(「staging tree」)上除去。[39]2010年4月,Google宣布將派遣2名開發人員加入Linux內核社區,以便重返Linux內核。2010年9月,Linux內核開發者Rafael J. Wysocki添加了一個修復程式,使得Android的「wakelocks」可以輕鬆地與主線Linux內核合併。2011年,Linus Torvalds說:「Android的內核和Linux的內核將最終回歸到一起,但可能不會是4-5年。」
[] 特點
當前的Android作業系統具有以下幾個功能:
顯示佈局
Android作業系統支援更大的解析度,VGA,2D顯示,3D顯示都給予OpenGL ES 2.0標準規格,並且支援傳統的智慧型手機。
數據存儲
網路
訊息
作為原設計給智慧型手機使用的作業系統,Android作業系統原生支援簡訊和郵件,並且支援所有的雲端訊息和服務器訊息。
語言
Android作業系統支援多語言。
瀏覽器
Android作業系統中內置的網頁瀏覽器基於WebKit內核,並且採用了Chrome V8引擎。在Android 4.0內置的瀏覽器測試中,HTML5和Acid3故障處理中均獲得了滿分,並且於2.2版及之後能原生支援Flash。
支援Java
雖然Android作業系統中的應用程式大部分都是由Java編寫的,但是Android卻是以轉換為Dalvik executables的檔案在Dalvik虛擬機上執行的。由於Android中並不自帶Java虛擬機,因此無法直接執行Java程式。不過Android平台上提供了多個Java虛擬機供用戶下載使用,安裝了Java虛擬機的Android系統可以執行J2ME的程式。
媒體支援
Android作業系統本身支援以下格式的音訊/視頻/圖片媒體:WebM、H.263, H.264 (in 3GP or MP4 container)、MPEG-4 SP、AMR, AMR-WB (in 3GP container)、AAC, HE-AAC (in MP4 or 3GP container)、MP3、MIDI、Ogg Vorbis、FLAC、WAV、JPEG、PNG、GIF、BMP。如果用戶需要播放更多格式的媒體,可以安裝其他第三方應用程式。
流媒體支援
Android作業系統支援RTP/RTSP(3GPP PSS, ISMA)的流媒體以及(HTML5 <video>)的流媒體,同時還支援Adobe的Flash,在安裝了RealPlayer之後,還支援蘋果公司的流媒體。
硬體支援
Android作業系統支援識別並且使用視頻/照片攝像頭,多點電容/電阻觸摸屏,GPS,加速計,陀螺儀,氣壓計,磁強計,鍵盤,鼠標,USB Disk,專用的遊戲控制器,體感控制器,遊戲手柄,藍牙設備,無線設備,感應和壓力感測器,溫度計,加速2D位位塊傳輸(硬體方向,縮放,像素格式轉換)和3D圖形加速。
多點觸控
藍牙
Android支援A2DP,AVRCP,發送檔案(OPP),存取電話簿(PBAP),語音撥號和發送智慧型手機之間的聯繫。同時支援鍵盤,滑鼠和操縱桿(HID)。
多工處理
Android作業系統支援原生的多工處理。
語音功能
除了支援普通的電話通話之外,Android作業系統從最初的版本開始就支援使用語音操作來使用Google進行網頁搜尋等功能。而從Android OS v2.2開始,語音功能還可以用來輸入文字、語音導航等功能。
無線共享功能
Android作業系統支援用戶使用本機充當「無線路由器」,並且將本機的網路共享給其他智慧型手機,其他機器只需要通過WiFi尋找到共享的無線熱點,就可以上網。而在Android OS v2.2版本之前的作業系統則需要通過第三方應用或者其他定製版系統來實現這個功能。
截圖功能
從Android OS v4.0版本開始,Android作業系統便支援截圖功能,該功能允許用戶直接抓取智慧型手機螢幕上的任何畫面,用戶還可以通過編輯功能對截圖進行處理,還可以通過藍牙/E-mail/微博/共享等方式發送給其他用戶或者上傳到網路上,也可以拷貝到電腦中。
[編輯] 硬體支援
主條目:Android裝置列表
由於Android作業系統的開放性和可移植性,它可以被用在大部分電子產品上。包括:智慧型手機,上網本,平板電腦,個人電腦,筆記本電腦,電視,機頂盒,MP3播放器,MP4播放器,掌上遊戲機,家用主機,電子手錶,電子收音機,耳機,汽車設備,導航儀,CD機,VCD機,DVD機,機頂盒以及其他設備。
Android作業系統大多搭載在使用了ARM架構的硬體設備上。但是同樣也有支援X86架構的Android作業系統,比如Google的Google TV就是使用一個特別定製的X86架構版本的Android操作系統。
同樣,蘋果公司的iOS設備,比如iPhone、iPod Touch以及iPad產品都可以安裝Android作業系統,並且可以通過雙系統啟動工具OpeniBoot或者iDroid來執行Android作業系統。微軟的Windows Mobile、Windows Phone產品也一樣可以。另外Android亦已成功移植到搭載WebOS系統HP TouchPad以及搭載Meego系統的Nokia N9等裝置。
Android可以像用電腦上網一樣,使用任何服務[40]。Android對手有蘋果公司的iOS作業系統及諾基亞的Symbian及Microsoft的Windows Phone 7及RIM使用的BlackBerry OS系統。[41]
[] 應用程式
[編輯] Google Play™
網上商店「Google Play」的標誌,早期稱為「Android Market」
主條目:Google Play
Google Play,前身為Android Market,目前沒有規範的中文名,中國大陸地區大多使用「電子市場」以及「Google市場」來稱呼,因Android Market的LOGO像菜市場用的袋子,所以部分中國使用者又稱之為「菜市場」。
2009年2月,Google推出Android Market線上應用程式商店,使用者可在該平台網頁尋找、購買、下載及評級使用智慧型手機應用程式及其他內容[42]。第三方軟體開發商和自由開發者則可以通過Android Market發布其開發的應用程式。截止至2011年10月,Android Market上已有超過30萬個應用程式,並且在2011年12月,Android Market上的應用程式下載量超過100億次。同時,全球已有1億3千萬部Android設備在Android Market即現在的Google Play上下載過軟體。
只有通過Google許可並且認證的廠家才能在其產品設備上安裝Google服務框架和Google Play。同時受到部分地區和國家的政策影響,Google根據部分地區和國家的政策對Google Play上的內容進行了過濾,因此各地區和國家看到的內容不一樣。此外,受到部分地區和國家的電信運營商的影響,Google Play在部分地區和國家可能不可使用。
Google Play內的付費程式在許多國家與地區內提供,如美國、英國、瑞典、德國、斯里蘭卡、泰國、越南、香港、台灣[43]等。[44]由於受到Google結束中國事件影響,目前Google Play的服務還沒有擴展到中國大陸地區,但大陸用戶仍可通過國際信用卡和相關的免費軟體來完成購買。需要注意的是,通過這種方法購買的軟體可能不會得到當地承認的發票(Invoice)。
[] 程式開發
在早期的Android應用程式開發中,通常通過在Android SDK(Android軟體開發包)中使用Java作為編程語言來開發應用程式。開發者亦可以通過在Android NDK(Android Native開發包)中使用C語言或者C++語言來作為編程語言開發應用程式。同時Google還推出了適合初學者編程使用的Simple語言,該語言類似微軟公司的Visual Basic語言。此外,Google還推出了Google App Inventor開發工具,該開發工具可以快速地構建應用程式,方便新手開發者。
[] 應用程式安全機制
Android作業系統使用了沙箱(sandbox)機制,所有的應用程式都會先被簡單地解壓縮到沙箱中進行檢查,並且將應用程式所需的權限送出給系統,並且將其所需權限以列表的形式展現出來,供用戶檢視。例如一個第三方瀏覽器需要「連接網路」的權限,或者一些軟體需要撥打電話,發送簡訊等權限。用戶可以根據權限來考慮自己是否需要安裝,用戶只有在同意了應用程式權限之後,才能進行安裝[46]。
[] 惡意程式與病毒
由於Android作業系統的開放和自由性,一些惡意程式和病毒也隨之出現。2010年8月,卡巴斯基病毒實驗室報告稱發現了Android作業系統上首個木馬程式,並將其命名為「Trojan-SMS.AndroidOS.FakePlayer.a」[47],這是一個通過簡訊方式感染智慧型手機的木馬,並且已經感染了一定數量的Android設備。除了簡訊感染方式,這些Android木馬還可以偽裝成一些主流的應用程式,並且還可以隱藏在一些正規的應用程式之中[48][49]。
目前Android作業系統上已經擁有防病毒程式來防止設備中毒,例如 Avast、F-Secure、Kaspersky、Trend Micro、Symantec 等防護軟體也已經發布了Android版本。
--------------------------------------------------------------------------------------------------------
一‧Android的來源:
Google 併購 Android 公司後所推出的手機平台,採用 Linux 為作業系統。所以系統程式包含了 C 語言的標準函式庫,但應用程式主要以Java語言在Dalvik VM虛擬機器執行,應用程式開發環境以Eclipse為主,加上 Android Development Tools (ADT) Plugin。
二‧Android的目的:
Android平台的主旨是提供一個應用程式架構(application framework),好讓各家OEM業者可不須從頭進行軟體開發,就能推出一系列的Android平台手機。
三‧Android的特色:
Application framework:提供可重覆使用及改寫的元件
Dalvik virtual machine:提供給行動裝置一個最佳化過的Java虛擬機器
Integrated browser:基於一個WebKit引擎開放源碼的瀏灠器
Optimized graphics:最佳化過的繪圖函式庫,包含了SGL的2D繪圖函式庫及基於OpenGL ES 1.0規範的3D繪圖函式庫
SQLite:一個結構化的資料庫系統
Media support:多媒體影音格式支援包含了MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF
GSM:GSM手機的通話能力其實必須在硬體電路層次實現,軟體層次無法實現,只是Android平台要求必須要有GSM通話能力,此項功效特點與其說是特點,不如說是訂立出最低的硬體要求規範。
Bluetooth,EDGE,3G,and WiFi,Camera,GPS,compass,and accelerometer:同GSM它必需由實際硬體決定是否支援
Rich development environment:包含了裝置模擬器,除錯工具,記憶體及效能評估分析工具及讓Eclipse IDE支援Android專案的外掛程式。
四‧Android的系統架構圖如下:
上圖呈現出整個系統架構分成Applications,Application Framework,Libraries,Android Runtime,Linux Kernel五大架構
Android本身是一套軟體堆疊(Software Stack),或稱為「軟體疊層架構」,疊層主要分成三層:作業系統、中介軟體(Middleware,大陸方面稱為:中間件)、應用程式。想開發可在Android平台執行的應用程式,必須用Java程式語言撰寫才行。
中介軟體,凡是介於作業系統與應用程式間的,多概稱為中介軟體,Android的中介軟體可再細分出兩層,底層為函式庫(Library)及虛擬機器(Virtual Machine;VM),上層為應用程式框架(Application Framework)。
底下分別簡介一下各層的功用
應用程式層(Applications)
Android出貨時整套的應用程式將會包含了有電子郵件程式,短訊程式,日曆,地圖,瀏覽器,通訊程式...等等。
所有的應用程式皆必需以Java的程式語言撰寫。
應用程式框架層(Application Framework)
程式設計師在寫應用程式時可以完整的存取使用統一的應用程式標準介面,這個應用程式框架的架構是可以很容易的去重覆使用各個原件, 2c0c6ba7
所有的應用程式都可以提供出它自己本身的特殊功能,所有的應用程式也可以較容易的去使用其它程式的特殊功能。
這樣子的統一機制,有助於開發者去改寫自己新的軟體原件。
基本上所有的應用程式是由services及systems所組成,包含有:
(1)Views System:用來建構一個應用程式的基本原件,包含了有lists,grids,text boxes,buttons,甚至是一個嵌入式的瀏覽器。
(2)Content Providers(內容提供者):它可以用來讓程式跟程式之間互相存取/分享資料。例如某一個應用程式可以去存取通訊錄應用程式內的聯絡人資料。或者呼用Resource Manager可存取的非程式碼資源,例如:當地性設定(該地貨幣、語言、時間格式)、圖像...等。
(3)Resource Manager(資源管理員):提供各種資源讓程式去使用,比如:區域性的字串,圖片,排版檔(layout files)。
(4)Notification Manager(訊息管理員):提供程式在狀態列(status bar)的地方顯示應用程式自有的警示(alert)訊息。
(5)Activity Manager(活動管理員):管理所有的應用程式生命週期及一個共同的navigation backstack。
(6)Window Manager(視窗管理員):管理所有的視窗程式
(7)Location Manager:應該是用來做地圖服務的功能。
(8)Telephony Manager:用來管理所有的移動設備(電話)的功能。
(9)Package Manager:Android系統內所有的程式管理。
(10)XMMP Service:透過此服務得知手機的位置,在0.9 SDK已暫時移除此功能的樣子。
函式庫層(Libraries)
Android所有豐富多樣的元件皆是由C/C++函式庫所組成,但Android所有的應用程式皆必需經由API來使用這些功能。
主要的核心函式庫列表如下:
(1)System C library - 一個由BSD衍生出來的標準C系統函式庫(libc),已經對Linux嵌入式裝置進行過最佳化。
(2)Media Libraries - 基於PacketVideo's OpenCORE的多媒體函式庫;這個多媒體函式庫支援播放/儲存許多現在很流行的聲音及影像格式。比如:MPEG4,H.264,MP3,AAC,AMR,JPG,及PNG。
(3)Surface Manager - 這個部份讓開發者可以去存取顯示系統,以及實現無接縫的2D/3D多應用程式之間的整合。
(4)LibWebCore - 一個先進的網頁瀏覽器引擎。
(5)SGL - 2D繪圖引擎。
(6)3D Libraries - 一個基於OpenGL ES 1.0規範的3D繪圖引擎。它可以選擇要硬體的3D加速或高度最佳化的3D軟體程式去呈現結果。
(7)Free Type - 點陣圖及向量字形。
(8)SQLite - SQLite是一套開放原碼的關連式資料庫,其特點在於輕量性(僅500KB左右的容量),適合手持式裝置運用,此外桌上型運算的應用程式也有使用,如OpenOffice.org 2.0版之後就有內建SQLite。
執行層(Android Runtime)
Android 雖然用Java程式語言來開發、撰寫應用程式,但卻不使用一般大家目前在用的Java Runtime(J2ME)版本來執行Java程式,而是用Android自有的Android Runtime來執行。
Android Runtime包含下面兩個核心。
(1)Core Libraries
核心函式庫裡頭已經包含了絕大多數Java程式語言所需要呼用的功效函式,接著每一個Android應用程式都會以自屬的process而且Android不是用一個Dalvik虛擬機器來同時執行多個Android應用程式,而是每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行。
(2)Dalvik Virtual Machine
Dalvik虛擬機器是一種暫存器型態的虛擬機器。在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。
Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是依靠轉換工具將Java bytecode轉為Dalvik VM執行時特有的dex(Dalvik EXcutable)格式,稱為.dex。Dalvik VM相較於Java VM最大的不同在於Java VM為Stack-based,而Dalvik是register-based。 以技術層面考量Register-based VM的特性有個很大的好處,那就是對於現有主流的硬體架構,如此很容易與現有系統整合且最好化,而所需要的資源也相對較少。 甚至在硬體實作VM上會比較容易實現。 最重要的是Dalvik 並非是Java ME的實作,因此沒有Java ME授權相關的議題。
作業系統層(Linux Kernel)
Android平台的作業系統用的是Linux,其核心版本為2.6版,Android所用的Linux核心,其包含的功效包括:安全(Security)、記憶體管理(Memory Management)、行程管理(Process Management)、網路堆疊(Network Stack,大陸方面稱為:網絡堆棧)、驅動程式模型(Driver Model)等,另外也在前述的軟體堆疊與硬體間建立起一個抽象層(Abstraction Layer)。
Google 併購 Android 公司後所推出的手機平台,採用 Linux 為作業系統。所以系統程式包含了 C 語言的標準函式庫,但應用程式主要以Java語言在Dalvik VM虛擬機器執行,應用程式開發環境以Eclipse為主,加上 Android Development Tools (ADT) Plugin。
二‧Android的目的:
Android平台的主旨是提供一個應用程式架構(application framework),好讓各家OEM業者可不須從頭進行軟體開發,就能推出一系列的Android平台手機。
三‧Android的特色:
Application framework:提供可重覆使用及改寫的元件
Dalvik virtual machine:提供給行動裝置一個最佳化過的Java虛擬機器
Integrated browser:基於一個WebKit引擎開放源碼的瀏灠器
Optimized graphics:最佳化過的繪圖函式庫,包含了SGL的2D繪圖函式庫及基於OpenGL ES 1.0規範的3D繪圖函式庫
SQLite:一個結構化的資料庫系統
Media support:多媒體影音格式支援包含了MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF
GSM:GSM手機的通話能力其實必須在硬體電路層次實現,軟體層次無法實現,只是Android平台要求必須要有GSM通話能力,此項功效特點與其說是特點,不如說是訂立出最低的硬體要求規範。
Bluetooth,EDGE,3G,and WiFi,Camera,GPS,compass,and accelerometer:同GSM它必需由實際硬體決定是否支援
Rich development environment:包含了裝置模擬器,除錯工具,記憶體及效能評估分析工具及讓Eclipse IDE支援Android專案的外掛程式。
四‧Android的系統架構圖如下:
上圖呈現出整個系統架構分成Applications,Application Framework,Libraries,Android Runtime,Linux Kernel五大架構
Android本身是一套軟體堆疊(Software Stack),或稱為「軟體疊層架構」,疊層主要分成三層:作業系統、中介軟體(Middleware,大陸方面稱為:中間件)、應用程式。想開發可在Android平台執行的應用程式,必須用Java程式語言撰寫才行。
中介軟體,凡是介於作業系統與應用程式間的,多概稱為中介軟體,Android的中介軟體可再細分出兩層,底層為函式庫(Library)及虛擬機器(Virtual Machine;VM),上層為應用程式框架(Application Framework)。
底下分別簡介一下各層的功用
應用程式層(Applications)
Android出貨時整套的應用程式將會包含了有電子郵件程式,短訊程式,日曆,地圖,瀏覽器,通訊程式...等等。
所有的應用程式皆必需以Java的程式語言撰寫。
應用程式框架層(Application Framework)
程式設計師在寫應用程式時可以完整的存取使用統一的應用程式標準介面,這個應用程式框架的架構是可以很容易的去重覆使用各個原件, 2c0c6ba7
所有的應用程式都可以提供出它自己本身的特殊功能,所有的應用程式也可以較容易的去使用其它程式的特殊功能。
這樣子的統一機制,有助於開發者去改寫自己新的軟體原件。
基本上所有的應用程式是由services及systems所組成,包含有:
(1)Views System:用來建構一個應用程式的基本原件,包含了有lists,grids,text boxes,buttons,甚至是一個嵌入式的瀏覽器。
(2)Content Providers(內容提供者):它可以用來讓程式跟程式之間互相存取/分享資料。例如某一個應用程式可以去存取通訊錄應用程式內的聯絡人資料。或者呼用Resource Manager可存取的非程式碼資源,例如:當地性設定(該地貨幣、語言、時間格式)、圖像...等。
(3)Resource Manager(資源管理員):提供各種資源讓程式去使用,比如:區域性的字串,圖片,排版檔(layout files)。
(4)Notification Manager(訊息管理員):提供程式在狀態列(status bar)的地方顯示應用程式自有的警示(alert)訊息。
(5)Activity Manager(活動管理員):管理所有的應用程式生命週期及一個共同的navigation backstack。
(6)Window Manager(視窗管理員):管理所有的視窗程式
(7)Location Manager:應該是用來做地圖服務的功能。
(8)Telephony Manager:用來管理所有的移動設備(電話)的功能。
(9)Package Manager:Android系統內所有的程式管理。
(10)XMMP Service:透過此服務得知手機的位置,在0.9 SDK已暫時移除此功能的樣子。
函式庫層(Libraries)
Android所有豐富多樣的元件皆是由C/C++函式庫所組成,但Android所有的應用程式皆必需經由API來使用這些功能。
主要的核心函式庫列表如下:
(1)System C library - 一個由BSD衍生出來的標準C系統函式庫(libc),已經對Linux嵌入式裝置進行過最佳化。
(2)Media Libraries - 基於PacketVideo's OpenCORE的多媒體函式庫;這個多媒體函式庫支援播放/儲存許多現在很流行的聲音及影像格式。比如:MPEG4,H.264,MP3,AAC,AMR,JPG,及PNG。
(3)Surface Manager - 這個部份讓開發者可以去存取顯示系統,以及實現無接縫的2D/3D多應用程式之間的整合。
(4)LibWebCore - 一個先進的網頁瀏覽器引擎。
(5)SGL - 2D繪圖引擎。
(6)3D Libraries - 一個基於OpenGL ES 1.0規範的3D繪圖引擎。它可以選擇要硬體的3D加速或高度最佳化的3D軟體程式去呈現結果。
(7)Free Type - 點陣圖及向量字形。
(8)SQLite - SQLite是一套開放原碼的關連式資料庫,其特點在於輕量性(僅500KB左右的容量),適合手持式裝置運用,此外桌上型運算的應用程式也有使用,如OpenOffice.org 2.0版之後就有內建SQLite。
執行層(Android Runtime)
Android 雖然用Java程式語言來開發、撰寫應用程式,但卻不使用一般大家目前在用的Java Runtime(J2ME)版本來執行Java程式,而是用Android自有的Android Runtime來執行。
Android Runtime包含下面兩個核心。
(1)Core Libraries
核心函式庫裡頭已經包含了絕大多數Java程式語言所需要呼用的功效函式,接著每一個Android應用程式都會以自屬的process而且Android不是用一個Dalvik虛擬機器來同時執行多個Android應用程式,而是每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行。
(2)Dalvik Virtual Machine
Dalvik虛擬機器是一種暫存器型態的虛擬機器。在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。
Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是依靠轉換工具將Java bytecode轉為Dalvik VM執行時特有的dex(Dalvik EXcutable)格式,稱為.dex。Dalvik VM相較於Java VM最大的不同在於Java VM為Stack-based,而Dalvik是register-based。 以技術層面考量Register-based VM的特性有個很大的好處,那就是對於現有主流的硬體架構,如此很容易與現有系統整合且最好化,而所需要的資源也相對較少。 甚至在硬體實作VM上會比較容易實現。 最重要的是Dalvik 並非是Java ME的實作,因此沒有Java ME授權相關的議題。
作業系統層(Linux Kernel)
Android平台的作業系統用的是Linux,其核心版本為2.6版,Android所用的Linux核心,其包含的功效包括:安全(Security)、記憶體管理(Memory Management)、行程管理(Process Management)、網路堆疊(Network Stack,大陸方面稱為:網絡堆棧)、驅動程式模型(Driver Model)等,另外也在前述的軟體堆疊與硬體間建立起一個抽象層(Abstraction Layer)。
-----------------------------------------------------------------------------------------------------------------
9-02 ----------------------------------------------------------------------------------------------------------
Dalvik虛擬機器
Dalvik虛擬機器是Google等廠商合作開發的Android行動裝置平台的核心組成部分之一。它可以支援已轉換為.dex(即Dalvik Executable)格式的Java應用程式的執行,.dex格式是專為Dalvik設計的一種壓縮格式,適合記憶體和處理器速度有限的系統。Dalvik是由Dan Bornstein編寫的,名字來源於他的祖先曾經居住過名叫Dalvík的小漁村,村子位於冰島Eyjafjörður。
--------------------------------------------------------------------------------------
(2)Dalvik Virtual Machine
Dalvik虛擬機器是一種暫存器型態的虛擬機器。在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。 Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是依靠轉換工具將Java bytecode轉為Dalvik VM執行時特有的dex(Dalvik EXcutable)格式,稱為.dex。Dalvik VM相較於Java VM最大的不同在於Java VM為Stack-based,而Dalvik是register-based。 以技術層面考量Register-based VM的特性有個很大的好處,那就是對於現有主流的硬體架構,如此很容易與現有系統整合且最好化,而所需要的資源也相對較少。 甚至在硬體實作VM上會比較容易實現。 最重要的是Dalvik 並非是Java ME的實作,因此沒有Java ME授權相關的議題。
--------------------------------------------------------------------------------------
|
在這個章節中,要來單獨討論什麼是Dalvik Virtual Machine,它是包含在Android Runtime中的元件,如圖5所示。
圖5
Dalvik Virtual Machine(Dalvik虛擬機器)是一種暫存器型態的虛擬機器。簡稱DVM,DVM在撰寫開發時就已經設想用最少的記憶體資源來執行,以及同時可執行多個VM為前提來開發的。
不過,上述的特性需要Linux作業系統的協助才能實現,例如程序問執行的控制、多執行緒的支援、記憶體管理等。事實上不僅Dalvik虛擬機器如此,Java虛擬機器也一樣有作業系統相依性,不同的作業系統需要不同的Java虛擬機器,而虛擬機器會針對其支援的作業系統再進行各項調整,以便能最佳化執行。
Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是執行一種特有的檔案格式,稱為.dex。
Java的類別檔要先透過一套叫dx的編譯工具轉換成.dex檔後,才能讓Dalvik虛擬機器執行。而Delvik虛擬機器則改用Register Based的方式,變數皆存放於暫存器中,相較之下Delvik虛擬機器的指令就會少一點,速度也就會再加快一點。
有興趣的讀者,可以參考今年在台灣Google Developer Day 2008中,有關程本中先生所講述的Android:Dalvik VM Internals。網址:
http://sites.google.com/site/developerdaytaiwan/google-developer-day-2008-taiwan/android-dalvik-vm-internals
圖5
Dalvik Virtual Machine(Dalvik虛擬機器)是一種暫存器型態的虛擬機器。簡稱DVM,DVM在撰寫開發時就已經設想用最少的記憶體資源來執行,以及同時可執行多個VM為前提來開發的。
不過,上述的特性需要Linux作業系統的協助才能實現,例如程序問執行的控制、多執行緒的支援、記憶體管理等。事實上不僅Dalvik虛擬機器如此,Java虛擬機器也一樣有作業系統相依性,不同的作業系統需要不同的Java虛擬機器,而虛擬機器會針對其支援的作業系統再進行各項調整,以便能最佳化執行。
Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是執行一種特有的檔案格式,稱為.dex。
Java的類別檔要先透過一套叫dx的編譯工具轉換成.dex檔後,才能讓Dalvik虛擬機器執行。而Delvik虛擬機器則改用Register Based的方式,變數皆存放於暫存器中,相較之下Delvik虛擬機器的指令就會少一點,速度也就會再加快一點。
有興趣的讀者,可以參考今年在台灣Google Developer Day 2008中,有關程本中先生所講述的Android:Dalvik VM Internals。網址:
http://sites.google.com/site/developerdaytaiwan/google-developer-day-2008-taiwan/android-dalvik-vm-internals
-----------------------------------------------------------------------------------------------------------------
9-03 ----------------------------------------------------------------------------------------------------------
鐵電隨機存取記憶體(Ferroelectric RAM,縮寫為FeRAM或FRAM),類似於SDRAM,是一種隨機存取存儲器技術。但因為它使用了一層有鐵電性的材料,取代原有的介電質,使得它也擁有非揮發性記憶體的功能。麻省理工大學達德利·艾倫·巴克(Dudley Allen Buck)在1952年提出的碩士論文中,首次提出了這個概念。
相變化記憶體(英語:Phase-change memory,英語:Ovonic Unified Memory,英語:Chalcogenide RAM,簡稱PCM, PRAM, PCRAM, CRAM),又譯為相變位記憶體,是一種非揮發性記憶體裝置。PRAM 使用含一種或多種硫族化物的玻璃(Chalcogenide glass)製成。硫族化物玻璃的特性是,經加熱可以改變它的狀態,成為晶體或非晶體。這些不同狀態具有相應的電阻值。因此 PRAM 可以用來存儲不同的數值。
磁阻式隨機存取記憶體(Magnetoresistive Random Access Memory,縮寫為MRAM),是一種非揮發性記憶體技術,從1990年代開始發展。這個技術的擁護者認為,這個技術可望取代快閃記憶體與DRAM,成為真正的通用型記憶體(Universal memory)。
磁性隨機存儲器的結構
|
-----------------------------------------------------------------------------------------------------------------
9-04 ----------------------------------------------------------------------------------------------------------
ARM7
ARM7,由安謀國際科技公司研發的處理器家族,在這個系列中,首次加入了16-bit 的 Thumb指令集,以改善程式的密度。ARM7系列的處理器,大多數都採用 ARMv4T核心架構,但也有部份處理器採取ARMv3或ARMv5TEJ核心。這個系列採用馮紐曼架構。
第一個將 JTAG這個晶片除錯技術應用在 ARM家族上的,是ARM7DI,其中的 D 代表了除錯用的JTAG TAP,I 代表了支援硬體中斷點及觀察點的 ICE中斷除錯模組,它可以將系統停止下來,以利於除錯。這個型號已經不再生產,但是接下來的ARM處理器家族,都提供了相關的支援。
[編輯] ARM7TDMI
TDMI 的基本含义为:
T-支持16 为压缩指令集Thumb
D-支持片上Debug
M-内嵌硬件乘法器(Multiplier)
I-嵌入式ICE,支持片上辅助调试
T-支持16 为压缩指令集Thumb
D-支持片上Debug
M-内嵌硬件乘法器(Multiplier)
I-嵌入式ICE,支持片上辅助调试
-----------------------------------------------------------------------------------------------------------------
9-05 ----------------------------------------------------------------------------------------------------------
(B) Linux → Embedded Linux
(C) NOR Flash → NAND Flash
常見的嵌入式作業系統
參見嵌入式作業系統
沒有留言:
張貼留言