基於ARM+linux的嵌入式系統設計
嵌入式系統的定義
IEEE的定義:嵌入式系統是“用於控制、監視或者輔助操作機器和裝置的裝置”
一般定義:以應用為中心,以計算機技術為基礎,其軟硬體可配置,對功能、可靠性、成本、體積、功耗有嚴格約束的
一種專用系統,所用的計算機稱為嵌入式計算機。
嵌入式系統與PC相比具有的特點:
嵌入式系統的開發模式
嵌入式系統的軟體使用交叉開發平臺進行開發。
-系統軟體和應用軟體在主機開發平臺上開發
-系統軟體和應用軟體在嵌入式硬體平臺上執行。
宿主機(Host)是用來開發嵌入式軟體的系統。
目標機(Target)是被開發的目的嵌入式系統。
交叉編譯器(Cross-compiler)是進行交叉平臺開發的主要軟體工具。它是執行在一種處理器體系結構上,但是可以生成在另一種不同的處理器體系結構上執行的目的碼的編譯器。
嵌入式系統開發用到的幾種通訊方式
windows和linux:通過安裝虛擬機器工具vmwaretools設定共享
NFS服務:NFS可以將遠端檔案系統載入在本地檔案系統下。遠端的硬碟、目錄和光碟機都可以變成本地主機目錄樹中的一個子目錄。載入後與處理自己的檔案系統一樣使用即可。不只方便,也節省了重複儲存檔案的空間、傳輸檔案的時間及網路頻寬。
NFS中掛載共享目錄:mount -t nfs 主機ip:共享目錄 掛載點
配置IP:ifconfig etho0 192.168.0.10
啟動服務:service nfs restart
Samba服務:同樣可以實現Windows和Linux不同系統間交換檔案共享。
交叉編譯環境
交叉編譯器:arm-linux-gcc-3.4.1 編譯後的目的碼要放在arm裝置上執行。
GCC的處理過程:
1.預處理:對標頭檔案(include)、預編譯語句(如define等)進行分析[前處理器cpp] -E
2.編譯: 將預處理後的檔案轉換成組合語言,生成檔案.s[編譯器ccl] -S
3.彙編:由彙編變為目的碼(機器程式碼),生成.o的檔案[彙編器as] -c
4.連線:連線目的碼,生成可執行程式[連結器ld]
Make工具及Makefile檔案
Make工具可以自動完成編譯工作,並且可以只對上次編譯後修改過的部分進行編譯,因此利用Make工具可以提高開
發效率。
Makefile的編寫:
一般的格式為:
目標:依賴關係
<Tab鍵> 命令
定義變數: CC=gcc 定義了一個變數CC,其值為gcc。如果要使用變數,將變數用()包含,並且在前面寫上$即可。
例如:$(CC)
Makefile檔案的三個內部變數:
[email protected]:擴充套件成當前規則的目標檔名;
$<:擴充套件成依賴列表中的第一個依賴檔案
$^:擴充套件成整個依賴的列表
註釋:以#開始的都是註釋行。
clean: rm: *.o hello clean通常放在檔案尾部,用於清除編譯生成的檔案,它沒有需要依賴的檔案。
通過命令 #make clean 就可以刪除生成的中間檔案和可執行檔案。
Make工具的使用:
#make all :自動查詢當前目錄下的Makefile或makefile檔案,如果存在就處理,否則報錯。all 是需要處理的物件。
如果make命令後不使用任何引數,預設情況下處理的是Makefile中的第一個目標(即第一個用“:”標誌的物件)。
#make -f maketest :通過-f 引數指定描述檔案,例如這裡的Makefile檔名為maketest。
引導載入程式 BootLoader:
在嵌入式系統中,主要使用flash作為系統的儲存煤介,很少用磁碟,因此整個系統的載入啟動任務就完全由載入程式
(也稱為Bootloader)來完成。
BootLoader的燒寫方式:
1.通過JTAG口
2.通過乙太網口
3.通過串列埠
BootLoader的兩種操作模式:
1.啟動載入模式:BootLoader將作業系統從儲存裝置上載入到記憶體中執行。無需使用者干預。
2.下載模式:這種模式下,目標機上的BootLoader將通過串列埠連線或網路連線等其他各種通訊手段從主機下載檔案。
BootLoader的結構框架分文兩部分:
stage1:用匯編語言來實現;
stage2:用C語言實現;
幾種流行的Linux BootLoader:
1.U-Boot 2.BLOB 3. RedBoot 4.VIVI
核心的裁剪
Linux核心的編譯選項:
make config: 進入命令列,可以一行一行的配置
make menuconfig:進入開發人員比較熟悉的menuconfig配置選單 (最常用的)
make xconfig:在2.4X及以前版本中的xconfig圖形配置選單
選單選項的幾種選擇(3種):(用空格切換)
1. M:M表示以模組方式編譯進核心,核心啟動後,需要手工執行insmod命令才能使用該選項
2. *: *表示直接編譯進核心
3. 空表示不編譯進核心。
核心的編譯:
1.在核心的當前目錄下,輸入make clean命令,刪除已生成的模組和目標檔案,即在編譯進新核心之前將環境清除幹
淨。
2.輸入make zImage命令,生成經壓縮以後的核心映像檔案zImage。存放在./arch/arm/boot/目錄下。
根系統檔案
有了Linux核心,還要構建跟檔案系統,這樣才能使用核心、存取檔案等。
BusyBox工具:
利用cramfs工具建立根檔案系統映像檔案:
在/home目錄下,執行如下命令: #mkcramfs rootfs root.cramfs 生成root.cramfs映像檔案,可以將其下載到開發板
上執行。
驅動與QT
驅動程式:應用程式與硬體之間的一箇中間軟體層;
驅動程式應該為應用程式展現硬體的所有功能,不應該強加其他的約束,對於硬體使用的許可權和限制應該由應用程式
層控制。
驅動程式有時會被多個程序同時使用,這時我們要考慮如何處理併發的問題,就需要呼叫一些核心的函式使用互斥量
和鎖等機制。
裝置驅動程式的分類:3種
1.字元裝置:所有能夠像位元組流一樣訪問的裝置 eg:串列埠、並口、觸控式螢幕、虛擬控制檯、AD
2.塊裝置:指可以容納檔案系統的儲存裝置 eg:磁碟、記憶體、Flash
3.網路介面裝置:網路介面裝置比較複雜,通常它們指的是硬體裝置,但有時也可是一個軟體裝置(如迴環介面
loopback) eg:eth0
linux驅動編譯和載入方式:
一種是直接編譯進核心,當核心啟動後,新的驅動程式隨之執行。
二是編譯為模組,動態載入執行。
對模組的操作:
insmod:將編譯的模組直接插入核心
rmmod:從核心中解除安裝模組
lsmod:顯式已安裝的模組
linux核心模組的基本框架:
#include <linux/module.h> //所有模組都需要的標頭檔案
#include <linux/init.h> //init和exit相關巨集
printk() //列印函式 相當於pringf()
驅動程式與應用程式的區別:
1.應用程式一般有一個main 函式,從頭到尾執行一個任務;
驅動程式卻不同,它沒有main 函式,通過使用巨集module_init(初始化函式名),將初始化函式加入核心全域性初始化函
數列表中。通過巨集module_exit(退出處理函式名)註冊退出處理函式。
2.應用程式可以和GLIBC 庫連線,因此可以包含標準的標頭檔案,比如<stdio.h>、<stdlib.h>等,;
在驅動程式中是不能使用標準C 庫的,因此不能呼叫所有的C 庫函式, 只能呼叫核心的函式,
相關推薦
alsa移植到arm linux嵌入式系統中
1 alsa-lib的移植 1.1 軟體包下載 alsa-lib庫:進入網站http://www.alsa-project.org/選擇下載,在這裡下載的是alsa-lib-1.0.22.tar.bz2假設該軟體包存放在目錄/home/alsa中 1.2 安裝als
ARM+LINUX嵌入式系統的終端顯示中文亂碼解決
前一段時間解決的一個問題,看起來是個小問題,實際解決這個問題卻花了一個星期的晚上休息時間,記錄分享一下。 問題描述: linux核心配置中NLS(native language support)已經選擇了預設語言配置為utf8,幷包含一些其他常用語言的編碼,但是在se
ARM-Linux嵌入式系統啟動流程
作為一個嵌入式新手,閱讀資料之後做一下筆記還是很有必要的,下面從四個階段來描述嵌入式系統的大致啟動流程。如下圖所示: 圖片引用自OMAPpedia的WIKI 其他相關參考資料: TI官方WIKI的boot sequence 由此可見啟
基於ARM+linux的嵌入式系統設計
嵌入式系統的定義 IEEE的定義:嵌入式系統是“用於控制、監視或者輔助操作機器和裝置的裝置” 一般定義:以應用為中心,以計算機技術為基礎,其軟硬體可配置,對功能、可靠性、成本、體積、功耗有嚴格約束的 一種專用系統,所用的計算機稱為嵌入式計算機。 嵌入式系統與PC相比具有的特
基於ARM的嵌入式Linux應用程式開發
0 引 言 當今社會,嵌入式系統已經滲透到人們工作、生活中的各個領域,嵌入式處理器已佔分散處理器市場份額的94%。而嵌入式Linux系統也蓬勃發展,不僅繼承了Linux原始碼開放、核心穩定高效、軟體豐富等優勢,還具備支援廣泛處理器結構和硬體平臺、佔有空間小、成本低廉、結構緊湊等特點。 1 ARM處理
2014025628《嵌入式系統設計》第四周總結
linu 學習 32位 本周 環境 支持包 系統 img path 本周學習內容 一、學會了安裝arm-linux-gcc交叉編譯工具 解壓了arm-linux-gcc交叉編譯工具的壓縮包,測試arm-linux-gcc是否可運行,解決了64位系統下安裝32位軟件的問題
golang 2行代碼在基於arm linux的樹莓派、orangepi上運行http web服務
目標 開發板 server post fontsize alt main函數 handle 基於 go語言(golang)簡化了跨平臺交叉編譯步驟,支持在windows系統下交叉編譯基於arm+linux平臺的應用,運行時無需其它依賴庫。以下以一個簡單的http serve
找java設計,基於ssh,j2ee管理系統,設計,管理系統的設計思路與技巧
ava 畢設 框架 僅供參考 andro 培訓 中一 畢業 遠程 關於基於ssh,ssm,javaee等等管理系統的設計思路與框架搭建,很多同學都是一知半解,甚至是知之甚少。為了大家能快速的開發設計一套這樣的java設計,我們提供下面的一些方法僅供參考。不足之處大家可以相互
Linux嵌入式系統和linux純系統上電載入程式的不同
有些CPU在執行bootloader之前執行一段固化的程式,比如x86結構的CPU就是先執行BIOS中的韌體,然後才執行硬碟的第一個分割槽中的bootloader,在大多數的嵌入式系統中並沒有韌體,bootloader是上電第一個執行的程式。 Bios有上電自檢硬體是不是有問題
基於RFID的ETC系統設計應用
[導讀]無線射頻識別技術是20世紀90年代開始興起的一種自動識別技術。該技術是一種非接觸的自動識別技術,其基本原理是利用射頻訊號和空間耦合(電感或電磁耦合)傳輸特性實現對被識別物體的自動識別。 RFID簡介 無線射頻識別技術(Radio Frequency
時間觸發嵌入式系統設計模式 第19章 筆記 按鍵開關
時間觸發嵌入式系統設計模式 第19章 筆記 按鍵開關 E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_LED_SWITCH\KEIL 程式碼: // // GPIO_LED : G
時間觸發嵌入式系統設計模式 第18章 筆記 通過RS-232與 PC通訊
時間觸發嵌入式系統設計模式 第18章 筆記 PC上 軟體 例子: 參考 : Axelson(1998) Serial Port Complete: Programming and Circuits for Rs-232 and Rs-485 Links and Netwo
時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板
時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板 E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_22_LCD_Time E:\Nu_LB_Nuc140\Nu_LB_NUC140_B
時間觸發嵌入式系統設計模式 第21章 筆記 多路複用LED顯示
時間觸發嵌入式系統設計模式 第21章 筆記 多路複用LED顯示 1111 4個 8位的 數碼管 前兩個顯示小時,後兩個顯示分鐘,不顯示秒 程式碼: unsigned char LED_Table_G[20] = // 0 1 2 3
時間觸發嵌入式系統設計模式 第14章 筆記
1 函式指標 程式碼: /*------------------------------------------------------------------*- Main.C (v1.00) --------------------------
linux嵌入式系統開發,嵌入式開發培訓多少錢?
嵌入式系統是一種專用的計算機系統,作為裝置或裝置的一部分。國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。舉些例子,手機、電子時鐘、智慧報警裝置、自動監控器、
嵌入式開發教程哪家好?linux嵌入式系統開發
嵌入式入門你知多少?對於一些初入門的初學者而言,對嵌入式入門的一些知識有助於後期的學習,從嵌入式技術的應用前景以及到ARM認知到開發板等等。嵌入式企業用人需求在增長。 如今的嵌入式開發大熱是ARM+Linux,還有就是Android系統平臺,但對於ARM的發展的
【愛學習的草莓熊】嵌入式系統設計_C語言程式設計_OpenGL
專欄達人 授予成功建立個人部落格專欄
ARM+Linux嵌入式開發05:【uboot-2017移植】重定位
概述 上一節初始化好了串列埠和LED,我們可以用它們進行除錯;也設定好了時鐘和DRAM,為uboot的重定位做好準備。之前所做的所有工作都是在BL1中,也就是uboot的前16KB,而大部分uboot的程式碼還在SD卡中沒有載入記憶體,沒有載入記憶體的原因是之前我們使用的是內部SRA
Xilinx Zynq-7000嵌入式系統設計與實現 學習教程(1)
學習資料下載地址:http://www.edawiki.com 開篇體會; Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理器的序列執行+FPGA的並行執行,著力於解決大資料處理、人工智慧等複雜高效能演算法處理。 新的設計工具的推出,vivado HLS,更加註重嵌入式系