原创 自旋鎖

在初級驅動的我們介紹了幾種同步方式,有同學對自旋鎖有些不理解,現在把這部分內容詳細的講述一下。 自旋鎖與互斥鎖有點類似,只是自旋鎖不會引起調用者睡眠,如果自旋鎖已經被別的執行單元保持,調用者就一直循環在那裏看是否該自旋鎖的保持者已經釋

原创 Linux驅動程序開發005 - 內核同步技術

序言就像我們在操作系統裏學習的那樣,如果多個程序(進程或線程)同時訪問臨界區數據就會發生競爭。存在競爭條件的程序會產生不可預料的結果。消除競爭的方法一般就是同步的訪問臨界區數據(原子訪問)。Linux內核提供了多種技術用來實現內核同步操作

原创 三星U-Boot-1.1.6源碼分析

最近在看uboot的源碼,做些筆記。 lowlevel_init.S (board\samsung\smdk6410)這個文件主要是與板級配置相關的代碼,看他在那個目錄就知道了。不多說了,開始看源碼。 1、 #inc

原创 Linux設備驅動模型

kobject原理與實例分析 1、Sysfs文件系統 "sysfsis a ram-based filesystem initially based on ramfs. It provides ameans to export

原创 2416 spi

參考資料: 6410手冊/2416手冊 Kernel部分驅動代碼作者:agan 聯繫郵箱 [email protected] 轉載須註明出處!     SPI接口簡述   SPI是

原创 ubuntu 安裝source insight-完美使用

相信很多朋友在Windows下都 習慣用Source Insight來閱讀分析源代碼了,對於LINUX下面的工具,確實有比較高效的,配置起來起對比較麻煩,也比較繁瑣,相信很多人肯定希望能在Linux下面也能用到Source Insigh

原创 linux驅動修煉之道-混雜設備

Linux驅動中把無法歸類的五花八門的設備定義爲混雜設備(用miscdevice結構體表述)。miscdevice共享一個主設備號MISC_MAJOR(即10),但次設備號不同。 所有的miscdevice設備形成了一個鏈表,對設備訪問

原创 Linux驅動程序開發007 - 設備驅動模型初探

序言 從這一章開始,我們將詳細的介紹Linux的設備驅動模型。Linux設備驅動模型是一個相當複雜的系統,對於初學者來說真有些無從入手。而且更加困難的是,隨着新的Linux Kernel的release,Linux的設備驅動模型總會有或

原创 C指針和內存泄漏

引言 對於任何使用 C 語言的人,如果問他們 C 語言的最大煩惱是什麼,其中許多人可能會回答說是指針和內存泄漏。這些的確是消耗了開發人員大多數調試時間的事項。指針和內存泄漏對某些開發人員來說似乎令人畏懼,但是一旦您瞭解了指針及其關聯內

原创 窺視Linux內核的行爲的一些方法

想了解Linux內核的行爲,需要一定的偷窺經驗,大致可以分爲以下幾個: 1.使用printk 直接在內核代碼或者模塊代碼的你想偷窺的地方printk一些信息。這種方式需要你會編譯內核代碼以及編譯內核模塊,以及將其正確安裝進內核並啓動之

原创 Linux驅動程序開發009 - 使用內核內存

序言 我們在編寫用戶空間程序的時候經常需要動態或靜態(如靜態數組)的使用系統內存資源,同樣在內核空間也有類似的操作,但內核空間的操作要遠比用戶空間複雜的多,這一章就對如何在驅動程序中使用內存做個系統的介紹。 對於一個32位的系統來說,可

原创 二維碼

什麼是條碼技術?  條形碼,簡稱“條碼”,是由一組黑白相間、寬度不同的條狀符號組成。  條碼技術是研究如何把計算機所需要的數據表示成條碼形式,和如何將條碼錶示的數據和符號轉變爲計算機可以自動採集、識別的數據。因而,條碼技術就包括從編碼到製

原创 Make menuconfig 詳解

make menuconfig 圖形化的內核配置make mrproper -----刪除不必要的文件和目錄. 1  #make config(基於文本的最爲傳統的配置界面,不推薦使用) 2  #make menuconfig(基於

原创 內核定時器的使用(好幾個例子add_timer)

LINUX內核定時器是內核用來控制在未來某個時間點(基於jiffies)調度執行某個函數的一種機制,其實現位於 <linux/timer.h> 和 kernel/timer.c 文件中。被調度的函數肯定是異步執行的,它類似於一種“軟件中

原创 Linux中mmap系統調用原理分析與實現

1、 驅動描述        驅動程序由struct device_driver 描述 : struct device_driver { const char *name; /*驅動程序的名字( 體現在 sysfs 中 )*/ st