Time of Update: 2018-12-04
這個故事中使用的是2.6.10的核心代碼.Linux核心代碼目錄中, 所有去裝置驅動程式有關的代碼都在drivers/目錄下面,在這個目錄中我們用ls命令可以看到很多子目錄.localhost:/usr/src/linux-2.6.10/drivers # lsKconfig atm cdrom eisa ide macintosh message net parport s390 tc w1Makefile
Time of Update: 2018-12-04
出來混,遲早要還的.從前在複旦,混了四年,沒有學到任何東西,每天就是逃課,上網,玩遊戲,睡覺.畢業的時候,身邊的人讀研的讀研,出國的出國,找工作的吧,去麥肯錫的去麥肯錫,去IBM的去IBM.而自己卻一無所長,沒有任何技能,直到這時候才發現那四年欠了很多債,早知今日,何必當初.幸運的是,我還有一張複旦的文憑,依靠著這張文憑,混進了Intel.然而,工作以後,更是發現當初在校期間沒有好好讀書其實真是在欠債,當初沒學,工作以後還是要學,的確是遲早要還的,逃是逃不掉的.畢業的時候,人家跟我說Makefi
Time of Update: 2018-12-04
既然知道了怎麼編寫一個模組,那麼編寫裝置驅動程式自然也就不難了.我相信,每一個會寫模組的人都不會覺得寫裝置驅動有困難.對自己行不行不確定的話,可以去問一下葛優,他准說:"(神州行),我看行."真的,我沒說假話.寫驅動不是什麼難事,你完全可以很自信的說,你已經可以寫Device Driver了.對,沒錯,飄柔,就這麼自信.前面說了每一個模組都是以module_init開始,以module_exit結束,那麼我們就來看一下隨身碟的驅動的這個模組.在茫茫人海中,我們很容易找到這個檔案:drivers/
Time of Update: 2018-12-04
1.開機啟動時自動運行程式Linux載入後, 它將初始化硬體和裝置驅動, 然後運行第一個進程init。init根據設定檔繼續引導過程,啟動其它進程。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的指令檔,可以使init自動啟動其它程式。例如:編輯 /etc/rc.d/rc.local 檔案,在檔案最末加上一行"xinit"或"startx",可以在開機啟動後直接進入X-Window。2.登入時自動運行程式用
Time of Update: 2018-12-04
實驗環境:Vmware 7.0.0 build-203739作業系統:Ubuntu 10.10ps命令用來顯示某一時間點進程的資訊,這些資訊是靜態。如果想動態查看當前系統啟動並執行程式資訊,可以使用top命令。ps命令的參數多如牛毛,而且分帶“-”和不帶“-”的參數。在man手冊中,有這麼一段話,介紹了 ps -aux和 ps aux的區別POSIX 和UNIX標準中,ps -aux 命令將列印所有屬於x使用者的進程。如果x使用者不存在,那麼ps -aux將會解釋成 ps
Time of Update: 2018-12-04
看代碼之前,我曾經認真的思考過這麼一個問題,我需要關注的僅僅是drivers/usb/storage/目錄下面那相關的3000多行代碼嗎?就是這樣幾個檔案就能讓一個個不同的隨身碟在Linux下面工作起來嗎? 像一開始那樣把這個目錄比作一個小城的話,也許,城裡的月光很漂亮,她能夠把人的夢照亮,能夠溫暖人的心房.但我們真的就能廝守在這個城裡,一生一世嗎?很不幸,問題遠不是這樣簡單.外面的世界很精彩,作為隨身碟,她需要與usb core打交道,需要與scsi
Time of Update: 2018-12-04
一.核心來源程式的檔案組織: 1.Linux核心來源程式通常都安裝在/usr/src/linux下,而且它有一個非常簡單的編號約定:任何偶數的核心(例如2.0.30)都是一個穩定地發行的核心,而任何奇數的核心(例如2.1.42)都是一個開發中的核心。本文基於穩定的2.2.5原始碼,第二部分的實現平台為 Redhat Linux 6.0。 2.核心來源程式的檔案按樹形結構進行組織,在來源程式樹的最上層你會看到這樣一些目錄: ●Arch
Time of Update: 2018-12-04
Linux裝置模型中三個很重要的概念就是匯流排,裝置,驅動.即bus,device,driver,而實際上核心中也定義了這麼一些資料結構,他們是struct bus_type,struct device,struct
Time of Update: 2018-12-04
struct bus_type中為devices和drivers準備了兩個鏈表,而代表device的結構體struct device中又有兩個成員,struct bus_type *bus和struct device_driver *driver,同樣,代表driver的結構體struct device_driver同樣有兩個成員,struct bus_type *bus和struct list_head devices,struct device和struct
Time of Update: 2018-12-04
pci_bus_type 定義如下, struct bus_type pci_bus_type = ...{ .name = "pci", .match = pci_bus_match, .uevent = pci_uevent, .probe = pci_device_probe, .remove = pci_device_remove, .suspend = pci_device_
Time of Update: 2018-12-04
probe,disconnect,id_table,這三個咚咚中首先要登場亮相的是id_table,它是幹嘛用的呢?我們說過,一個device只能綁定一個driver,但driver並非只能支援一種裝置,道理很簡單,比如我有兩塊隨身碟,那麼我可以一起都插入,但是我只需要載入一個模組,usb-storage,沒聽說過插入兩塊隨身碟就得載入兩次驅動程式的,除非這兩塊隨身碟本身就得使用不同的驅動程式.也正是因為一個模組可以被多個裝置共用,才會有模組計數這麼一個說法.ok,既然一個driver可以支援多
Time of Update: 2018-12-04
通過檔案名稱尋找: 這個方法說起來就和在WINDOWS下尋找檔案一樣容易理解了。如果你把這個檔案放在單個的檔案夾裡面,只要使用常見的“ls"命令就能方便的尋找出來,那麼使用“find”命令來尋找它就不能給你留下深刻的印象,畢竟“find”命令的強大功能不止這個。如果知道了某個檔案的檔案名稱,而不知道這個檔案放到哪個檔案夾,甚至是層層套嵌的檔案夾裡。舉例說明,假設你忘記了httpd.conf這個檔案在系統的哪個目錄下,甚至在系統的某個地方也不知道,則這是可以使用如下命令:find /
Time of Update: 2018-12-04
大家都知道linux的應用程式要想訪問核心必須使用系統調用從而實現從usr模式轉到svc模式。下面咱們看看它的實現過程。系統調用是os作業系統提供的服務,使用者程式通過各種系統調用,來引用核心提供的各種服務,系統調用的執行讓使用者程式陷入核心,該陷入動作由swi非強制中斷完成。at91rm9200處理器對應的linux2.4.19核心系統調用對應的非強制中斷定義如下:#if defined(__thumb__) //thumb模式#define __syscall(name) \"push
Time of Update: 2018-12-04
※ 調試工作艱苦,是核心級開發區別於使用者級開發的一個顯著特點。※ 駕馭核心調試的能力,很大程度上取決於經驗和對整個作業系統的把握。 一、調試前的準備 核心級bug具有行為不可靠,定義不清晰或者說很難再現的諸多特定,為核心級的bug跟蹤和調試帶來了很大的困難。 ※ 對於一些定義不清楚地bug,問題的關鍵就是找到bug的源頭,很多時候,當你精確地重現一個bug的時候,你就離成功不遠了。 二、核心中的bug
Time of Update: 2018-12-04
關於頁面的使用在之前的一些文章中,我們瞭解到linux核心會在很多情況下分配頁面。1、核心代碼可能調用alloc_pages之類的函數,從管理物理頁面的夥伴系統(管理區zone上的free_area空閑鏈表)上直接分配頁面(見《linux核心記憶體管理淺析》)。比如:驅動程式可能用這種方式來分配緩衝;建立進程時,核心也是通過這種方式分配連續的兩個頁面,作為進程的thread_info結構和核心棧;等等。從夥伴系統分配頁面是最基本的頁面分配方式,其他的記憶體配置都是基於這種方式的;2、核心中的很多
Time of Update: 2018-12-04
周海漢
Time of Update: 2018-12-04
一, w命令 該命令用於顯示登入到系統的使用者情況,w命令功能強大,它不但可以顯示有誰登入到系統,還可以顯示出這些使用者當前進行中的工作,並且統計資料相對who命令來說更加詳細和科學.w命令的顯示項目按以下順序排列:目前時間,系統啟動到現在的時間,登入使用者的數目,系統在最近1秒、5秒和15秒的平均負載。然後是每個使用者的各項資料,項目顯示順序如下:登入帳號、終端名稱、遠程主機名稱、登入時間、空閑時間、JCPU、PCPU、當前正在運行進程的命令列。其中JCPU時間指的是和該終端(tty)串連的所
Time of Update: 2018-12-04
ARM Linux Boot SequenceThe following traces the Linux boot sequence for ARM-based systems in the 2.6.18 kernel. It looks at just the earliest stages of the boot process, until the generic non-processor-specific start_kernel function is called. The
Time of Update: 2018-12-04
static __always_inline void *__memcpy(void *to, const void *from, size_t n){int d0, d1, d2;asm volatile("rep ; movsl\n\t" "movl %4,%%ecx\n\t" "andl $3,%%ecx\n\t" "jz 1f\n\t" "rep ; movsb\n\t" "1:" : "=&c" (d0), "=&D" (
Time of Update: 2018-12-04
在linux下,使用命令啟動服務:svnserve -d -r /svnroot-d 表示--daemon,即關掉執行命令的視窗,服務繼續存在。 -r 表示--root,即指定庫的根目錄。而在windows下,用同樣的命令也可以,只是關掉cmd視窗後,服務也消失了。這個問題的解決辦法,在subversion的1.4版以前,是用svn windows service wrapper,將其封裝為服務。而svn1.4以後,是可以直接支援以伺服器啟動的。方法就是利用windows