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
一.安裝wingrub1. 雙擊wingrub 的安裝程式,如所示:2. 選擇安裝的位置,如所示:單擊Install 安裝完成。選擇時,不一定要選放有linux鏡像的分區,可以選C盤,即(hd0,0)。二.Wingrub的配置A.選擇Tools--àInstall Grub如所示:在彈出的視窗中做如下配置,最後單擊Istall完成安裝。B.在Stem Drive右邊的下拉框中選擇C,再選擇BOOT.INI 並在title中寫入一個名稱,這裡寫grub,在TimeOut中寫入10 如所示。注意:
Time of Update: 2018-12-03
Linux Core Dump 配置與調試 1.core檔案的產生開關和大小限制--------------------------------- 1)使用ulimit -c命令可查看core檔案的產生開關。若結果為0,則表示關閉了此功能,不會產生core檔案。 2) 使用ulimit -cfilesize命令,可以限制core檔案的大小(filesize的單位為kbyte)。若ulimit
Time of Update: 2018-12-03
1. 前言:有的程式可以通過編譯, 但在運行時會出現Segment fault(段錯誤). 這通常都是指標錯誤引起的.但這不像編譯錯誤一樣會提示到檔案->行, 而是沒有任何資訊, 使得我們的調試變得困難起來.2. gdb:有一種辦法是, 我們用gdb的step, 一步一步尋找. 這放在短小的代碼中是可行的, 但要讓你step一個上萬行的代碼, 我想你會從此厭惡程式員這個名字, 而把他叫做調試員.我們還有更好的辦法, 這就是core file.3.
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
Time of Update: 2018-12-03
Linux裝置模型中三個很重要的概念就是匯流排、裝置和驅動,即bus、device和driver。而實際上核心中也定義了這麼一些資料結構,他們是structbus_type,struct device,struct device_driver,這三個重要的資料結構都來自同一個地方,稱include/linux/device.h。我們知道匯流排有很多種,如PCI匯流排、SCSI匯流排、USB匯流排,所以我們會看到Linux核心代碼中出現pci_bus_type,scsi_bus_type,usb_
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
一、中斷類: 1. 中斷類型: 在request_irq(irq, handler, flags, devname, dev_id)中使用 #define SA_SHIRQ 共用中斷(舊版本的,2.6.19之前的核心) #define IRQF_SHARED 共用中斷(新版本的) #define SA_INTERRUPT 快速中斷(舊版本的) #define IRQF_DISABLED
Time of Update: 2018-12-03
probe,disconnect,id_table,這三個元素中首先要登場亮相的是id_table,它是幹什麼用的呢?我們說過,一個裝置只能綁定一個驅動,但驅動並非只能支援一種裝置。道理很簡單,比如我有兩塊隨身碟,那麼我可以一起都插入,但是我只需要載入一個模組,usb-storage。沒聽說過插入兩塊隨身碟就得載入兩次驅動程式的,除非這兩塊隨身碟本身就得使用不同的驅動程式。也正是因為一個模組可以被多個裝置共用,才會有“模組計數”這個說法。既然一個驅動可以支援多個裝置,那麼當發現一個裝置時,如何知
Time of Update: 2018-12-03
核心中每個字元裝置都對應一個 cdev 結構的變數,下面是它的定義:linux-2.6.22/include/linux/cdev.hstruct cdev { struct kobject kobj; // 每個 cdev 都是一個 kobject struct module *owner; // 指向實現驅動的模組 const struct file_operations *ops; // 操縱這個字元裝置檔案的方法 struct list_
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
linux系統提供了input子系統,按鍵、觸控螢幕、鍵盤、滑鼠等輸入裝置都可以利用input介面函數來實現裝置驅動。在linux核心中,input裝置用input_dev結構體描述,試用input子系統實現輸入裝置驅動的時候,驅動的核心工作是向系統報告按鍵、觸控螢幕、鍵盤、滑鼠等輸入事件(event,通過input_event結構體描述),不再需要關心檔案操作介面,因為input子系統已經完成了檔案操作介面。驅動報告的事件經過InputCore和Eventhandler最終到達使用者空間。通過
Time of Update: 2018-12-03
對於整個usb-storage模組,usb_stor_init()函數是它的開始,然而,對於隨身碟驅動程式來說,它真正驅使隨身碟工作卻是始於storage_probe()函數。兩條平行線只要相交,就註定開始糾纏一生,不管中間是否短暫分離。USB
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()函數