1. 程式人生 > >《嵌入式linux應用開發完全手冊》核心筆記(全)

《嵌入式linux應用開發完全手冊》核心筆記(全)

** 本文未附任何例項程式碼,基於目標板的不同操作不盡相同,網路資源針對比較成熟的開發板均可找到對應的成套例項程式碼

【開發環境構建】
1. 開發環境搭建:作業系統或虛擬機器Ubuntu安裝、網路服務配置、工具安裝等
    工具資源<雲盤>:https://pan.baidu.com/s/1bpakJtP   // env/嵌入式linux軟體開發環境(不定期更新)
    步驟整理<部落格>:http://blog.csdn.net/sinat_36184075/article/details/71194832

2. 程式設計基礎內容:交叉編譯使用、Makefile規則、常用匯編指令
    交叉編譯工具鏈製作<部落格>:
http://blog.csdn.net/sinat_36184075/article/details/71195114

    Makefile編寫<部落格>:http://blog.csdn.net/sinat_36184075/article/details/54917518
    彙編指令快速查詢<部落格>:http://blog.csdn.net/sinat_36184075/article/details/55819869

3. 常用工具使用:
    windows下工具的使用(SourceInsight、SecureCRT、keil、IAR等)
    linux下工具的使用(tftp、nfs、vi、man手冊、基本命令列命令及grep/find/tar/diff/patch等)
    // 常用工具上手簡單,可自查。

【ARM9嵌入式系統基礎】

1. GPIO介面
1) 嵌入式開發步驟:
    程式設計:主要以.c .h檔案為主;
    編譯:make命令呼叫Makefile中寫好的交叉編譯規則來編譯出.bin二進位制檔案;
    燒寫:PC並口與JTAG連線或PC的USB與串列埠連線,使用對應的工具和命令燒寫;
    執行測試:命令執行或復位開發板,觀察執行效果。
2) 通過GPIO引腳實現軟體如何控制硬體:
    單個引腳的操作有3種:輸出高低電平、檢測引腳狀態、中斷;
    對某個引腳的操作通過讀、寫暫存器來實現;
    讀寫暫存器方法:通過程式設計程式,讀寫暫存器的地址;
    // 需結合2點:目標板電路圖(確定引腳)、ARM晶片手冊Datasheet(操作說明)


2. 儲存控制器
1)目標板地址空間佈局:
    32位CPU虛擬地址4G,其中1G為CPU核心空間,3G為使用者空間;
    // 1G:0x0000_0000 ~ 0x4000_0000
    // 3G:0x4000_0000 ~ 0xFFFF_FFFF
    // 表:目標板功能部件與暫存器地址對照表
    // 表:儲存控制器與所接外設的訪問地址對照表


3. 記憶體管理單元MMU
1) 虛擬地址和實體地址關係
    MMU:負責虛擬地址到實體地址的對映,提供硬體機制的記憶體訪問許可權檢查。
    通過MMU使得各個使用者程序都有自己獨立的地址空間。
    ARM的CPU上地址轉換有3個概念:虛擬地址VA、變換後的虛擬地址MVA、實體地址PA。
    沒啟動MMU時,CPU、cache、MMU、外設等所有部件使用的是實體地址;
    啟動MMU之後,CPU對外發出虛擬地址VA,VA被轉換為MVA供cache、MMU使用,MVA在這裡被轉換為PA,最後使用PA讀寫實際的硬體裝置(內部暫存器或外接裝置)。
    CPU核看到的、用到的只是虛擬地址VA。實際裝置看不到VA和MVA,讀寫他們時使用的是實體地址PA。
2) 通過設定MMU來控制虛擬地址到實體地址的轉化
    虛擬地址VA >> 實體地址PA 方法有2:用一個確定的數學公式轉換、用表格儲存虛擬地址對應的實體地址(表格:頁表Page Table)。
    頁表:由一個個條目(Entry)組成,每個條目儲存了一段VA對應的PA及其訪問許可權,或者下一頁表的地址。
    ARM的CPU核使用的是第二種方法:頁表。
3) MMU的記憶體訪問許可權機制
    記憶體的訪問許可權檢查是MMU的主要功能之一,決定了一塊記憶體是否允許被讀或被寫。
    // 表:AP位、S、R位的訪問許可權對照表

4. Nand Flash控制器
1) Nand Flash晶片介面
    類似於PC上的硬碟,掉電不丟失,儲存系統執行所必須的作業系統、應用程式、使用者資料、其他資料等。
    容量:16M~512M
    與Nor Flash相比優點:Nand Flash效能高即擦寫速度快3ms、可擦寫次數多、生命週期10倍以上、容量大、價格低。
    與Nor Flash相比缺點:Nand Flash可靠性較低必須要有校驗措施、易用性不如Nor Flash、不支援XIP(XIP:程式碼可以直接在Nor Flash上執行,無需載入到記憶體)。
    Flash儲存器件的可靠性要考慮3點:位反轉、壞塊、可擦除次數。
    Nand Flash發生位反轉的概率更高,推薦使用EDC/ECC進行錯誤檢測和恢復。
    嵌入式linux對兩種Flash的支援都很成熟,在Nor Flash上常用jffs2檔案系統,在Nand Flash上常用yaffs檔案系統。在更底層,有MTD驅動程式實現了對他們的讀、寫、擦除操作,也實現了EDC/ECC校驗。
2) 通過Nand Flash控制器訪問Nand Flash的方法
    對Nand Flash進行訪問控制時,需要先發出命令,然後發出地址序列,最後讀寫資料;需要使用各個使能訊號來分辨是命令、地址、還是資料。

5. 中斷體系結構
1) ARM的CPU中7種工作模式
    使用者模式usr、快速中斷模式fiq、中斷模式irq、管理模式svc、資料訪問終止模式abt、系統模式sys、未定義指令終止模式und。
    大多數程式執行與使用者模式usr,進入其他6種特權模式是為了處理中斷、異常、或者訪問被保護的系統資源。
    ARM的CPU中有兩種工作狀態:32bit的ARM指令、16bit的Thumb指令。
    ARM9中有31個32bit暫存器 + 6個狀態暫存器 = 37個暫存器。
2) 中斷服務程式編寫方法
    CPU執行過程中,知道各類外設發生了某些事件如串列埠接收到了新資料、USB介面插入了裝置、按下了某個按鍵等,主要通過2種方法:
    輪詢:迴圈檢查裝置狀態並作出相應反應。實現簡單,常用在功能單一的系統中,如溫控系統;缺點是佔用CPU資源過高,不適用於多工系統;
    中斷:當某時間發生時,硬體會設定某個暫存器,中斷當前程式,跳轉執行此事件,最後返回被中斷的程式。實現相對複雜,但效率很高,是常用的方法。
    使用中斷的步驟:
    ①設定好中斷模式和快速中斷模式下的棧;
    ②準備好中斷處理函式(ISR);
    ③設定中斷優先順序;
    ④進入、退出中斷模式或快速中斷模式時,需要儲存、恢復被中斷程式的執行環境;
    ⑤根據具體中斷,設定相應外設;
    ⑥確定使用此中斷的方式:FIQ或IRQ;
    ⑦使能中斷。

6. 系統時鐘和定時器
1) 系統時鐘體系結構
    時鐘控制邏輯給整個晶片提供三種時鐘,
    FCLK:用於CPU核;
    HCLK:用於AHB匯流排(用高效能模組的連線)上的裝置,如CPU核、儲存器控制、中斷控制器、LCD控制器、DMA和USB主機模組等;
    PCLK:用於APB匯流排(用於低頻寬外設的連線)上的裝置,如IIS、I2C、PWM定時器、MMC介面、ADC、UART、GPIO、RTC和SPI;
2) 通過設定MPLL改變系統時鐘的方法
    ①設定分頻/倍頻
    ②啟動MPLL
    ③設定儲存控制器SDRAM
    ④初始化定時器0
    ⑤定時器0中斷使能及中斷服務程式

7. 通用非同步收發器UART
1) UART原理
    全雙工方式序列雙向資料收發。
    通訊管腳跳線接線方式:
    RxD <=> TxD
    TxD <=> RxD
    GND <=> GND
    RS232邏輯電平:高電平(3~12V)表示0,低電平(-3~-12V)表示1。
    重要引數:
    >>資料位個數: 5 ~ 8 bit   (開發板那端定好的是 8 bit / 幀資料)
    >>驗證方式:奇校驗、偶校驗、無校驗
    >>停止位寬度:1~2bit
    >>通訊的速率:bps (bit per second - 每秒傳輸bit位,即波特率)
    資料收發原理:
    傳送資料時,CPU先將資料寫入傳送FIFO中,然後UART會自動將FIFO中的資料複製到傳送移位器(TS)中,傳送移位器將資料一位一位的傳送到TxDn資料線上。
    接收資料時,接收移位器(RS)將RxDn資料線上的資料一位一位的接收進來,然後複製到接收FIFO中,CPU即可從中讀取資料。
2) UART使用
    ①將所涉及的UART通道管腳設為UART功能
    ②設定波特率
    ③設定傳輸格式
    ④設定時鐘源、中斷方式(或DMA模式)
    ⑤傳送資料:往暫存器寫入;接收資料:從暫存器讀取
    ⑥UTRSTATn狀態暫存器檢測資料是否傳送完畢、是否接收到資料
    結合PC上的串列埠工具windows下SecureCRT工具,linux下kermit(Page195)工具進行測試。

8. I2C介面
1) I2C匯流排協議
    飛利浦公司開發的序列匯流排,連線微控制器及其外圍裝置。
    兩條匯流排:SDA資料線,SCL時鐘線。
        多主機匯流排。
        主從裝置通訊方式。
        主機收發均可。
        多主機衝突仲裁。
        8bit雙向資料傳輸,100kbit/s,400kbit/s,3.4Mbit/s。
        從裝置地址唯一。
    三種類型訊號:開始(S)、響應(ACK-8bit後的第9個時鐘週期拉低SDA電平)、結束(P)
    資料傳輸格式:
    master:--S--從addr|W---接ACK---0x0d---接ACK---SR---從地址|R---接ACK---收---NACK---T--
    slave: --------接---------發ACK-----接---發ACK-----------接-------發ACK---
2) I2C介面使用
    ①I2C控制器初始化
    ②主機發送函式
    ③主機接收函式
    ④中斷服務程式i2c_Handle:清中斷、寫操作、讀操作

9. LCD控制器
1) LCD顯示器的介面及時序
    LCD,液晶顯示器。
    CPU或顯示卡發出的訊號時TTL訊號,LCD本身接收的也是TTL訊號。
    LCD控制器被用來傳輸LCD影象資料,並提供必要的控制訊號。
    1幅影象為1幀frame。顯示器從螢幕左上角,一行行的取得每個畫素的資料並顯示,沿著Z字形的路線進行掃描。
    解析度:有效畫素資料的 行數 × 列數。
2) LCD控制器的使用方法
    ①main.c 提供選單以選擇不同的顯示模式來操作LCD
    ②lcdlib.c 條用以下兩個檔案的函式操作LCD
    ③lcddrv.c 設定LCD控制器、調色盤
    ④framebuffer.c 畫點、畫線、畫同心圓、清屏

10. ADC和觸控式螢幕介面
1) ADC和觸控式螢幕結構
    ADC,數模轉換。可以將模擬訊號輸入轉換為二進位制資料。
    // 圖:ADC和觸控式螢幕介面結構圖
2) ADC和觸控式螢幕的使用方法
    ADC啟動方法:手工啟動、讀結果時就自動啟動下一次轉換;
    是否已經結束:查詢狀態位、轉換結束時發出中斷。
    ADC操作只涉及三個暫存器:ADCCON、ADCTSC、ADCDAT0。
    ①設定ADCCON暫存器,選擇輸入訊號通道,設定A/D轉換器時鐘;
    ②設定ADCTSC暫存器,使用設為普通轉換模式,不適用觸控式螢幕功能;
    ③設定ADCCON暫存器,啟動A/D轉換;
    ④轉換結束時,讀取ADCDAT0暫存器獲得數值。
    // 拓展:電阻觸控式螢幕原理(Page241)


【嵌入式linux系統移植】
1. 移植u-boot
1) bootloader作用及工作流程
    作用:一小段程式,在系統上電時開始執行,初始化硬體裝置、準備好軟體環境、最後呼叫作業系統核心。
    也可以增強bootloader的功能,如增加網路功能、從PC上通過串列埠或網路下載檔案、燒寫檔案、將Flash上壓縮的檔案解壓後再執行等,強大的bootloader也叫Monitor。
    工作過程:僅對開發人員使用,在開發時通常需要各種命令操作bootloader,一般通過串列埠工具連線pc和目標板,可以在串列埠上輸入各種命令,觀察執行結果。
    嵌入式linux系統通常分為4個層次:bootloader、kernel、filesystem、Application
    bootloader啟動流程分為兩個階段:
    第一階段:
        1>硬體裝置初始化
        2>為bootloader第二階段準備RAM空間
        3>複製bootloader第二階段程式碼到RAM中
        4>設定好棧
        5>跳轉到第二階段程式碼的C入口點
    第二階段:
        1>初始化本階段要使用到的硬體裝置
        2>檢測系統記憶體對映
        3>將核心映像和根檔案系統映像從Flash上讀到RAM空間中
        4>為核心設定啟動引數
        5>呼叫核心
    u-boot是通用的bootloader,支援平臺包括X86、ARM、PowerPC。
2) u-boot程式碼結構及編譯過程
    u-boot開源原始碼官方ftp下載地址:ftp://ftp.denx.de/pub/u-boot/
    以u-boot-1.1.6為例,根目錄下有26個子目錄,可以分為4類:
        1>平臺相關(cpu/ lib_i386/)或開發板相關(board/)的;
        2>通用的函式(include/ lib_generic/ common/);
        3>通用的裝置驅動程式(disk/ drivers/ dtt/ fs/ nand_spl/ net/ post/ rtc/);
        4>u-boot工具(tools/)、示例程式(examples/)、文件(doc/)。
    從readme和Makefile入手,根據目標開發板的名字board_name,通常執行2步進行編譯:
        1> $:' make <board_name>_config
            // 配置對應目標板的配置檔案
        2> $:' make all
            // 編譯,生成u-boot.bin、u-boot、u-boot.srec三個檔案
    注意:tools/目錄下生成的mkimage檔案,在編譯核心時用來生成u-boot格式的核心映像檔案。
3) 移植u-boot流程
    使用網絡卡晶片硬體,tftp伺服器軟體進行移植:
    1> 配置開發板ip地址,伺服器地址的環境變數
    2> 使用tftp命令進行指定起始地址位置下載u-boot.bin檔案
    3> 修改相關檔案使bootloader支援核心燒寫、yaffs根檔案系統移植;
    4> 修改預設配置引數方便使用,如linux啟動引數、自動啟動命令、預設網路設定
    (Page302)
4) 常用u-boot命令
    help:檢視所有u-boot中的命令及其作用,也可以help [命令]檢視單個命令;也可以用?代替help進行執行。
    下載命令:loadb、loads、loadx、loady和tftpboot、nfs
        如loadb [off] [baud]
        如tftpboot [loadAddress] [bootfilename]
        如nfs [loadAddress] [host ip addr:bootfilename]
    記憶體操作命令:
        檢視記憶體命令:md,如md[.b,.w,.l] address [count]
        修改記憶體命令:mm
        填充記憶體命令:mw
        複製記憶體命令:cp
    Nor Flash操作命令:
        檢視Flash資訊:flinfo
        加/解防寫命令:protect
        擦除命令:erase
    Nand Flash操作命令:
        nand命令,根據不同的引數進行不同的操作,如擦除、讀取、燒寫。
    啟動命令:
        boot、bootm命令都是執行環境變數bootcmd所指定的命令。
2. 移植linux核心
1) 核心原始碼結構,核心啟動過程
    獲取核心原始碼:https://www.kernel.org/
    下載、解壓得到linux核心原始碼檔案。
    // 表:linux核心子目錄結構
    Makefile:頂層的Makefile是所有Makefile檔案的核心,總體控制核心的編譯和連線。
    .config:配置檔案,配置核心時產生。所有Makefile檔案都是根據.config來決定使用哪些檔案來編譯。
    Linux核心啟動過程:
        開始→確定核心是否支援該架構→確定核心是否支援該單板→建立一級頁表→禁止ICache等→使能MMU→設定棧指標並呼叫start_kernel→輸出linux版本資訊→設定與體系結構相關的環境→初始化控制檯→啟動init程序
2) 核心配置方法
    $:' make menuconfig
    System Type:系統型別子選單,用來選擇目標板型別。(Page324)
    Device Drivers:裝置驅動程式子選單。(Page327)
3) 移植核心
    配置核心→編譯核心→燒寫核心→啟動核心
4) MTD裝置分割槽方法
    MTD,記憶體技術裝置,是Linux中ROM、Nor Flash、Nand Flash等儲存裝置抽象出來的一個裝置層。
    分割槽方法:修改arch/arm/plat-s3c24xx/common-smdk.c檔案中的smdk_default_nand_part結構即可。
5) yaffs根檔案系統移植
    yaffs,專門為Nand Flash設計的嵌入式檔案系統,適用於大容量的儲存裝置。
    移植(Page346)
3. 構建linux根檔案系統
1) linux檔案系統層次標準
    FHS檔案系統層次標準:http://www.pathname.com/fhs/
2) 根檔案系統下各目錄的作用
    /bin 目錄:存放所有使用者都可以使用的、基本的命令。
    /sbin 目錄:存放系統命令,即只有管理員能夠使用的命令,用於啟動系統、修復系統等。
    /dev 目錄:存放裝置檔案(字元裝置、塊裝置)。(Linux下一切皆檔案)
    /etc 目錄:存放各種配置檔案。
    /lib 目錄:存放共享庫和可載入模組(即驅動程式)。
    /home 目錄:使用者目錄,是可選的。目錄下是以使用者名稱命名的子目錄。
    /root 目錄:根使用者(root)目錄,普通使用者即為/home下的子目錄。
    /usr 目錄:存放共享、只讀的程式和資料。
    /var 目錄:存放可變的資料,與/usr內容相反。
    /proc 目錄:空目錄,常作為proc檔案系統的掛載點,proc檔案系統是個虛擬的檔案系統。
    /mnt 目錄:空目錄,用於臨時掛載某個檔案系統的掛載點,如U盤、光碟等。
    /tmp 目錄:空目錄,用於存放臨時檔案。
3) 構建根檔案系統:移植Busybox、構造各個目錄/檔案等
    Busybox開源工具下載地址:https://busybox.net/downloads/
    下載、解壓、開始配置:
        // 表:Busybox配置選項分類(Page362)
    配置完成、編譯:make
    安裝並拷貝glibc庫。
    構建根檔案系統:(Page367)
        1> 建立etc/initab檔案
        2> 建立etc/init.d/rcS指令碼檔案
        3> 建立etc/fstab檔案(控制mount命令列為)
        4> 構建dev/目錄
        5> 構建其他目錄,如proc/ mnt/ tmp/ sys/ root/等
4) 製作yaffs、jffs2檔案系統映像檔案
    yaffs根檔案系統:Page367
    jffs2根檔案系統:Page375
    燒寫...
4. linux核心除錯技術
1) 幾種除錯核心的方法:printk、kgdb
    【printk】除錯驅動、核心最簡單的方法,使用printk列印資訊。與使用者空間的printf函式格式完全相同。可在字串內的頭部加入<n>(0~7)表示記錄級別。
    printk資訊常常用於串列埠輸出,這時串列埠被稱為串列埠控制檯。
    使用u-boot時,設定了命令列引數"console=ttySAC0",它使得printk的資訊從串列埠0中輸出。
    系統啟動後,檢視printk資訊,直接執行dmesg命令即可。
    【kgdb】原始碼級別的linux核心偵錯程式。使用kgdb時,需要結合gdb一起使用,使得除錯核心就像除錯應用程式一樣,可在核心程式碼中設定斷點、一步一步執行、觀察變數的值。
    核心需要新增kgdb補丁才可以使用kgdb除錯。
    kgdb補丁下載地址:http://kgdb.cvs.sourceforge.net/kgdb/kgdb-2/?pathrev=linux2_6_22_uprev
    使用cvs工具下載:(Page382)
    $:' cd /work/debug
    $:' cvs -z3 -d:pserver:[email protected]:/cvsroot/kgdb co -p -r linux2_6_22_uprev kgdb-2
    ...
    配置核心,使能kgdb功能。
    集合視覺化圖形前端ddd和gdb來除錯。
2) 除錯工具:gdb、ddd
    【ddd】ddd呼叫gdb來除錯核心,可以在圖形介面上完成除錯工作。
    安裝ddd:$:' sudo apt-get install ddd
    除錯方法(Page388)

【嵌入式linux裝置驅動開發】

1. 字元裝置驅動程式
1) linux系統中驅動程式的地位和作用
    從下到上,一個軟體系統能夠執行的結構:硬體 → 驅動程式 → 作業系統(核心) → 庫 → 應用程式
    linux驅動程式分類:字元裝置、塊裝置、網路介面。
    編寫驅動程式注意點:
        1> 驅動程式可能同時被多個程式使用,考慮併發問題;儘可能發揮硬體作用以提高效能。
        2> 硬碟驅動程式中使用DMA也可以不用,使用DMA的程式比較複雜,但是可以提高效率。
        3> 處理硬體的各種異常情況,即使概率很低,否則出錯時可能導致整個系統崩潰。
2) 驅動程式開發一般流程
    1> 檢視原理圖、資料手冊,瞭解裝置的操作方法;
    2> 在核心中找到相近的驅動程式,以它為模板進行開發,有時候需要從0開始;
    3> 實現驅動程式的初始化:比如向核心註冊這個驅動程式,這樣應用程式傳入檔名時,核心才能找到相應的驅動程式;
    4> 設計所要實現的操作,比如open、close、read、write等函式;
    5> 實現中斷服務(中斷並不是每個裝置驅動所必須的);
    6> 編譯該驅動程式到核心中,或者使用insmod命令載入;
    7> 測試驅動程式。

3) 簡單字元裝置驅動程式開發方法
    字元裝置驅動程式操作函式集合,在結構體: struct file_operations {...}
    呼叫哪個驅動程式的操作函式集合中的函式呢?
        1> 裝置檔案有主/次裝置號;
        2> 模組初始化時,將主裝置號與file_operations結構一起向核心註冊;
    編寫字元裝置驅動程式的流程:
        1> 編寫驅動程式初始化函式;
        2> 構造file_operations結構中要用到的各個成員函式。
    常用的操作函式集合中的函式:open、ioctl、write、read...
    驅動程式編譯:將.c檔案放入核心的driver/char目錄下,在driver/char/Makefile中增加對應模組編譯的一個語句(obj-m +=...),然後在核心的根目錄下執行命令make modules,就可以生成對應的.ko驅動程式模組檔案。
    驅動程式測試(Page409)。
2. 異常處理體系結構
1) linux異常處理體系結構
    init/main.c中核心在start_kernel函式中呼叫trap_init和init_IRQ兩個函式來設定異常的處理函式。
    trap_init() 函式(arch/arm/kernel/traps.c)被用來設定各種異常的處理向量,包括中斷向量。
    init_IRQ() 函式(arch/arm/kernel/irq.c)被用來初始化中斷的處理框架,設定各種中斷的預設處理函式。當發生中斷時,中斷總入口函式asm_do_IRQ就可以呼叫這些函式做進一步處理。
    常見異常分類5種:未定義指令異常、指令預取中止異常、資料訪問中止異常、中斷異常、swi異常。
2) 中斷處理體系結構及重要的資料結構
    linux核心將所有的中斷統一編號,使用一個結構陣列來描述這些中斷: struct irq_desc {...}
    其中結構體成員 handle_irq 是這個或這組中斷的處理函式入口。
3) 中斷處理函式的註冊、處理、解除安裝流程
    初始化中斷處理體系結構函式: init_IRQ (void);
    使用者向核心註冊中斷處理函式的函式: request_irq (...);
    中斷的C語言總入口函式: asm_do_IRQ (...);
    使用者從核心登出中斷處理函式的函式: free_irq (...);
4) 驅動程式中使用中斷的方法
    按鍵驅動使用中斷方式實現的例項。
3. 擴充套件串列埠驅動程式移植
1) 串列埠終端裝置驅動程式的層次結構
    串列埠驅動程式從上到下分為4層:終端裝置層、行規程、串列埠抽象層、串列埠晶片層、(硬體)。
2) 移植標準串列埠驅動程式的方法(Page438)


...更多內容詳見《嵌入式linux應用開發完全手冊》.pdf

相關推薦

嵌入式linux應用開發完全手冊核心筆記()

** 本文未附任何例項程式碼,基於目標板的不同操作不盡相同,網路資源針對比較成熟的開發板均可找到對應的成套例項程式碼【開發環境構建】 1. 開發環境搭建:作業系統或虛擬機器Ubuntu安裝、網路服務配置、工具安裝等     工具資源<雲盤>:https://pa

嵌入式Linux應用開發完全手冊(二)GPIO

5 GPIO介面 5.1 GPIO硬體介面介紹 GPIO General Purpose I/O Port,通用輸入、輸出埠。簡單說就是這個埠可以配成輸入的(讀電平訊號),也可以配成輸出的(設定電平訊號) 無論是輸入還是輸出都是通過暫存器來實現的

嵌入式Linux應用開發完全手冊(一)嵌入式Linux基礎知識

嵌入式Linux應用開發完全手冊 3 嵌入式Linux基礎知識 3.1 交叉編譯工具 編譯工具鏈,編譯工作由幾個步驟完成,分別用到了不同的工具 PC端應用 gcc ld objcopy

嵌入式Linux應用開發完全手冊(四)UART

11. 通用非同步收發器 UART 11.1 UART原理,部件使用方法 11.1.1UART原理 UART是Universal Asynchronous Receiver Transmitter的縮寫,即通用非同步收發器 UART用來傳輸序列資料: - 傳送時,CPU將

嵌入式Linux應用開發完全手冊(三)中斷

9 中斷體系結構 9.1 ARM中斷體系 ARM CPU工作模式和狀態 工作模式,7種,1種使用者模式,其他6選中特權模式 usr 使用者模式,ARM處理器正常的工作模式 fiq 快速中斷模式,高速資料傳輸或者通道處理 irq

嵌入式linux應用開發完全手冊(二) 第六章 儲存控制器

第二篇 ARM9 嵌入式系統基礎例項篇 第五章 GPIO介面 5.1 GPIO硬體介紹 GPIO(General Purpose I/O Ports)意思為通用輸入/輸出埠,通俗的說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態——是高電平還是低電平。 5.1.1 通

嵌入式linux應用開發完全手冊(一)

第一篇 嵌入式Linux開發環境構建 1.1.2 嵌入式發展 SCM(Single Chip Microcomputer)微控制器; MCU(Micro Controller Unit)微控制器; SoC(System on a Chip):系統級晶片,在一個晶片上由於廣泛使用

嵌入式Linux應用開發學習記錄(程式設計基礎)

C/C++檔案 ->可執行檔案需4步: 1.預處理:處理include、巨集定義、條件編譯,輸出 .i 檔案 2.編譯:把C翻譯成彙編 3.彙編:彙編翻譯成機器程式碼(OBJ檔案) 4.連線:將上面生成的OBJ和庫的OBJ連線,生產可執行檔案 編譯和執行:

嵌入式Linux應用開發① | 嵌入式LInux介紹及開發環境搭建

1.嵌入式Linux 嵌入式Linux是對執行在嵌入式裝置上的Linux的統稱,它們都是經過高度裁剪、具備特定功能的嵌入式Linux作業系統。 嵌入式裝置效能、資源有限,所以不能將標準的Linux應用到嵌入式和裝置上,所以對標準的Linux進行核心裁剪,針對某一個特定的功能進行完善,就可

嵌入式linux應用程式開發完全手冊》NAND FLASH硬體程式設計學習筆記

1.先看一下Flash的引腳圖,它與S3C2440連線比較少(相對nor flash),地址資料和命令都是在如圖示的一些使能訊號的配合下,通過8個I/O引腳傳輸。寫地址,資料,命令時,nCE,nWE訊號

嵌入式Linux應用程式開發——多執行緒4(執行緒的同步——訊號量)

#include <pthread.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <semaphore.h> int

Exynos 4412 Cortex-A9嵌入式Linux驅動開發學習筆記-第一期

一、Linux 體系結構 如下圖所示,Linux 體系結構,從大的方面可以分為使用者空間(User Space)和核心空間 (Kernel Space)。 使用者空間中包含了 C 庫,使用者的應用程式。在某些體系結構圖中還包含了 shell,當然 shell指令碼

嵌入式初學者學習嵌入式必看必看書籍列表,有電子檔的同學可以共享出來,謝謝 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳解》

嵌入式初學者參考書目 無論學習哪方面的程式設計,都需要掌握基礎知識和程式語言,其中《深入理解計算機作業系統》是比較重要的。下面是一些計算機關於嵌入式方面的推薦,有些是借鑑他人的歸納。 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳

嵌入式linux開發流程以及linux應用層內容

嵌入式linux開發流程:1.搭建前期的開發環境,例如搭建linux主機環境,交叉編譯器的安裝,還有一些常用的開發輔助軟體如source insight等等。2.學習對硬體的直接操作,這裡和微控制器操作類似,我們需要檢視原理圖還有資料手冊對相應的暫存器進行操作,實現功能。這裡

基於ARM的嵌入式Linux應用程式開發

0 引 言   當今社會,嵌入式系統已經滲透到人們工作、生活中的各個領域,嵌入式處理器已佔分散處理器市場份額的94%。而嵌入式Linux系統也蓬勃發展,不僅繼承了Linux原始碼開放、核心穩定高效、軟體豐富等優勢,還具備支援廣泛處理器結構和硬體平臺、佔有空間小、成本低廉、結構緊湊等特點。 1 ARM處理

嵌入式Linux驅動開發(一)一個簡單的Linux核心模組框架

#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> static

基於嵌入式Linux/Qt 開發RFID智能倉儲指紋管理系統

基於嵌入式Linux/Qt 開發RFID智能倉儲指紋管理系統 基於嵌入式Linux/Qt 開發RFID智能倉儲指紋管理系統 Qt 是一個用於桌面系統和嵌入式開發的跨平臺應用程序框架。它包括一個直觀的API和一個豐富的類庫,以及用於GUI開發和國際化的集成工具,另外它支持Java

【2017-06-20】Linux應用開發工程師C/C++面試問題之一:Linux多線程程序的同步問題

依次 其它 如果 開發工程師 logs 特殊 另一個 特殊情況 發生 參考之一:Linux 線程同步的三種方法 鏈接地址:http://www.cnblogs.com/eleclsc/p/5838790.html 簡要回答: Linux下線程同步最常用的三種方法就是互斥鎖、

【2017-07-01】Linux應用開發工程師面試問題記錄之二:關於結構體的大小及內存對齊問題

偶數 而且 strong span net 但是 開發 f11 flag Tencent後臺服務器開發有一道題是計算一個結構體的sizeof的大小: struct strData { int m_Int; char m_Char; short m_Short; char

Linux應用開發自學之路

回來 高並發 做了 人員 marvel 匯編 物聯網 原理 書籍 前言 在 「關於我 」那篇博文裏,朋友們應該知道了我不是科班出身,是由機械強行轉行到Linux應用開發方向。下面我就詳細向大家介紹自己這一路上的轉行歷程,希望對大家有所啟發。 我是學機械專業的,對於機械專業我