發表文章

目前顯示的是有「Driver」標籤的文章

HuaWei E660 on Linux 小筆記 (Supported since 2.6.18)

討論串: http://www.mail-archive.com/linux-usb-devel@lists.sourceforge.net/msg49260.html LXR: http://lxr.linux.no/linux+v2.6.18/drivers/usb/serial/option.c 設定檢驗方法: DialupModemHowtoHuaweiE220

Ubuntu 9.10 vs Ralink 3090 Wireless Driver

在Ubuntu 9.10版本中使用的kernel 是 2.6.31 這一Kernel版本對於網路的driver有一項重大更動 就是對於傳統的net_device結構中的open/stop/ioctl/xmit/等op的向後相容性取消了 以Ralink 3090 Wireless Network Driver為例,須手動修改rt_linux.c才能順利編譯 詳情請看 這個PATCH

光碟機無法驅動嗎?請看這裡

狀況是這樣的,我朋友的電腦用的好好的, 要灌入新軟體的時候才發現內建的光碟機不見了, 從裝置管理員進去看,訊息是檔案已毀損 試圖從別台電腦複製驅動程式覆蓋本來的檔案也沒用, 土法煉鋼無效,決定尋求google大神的協助, 四處搜尋爬文之下才知道,原來是iTunes在搞鬼, 它在光碟機的registry加了兩個filter, 但是移除軟體時並不會順便還原, 導致系統找不到那兩個filter,光碟機就無法驅動, 解決方法就是到該registry把filters拿掉 方法如下(翻譯自下面的連結): 1.打開"登錄編輯程式",方法是點[開始]->[執行],輸入regedit 2.備份Registry:選取[檔案]->[匯出],然後給他一個檔名。萬一修改失敗可以用這個檔案還原,方法是直接點他兩下就好 3.然後點選+號依序展開下列項目: * HKEY_LOCAL_MACHINE * SYSTEM * CurrentControlSet * Control * Class 4.選取"4D36E965-E325-11CE-BFC1-08002BE10318",類似名字的項目可能有好幾個,確定選到正確那一個 . Make sure you have selected this exact key name. Select the LowerFilters value on the right pane and press the Delete key. Confirm the deletion by clicking Yes. Try to look for UpperFilters as well on the right pane. Delete the string UpperFilters as well. 5.切換到右邊的面版,尋找名為"UpperFilters "、"UpperFilter "、"LowerFilter "的機碼,把他們通通刪除掉。然後關閉"登錄編輯程式",重新開機,光碟機應該就會恢復正常了 參考網頁: http://www.techsupportforum.com/hardware-support/removable-med...

quiz: ioctl 與 down的問題

在IOCTL中有一段這樣的code: if ( down(&(enc->ptr_frame_queue[0]->frame[0].ptr_sem)) ) return -EFAULT; 錯誤訊息如下: void value not ignored as it ought to be 問題在哪裡? 答案是down的return value是void,無法傳回值給if 改用down_interruptible即可。

實體記憶體映射技術:mmap ioremap

要在AP中直接設定裝置或者直接存取實體記憶體位址, 在作業系統的保護下,通常要透過ioctl或read/write方法。 但是對於大量資料進出,比如video或streaming這樣的方法就顯的效能很低, 所以Linux提供了另外一套機制叫做mmap。 透過mmap可以把檔案映射到使用者虛擬位址空間,透過這個指標就可以存取檔案。 那檔案怎麼支援mmap呢?答案是要實做mmap這個方法,把上層的mmap請求, 轉換成實際的動作。 那怎麼利用mmap做實體記憶體的應用呢? AP要利用/dev/mem這支檔案,它可以映射到實際的記憶體。 DRIVER端則要用ioremap把實體記憶體轉換成核心虛擬位址,之後就讀寫這個記憶體指標。 最後簡單圖解如下: AP->開啟/dev/mem->mmap到實體記憶體位址->AP快樂的存取 DRIVER->module_init時做ioremap->取得記憶體指標->DRIVER快樂的存取

Driver: 中斷時期 vs 一般行程

作業系統負責打理程式的大小事, 其中很重要的一件工作就是行程管理。 然而行程除了按照設計的執行流程進行之外, 也有可能被其他工作打斷,其中大致可分兩類:硬體中斷與軟體中斷。 硬體中斷:來自硬體裝置發出的中斷訊號。 軟體中斷:計時器、SIGNAL或者PRE-EMPTY都屬於這類訊號。 對應到Driver層,也可把核心函示劃分回一般核心函示與中斷時期函示。 中斷時期函示:中斷處理函示跟計時器call back 一般核心函示:不屬於上列函示的都是一般核心函示。 為什麼要區分這兩者呢? 因為很多核心API像是: schedule, wait_event, bottom_half, task_list等 是只能在一般核心函示中執行!而不能中斷正在高優先權等級的中斷時期函示執行。 要是一個沒注意,一執行到相對區段,就馬上oops或者panic給你看。 如果不知道這兩者的分別,DEBUG到死都不知道發生什麼事 ... 以上就是今天發生在本人身上的事情,冏rz.... 那要是無法確定到底是不是屬於中斷時期的函示呢? 核心有提供兩個API供檢查用,一是in_interrupt(),一是in_atomic(), 下次遇到oops時,可以拿來檢查一下。 分享完畢。

Proc FS 實戰筆記

PROC是Linux檔案目錄化管理的一個實現,跟Dev FS一樣, 可以把系統狀態/控制整合成檔案的讀跟寫。 加上本來的PIPE跟強大的Shell Utils,不用Compiler就可以寫出強大的程序了。 不過這一切的基礎,就是要在Kerenl層跟Driver實做相關介面出來。 這次就是要分享實做過程。 PROC的原理很簡單,正如剛剛所述,是模擬成檔案系統的實做, 所以其實設定部分,只要指定檔案對應的讀、寫函示,還有對應的權限等就OKAY了。 過程跟程式碼就不貼了,附上網址給大家看,講的很詳細喔! PDF版: http://buffer.antifork.org/linux/procfs-guide.pdf HTML版: http://www.aoc.nrao.edu/~tjuerges/ALMA/Kernel/procfs-guide/index.html

Select, Poll 之Driver層實做

今天跟同事研究到poll_wait這個函示, 由於之前對於select 與poll 沒有清楚的觀念, 趁這次機會給他弄清楚。 看了下列網誌之後,加上從LDD3這本書上的介紹,大概知道用法了。 http://voldemort1984.spaces.live.com/blog/cns!E626DBCDA81971AB!730.entry 1) select, poll, epoll都是呼叫 .poll這個file operation 2) poll_wait本身並不會阻滯(Block),要不要阻滯是由不同的系統進入函示決定的 3) poll是執行完馬上返回,select則是會等到有東西可讀寫或者發生逾時才會返回

Linux Serial Driver 系統架構

http://www.linux.it/~rubini/docs/serial/serial.html TTY在UNIX like 系統由來已久,所以架構發展也日趨複雜, 最近有用到這方面的資訊,就把這篇有用的文章放上來, 希望對於系統內部運作有更進一步的瞭解。