原创 goto語句和標號

分支、循環都講完了,現在只剩下最後一種影響控制流程的語句了,就是goto語句,實現無條件跳轉。我們知道break只能跳出最內層的循環,如果在一個嵌套循環中遇到某個錯誤條件需要立即跳出最外層循環做出錯處理,就可以用goto語句,例如: fo

原创 word中文字與公式混排,如何使其對齊?

在寫論文或文章時,有時候會遇到公式和文字不在一行的情況,公式老是比文字高出一截,怎麼調都調試不下來,再網上搜索了下,終於找到了解決的辦法。 首先將有公式和文字的段落或是那一行全部選中。 1)字體――字符間距――位置,標準; 2)格式――段

原创 MAJOR、MINOR、MKDEV理解

下面這段話出自linux內核linux/kdev.h中,是關於主次設備號操作的一些宏 #ifndef _LINUX_KDEV_T_H #define _LINUX_KDEV_T_H #ifdef __KERNEL__ #define MI

原创 Makefile的obj-y 和 obj-m

目標定義是Kbuild Makefile的主要部分,也是核心部分。主要是定義了要編 譯的文件,所有的選項,以及到哪些子目錄去執行遞歸操作。 最簡單的Kbuild makefile 只包含一行: 例子: obj-y += foo.o 該例子

原创 makefile詳解

最近在學習Linux下的C編程,買了一本叫《Linux環境下的C編程指南》讀到makefile就越看越迷糊,可能是我的理解能不行。             於是google到了以下這篇文章。通俗易懂。然後把它貼出來,方便學習。      

原创 gcc 中-I、 -L 與-l選項的作用

在makefile中經常會看到這些選項,簡要說明其作用:  -I後面緊跟着用戶設定的編譯器頭文件查找路徑 如:    -I/my_include_path/ -L後面緊跟着用戶設定的編譯器庫文件查找路徑 如:     -L/m

原创 我對linux內核鏈表實現中的部分函數的理解——第一節

linux內核鏈表是一個雙向循環鏈表,其實現與具體硬件平臺無關,理解了linux內核鏈表的實現機制,我們能夠把其移植到引用層程序設計當中。          linux內核鏈表相關的一些函數聲明在include/linux/list.h

原创 Source Insight使用方法

Source Insight實質上是一個支持多種開發語言(java,c,c++等等)的編輯器,只不過由於其查找、定位、彩色顯示等功能的強大,常被我們當成源代碼閱讀工具使用。 一 常用快捷鍵1、按住"ctrl", 再用鼠標指向某個變量,點

原创 IO端口和IO內存的區別及分別使用的函數接口

IO端口和IO內存的區別及分別使用的函數接口           每個外設都是通過讀寫其寄存器來控制的。外設寄存器也稱爲I/O端口,通常包括:控制寄存器、狀態寄存器和數據寄存器三大類。根據訪問外設寄存器的不同方式,可以把CPU分成兩大

原创 Linux內核模塊導出後無法調用問題解決(模塊間函數調用通訊)

Linux模塊間通訊方法非常的多,最便捷的方法莫過於函數符號導出,然後直接調用。 然而在linux2.6.26以後的內核中模塊的符號導出經常會出現問題,一個模塊中的導出符號不能被另外一個模塊進行調用。這個使得處理有依賴關係的模塊非常的頭疼

原创 字符設備驅動1

裝載自:點擊打開鏈接 1.cdev 結構體 Linux2.6內核使用 cdev 結構體描述字符設備 struct cdev // cdev 的定義在 <linux/cdev.h> {     struct kobject kobj; 

原创 kmalloc

Kmalloc內存分配和malloc相似,除非被阻塞否則他執行的速度非常快,而且不對獲得空間清零。 Flags參數 #include<linux/slab.h> Void *kmalloc(size_t size, int flags);

原创 linux中GFP_KERNEL

GFP_KERNEL是在linux/gfp.h中定義的一個宏,是分配內核空間的內存時的一個標誌位。 這個標誌位分配內存的一個選項,GFP_KERNEL是內核內存分配時最常用的,無內存可用時可引起休眠。以下是GFP_KERNEL在內核中的代

原创 linux mmap 詳解

一.前言mmap的具體實現以前在學習內核時學習過,但是對於其中的很多函數是一知半解的,有些只能根據其函數名來猜測其具體的功能,在本文中,一起來重新深入理解其具體的實現。二.mmap的用戶層應用void *mmap(void *start,

原创 Linux用戶空間與內核空間

Linux 操作系統和驅動程序運行在內核空間,應用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數據,因爲Linux使用的虛擬內存機制,用戶空間的數據可能被換出,當內核空間使用用戶空間指針時,對應的數據可能不在內存中。 Linux內核地