Time of Update: 2018-12-03
Linux檔案編程之安裝檔案系統 前言: 可能我們機子上都按了兩個作業系統Linux作業系統和XP,那麼我們一般都可以在Linux下訪問XP下的檔案,但是我們卻不能在XP下訪問Linux,這是為什麼呢? 一.安裝檔案系統 1.由於 Ext2/Ext3是 Linux 的標準檔案系統,所以系統把EXT2 檔案系統的磁碟分割做為系統的根檔案系統,EXT2 以外的檔案系統(如 Window的 FAT32
Time of Update: 2018-12-03
從協議中來,到協議中去(上)在structusb_driver中,.probe和.disconnect的原型如下:836 int(*probe) (struct usb_interface *intf,837 const struct usb_device_id *id);838839 void(*disconnect) (struct usb_interface
Time of Update: 2018-12-03
1、學習使用Linux,先記住一個自助式命令: man man -f [command] man -k [command] man X [command] (其中'X'為數字,代表man -f [command]查詢結果中,提示該command處於Mannual的第幾部分部分)2、學習使用DOS,先記住一個自助式命令: ? [command] /? (查詢該命令的使用方法)3、學習使用gdb,先記住一個自助式命令: help help [topic]
Time of Update: 2018-12-03
# Makefile 2.4KDIR=/lib/modules/$(shell uname -r)/buildOBJS=mymodule.oCFLAGS=-D__KERNEL__ -I$(KDIR)/include -DMODULE -D_KERNEL_SYSCALLS__ -DEXPORT_SYMTAB -O2 -fomit-frame-pointer -Wall -DMODVERSIONS -include
Time of Update: 2018-12-03
struct bus_type中為裝置和驅動準備了兩個鏈表,而代表裝置的結構體struct device中又有兩個成員,struct bus_type *bus和struct device_driver *driver。同樣,代表驅動的結構體struct device_driver同樣有兩個成員,struct bus_type *bus和struct list_head devices,struct device和struct device_driver的定義和struct
Time of Update: 2018-12-03
probe,disconnect,id_table,這三個元素中首先要登場亮相的是id_table,它是幹什麼用的呢?我們說過,一個裝置只能綁定一個驅動,但驅動並非只能支援一種裝置。道理很簡單,比如我有兩塊隨身碟,那麼我可以一起都插入,但是我只需要載入一個模組,usb-storage。沒聽說過插入兩塊隨身碟就得載入兩次驅動程式的,除非這兩塊隨身碟本身就得使用不同的驅動程式。也正是因為一個模組可以被多個裝置共用,才會有“模組計數”這個說法。既然一個驅動可以支援多個裝置,那麼當發現一個裝置時,如何知
Time of Update: 2018-12-03
bus上的兩張鏈表記錄了每一個裝置和驅動,那麼裝置和驅動這兩者之間又是如何聯絡起來的呢?此刻,必須拋出這樣一個問題,先有裝置還是先有驅動?在以前,先有的是裝置,每一個要用的裝置在電腦啟動之前就已經插好了,插放在它應該在的位置上,然後電腦啟動,然後作業系統開始初始化,匯流排開始掃描裝置。每找到一個裝置,就為其申請一個struct device結構,並且掛入匯流排中的devices鏈表中來,然後每一個驅動程式開始初始化,開始註冊其struct
Time of Update: 2018-12-03
Linux進程學習之exit()和_exit()函數 進程就好比人一樣有其生命,我們通過fork()函數來建立一個進程,那麼我們又是如何來中止進程呢。 進程退出 1.在Linux中任何讓一個進程退出 進程退出表示進程即將結束。在Linux中進程退出分為了正常退出和異常退出兩種。 1>正常退出 a.
Time of Update: 2018-12-03
現在很多人的系統是windows xp的.考慮到最近linux很火.呵呵.所以眾菜鳥們躍躍欲試..拿起武器開始操刀..想讓xp和linux共存.殊不知習慣了windows一路next的朋友們,面對linux可不能一路next了... 今天幫同學在他電腦上裝linux.由於沒有系統硬碟.所以就網上自己下載的iso鏡像檔案.呵呵.本人本著能省則省的原則,還是到網上下了個鏡像檔案.
Time of Update: 2018-12-03
storage_probe這個函數挺有意思,總長度不足100行,但是幹了許多事情,這就像足球場上的後腰,比如切爾西的馬克萊萊,在場上並不起眼,但是卻為整個團隊做出了卓越的貢獻。我們繼續看storage_probe的代碼:972 mutex_init(&(us->dev_mutex));973 init_MUTEX_LOCKED(&(us->sema));974 init_completion(&(us->notify));975
Time of Update: 2018-12-03
羅馬不是一天建成的。在讓隨身碟工作之前,其實我們的驅動做了很多準備工作。我們繼續跟著感覺走,storage_probe(),972行至975行,一系列的以init_*命名的函數在此刻被調用,這裡涉及了一些鎖機制,等待機制,不過只是初始化,暫且不理睬,到後面用到時再細說,不過請記住,這幾行每一行都是有用的。後面自然會用得著。此時,我們先往下走,978行的associate_dev()和989行的get_device_info(),這兩個函數是我們目前需要看的。先看associate_dev()函數
Time of Update: 2018-12-03
Tasklet[概述]Tasklet是非強制中斷的特殊實現。Tasklet通常是下半部處理的優選機制,它在效能和易用性之間有著很好的平衡。較softirq,tasklet不需要考慮SMP下的並發問題,而又比workqueue有著更好的效能。不同類型的tasklet可以在不同的處理器上同時執行,但同類型的tasklet不能同時執行。這就避免了並發問題。ksoftirqd核心線程有著類似工作者線程一樣的職責,它會周期的遍曆非強制中斷的向量列表,如果發現哪個非強制中斷向量掛起了(pending),就執
Time of Update: 2018-12-03
下面講一下usb_stor_control_thread()函數。喚醒它的是來自queuecommand的up(&(us->sema)),us->srb被賦值為srb,而srb是來自SCSI核心層在調用queuecommand時候傳遞進來的參數。聚焦usb_stor_control_thread()。314行,前面說過,關於dev_mutex這把鎖我們必須在看完整個模組之後再來從較高的角度來看。312行,如果設了US_FLIDX_DISCONNECTING,這個不用多說了,是
Time of Update: 2018-12-03
在講資料轉送階段之前,先解決剛才的曆史遺留問題。usb_stor_bulk_transfer_buf()中,406行,有一個很有趣的函數interpret_urb_result()被調用。這個函數同樣來自drivers/usb/storage/transport.c中:265 static int interpret_urb_result(struct us_data*us, unsigned int pipe,266 unsigned int length,
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
這幾天一直在看裝置模型,核心的代碼看得我越來越沮喪,特別是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
從開始寫Linux那些事兒系列文字開始,到如今已有四年多了,而從整理出版第一版到現在也已經一載有餘了。期間不斷有認識或不認識的朋友問我,怎麼會想起寫這麼多如此可愛的文字,我的回答都是:娛樂自己,娛樂大家而已!或許,大家早已經預設技術本是一個沉重或者說枯燥的話題,我們無法用一種娛樂的心態去看待它,甚至說很多人早已喪失了從中擷取樂趣的能力。但是,一切本不該如此的,對於不管什麼原因踏入這個行業的我們,願意或不願意,技術都已經是我們生命不可分割的一部分。既如此,又何不放輕鬆些,把他當成朋友,用我們自己的
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
Linux Notifier Chains mechanism源地址:http://hi.baidu.com/zmdesperado/blog/item/a8d701eec86ffcc2b31cb1fe.html1. 引言Linux是單核心架構(monolithic