❶ 如何給ARM-linux移植桌面系統哪款桌面系統適合入門移植
1、qt-x11是建立在X11圖開庫上的,X11圖形庫又是建軍在FRAMBUFFER上的,FRAMBUFFER是linux內核的圖形庫,X11系統資源需求大,不能用於嵌入式,所以qt-embedded產生了,它不是建立在X11圖形庫上的,它是直接建立在FRAMBUFFER上的,占系統資源極少,可以在嵌入式上使用。qtopia-core這個概念是相對於qtopia提出的。它就是qt-embedded。而qtopia是QT公司的一個嵌入式桌面系統,目前已停止開發了。 2、如果arm上沒有qt庫,不能運行QT程序,必須把相應的QT庫按裝到ARM板上。 3、qmake產生makefile,make根據makefile調用gcc進行編譯。 4、qt-embedded-linux-opensource-src-4.4.3.tar.gz是用在嵌入式上的QT開發庫。用法與qt-4.4.3-x11版的用法一樣。 5、沒有辦法模擬,只能先進行qt-embedded的移植工作。但是開發qt-embedded程序時,到是可以在PC機上先用qvfb模擬調試的。 6、qt-embedded庫先交叉編譯,完成後下載到開發板上,以後開發應用程序時,qt庫不用再下載的。 7、寫qt程序需要4.0版以上的交叉編譯器。網上可以下載現成。 8、這是三個不同版本的gcc交叉編譯器,都老了。目前至少應該使用gcc 4.0以上的。 9、肯定是不行的。 10、呵呵,我也是從新手過來的。也問過類似的小白問題。
❷ 嵌入式中的移植是什麼意思,移植系統呢
與其它操作系統相比,Linux最大的特點:它是一款遵循GPL的操作系統,我們可以自由
地使用、修改、和擴展它。正是由於這一特色,Linux受到越來越多人士的青睞。於是,
一個經常會被探討的問題出現了,即關於Linux系統的移植。對於操作系統而言,這種移
植通常是跨平台的、與硬體相關的,即硬體系統結構、甚至CPU不同。下面就讓我們來看
看在Linux系統移植方面,我們都需要做些什麼。
一、Linux系統移植的兩大部分
對於系統移植而言,Linux系統實際上由兩個比較獨立的部分組成,即內核部分和系
統部分。通常啟動一個Linux系統的過程是這樣的:一個不隸屬於任何操作系統的載入程
序將Linux部分內核調入內存,並將控制權交給內存中Linux內核的第一行代碼。載入程
序的工作就完了,此後Linux要將自己的剩餘部分全部載入到內存(如果有的話,視硬體
平台的不同而不同),初始化所有的設備,在內存中建立好所需的數據結構(有關進程
、設備、內存等)。到此為止Linux內核的工作告一段落,內核已經控制了所有硬體設備
。至於操作和使用這些硬體設備,則輪到系統部分上場了。內核載入根設備並啟動init
守護進程,init守護進程會根據配置文件載入文件系統、配置網路、服務進程、終端等
。一旦終端初始化完畢,我們就會看到系統的歡迎界面了。小結一下:
(1)內核部分初始化和控制所有硬體設備(嚴格說不是所有,而是絕大部分),為內存
管理、進程管理、設備讀寫等工作做好一切准備。
(2)系統部分載入必需的設備,配置各種環境以便用戶可以使用整個系統。
二、系統移植所必需的環境
在進一步敘述之前,我們有必要提一下做系統移植所必需的環境。
首先,需要一個新版本的gcc。對於一個准備系統移植的程序員而言,「新」到什麼
程度應該心裡有數。做跨平台編譯,gcc也許是最好的選擇。另外,Linux內核依賴許多
gcc特有的特性,非它不可。如果你已經會使用gcc並實地操練過多回,那你只需要再進
一步鞏固一下跨平台編譯的操作即可。兩種編譯環境是可用的:非目標平台上的Linux或
目標平台上的非Linux系統,除非你的開發平台過於特殊,否則你一定能夠找到你能用的
gcc。
其次,編譯鏈接庫是必需的,而且必須是目標平台的編譯鏈接庫。通常這是一個枯
燥、繁瑣、又絲毫沒有成就感的過程。幸運的話,會有現成的鏈接庫可以用。否則,你
需要自己用gcc建立它。
最後,需要目標平台的所有文檔,越多越好。如果有一定的開發支持/模擬環境,L
oader(載入程序)則最好,這些可以幫助你減少移植過程中浪費在瑣事上的時間。
三、Linux系統移植
接下來我們從內核和系統兩個方面描述一下移植中的關鍵。
(1) 內存移植
Linux系統採用了相對來說並不是很靈活的單一內核機制,但這絲毫沒有影響Linux
系統的平台無關性和可擴展性。Linux使用了兩種途徑分別解決這些問題,很乾凈利落,
絲毫不拖泥帶水,而且十分清晰易懂。分離硬體相關代碼和硬體無關代碼,使上層代碼
永遠不必關心低層換用了什麼代碼,如何完成了操作。不論對x86上還是在Alpha平台上
分配一塊內存,對上層代碼而言沒什麼不同。硬體相關部分的代碼不多,占總代碼量的
很少一部分。所以對更換硬體平台來說,沒有什麼真正的負擔。另一方面,Linux使用內
核機制很好地解決了擴展的問題,一堆代碼可以在需要的時候輕松地載入或卸下,象隨
身聽,需要的時候帶上,不需要時則鎖在抽屜里。
Linux內核可以視為由五個功能部分組成:進程管理(包括調度和通信)、內存管理
、設備管理、虛擬文件系統、網路。它們之間有著復雜的調用關系,但幸運的是,在移
植中不會觸及到太多,因為Linux內核良好的分層結構將硬體相關的代碼獨立出來。何謂
硬體相關,何謂無關?以進程管理為例,對進程的時間片輪轉調度演算法在所有平台的Li
nux中都是一樣的,它是與平台無關的;而用來在進程中切換的實現在不同的CPU上是不
同的,因此需要針對該平台編寫代碼,這就是平台相關的。上面所講的五個部分的順序
不是隨便排的,從前到後分別代表著它們與硬體設備的相關程度。越靠前越高,後面的
兩個虛擬文件系統和網路則幾乎與平台無關,它們由設備管理中所支持的驅動程序提供
底層支持。因此,在做系統移植的時候,需要改動的就是進程管理、內存管理和設備管
理中被獨立出來的那部分即硬體相關部分的代碼。在Linux代碼樹下,這部分代碼全部在
arch目錄下。
如果你的目標平台已經被Linux核心所支持的話,那麼你是幸運的,因為已經沒有太
多的工作讓你去做。只要你的交叉編譯環境是正確的,你只需要簡單的配置、編譯就可
以得到目標代碼。否則,需要你去編寫,或修改一些代碼。只需修改平台相關部分的代
碼即可。但需要對目標平台,主要是對CPU的透徹理解。在Linux的代碼樹下,可以看到
,這部分的典型代碼量為:2萬行左右C代碼和2千行左右的匯編(C代碼中通常包含許多
偽匯編指令,因此實際上純C代碼要少很多),這部分工作量是不可小看的。它包含了對
絕大多數硬體的底層操作,涉及IRQ、內存頁表、快表、浮點處理、時鍾、多處理器同步
等問題,頻繁的埠編程意味著需要你將目標平台的文檔用C語言重寫一遍。這就是為什
么說目標平台的文檔極其重要。
代碼量最大的部分是被核心直接調用的底層支持部分,這部分代碼在arch/xxx/ker
nel下(xxx是平台名稱)。這些代碼重寫了內核所需調用的所有函數。因為介面函數是固
定的,所以這里更象是為硬體平台編寫API。不同的系統平台,主要有以下幾方面的不同
:
進程管理底層代碼:從硬體系統的角度來看,進程管理就是CPU的管理。在不同的硬
件平台上,這有很大的不同。CPU中用的寄存器結構不同,上下文切換的方式、現場的保
存和恢復、棧的處理都不同,這些內容主要由CPU開發手冊所描述。通常來說,CPU的所
有功能和狀態對於Linux不一定有意義。實現時,需要在最小的開發代價和最好的系統性
能之間加以權衡。
* BIOS介面代碼:這一名稱似乎並不太准確,因為它沿用了PC一貫的叫法。但在不致引
起混淆的情況下我們還是這么叫它。在通用平台上,通常有基本輸入輸出系統供操作系
統使用,在PC上是BIOS,在SPARC上是PROM,在很多非通用系統上甚至並沒有這樣的東西
。多數情況下,Linux不依賴基本輸入輸出系統,但在某些系統里,Linux需要通過基本
輸入輸出系統中得到重要的設備參數。移植中,這部分代碼通常需要完全改寫。
* 時鍾、中斷等板上設備支持代碼:即使在同一種CPU的平台上,也會存在不同的板上外
設,異種CPU平台上更是如此。不同的系統組態需要不同的初始化代碼。很典型的例子就
是MIPS平台,看看arc/mips/的代碼,與其它系統比較一下就知道。因為MIPS平台被OEM
得最廣,在嵌入式領域應用最多(相對其它幾種CPU而言)。甚至同一種MIPS晶元被不同
廠家封裝再配上不同的晶元組。因此要為這些不同的MIPS平台分別編寫不同的代碼。
* 特殊結構代碼:如多處理器支持等。其實每一種CPU都是十分特殊的,熟悉x86平台的
人都知道x86系列CPU著名的實模式與虛模式的區別,而在SPARC平台上根本就沒有這個概
念。這就導致了很大的不同:PC機上的Linux在獲得控制權後不久就開始切換到虛模式,
SPARC機器上則沒有這段代碼。又如電源管理的支持更是多種多樣,不同的CPU有著不同
的實現方式(特殊的電源管理方式甚至被廠商標榜)。在這種情況下,除非放棄對電源
管理的支持,否則必須重寫代碼。
還有一部分代碼量不多,但不能忽視的部分是在arch/xxx/mm/下的內存管理部分。
所有與平台相關的內存管理代碼全部在這里。這部分代碼完成內存的初始化和各種與內
存管理相關的數據結構的建立。Linux使用了基於頁式管理的虛擬存儲技術,而CPU發展
的趨勢是:為了提高性能,實現內存管理的功能單元統統被集成到CPU中。因此內存管理
成為一個與CPU十分相關的工作。同時內存管理的效率也是最影響系統性能的因素之一。
內存可以說是計算機系統中最頻繁訪問的設備,如果每次內存訪問時多佔用一個時鍾周
期,那就有可能將系統性能降低到不可忍受。在Linux系統里,不同平台上的內存管理代
碼的差異程度是令人吃驚的,可以說是差異最大的。不同的CPU有不同的內存管理方式,
同一種CPU還會有不同的內存管理模式。Linux是從32位硬體平台上發展起來的操作系統
,但是現在已經有數種64位平台出現。在64位平台上,可用內存范圍增大到原來的232倍
,其間差異可略窺一斑了。鑒於這部分代碼的重要性和復雜性,移植工作在這里變得相
當謹慎。有些平台上甚至只是用最保守的內存管理模式。如在SPARC平台上的頁面大小可
以是多種尺寸,為了簡單和可靠起見,SPARC版的Linux只是用了8K頁面這一種模式。這
一狀況直到2.4版才得以改善。
除了上面所講的之外,還有一些代碼需要考慮,但相對來說次要一些。如浮點運算
的支持。較完美的做法是對FPU編程,由硬體完成浮點運算。但在某些時候,浮點並不重
要,甚至CPU根本就不支持浮點。這時候就可以根據需求來取捨。
對於內核移植的討論到此為止。實際上,還有一些移植工作需要同時考慮,但很難
說這是屬於內核范疇還是屬於驅動程序范疇,比如說顯示設備的支持,和內核十分相關
,但在邏輯上又不屬於內核,並且在移植上也更像是驅動程序的開發。因此不在這里討
論。
(2)系統移植
當內核移植完畢後,可以說所有的移植工作就已經完成大半了。就是說,當內核在
交叉編譯成功後,載入到目標平台上正常啟動,並出現類似VFS: Can抰 mount root fi
le system的提示時,則表示可以開始系統移植方面的工作了。系統移植實際上是一個最
小系統的重建過程。許多Linux愛好者有過建立Linux系統應急盤的經驗,與其不同的是
,你需要使用目標平台上的二進制代碼生成這個最小系統。包括:init、libc庫、驅動
模塊、必需的應用程序和系統配置腳本。一旦這些工作完成,移植工作就進入聯調階段
了。
一個比較容易的系統部分移植辦法是:先著手建立開發平台上的最小系統,保證這
套最小系統在開發平台上正確運行。這樣可以避免由於最小系統本身的邏輯錯誤而帶來
的麻煩。由於最小系統中是多個應用程序相互配合工作,有時出現的問題不在代碼本身
而在系統的邏輯結構上。
Linux系統移植工作至少要包括上述的內容,除此之外,有一些看不見的開發工作也
是不可忽視的,如某個特殊設備的驅動程序,為調試內核而做的遠程調試工作等。另外
,同樣的一次移植工作,顯然符合最小功能集的移植和完美移植是不一樣的;向16位移
植和向64位移植也是不一樣的。
在移植中通常會遇見的問題是試運行時鎖死或崩潰,在系統部分移植時要好辦些,
因為可以容易地定位錯誤根源,而在核心移植時確實很讓人頭疼。雖然可以通過串口對
運行著的內核進行調試,但是在多任務情況下,有很多現象是不可重現的。又如,在初
始化的開始,很多設備還沒法確定狀態,甚至串口還沒有初始化。對於這種情況沒有什
么很好的解決辦法,好的開發/模擬平台很重要,另外要多增加反映系統運行狀態的調試
代碼;再者要吃透硬體平台的文檔。硬體平台廠商的專業支持也是很重要的。
還有一點很重要:Linux本身是基於GPL的操作系統,移植時,可以充分發揮GPL的優
勢,讓更多的愛好者參與進來,向共同的目標前進。
❸ 為什麼linux具有很強的移植性
這是因為linux的開源代碼在許多人的共同開發下,形成的模塊化結構,即linux內核有底層硬體版相關模權塊和硬體無關模塊,因此如果要添加支持不同的cpu就只需要添加底層硬體相關的這部分的代碼就可以了,硬體無關模塊可以共用,所以它的移植性很強得益於它的代碼結構。
再有,現在Linux能夠支持很多CPU晶元是因為它的開源,世界各地有無數的開發人員。
❹ 嵌入式linux系統移植包含哪三部分內容
嵌入式Linux系統的移植主要有U-Boot、Linux內核、文件系統這三部分。 Uboot是在系統上電時開始執行,初始化硬體設備,准備好軟體環境,然後才調用Linux操作系統內核。文件系統是Linux操作系統中用來管理用戶文件的內核軟體層。文件系統包括根文件系統和建立於Flash內存設備之上文件系統。根文件系統包括系統使用的軟體和庫,以及所有用來為用戶提供支持架構和用戶使用的應用軟體,並作為存儲數據讀寫結果的區域。 可將Linux系統移植過程大致需要分成6個步驟: 1) 准備工作,包括下載源碼、建立交叉編譯環境等。交叉開發是指在開發主機上安裝開發工具,編輯、編譯目標板的引導程序、內核和文件系統,使其能在目標板上運行。 2) 配置和編bootloader(引導裝載程序)。通過這段小程序,可以初始化硬體設備、建立內存空間的映射表,從而建立適當的系統硬體環境,為最終調用操作系統內核做好准備。 3) 配置和編譯Linux內核,對其進行相應的裁剪,修改內核以支持相關的硬體設備。 4) 為大容量NAND Flash移植YAFFS文件系統,並將該文件系統加入Linux內核中; 5) 製作RAMdisk來掛載根文件系統。Linux系統中的文件和設備是通過文件系統來組織的。文件系統的存在使得數據和設備可以被有效而透明地存取訪問。一個linux的最簡根文件系統應該包括支持linux系統正常運行的基本內容,包括系統使用的軟體和庫,以及所有用來為用戶提供基本支持的架構和指令。 6) 燒寫、調試系統;如果調試出錯,則需要重新配置,返回上述步驟(2)。嵌入式linux系統移植包含哪三部分內容
❺ linux怎樣可以移植電阻屏ads7843
一、移植環境
主 機:VMWare--Fedora 9
開發板:Mini2440--64MB Nand
編譯器:arm-linux-gcc-4.3.2
二、移植步驟
1. 准備驅動源碼。因為linux-2.6.30.4內核中沒有提供合適的ADC驅動和觸摸屏驅動,所以這里就直接用友善提供的驅動
s3c24xx-adc.h
#ifndef _S3C2410_ADC_H_
#define _S3C2410_ADC_H_
#define ADC_WRITE(ch, prescale) ((ch)<<16|(prescale))
#define ADC_WRITE_GETCH(data) (((data)>>16)&0x7)
#define ADC_WRITE_GETPRE(data) ((data)&0xff)
#endif /* _S3C2410_ADC_H_ */DE>
mini2440_adc.c
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/mole.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <mach/regs-clock.h>
#include <plat/regs-timer.h>
#include <plat/regs-adc.h>
#include <mach/regs-gpio.h>
#include <linux/cdev.h>
#include <linux/miscdevice.h>
❻ 如何把linux下的軟體移植到ubuntu系統下
雖然說
Linux
系統的最大優點就是兼容性好,但是有時候不同版本的
Linux
還是會有一些差別的。如果說你想把別的Linux系統版本下的軟體移植到
Ubuntu
系統下面的話,那麼最好還是對源程序做一些可擴展代碼的改進(例如:如果是使用
C
語言開發的軟體,你就可以在
C
語言源程序中增加一些條件編譯選項,具體的條件編譯選項有很多,你需要仔細斟酌),這樣你把
C
語言源程序復制到
Ubuntu
系統下面,然後可以使用不同的選項對
C
語言源程序進行編譯,這樣編譯出來的可執行程序,就可以在
Ubuntu
系統下執行了。