原创 Linux內核中內存相關的操作函數-1

 1.原理說明   Linux內核中採 用了一種同時適用於32位和64位系統的內 存分頁模型,對於32位系統來說,兩級頁表足夠用了,而在x86_64系 統中,用到了四級頁表,如圖2-1所示。四級頁表分別爲:   * 頁全局目錄(Pag

原创 有關像素深度bpp的概念

 像素深度是指存儲每個像素所用的位數,它也是用來度量圖像的分辨率。像素深度決定彩色圖像的每個像素可能有的顏色數,或者確定灰度圖像的每個像素可能有的灰度級數。例如,一幅彩色圖像的每個像素用R,G,B三個分量表示,若每個分量用8位,那麼一個像

原创 詳解FrameBuffer 二

(二)一個LCD顯示芯片的驅動實例     以Skeleton LCD 控制器驅動爲例,在LINUX中存有一個/fb/skeleton.c的skeleton的Framebuffer驅動程序,很簡單,僅僅是填充了 fb_info結構,並且

原创 ./configure,make,make install的作用

 ./configure是用來檢測你的安裝平臺的目標特徵的。比如它會檢測你是不是有CC或GCC,並不是需要CC或GCC,它是個shell腳本。 make是用來編譯的,它從Makefile中讀取指令,然後編譯。 make install

原创 Linux netlink機制及示例

 原理 Netlink是一種在內核態和用戶態可以進行雙向數據傳輸的通信機制,也就是說,用戶進程既可以作爲服務器端又可以作爲客戶端,內核也是如此。用戶進程和內核誰是服務器端誰是客戶端,這個問題與誰先主動發起數據交互會話有關。 用戶進程主

原创 GPIO

 首先應該理解什麼是GPIO。GPIO,英文全稱爲General-Purpose IO ports,也就是通用IO口。在嵌入式系統中常常有數量衆多,但是結構卻比較簡單的外部設備/電路,對這些設備/電路有的需要CPU爲之提供控制手段,有

原创 I/O端口、I/O內存

 1. CPU對外設IO端口物理地址的編址方式 (1)I/O映射方式(I/O-mapped),即獨立編址 (2)內存映射方式(Memory-mapped),即統一 編址 1.1 獨立編址         一些體系結構的CPU(典型地

原创 Linux驅動中保存讀寫文件方法

在linux驅動開發中,經常要調試驅動,保存數據以便查看是否正確,方法如下: 代碼:  #include <linux/fs.h>  #include <linux/uaccess.h>  #include <linux/init.h>

原创 static的作用

  C語言中使用靜態函數的好處:       靜態函數會被自動分配在一個一直使用的存儲區,直到退出應用程序實例,避免了調用函數時壓棧出棧,速度快很多。        關鍵字“static”,譯成中文就是“靜態的”,所以內部函數又稱靜態

原创 Linux 內存映射函數 mmap()函數詳解

一、概述           內存映射,簡而言之就是將用戶空間的一段內存區域映射到內核空間,映射成功後,用戶對這段內存區域的修改可以直接反映到內核空間,同樣,內核空間對這段區域的修改也直接反映用戶空間。那麼對於內核空間<---->用戶空間

原创 Linux設備驅動之I/O端口與I/O內存

Linux設備驅動之I/O端口與I/O內存 一、統一編址與獨立編址 該部分來自於:http://blog.chinaunix.net/space.php?uid=21347954&do=blog&id=443670,感謝mason_h

原创 Linux內核中內存相關的操作函數-2

 1、kmalloc()/kfree()   static __always_inline void *kmalloc(size_t size, gfp_t flags)   內核空間申請指定大小的內存區域,返回內核空間虛擬地址。在函

原创 詳解FrameBuffer 一

一、FrameBuffer的原理     FrameBuffer 是出現在 2.2.xx 內核當中的一種驅動程序接口。     Linux是工作在保護模式下,所以用戶態進程是無法象DOS那樣使用顯卡BIOS裏提供的中斷調用來實現直接寫屏,

原创 CPU訪問外設

 在嵌入式編程裏,特別是32bit CPU裏,各種各樣五花八門的動作是CPU通過對外設的驅動來完成的.因爲底層編程大部分工作就是外設編程。    CPU本身幾乎每一種外設都是通過讀寫設備上的寄存器來進行操作的。外設寄存器也稱爲“I/O

原创 怎樣取消已經被內核佔用的按鍵驅動中斷號

最近在做按鍵驅動中斷的實現,按照我的中斷處理程序,按下按鍵後應該會打印出“key down!”但剛開始怎麼弄都弄不出來,後來查看了中斷號,cat /proc/interruprts ,發現四個按鍵驅動在內核編譯時已經被佔用,這時候想到要重