“小王,再告訴你一個好訊息,今天是咱們裝置驅動程式核心基礎理論的最後一節課了,戰鬥就已經到了最後一刻了,開心不”我眉飛色舞的對小王說。“嗯,開心,我掙紮許久了,終於結束了,只是..”小王傷感的說“只是我覺得怎麼能一下就沒了呢, 心裡空蕩蕩的”.“沒關係的…”看著小王噘著嘴調皮而又可愛的樣子,我也心軟了”核心的理論是講完了,但你不是沒動過手嗎,還有很多路要走呢..我還舍…”我一把蒙住自己的嘴. 嘿嘿,心裡咋想咋們都明白,是不…別傷感了,繼續咱們上節的東西:
“小王,告訴你一個好訊息,最難理解的部分不知不覺中已經講完了,今天的課程就簡單多了,而且最重要的是咱們的Linux裝置驅動核心理論課也差不多了…”“最難的部分?已經講完了?我咋沒感覺呢..你講的真是太好了,太通俗易懂了,太..”小王調皮的說。“切,就你嘴甜,我還不知道你啊,小腦筋..”我白了小王一樣。
調度?咋這熟悉,我們是不是常在哪裡聽到。沒錯,是的,調度我們時常聽過,比如交通管制調度啦等。這不,夏天這熱, 標語貼的好:相應國電電力調度,做文明市民,好彆扭啊!不管了。你要是還是不懂,再囉嗦講個事,過年回家,和漂亮的GF回家,為了張普通的硬座票還要排老久對,甚至還可能被坑拿到黃牛票,這時你嘴裡咧咧的啥:XX,啥火車站,做的啥春運調度啊!唉,這次你說到點上了。
進程和線程的概念我就不講了。總之,你記著:核心調度的對象是線程,而不是進程。linux系統中的線程很特別,它對線程和進程並不做特別區分。進程的另外一個名字叫任務(task).我和作者一樣,習慣了把使用者空間啟動並執行程式叫做進程,把核心中啟動並執行程式叫做任務。 核心把進程存放在叫做任務隊列(task list)的雙向迴圈鏈表中,鏈表中的每一項都是類型為task_struct,名稱叫做進程描述符(process
在Linux中,系統調用是使用者空間訪問核心的唯一手段,它們是核心唯一的合法入口。實際上,其他的像裝置檔案和/proc之類的方式,最終也還是要通過系統調用進行的。
“小濤,你說十一黃金周,火車站,飛機場那些售票系統咋沒一個宕掉的呢。你不宕掉也沒關係,來兩個賣錯票的,說不定哥就去上海看世博,去北京看青梅竹馬的表妹了…”小王抱怨道。“暈死..哥鄙視你,你說都老大不小的人了,怎麼腦子裡天天都是MM之類的事了,能不能有點男子氣概啊..”。“靠,能跟你比啊,你是飽漢不知餓漢饑,要是像你一樣十一和…” "嗯,啊,哼哼.."沒等他說完,我趕忙塞了雙臭襪子(哪天的也記不住了)。“得得,I 服了
在上一篇中,我們介紹了有關簡單字元裝置驅動中那些簡單但又必須要掌握的結構體和一些源碼中核心的操作函數,這一節我們繼續介紹有關源碼部分的後續相關內容及測試使用的方法(在本文中同時也會給出完整的Makefile檔案,方便大家調試)。static const structfile_operations globalmem_fops ={//這些就是上篇中所實現的所有操作該字元裝置的函數介面,這些最終都會被使用者程式中的open(),read()所調用.owner=
廢話少說,先來介紹幾個必須要知道的和字元裝置有關的結構體,然後結合代碼詳細講解。第一部分 必要的裝置結構體1)linux 2.6核心中使用cdev結構體表示字元裝置:struct cdev{ struct kobject kobj;//內嵌的kobject對象 struct module *owner;//所屬模組 struct file_operations *ops;//檔案操作結構體 struct list_head list; dev_t
中斷還是中斷,我講了很多次的中斷了,今天還是要講中斷,為啥呢?因為在作業系統中,中斷是必須要講的.. 那麼什麼叫中斷呢,
關於linux核心的可移植性我不用多說,現在的linux作業系統,你裝系統時應該很明白的知道了,很少說(至少我沒見到)不相容不能裝的問題。今天就來說說這個問題: 1.位元組和資料類型 能夠由機器一次就完成處理的資料被稱為字,字指位的數目。所以我們常聽到機器是多少位的時候,就是指該機的字長。處理器通用寄存器的大小和它的字長是相同的。C語言定義的long類型總對等於機器字長。對於支援的每一種體繫結構,Linux都要將<asm/types.h>中的BITS_
前邊我已經說過了核心是如何管理實體記憶體。但事實是核心是作業系統的核心,不光管理本身的記憶體,還要管理進程的地址空間。linux作業系統採用虛擬記憶體技術,所有進程之間以虛擬方式共用記憶體。進程地址空間由每個進程中的線性地址區組成,而且更為重要的特點是核心允許進程使用該空間中的地址。通常情況況下,每個進程都有唯一的地址空間,而且進程地址空間之間彼此互不相干。但是進程之間也可以選擇共用地址空間,這樣的進程就叫做線程。 核心使用記憶體描述符結構表示進程的地址空間,由結構體mm_
如果您記性好的話,應該記得我在linux裝置驅動執行個體帖中說的最多的就是字元裝置驅動程式,那麼今天的塊I/O層是一個和字元裝置驅動相對應的裝置。兩者最根本的區別就是看它們能否被隨機訪問,換句話說就是看它們能否在訪問裝置時從一個位置隨意地調到另外一個位置,如果可以就是塊裝置,否則就字元裝置。
接著上次的來,我今天講虛擬檔案系統剩下的一點知識. 3.目錄項對象.目錄項的概念上節已經說了,我就不多說.目錄項中也可包括安裝點.在路徑/mnt/cdrom/foo中,/,mnt,cdrom都屬於目錄項對象。目錄項由dentry結構體表示,定義在檔案linux/dcache.h中,描述如下:struct dentry { atomic_t d_count; /* usage count */
虛擬檔案系統,也不知道大家聽過沒有,反正我是聽過了!我們知道在電腦行業,很多東西都不是一定有個官方說:朋友,我最大,你們做的東西,都要是這個樣子,否則是非法的。事實上,很多東西都是靠的一種實力,通過實力來慢慢在人們心中成為既定事實。這個事實同樣是沒有官方的。好了,問題來了,沒有官方,就沒有標準,沒有標準就沒有統一,沒有統一那就是三國時代,混戰當道也!
來自: http://blog.csdn.net/expleeve/article/details/6037219 由於XML在資料存放區方面的優勢,使得使用xml作為設定檔,是一種常用的手段。libxml2是一個xml c語言版的解析器,本來是為Gnome項目開發的工具,是一個基於MIT
重裝xp後,mbr被xp寫入資訊導致grub無法工作解決方案 從CD-ROM啟動,從Live CD啟動進入案頭。 開啟終端或者切換到一個tty(Ctrl+Alt+F1)。 輸入:sudo grub 輸入:find /boot/grub/stage1
“小濤哥,咱們說Linux裝置驅動程式說了那麼久,怎麼從來不說實際裝置呢,頂多就說了下記憶體,總感覺驅動程式是和裝置分離的,怎麼關聯起來..”小王思索著。“不錯,這也正是這次講課的內容,裝置I/O連接埠與I/O記憶體的訪問”我啊,禁不住拍拍她的頭。 對於一塊實際的裝置而言,通常會提供一組寄存器來用於控制裝置,讀寫裝置和擷取裝置狀態,也就是我們常說的控制寄存器,資料寄存器和狀態寄存器。這些寄存器可能位於I/O空間(這時叫做I/O連接埠),也可能位於記憶體空間(對應的記憶體空間被成為I/O記憶體)
記憶體管理,不用多說,言簡意賅。在核心裡分配記憶體還真不是件容易的事情,根本上是因為核心不能想使用者空間那樣奢侈的使用記憶體。 先來說說記憶體管理。核心把物理頁作為記憶體管理的基本單位。儘管處理器的最小可定址單位通常是字,但是,記憶體管理單元MMU通常以頁為單位進行處理。因此,從虛擬記憶體的交代來看,頁就是最小單位。核心用struct page(linux/mm.h)結構表示系統中的每個物理頁:struct page { unsigned long
Linux核心塊裝置I/O子系統Linux
1. i386 適用於intel和AMD所有32位的cpu.以及via採用X86架構的32的cpu. intel平台包括8086,80286,80386,80486,奔騰系列(1.2.3.4)、賽揚系列,Pentium D系列以及centrino P-M,core duo 等.2. X86_64 適用於intel的Core 2 Duo, Centrino Core 2 Duo, and Xeon 和AMD Athlon64/x2, Sempron64/x2,