Time of Update: 2018-12-03
module_param()的學習一.module_param1.為什麼引入 在使用者態下編程可以通過main()來傳遞命令列參數,而編寫一個核心模組則可通過module_param()來傳遞命令列參數. 2. module_param宏是Linux 2.6核心中新增的,該宏被定義在include/linux/moduleparam.h檔案中,具體定義如下: /* Helper functions: type is byte, short, ushort, int, uint, long,
Time of Update: 2018-12-03
曾經以為人生就這樣了,浮躁的心拒絕再看代碼。然而來到美國兩年之後,我於本月初去了一趟拉斯維加斯,發現在那兒找個美國小姐要八百美金,而且還不是包夜。當那個金髮美女都已經走進我的房間,我卻因為價錢太貴承受不起而決定取消的時候,我覺得我的人生真是太失敗了。那晚,看她出去之後,我內心一陣鬱悶,於是開啟電腦開始看A片,怎奈看到一半電腦竟然說檔案系統崩潰了。我心想ext4檔案系統不是號稱很強大嗎,怎麼這麼容易就崩潰了呢?而且平時也不崩潰,怎麼關鍵時候就這麼坑爹啊!於是我連夜看了一晚上ext4檔案系統的代碼,
Time of Update: 2018-12-03
小白學Linux之gcc的一些常見用法1.gcc編譯器對程式的編譯,分為四個階段:1>先行編譯(pre-processing):在預先處理階段,輸入的是C語言的源檔案,通常為*.c。它們一般帶有*.h之類的標頭檔。這個階段主要處理源檔案中的#ifdef,#include,#define預先處理命令。該階段會產生一個中間檔案*.i檔案。這個階段使用命令: gcc –E tiger.c –o tiger.i它通過對源檔案tiger.c使用-E選項來產生中間檔案tiger.i2>
Time of Update: 2018-12-03
小白學Linux之編寫使用者層程式發現一些同學在學一門程式語言時,往往花很長的時間去學習如何使用一個編譯工具。 實在是令人很糾結呀。殊不只編譯工具何其多也,而且在不斷的淘汰,就我們知道的c 編譯工具就有(Turboc ,Vc ,Vim,ADS.......)如果我們花大量的時間用在如何去精通它們,那將是很大的一個悲劇。我們應該把大量的時間用在如何學會一個語言這才是至關重要的。希望大家只要對工具有個大概瞭解就行了。平時,用這些工具時如果有問題可以查查資料就行了。 一.如何在Linux下編寫程式:1
Time of Update: 2018-12-03
這幾天一直在看裝置模型,核心的代碼看得我越來越沮喪,特別是kboject、kset和ktype之間的關係。但是,裝置模型的歸納我打算先跳過這幾個重要結構體,先介紹匯流排、裝置和驅動——裝置管理的相關內容。先介紹如何使用,有機會介紹大概的原理。http://www.360doc.com/content/11/0902/12/7534118_145217834.shtmlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Time of Update: 2018-12-03
Linux之git工具的使用我相信做過項目的人,對軟體版本管理的重要性是深有所知的。如果程式版本沒有管理好,可能對整個項目來說就是致命的打擊。所以希望大家在做項目時要注意對自己編寫的程式進行一個良好的管理。前言:Git是一個快速、可擴充的分布式版本控制系統,它具有極為豐富的命令集,對內部系統提供了進階操作和完全訪問.所謂版本控制系統(VersionControlSystem),從狹義上來說,它是軟體項目開發過程中用於儲存我們所寫的代碼所有修訂版本的軟體,但事實上我們可以將任何對項目有協助的文檔交
Time of Update: 2018-12-03
dd命令的用法在安裝檔案系統時用到了dd命令,對它不是很熟悉,就查了下它的用法,和大家share下一.dd命令1.我們先在終端輸入命令: man dd,看以下官方的解釋:NAME dd - convert and copy a fileSYNOPSIS dd [OPERAND]... dd OPTIONDESCRIPTION Copy a file, converting and formatting according to the
Time of Update: 2018-12-03
一.gettimeofday()函數的使用方法:1.簡介:在C語言中可以使用函數gettimeofday()函數來得到時間。它的精度可以達到微妙2.函數原型:#include<sys/time.h>int gettimeofday(struct timeval*tv,struct timezone *tz )3.說明:gettimeofday()會把目前的時間用tv 結構體返回,當地時區的資訊則放到tz所指的結構中4.結構體:1>timevalstruct
Time of Update: 2018-12-03
4 匯流排驅動4.1 概述I2C匯流排驅動是I2C適配器的軟體實現,提供I2C適配器與從裝置間完成資料通訊的能力,比如起始,停止,應答訊號和master_xfer的實現函數。I2C匯流排驅動由i2c_adapter和i2c_algorithm來描述 4.2
Time of Update: 2018-12-03
3 i2c-dev3.1 概述之前在介紹I2C子系統時,提到過使用i2c-dev.c檔案在應用程式中實現我們的I2C從裝置驅動。不過,它實現的是一個虛擬,臨時的i2c_client,隨著裝置檔案的開啟而產生,並隨著裝置檔案的關閉而撤銷。I2c-dev.c針對每個I2C適配器產生一個主裝置號為89的裝置檔案,實現了i2c_driver的成員函數以及檔案操作介面,所以i2c-dev.c的主題是”i2c_driver成員函數+字元裝置驅動”。 3.2
Time of Update: 2018-12-03
網上找到的getch()函數源碼如下:#include <termios.h>#include <unistd.h>#include <stdio.h>int getch(void) {struct termios tm, tm_old;int fd = STDIN_FILENO, c;if(tcgetattr(fd, &tm) < 0)return -1;tm_old =
Time of Update: 2018-12-03
Linux Notifier Chains mechanism源地址:http://hi.baidu.com/zmdesperado/blog/item/a8d701eec86ffcc2b31cb1fe.html1. 引言Linux是單核心架構(monolithic
Time of Update: 2018-12-03
2 I2C子系統2.1 LinuxI2C子系統架構在核心中已經提供I2C子系統,所以在做I2C驅動之前,就必須要熟悉該子系統。2.2 三大組成部分1、I2C核心(i2c-core)I2C核心提供了I2C匯流排驅動和裝置驅動的註冊、登出方法,I2C通訊方法(algorithm)上層的、與具體適配器無關的代碼以及探測裝置、檢測裝置地址的上層代碼等。 2、I2C匯流排驅動(I2Cadapter/Algo
Time of Update: 2018-12-03
1 硬體特性1.1 概述I2C匯流排是由Philips公司開發的兩線式串列匯流排,這兩根線為時鐘線(SCL)和雙向資料線(SDA)。由於I2C匯流排僅需要兩根線,因此在電路板上佔用的空間更少,帶來的問題是頻寬較窄。I2C在標準模式下傳輸速率最高100Kb/s,在快速模式下最高可達400kb/s。屬於半雙工。在嵌入式系統中,I2C應用非常廣泛,大多數微控制器中整合了I2C匯流排,一般用於和RTC,EEPROM,智能電池電路,感應器,LCD以及其他類似裝置之間的通訊。 1.2
Time of Update: 2018-12-03
1.Overviewl 裝置模型是2.6核心引入的新特性,提供了一個獨立的機制專門來表示裝置,並描述其在系統中的拓撲結構,使得系統具有以下優點:n 代碼重複最小化n 提供諸如引用計數這樣的統一機制n 可以列舉系統中所有的裝置,觀察它們的狀態,並查看它們串連的匯流排n 可以將系統中的全部裝置結構以樹的形式完整、有效地展現出來n 可以將裝置和其對應的驅動聯絡起來,反之亦然n 可以將裝置按照類型加以歸類,比如歸類為輸入裝置,而無需理解物理裝置的拓撲結構n
Time of Update: 2018-12-03
9.小結9.1 匯流排,裝置,驅動和類之間的關係l 匯流排相當於一個容器,是device和device_driver的管理機構,它包含了一個device集合(devices_kset)和一個驅動集合(drivers_kset),分別表示掛依附於此匯流排的所有裝置和所有驅動。l 驅動依附在匯流排上,包含了一個裝置鏈(klist_devices),用來遍曆匯流排上的裝置,驅動還包含了一個bus_type指標,表示驅動所依附的匯流排。l
Time of Update: 2018-12-03
linux系統中如何通過程式來獲知系統資訊 最近在做一個項目,遇到要在程式中動態擷取裝置硬體資訊。糾結了我很長時間,今天突然發現原來在linux中有API函數直接就可以實現。對於好東西,當然要和大家share下了。一.uname()函數1.使用uname函數來實現擷取系統資訊1>函數原型#include <sys/utsname.h>int uname(struct utsname
Time of Update: 2018-12-03
6.Gpio-keys6.1 概述l Gpio-keys是基於input子系統實現的一個通用的GPIO按鍵驅動。工程中我們常常會利用它來寫按鍵驅動。 l gpio-keys驅動是基於platform來實現,platform driver(通用的部分)位於drivers/input/keyboard/gpio_keys.c,platform device通常和硬體有關,需要我們在BSP中實現。 6.2 通用驅動部分(platform driver)分析l 初始化和卸載模組static
Time of Update: 2018-12-03
1、main函數參數void main(int argc, char* argv[ ]) 假設程式編譯成為 cpp然後在命令列中輸入./cpp a b這行中有三個字串分別為 "./cpp" "a" "b"則argc為3,即argc是命令列中參數的個數。char *argv[]為一個指像字串的數組argv[0]="./cpp"argv[1]="a"argv[2]="b"即命令列中各各字串儲存在 *argv[]中。2、驅動程式中的ioctl與應用程式中的ioctl如何相關聯參考《write的秘密》:
Time of Update: 2018-12-03
5 客戶驅動5.1 概述I2C客戶驅動是對I2C從裝置的實現,一個具體的I2C客戶驅動包括兩個部分:一部分是i2c_driver,用於將裝置掛接於i2c匯流排;另一部分是裝置本身的驅動。I2C客戶驅動程式主要由i2c_driver和i2c_client來描述。 5.2 執行個體源碼分析好了,我們來深入瞭解客戶驅動代碼的實現,drivers/misc/eeprom/at24.c檔案支援大多數I2C介面的eepromI2c_driver實現static struct i2c_driver at24_