嵌入式linux系統
1. 嵌入式系統,linux和嵌入式linux的區別
嵌入式系統是一種專用的計算機系統,作為裝置或設備的一部分。通常,嵌入式系統是一個控製程序存儲在ROM中的嵌入式處理器控制板。事實上,所有帶有數字介面的設備,如手錶、微波爐、錄像機、汽車等,都使用嵌入式系統,有些嵌入式系統還包含操作系統,但大多數嵌入式系統都是是由單個程序實現整個控制邏輯。
國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。嵌入式系統的核心是由一個或幾個預先編程好以用來執行少數幾項任務的微處理器或者單片機組成。與通用計算機能夠運行用戶選擇的軟體不同,嵌入式系統上的軟體通常是暫時不變的;所以經常稱為「固件」。
linux:
Linux是一種自由和開放源碼的類Unix操作系統,存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。Linux是一個領先的操作系統,世界上運算最快的10台超級計算機運行的都是Linux操作系統。嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU 工程各種工具和資料庫的操作系統。
Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。它主要用於基於Intel x86系列CPU的計算機上。這個系統是由全世界各地的成千上萬的程序員設計和實現的。其目的是建立不受任何商品化軟體的版權制約的、全世界都能自由使用的Unix兼容產品。
Linux以它的高效性和靈活性著稱,Linux模塊化的設計結構,使得它既能在價格昂貴的工作站上運行,也能夠在廉價的PC機上實現全部的Unix特性,具有多任務、多用戶的能力。Linux是在GNU公共許可許可權下免費獲得的,是一個符合POSIX標準的操作系統。Linux操作系統軟體包不僅包括完整的Linux操作系統,而且還包括了文本編輯器、高級語言編譯器等應用軟體。它還包括帶有多個窗口管理器的X-Windows圖形用戶界面,如同我們使用Windows NT一樣,允許我們使用窗口、圖標和菜單對系統進行操作。
嵌入式linux:
嵌入式Linux系統就是利用Linux其自身的許多特點,把它應用到嵌入式系統里。隨著微處理器的產生,價格低廉、結構小巧的CPU和外設連接提供了穩定可靠的硬體架構,那麼限制嵌入式系統發展的瓶頸就突出表現在了軟體方面。盡管從八十年代末開始,陸續出現了一些嵌入式操作系統,比較著名的有Vxwork、pSOS、Neculeus和Windows CE。但這些專用操作系統都是商業化產品,其高昂的價格使許多低端產品的小公司望而卻步;而且,源代碼封閉性也大大限制了開發者的積極性。另外,結合國內實情,當前國家對自主操作系統的大力支持,也為源碼開放的LINUX的推廣提供的廣闊的發展前景。還有,對上層應用開發者而言,嵌入式系統需要的是一套高度簡練、界面友善、質量可靠、應用廣泛、易開發、多任務,並且價格低廉的操作系統。在不久的將來,從冰箱到收音機都會內置處理器。因為Linux的開放性,許多人認為Linux非常適合多數Internet設備。他們認為Linux可以支持不同的設備,支持不同的配置。
Linux做嵌入式的優勢,首先,Linux是開放源代碼的,不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發者的強大技術支持;其次,Linux的內核小、效率高,內核的更新速度很快;第三,Linux是免費的OS,在價格上極具競爭力。
Linux還有著嵌入式操作系統所需要的很多特色,突出的就是Linux適應於多種CPU和多種硬體平台,是一個跨平台的系統。到目前為止,它可以支持二三十種CPU。而且性能穩定,裁剪性很好,開發和使用都很容易。很多CPU包括家電業晶元,都開始做Linux的平台移植工作。移植的速度遠遠超過Java的開發環境。也就是說,如果今天用Linux環境開發產品,那麼將來換CPU就不會遇到困擾。同時,Linux內核的結構在網路方面是非常完整的,Linux對網路中最常用的TCP/IP協議有最完備的支持。提供了包括十兆、百兆、千兆的乙太網絡,以及無線網路,Toker ring(令牌環網)、光纖甚至衛星的支持。所以Linux很適於做信息家電的開發。
還有使用Linux為的是來開發無線連接產品的開發者越來越多。Linux在快速增長的無線連接應用主場中有一個非常重要的優勢,就是有足夠快的開發速度。這是因為LInux有很多工具,並且Linux為眾多程序員所熟悉。因此,我們要在嵌入式系統中使用Linux操作系統。
Linux的大小適合嵌入式操作系統──Linux固有的模塊性,適應性和可配置性,使得這很容易做到。另外,Linux源碼的實用性和成千上萬的程序員熱切其望它用於無數的嵌入式應用軟體中,導致很多嵌入式Linux的出現,包括:Embedix,ETLinux,LEM,Linux Router Project,LOAF,uCLinux,muLinux,ThinLinux,FirePlug,Linux和PizzaBox Linux。
2. 如何做嵌入式Linux操作系統
做一個嵌入式Linux系統究竟要做哪些工作
做一個嵌入式Linux系統究竟需要做哪些工作?也就是本文究竟要講述哪些內容?我先介紹一個脈絡,可以做為我們後面工作的一個總的提綱:
第一步、建立交叉編譯環境
沒有交叉開發經驗的讀者,可能一時很難接受這個概念。首先,要明白兩個概念:一般我們工作的機器,稱為開發機、主機;我們製作好的系統將要放到某台機器,如手機或另一台PC機,這台機我們稱為目標主機。
我們一般開發機上已經有一套開發工具,我們稱之為原生開發套件,我們一般就是用它們 來寫程序,那麼,那什麼又是交叉編譯環境呢?其實一點也不神秘,也就是在開發機上再安裝一套開發工具,這套開發工具編譯出來的程序,如內核、系統工作或者我們自己的程序,是放在目標主機上運行的。
那麼或許有初學者會問,直接用原生開發工具為目標主機編譯程序不就完了?至少我當 初是這么想的。一般來說,我們的開發機都是X86平台,原生開發套件開發的工具,也針對 X86平台,而我們的目標主機可能是PowerPC、IXP、MIPS……所以,我們的交叉編譯環境是針對某一類具體平台的。
一般來講,交叉開發環境需要二進制工具程序、編譯器、C鏈接庫,嵌入式開發常用的這三類軟體是:
Binutils
Gcc
uClibc
當然,GNU包含的工具套件不僅於此,你還要以根據實際需要,進行選擇
第二步、編譯內核
開發工具是針對某一類硬體平台,內核同樣也是。這一步,我們需要用第一步中建立的工具,對內核進行編譯,對於有內核編譯經驗的人來說,這是非常簡單的;
第三步、建立根文件系統
也就是建立我們平常看到的bin、dev、proc……這一大堆目錄,以及一些必備 的文件;另外,我們還需要為我們的目標系統安裝一些常用的工具軟體,如 ls、ifconfig……當然,一個辦法是找到這些工具的源代碼,用第一步建立的交叉編譯工具來編譯,但是這些軟體一是數量多,二是某些體積較大,不適合嵌入式系統,這一步,我們一般都是用busybox來完成的,包括系統引導軟體init;
最後,我們為系統還需要建立初始化的引導文件,如inittab……
第四步、啟動系統
在這一步,我們把建立好的目標、文件、程序、內核及模塊全部拷貝到目標機存儲器上, 如硬碟。然後為系統安裝 bootloader,對於嵌入式系統,有許多引導程序可供我們使用。不過它們許多都有硬體平台的限制。當然,如果你是工作在X86,可以直接用lilo 來引導,事實上,本文就是採用的lilo。
做到這一步,將目標存儲設備掛上目標機,如果順利,就可以啟動系統了。
當然,針對某些特別的平台,不能像硬碟這樣拷貝了,需要讀卡器、燒錄……但是基本的方法是相通的!
第五步、優化和個性化系統
通過前四步,我們已經得到了一個可以正常工作的系統。在這一步里,就是發揮你想像的時候了……
本文的工作環境
項目根目錄/home/kendo/project ------>;我將它指定至PATH:$PRJROOT
子目錄及說明
目錄 內容
bootloader 目標板的引導載入程序,如lilo等
build-tools 建立交叉編譯平台的工具源碼
debug 調試工具及所有相關包
doc 項目中用到的所有文檔
images 編譯好的內核映像,以及根文件系統
kernel 各個版本的Linux內核源碼
rootfs 製作好的根文件系統
sysapps 目標板將要用到的系統應用系統,比如thttpd,udhcpd等
tmp 存放臨時文件
tools 編譯好的跨平台開發工具鏈以及C鏈接庫
工作的腳本
#!/usr/bin
export PROJECT=skynet
export PRJROOT=/home/${PROJECT}
export TARGET=i386-linux
export PREFIX=${PRJROOT}/tools
export TARGET_PREFIX=${PREFIX}/${TARGET}
exportPATH=${PREFIX}/bin:/bin:/sbin:/usr/bin:/usr/sbin
cd $PRJROOT
3. 嵌入式linux操作系統版本哪個比較好
uclinux
1.開放源碼的嵌入式Linux的典範作。
2.它秉承了標准Linux的優良特性,
3.一個高度優化的、代碼緊湊穩定、良好的
支持多款CPU
4.經被成功地移植到很多平台上。
5.它具有體積小、穩定、良好的移植性、
6.優秀的網路功能、
7.完備的對各種文件系統的支持,
8.以及豐富的API函數等優點。
9.uClinux與Linux在兼容性方面表現出色,
4. 做一個嵌入式Linux系統究竟要做哪些工作
1、Linux 基礎
安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統
能夠熟練使用Linux系統的基本命令 認識Linux系統的常用服務安裝Linux操作系統 Linux基本命令實踐 設置Linux環境變數 定製Linux的服務
Shell 編程基礎使用vi編輯文件 使用Emacs編輯文件 使用其他編輯器
2、Shell 編程基礎
Shell簡介 認識後台程序Bash編程熟悉Linux系統下的編輯環境 熟悉Linux下的各種Shell 熟練進行shell編程熟悉vi基本操作
熟悉Emacs的基本操作 比較不同shell的區別 編寫一個測試伺服器是否連通的shell腳本程序 編寫一個查看進程是否存在的shell腳本程序
編寫一個帶有循環語句的shell腳本程序
3、Linux 下的C 編程基礎
linux C語言環境概述 Gcc使用方法 Gdb調試技術 Autoconf Automake Makefile 代碼優化
熟悉Linux系統下的開發環境 熟悉Gcc編譯器 熟悉Makefile規則編寫Hello,World程序 使用 make命令編譯程序 編寫帶有一個循環的程序
調試一個有問題的程序
4、嵌入式系統開發基礎
嵌入式系統概述交叉編譯 配置TFTP服務 配置NFS服務 下載Bootloader和內核
嵌入式Linux應用軟體開發流程熟悉嵌入式系統概念以及開發流程 建立嵌入式系統開發環境製作cross_gcc工具鏈 編譯並下載U-boot
編譯並下載Linux內核 編譯並下載Linux應用程序
5、嵌入式系統移植
Linux內核代碼 平台相關代碼分析 ARM平台介紹 平台移植的關鍵技術 移植Linux內核到 ARM平台 了解移植的概念
能夠移植Linux內核移植Linux2.6內核到 ARM9開發板
6、嵌入式 Linux 下串口通信
串列I/O的基本概念 嵌入式Linux應用軟體開發流程 Linux系統的文件和設備 與文件相關的系統調用 配置超級終端和MiniCOM
能夠熟悉進行串口通信 熟悉文件I/O 編寫串口通信程序 編寫多串口通信程序
7、嵌入式系統中多進程程序設計
Linux系統進程概述 嵌入式系統的進程特點 進程操作 守護進程 相關的系統調用了解Linux系統中進程的概念 能夠編寫多進程程序編寫多進程程序
編寫一個守護進程程序 sleep系統調用任務管理、同步與通信 Linux任務概述任務調度 管道 信號 共享內存 任務管理 API 了解Linux系統任務管理機制
熟悉進程間通信的幾種方式 熟悉嵌入式Linux中的任務間同步與通信編寫一個簡單的管道程序實現文件傳輸 編寫一個使用共享內存的程序
8、嵌入式系統中多線程程序設計
線程的基礎知識 多線程編程方法 線程應用中的同步問題了解線程的概念 能夠編寫簡單的多線程程序編寫一個多線程程序
9、嵌入式 Linux 網路編程
網路基礎知識 嵌入式Linux中TCP/IP網路結構 socket 編程 常用 API函數 分析Ping命令的實現 基本UDP套介面編程 許可證管理
PPP協議 GPRS 了解嵌入式Linux網路體系結構 能夠進行嵌入式Linux環境下的socket 編程 熟悉UDP協議、PPP協議 熟悉GPRS
使用socket 編寫代理伺服器 使用socket 編寫路由器 編寫許可證伺服器 指出TCP和UDP的優缺點 編寫一個web伺服器 編寫一個運行在
ARM平台的網路播放器
10、GUI 程序開發
GUI基礎 嵌入式系統GUI類型 編譯QT 進行QT開發熟悉嵌入式系統常用的GUI 能夠進行QT編程使用QT編寫「Hello,World」程序
調試一個加入信號/槽的實例 通過重載QWidget 類方法處理事件
11、Linux 字元設備驅動程序
設備驅動程序基礎知識 Linux系統的模塊 字元設備驅動分析 fs_operation結構 載入驅動程序了解設備驅動程序的概念
了解Linux字元設備驅動程序結構 能夠編寫字元設備驅動程序編寫Skull驅動 編寫鍵盤驅動 編寫I/O驅動 分析一個看門狗驅動程序
對比Linux2.6內核與2.4內核中字元設備驅動的不同Linux 塊設備驅動程序塊設備驅動程序工作原理 典型的塊設備驅動程序分析
塊設備的讀寫請求隊列了解Linux塊設備驅動程序結構 能夠編寫簡單的塊設備驅動程序比較字元設備與塊設備的異同 編寫MMC卡驅動程序 分析一個文件系統
對比Linux2.6內核與2.4內核中塊設備驅動的不同
12、文件系統
虛擬文件系統 文件系統的建立 ramfs內存文件系統 proc文件系統 devfs 文件系統 MTD技術簡介 MTD塊設備初始化
MTD塊設備的讀寫操作了解Linux系統的文件系統 了解嵌入式Linux的文件系統 了解MTD技術 能夠編寫簡單的文件系統為 ARM9開發板添加 MTD支持
移植JFFS2文件系統 通過proc文件系統修改操作系統參數 分析romfs 文件系統源代碼 創建一個cramfs 文件系統
無論選擇哪一方向,基本的linux的知識是需要具備的,其他還需要掌握的知識有ARM(最常用的一款嵌入式處理器)和C語言編程,每一方面知識的掌握熟練程度都最終決定了個人進行嵌入式linux開發的綜合能力。
更多詳情來源:《華清遠見嵌入式學院》
5. 什麼是嵌入式linux
嵌入式linux 是將日益流行的Linux操作系統進行裁剪修改,使之能在嵌入式計算機系統上運行的一種操作系統。嵌入式linux既繼承了Internet上無限的開放源代碼資源,又具有嵌入式操作系統的特性。
6. linux與嵌入式系統的關系
linux和嵌入式系統是相互於相互交叉使用的。
嵌入式系統的定義就是軟硬體可裁剪,在實際項目中,對產品的功耗、存儲等要求嚴格,所以就會涉及將完整的Linux系統進行精簡瘦身,節約存儲提高效率,這就是所謂的系統移植、裁剪。此工作需要對Linux內核極其熟悉。
Linux驅動開發:嵌入式產品上面的各種外設的驅動開發,不僅要懂軟體、還需要熟悉Linux內核代碼、了解硬體相關知識。
嵌入式應用開發:調用Linux的系統調用介面,進行基於Linux系統的應用開發,只需要有Linux C語言知識的積累即可完成。
(6)嵌入式linux系統擴展閱讀
嵌入式linux的特點
1、嵌入式linux既繼承了Internet上無限的開放源代碼資源,又具有嵌入式操作系統的特性。
2、嵌入式Linux的特點是版權費免費;購買費用媒介成本技術支持全世界的自由軟體開發者提供支持網路特性免費。
3、一些嵌入式系統設計成具有附加的功能,如存儲在非易失性存儲器中的程序,並且具有運行可以完成原始設計范圍之外的任務的多任務操作系統的能力。
7. 嵌入式和linux的關系
嵌入式要學哪些東西?今天我詳細告訴你到底要學哪些技術!
1)學習 Linux系統安裝、 常用命令、應用程序安裝。
2) 學習 Linux 下的 C 編程、這本書必學《UNIX 環境高級編程》、《UNIX網路編程》,Rechard Stevens 寫的,C 高手大都學習過 《C 和指針》、《C 缺陷與陷阱》、《高質量C/C++編程指南》、《C 專家編程》、《The C programming Language》
3)程序員大都要學:數據結構,嵌入式程序員數據結構必學!
4)底層開發人員大都要學:微機原理、計算機體系結構,嵌入式開發人員必學!
5)單片機可以讓一個從事軟體開發的人了解和如何操作硬體,有必要學,因為一開始就從 ARM 入手,不太現實!
6)ARM 體系結構,其中有匯編。
7)數字電路有必要學習,不然你在做底層開發時真的會不知道怎麼看原理圖,起碼也得懂與入門吧。
8)ARM + Linux 應用程序開發(前提是要有開發板)
到此,你勉強算是在嵌入式Linux這個行業有了初步入門了吧, 但遺憾的是這還遠遠不夠,我們還得繼續,因為這上嵌入式,我們得變成高手。
9)要做底層開發,就必須知道軟硬體之間是如何銜接和配合工作的,那麼電子技術應該要好好學習了,很多時候會用到模擬電路知識,這是區別好手與菜鳥的不同之處之一。
10)Linux 下的匯編要學,這樣你才能真正了解你寫的程序是如何在一個特定的硬體上跑的。這是區別好手與菜鳥的不同之處之二。
11)TCP/IP 協議棧要學,所有的嵌入式高手都得掌握的東西,這是區別好手與菜鳥的不同之處之三。
12)有了這些東西,拿下 Linux 驅動 已經不再話下,需要你去學習 Linux 內核源代碼和Linux驅動程序設計,這是一個技術升華。
到此, 你已經算是 嵌入式Linux 的中級人物了,繼續往下:
13)音頻、視頻的解碼解碼技術你得學。
14)各種 IC ,各種 bootloader 你能夠參與其開發設計。
可以去21ic電子技術論壇上交流一下,那裡面有很多大牛。。。
8. 什麼是嵌入式linux系統
ash晶元),運行在板子上的操作系統。受限於嵌入式設備的存儲容量,所佔空間都很小。
當然首先要知道什麼是嵌入式設備,嵌入式設備的定義一般就是指非通用PC設備。
WinCE是一種類Windows的嵌入式操作系統,不嚴格地說,可以看成windows的縮小版;同樣,Linux嵌入式操作系統也可以看成是PC上跑的linux操作系統的縮小版。
現在很多航空航天儀器、醫療設備等都採用Linux嵌入式操作系統。強大的網路功能和代碼開源易獲取易裁剪是其特點。
參見我的另一個回答:
9. 嵌入式linux和linux有什麼不同.linux的作用是什麼
Linux作為開源免費操作系統,以其作為系統的應用可以較方便的進行系統功能的裁剪和跨體系結構移植。
在不同的目標體系結構下(x86,ARM,PowerPC etc.),由於匯編指令集的不同,同一段代碼利用不同的編譯器和庫文件生成的可執行代碼是不同的。不同體系的Linux其開發工具是不同的。
嵌入式linux屬於高度裁剪過的Linux,他將桌面Linux所具有的大部分應用功能(如GUI 工具,計算器,電子郵件 etc.)和部分系統功能省略,但集成了開發者希望嵌入式產品所具有的特殊應用功能(比如 一款以Linux為系統的觸摸式海事導航儀可以根據功能需要去除不需要的功能塊,但加入GPS定位,航速航向計算,航線規劃,觸摸檢測和對應功能實現等功能)。
嵌入式系統往往是指系統的資源(如DRAM/FLASH ROM,功耗,工作頻率 etc.)有較大限制且系統的工作環境相對多變和惡劣(如溫濕度變化大,酸鹼度腐蝕,外部撞擊和振動,外部電磁干擾,靜電導致的高壓損壞電路 etc.)。這也就需要開發人員更多的發現和假想可能的突發情況並採取相應預防措施。大部分嵌入式系統對響應的時間限制和正確性也有極高的要求。
10. 嵌入式Linux
同學。。。眼光放遠點。沒必要非把自己局限在單片機這個問題上。。。
你現在才大二呢,還挺多要學的。沒必要就把自己的方向定在這個上面,先學好你該學的才是對的。單片機可以作為興趣先學著。現在外面很多的培訓班,都是搞這個培訓的,是比較火。但是你總不能就讓大學發揮一個培訓班的作用吧,學習方法,等等很多東西,在外面培訓班學不到的,你要抓住啊,包括你的專業課程之類的。
你想下嵌入式系統包括什麼。。嵌入式軟體和硬體。所以真正搞嵌入式的人,必須要對軟體和硬體都非常熟悉才可以。嵌入式的軟體需要的C語言功底還是比較深的,至少你要能會寫出自己的驅動來。你說的基本掌握我不知道你掌握到什麼程度了。至少操作系統原理,微機原理,都是要學的。
先參加比賽吧。比賽裡面可以學到很多的硬體知識,硬體這個東西本來就是需要積累的,現在就是積累的好機會。
可以先不針對嵌入式LInux,自己先使用Linux,然後寫寫代碼,熟悉下。再然後就是開始學習內核和驅動方面了。同時,某些場合還需要匯編的支持。
沒事加個Q群,就曉得了,走在前面的人很多,你需要追趕。
還有,我提醒下,技術,這個東西只是時間的問題,不存在智商問題,大家只要感興趣,花點時間都能搞定的。可是你在學校學的基礎理論,並不是說想技術一樣很好學的,或者就可以學到。對不?