clinux多線程
『壹』 關於ARM7/9及所用操作系統ucos、linux選擇的問題
我在剛開始學習ARM的時候,也有你這樣的困惑。我目前已經工作7年了,剛開始是搞單片機的。05開始學習ARM,06第一個項目是採用的arm7+uClinux,07開始用arm9+linux。感覺ARM7和arm9還有單片機,各有各的優缺點。實際工作中更多的是要考慮產品的性價比和可行性,對於一些很小的系統,能用低成本的,盡快會用低成本的解決,畢竟企業是追求效益最大化的。有時候,過分的想用更高性能的CPU,更好的操作系統,往往只是自己的一種愛好和滿足感。不能實際解決問題。比如有個小的監控,我用ARM7和AMR9都可以做,但是我用ARM7可能只需要1個月就可以完成,而用arm9+linux不光成本高,難度和周期都會加大加長。所以選擇方案一定要與實際的項目相匹配。任何一種技術其存在,就有其存在的道理。學會什麼都不吃虧的。
至於要學什麼,我的建議是循序漸進。這是符合人類自身的科學學習方法,如果簡單的都學不好,搞更復雜的只會讓自己受到打擊越大。失去繼續學習的信息。
我不知道你學習的專業是什麼,如果是偏向硬體的,建議從硬體底層往上學,而如果你是學計算機專業的,對操作系統和多線程,API比較熟悉,建議你從上往下學。總之一句話,先從自己熟悉的開始入手,慢慢深入,循序漸進會越走越寬的,越走越順的。
最後,祝你成功!
『貳』 嵌入式Linux系統工程師都學些什麼
課程安排課程簡介第一周 嵌入式C語言編程基礎 主要介紹在嵌入式開發編程中C語言的重要概念和編程技巧中的重點難點,以復習串講和實例分析的形式,重點介紹包括函數與程序結構,指針、數組和鏈表,庫函數的使用等知識。第二周 Linux 操作和編程基礎 主要介紹 Linux 的基本命令和基礎編程知識,包括Linux的文件操作和目錄操作命令,VI編輯器,GCC編譯器,GDB調試器和 Make 項目管理工具等知識。第三周 Linux 上C 強化編程訓練 主要包括整數演算法訓練,遞歸和棧編程訓練,位操作訓練,指針訓練,字元串訓練和常用C庫函數編程介面實踐,強化學員對Linux下基本編程開發的理解和編碼調試的能力。第四-七周 Linux環境高級編程及項目開發編程實踐 主要包括系統編程(信號/系統調用/管道/FIFO/消息隊列/共享內存等),文件I/O編程(文件描述符/文件讀寫介面/原子操作/阻塞與非阻塞IO等),多任務和多線程編程(進程標識/用戶標識/fork與vfork/多線程概念/線程同步等),網路編程(網路基本概念/套介面編程/網路位元組次序/ Client/Server 結構/ UDP 編程);掌握Linux下Socket編程的開發流程,熟悉網路編程的調用介面函數和相關數據結構,使學員初步具備在Linux上進行系統編程開發的能力。同時綜合之前所學內容和編程技術,以小組為單位進行一個團隊合作項目的開發,考核內容包括文件I/O編程,多線程編程,網路編程和項目文檔編寫。期中考試第八-九周 嵌入式處理器體系結構及編程實踐 主要介紹 ARM、MIPS、PowerPC等體系結構及其基本編程知識,包括指令分類,定址方式、指令集、存儲系統、異常中斷處理、匯編語言以及C\C++和匯編語言的混合編程等知識。同時結合ARM嵌入式開發板硬體設計原理和基本硬體設計流程,分析各種外設的工作原理和驅動機制,並自己動手實踐完成一個ARM開發板上的編程大作業。第十-十一周 嵌入式Linux開發基礎及高級應用 主要介紹嵌入式 Linux 開發應用程序的基本流程和知識,包括嵌入式Linux基本概念和開發流程、Bootloader 工作原理、內核裁減配置和交叉編譯、根文件系統製作、網路編程及圖形界面和資料庫開發等知識。同時獨立完成一個基於嵌入式Linux GUI的應用編程大作業。第十二-十三周 嵌入式 Linux驅動理論及驅動程序開發實踐 主要介紹嵌入式 Linux 上驅動程序開發規范,包括設備驅動程序概念、字元設備驅動程序、塊設備與網路設備、網卡驅動以及常用嵌入式設備驅動開發等知識。同時獨立實現兩種嵌入式設備驅動程序的編寫,包括驅動模塊的調試和載入以及完整的項目開發文檔的編寫。第十四-十五周 嵌入式Linux項目團隊開發實踐鍛煉 主要包括設計並實現一個真實和完整的嵌入式項目的開發流程,涉及到數據採集、網路通訊、圖形用戶界面顯示以及嵌入式資料庫存儲系統等多種嵌入式Linux編程技術。要求學員建立起團隊開發和協同工作的企業項目開發模式的概念和流程,強化學員對編寫項目概要設計文檔和詳細設計文檔的理解,為就業前的職業技能和素質訓練做好充分准備。畢業典禮培訓目標學習內容掌握程度掌握三種編程語言C 語言精通 C++ 語言 了解 ARM 匯編語言 熟悉 掌握兩種嵌入式Linux操作系統Linux精通 uCLinux精通 掌握兩種嵌入式實時操作系統VxWorks 熟悉 uC/OS-II 熟悉 掌握三種處理器體系結構ARM 體系結構精通 MIPS 體系結構 熟悉 PowerPC 了解掌握五種ARM核處理器Samsung S3C2410/S3C44B0精通 Intel XScale PXA255精通 Philips LPC22xx精通 EP7312 熟悉 MIPS Godson 龍芯 熟悉 掌握兩種硬體設計工具Candence PCB 熟悉 Protel 了解掌握兩種Linux下編輯軟體VI精通 EMACS 了解掌握兩種串口通訊工具超級終端 (Windows) 熟悉 MiniCOM (Linux) 熟悉 掌握三種 Flash 燒寫工具Flash Programmer (GUI) 熟悉 JFlash 燒寫軟體及原理精通 SJF系列燒寫軟體及原理精通 掌握兩種調試工具JTAG 在線調試器 熟悉 SkyEye 模擬調試工具 熟悉 掌握兩種集成開發環境ARM ADS 1.2精通 K-Develop IDE 熟悉 掌握一種源代碼版本管理工具CVS 熟悉 掌握嵌入式 Linux整體開發流程 熟悉 GNU 交叉編譯器使用Cross-compiler-gcc/g++精通 Linux Makefile 組織結構精通 Bootloader 啟動代碼u-Boot精通 RedBoot 熟悉 內核編譯配置參數設置精通 內核調試 熟悉 文件系統JFFS2 文件系統精通 NFS 文件系統精通 ROMFS 文件系統精通 EXT2 文件系統 熟悉 YAFF 文件系統 了解設備驅動程序液晶LCD 設備驅動精通 USB設備驅動精通 網卡設備驅動精通 嵌入式圖形系統MiniGUI精通 QT/Embedded 熟悉 MicroWIN 了解嵌入式資料庫系統SQLLite精通 嵌入式應用程序開發網路通訊應用開發精通 資料庫存儲應用開發 熟悉 多媒體應用開發 熟悉 圖形用戶界面開發精通 Shell 編程技巧 熟悉 【說明】 精通 ―― 表明對於所學內容和工具的原理進行過深入分析,了解相關內容實現的具體技術細節,並掌握 了相關工具的高級使用技巧。 熟悉 ―― 表明對於所學內容和工具能夠融會貫通,掌握相關內容的基本概念,並能夠熟練使用相關工具 的常用技巧。 了解 ―― 表明對於所學內容和工具一般了解,能夠區別相關內容在概念上的異同,並能夠初步使用相關工具。
『叄』 單片機 同時處理多件事
單片機是不能同時處理多件事情。如果要想同步處理多件事情,只能是先中斷正在做的事情,轉移到其它需要做的事情上,等事情處理完畢,或者還是處理到一定程度,再轉回之前正在做的事情。
一、關於單片機:
單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。
二、單片機的應用分類:
單片機(Microcontrollers)作為計算機發展的一個重要分支領域,根據發展情況,從不同角度,單片機大致可以分為通用型/專用型、匯流排型/非匯流排型及工控型/家電型。
1、通用型
這是按單片機(Microcontrollers)適用范圍來區分的。例如,80C51式通用型單片機,它不是為某種專門用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC介面等功能的溫度測量控制電路。
2、匯流排型
這是按單片機(Microcontrollers)是否提供並行匯流排來區分的。匯流排型單片機普遍設置有並行地址匯流排、 數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連接,另外,許多單片機已把所需要的外圍器件及外設介面集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶元體積,這類單片機稱為非匯流排型單片機。
3、控制型
這是按照單片機(Microcontrollers)大致應用的領域進行區分的。一般而言,工控型定址范圍大,運算能力強;用於家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設介面集成度高。 顯然,上述分類並不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。
『肆』 嵌入式操作系統與底層驅動代碼的關系
目前uclinux已不多用。因為ARM9已成為很普遍的東西,所以,主要用linux了。
linux下的編程與windows的編程一樣,分應用層和驅動層編程,應用層的編程與windows的程序編程差不多。驅動層則與windows有較大區別。在linux中,一般來說,驅動層的程序會產生一個設備文件,在應用層中就可以通過打開關閉讀寫這個設備文件來對底層的硬體進行操作。因此,linux下的底層驅動程序又被稱為設備驅動程序。驅動程序分幾類類型,我們常用的有字元型設備驅動,塊設備驅動。你所說的控制管腳電平,中斷等功能,都可以在字元型設備驅動中完成。
關於linux驅動程序的編寫,請看一下著名的《linux驅動程序 第三版》
『伍』 uclinux和linux的區別
Linux是一種很受歡迎的操作系統,它與UNIX系統兼容,開放源代碼。它原本被設計為桌面系統,現在廣泛應用於伺服器領域。而更大的影響在於它正逐漸的應用於嵌入式設備。uClinux正是在這種氛圍下產生的。在uClinux這個英文單詞中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"針對微控制領域而設計的Linux系統"。想了解Linux命令可參考下圖:
『陸』 學嵌入式為什麼要學linux 主要用途是什麼
事實上,ARM是通常都是用來做比較復雜的系統的,而且一般都是多任務系統的,當任務比較多,程序比較大的時候,只用匯編和C可怕難以勝任,所以我們應該給ARM配一個操作系統,用來管理這些任務,那麼對於ARM,我們可以作使用哪些操作系統呢?Windows XP行嗎?當然不行,太大了,不適合做嵌入式,微軟倒是推出了專門針對嵌入式系統開發的WinCE,可是這可不是免費的,而且不提供源碼的,給你就像一個黑夾子,對於一般的嵌入式學習,就不太合適了?那麼什麼樣的操作系統才能用於做嵌入式呢?嵌入式操作系統通常有Vx works 、WinCE 、uC/OS、Linux / ucLinux等。而uC/OS、Linux因為其免費,而且開源,深受學習者和小公司的歡迎。
uC/OS操作系統內核很小,特別適合初學,而且它是佔先式內核,是一個實時的操作系統,特別適合實時性要求較高的場合,其內核很小當然其功能當然也就沒有linux強大,而且uC/OS的圖形用戶界面(GUI)還是剛有雛形,沒有linux的GUI好,而它的GUI是收費的。這樣的話只是linux是最好了,但是linux本身不是實時的操作系統,不適合實時性高的場合,於是ucLinux產生了,ucLinux是一個實時操作系統(RTOS),因此學習ARM+ucLinux的人較多。
所以,如果只搞uc/OS+ARM,那就可以不學linux了,如果想學習ARM+ucLinux,要在ARM上移植linux,那麼移植後,這個裝有linux的ARM處理器,當然只能運行linux環境下編譯出來的應用程序(這里還有一個交叉編譯的概念需要正確理解),所以理所當然要學linux。通常小紅帽Red Hat Linux 使用比較廣泛,那麼不能在Windows下開發ARM+ucLinux嗎?其實倒是可以在Windows使用虛擬機軟體VMware裝一個linux。
嵌入式 Linux 最主要的工作是讓目標板能啟動 Linux 系統,啟動 Linux 系統的核心工作就是啟動 Linux 內核,啟動 Linux 內核的核心工作就是讓這個 Linux 內核能支持你這個設備,Linux 內核能支持你這個設備的前提就是 Linux 內核經過你的改進後確實能啟動,你改進內核的前提就是你會 Linux 內核。 你要是學嵌入式 WinCE ,你同樣要學 WinCE ,和學 Linux 內核的主要學習內容一樣。當然針對性不同。
『柒』 arm7上支持linux的進程線程技術嗎
arm7 一般跑的是uclinux, 支持vfork 但不支持fork, 線程支持
『捌』 基於linux內核開發設計的操作系統有哪些
目前成型的系統有如下:
手機:Android、ios(只能算半個)
電腦:linux、ubuntu、MAC等
還有諸如:openSUSE、Mint 、Fedora、Debian、Mandriva 、PCLinuxOS、Puppy、Sabayon、MEPIS、CentOS、Arch、Slackware 、FreeBSD、Kubuntu、Damn Small等等就不說了
Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。
Linux操作系統誕生於1991 年10 月5 日(這是第一次正式向外公布時間)。Linux存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。
嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU 工程各種工具和資料庫的操作系統。
『玖』 linux的相關疑問,ARM高手進。
1.ARM據說有裸跑和嵌入式兩種工作方式,那區別呢?
========================================================
所謂裸跑就是不帶操作系統,把arm當單片機用,實現各種功能,比如網路啊,i2c啊,gpio啊以及其中的中斷,都需要通過設置arm寄存器得到實現,這種方式的優點是,速度快,
缺點是:實現復雜功能基本不現實。。。。
所謂另一種工作方式也就是跑操作系統了,主流的嵌入式操作系統有linux,wince,uclinux,vxworks等等,它的作用就是將開發者和底層的硬體盡量隔開,不讓你為了什麼中斷嵌套而傷腦筋,而且實現了對多線程之類的支持,而底層的比如i2c啊網路之類的實現都又驅動完成,
缺點是,速度相對於裸奔慢,但是開發簡單,能將大部分的時間投入到開發中,而不是怎麼使用arm中。
2.ARM用在嵌入式的話,據說是LINUX系統上,那搞這個開發是不是要把LINUX的底層驅動弄明白?那要多久啊?
=======================================================
這個就不好說了,因為「弄明白」這個東東不好定義的,如果你擁有很扎實的C語言功底,與單片機開發經驗的話,大概一個星期可以上手。我大概就用了這么就就開始假如項目開發了。
3。所謂LINUX是開放源代碼,我就奇怪。據說windows的源程序有幾千萬行,LINUX的源代碼有多少?這個即使開放了,能看完嗎?
==================================================================
呵呵,源碼啊,我讀過一些,由於能力以及時間問題,想讀完其實是很難的,很少有人讀完,但是呢,你有了源文件以後你就可以知道linux的某一部分是如何實現的,這樣當你的程序出現莫名其妙的問題的時候才好「有據可依」。
4.LINUX系統的底層開發,要多久才能學會啊?
=================================================
同2問題,不好解釋,當你功底較好,也就1星期就可以參與項目開發了,然後邊做邊學,一個項目做完後,這次你提問的問題你自己都會解答了
這里我要解釋下什麼交功底較好,
也就是說你有豐富的項目開發經驗,良好的編程風格,以及出色的解決問題的能力。
5.據說嵌入式的開發愛用LINUX. 但大部分電腦的操作系統是windows啊 ! 那LINUX下的ARM能接在windows系統嗎?
==============================================================
嵌入式開發用linux一方面是開源,一方面是不要錢,而大部分電腦是windows的也確實,linux下的arm和windows連接我不是很理解你的意思,連接的方法有很多中啊,但是都要通過協議,即使arm用的是windows的wince那也必須使用協議才能連接,比如串口,tcp/ip(網線),並口,usb協議等,所以接入方面是沒有問題的。
6.學這個是不是要學習底層驅動之類的?
=================================================
底層驅動這個東西呢,我是最先學的,學了他讓你的視野和事業更開闊,而對於職場來說,底層驅動是很吃香的,而其他的底層開發中還有網路協議比較吃香,而那些只是用來完成邏輯的其他代碼,是人都會寫,所以工資也是最低的(當然也有例外,假如你是大牛,呵呵)。
『拾』 skyeye運行uclinux
1:准備合適的操作系統和編譯環境
如果你熟悉linux系統,那就跳過此節
如果你機器配置還可以,建議你裝個虛擬機,在虛擬機上面安裝Linux。
如果你用Windows系統,先安裝Cygwin或者mingw。
如果你對上面這些都不是很熟悉,那就搜索一下怎麼安裝Cygwin/Mingw/Linux。
2:下載skyeye源碼包
http://sourceforge.net/project/showfiles.php?group_id=85554
skyeye-1.2.6_rc1.tgz
skyeye-testsuite-1.2.5.tgz
3:在shell下面解壓文件
tar xzvf skyeye-1.2.6_rc1.tgz
tar xzvf skyeye-testsuite-1.2.5.tgz
4:編譯skyeye
cd skyeye-1.2.6_rc1 && ./configure && make && make install
5:編譯內核。
5.1 如果你不知道編譯內核,那最快速的方法就是直接運行線程編譯好的內核,例如skyeye-testsuite-1.2.5\uClinux\s3c44b0x這裡面就有vmlinux的文件,多看看readme
6:運行 skyeye
skyeye -e linux -c skyeye.conf
-e linux表示鏡像文件叫Linux
-c skyeye.conf 表示使用skyeye.conf 這個配置文件
如果還不明白可以再上網多搜索一下編譯內核。
這些問題很基礎,要熟悉Linux很快就能明白。
搞嵌入式不見得都要上板子,而且那樣很沒有效率。
建議你先跑完上面的流程,然後深入理解各個環節。
有沒有沒有開發板無所謂,學習態度才是關鍵,如果樓主能更勤奮、更有鑽研精神的話,這些問題很快就能搞定。相反的話即使能跑完,也無法理解,跟別說開發了。