原创 第一節 使用arm-linux-gcc編譯hello程序在全志H3上運行

編譯環境:VMware+ubuntu 交叉編譯器:arm-linux-gcc-4.4.3 1.Ubuntu編寫hello.c程序 #include <stdio.h> int main(void) { printf("

原创 nanopi-h3的lichee(linux-3.4)內核編譯總結(方法一)

nanopi內核編譯: 編譯環境:VMware+ubuntu 交叉編譯器:gcc-linaro-arm.tar.xz 內核源碼:linux-3.4 BSP(全志H3廠商全志科技提供) 步驟: 1.從github上克隆lichee源碼 $

原创 linux內核同步機制之完成量

定義在頭文件linux/completion.h中; 完成量(completion)是Linux系統提供的一種比信號量更好的同步機制,是對信號量的一種補充;它用於一個執行單元等待另一個執行單元完成某事;使用完成量等待時,調用進程是以獨佔睡

原创 linux內核同步機制之RCU

    定義:               把共享的數據結構複製一個副本,對副本進行修改,最後使用回調機制在適當的時候將指向原來數據的指針指向新的數據。對於被RCU保護的共享數據結構,讀操作不需要獲得任何鎖就可以訪問,但寫操作在訪問它時首

原创 linux內核同步機制之順序鎖

定義在頭文件linux/seqlock.h中        順序鎖(seqlock)是對讀寫鎖的一種優化,若使用順序鎖,讀執行單元絕對不會被寫執行單元所阻塞,也就是說,讀執行單元可以在寫執行單元對被順序鎖保護的共享資源進行寫操作的同時仍然

原创 linux內核同步機制之自旋鎖

定義:         最多隻能被一個可執行線程持有。如果一個執行線程試圖獲得一個被爭用的自旋鎖,那麼該線程就會一直進行忙循環----旋轉----等待鎖重新可用。         自旋鎖有“加鎖”和“解鎖”兩種狀態。“加鎖”一直在尋求“解

原创 linux內核同步機制之讀寫信號量

讀寫信號量與信號量之間的關係類似於自旋鎖與讀寫自旋鎖。 讀寫信號量可能會引起進程阻塞,但是它允許N個讀執行單元同時訪問共享資源,而最多隻允許有一個寫執行單元訪問共享資源;因此,讀寫信號量是一種相對放寬條件的、粒度稍大於信號量的互斥機制。

原创 linux內核同步機制之讀寫自旋鎖

定義: 讀寫自旋鎖(rwlock)是一種比自旋鎖粒度更小的自旋鎖機制,它保留了“自旋”的概念。 但是在寫操作方面,只能最多有一個寫進程,在讀方面,同時可擁有多個執行單元,當然讀和寫也不能同時進行。 一句話:防寫不防讀 理解推薦: http

原创 linux內核同步機制之互斥鎖

用互斥量進行同步 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include

原创 linux內核同步機制之原子操作

原子操作 原子的操作指的就是在執行過程中不會被別的代碼所中斷的操作,也就是最小執行單位。在Linux中原子操作的方法有很多,有整型原子和位原子,他們在任何情況下操作都是原子的,這些原子操作的實現都是依賴CPU來實現的,因此這些函數都與CP

原创 linux內核同步機制之中斷屏蔽

定義:          在進入臨界區之前屏蔽系統的中斷。可保證正在執行的內核執行路徑不被中斷處理程序搶佔,(linux的進程調度都依賴於中斷) 中斷屏蔽相關函數: local_irq_disable(); //屏蔽所有中斷 .....

原创 linux內核同步機制之信號量

定義:         如果有一個任務試圖獲得已經被佔用的信號量時,信號量會將其推進一個等待隊列,使其睡眠,當持有信號量的進程將信號量釋放以後,再喚醒該任務,並獲得該信號量。 頭文件head.h代碼: #ifndef __HEAD_H_

原创 2.NanoPi M1(全志H3)的GPIO控制總結(內核驅動)

開發環境:VM+Ubuntu 編譯環境:linux3.4 交叉編譯工具:arm-linux-gcc 4.4.3 GPIO內核驅動程序鏈接:https://download.csdn.net/download/ddffyhg/1102229

原创 Nanopi m1(全志H3)內核驅動編程初探Helloworld(編譯方式一)

方法一:          開發環境:VM+Ubuntu          編譯環境:linux3.4(全志官方BSP)          交叉編譯工具:arm-linux-gcc 4.4.3 1.編寫helloworld設備源碼 #i

原创 1.NanoPi M1(全志H3)基於wiringPi的GPIO控制總結

開發環境:linux-3.4(開發板) 步驟: 1.安裝WiringPi庫: git clone https://github.com/friendlyarm/WiringNP cd WiringNP/ chmod 755 build