Linux核心開發之記憶體與I/O訪問(四)

時間:晚上7點地點:寢室中..“小王,今天就不多話了,接著昨天沒講完的,不然連不起來了,都..”我催促著。  上節講到kmalloc()申請的記憶體若要被映射到使用者空間可以通過mem_map_reserve()設定為保留後進行。具體怎麼操作呢,給你一個模版吧:// 核心模組載入函數int __init kmalloc_map_init(void){ ../申請裝置號,添加cedv結構體 buffer = kmalloc(BUF_SIZE, GFP_KERNEL);

Linux核心開發之記憶體與I/O訪問(六)

“小王,再告訴你一個好訊息,今天是咱們裝置驅動程式核心基礎理論的最後一節課了,戰鬥就已經到了最後一刻了,開心不”我眉飛色舞的對小王說。“嗯,開心,我掙紮許久了,終於結束了,只是..”小王傷感的說“只是我覺得怎麼能一下就沒了呢, 心裡空蕩蕩的”.“沒關係的…”看著小王噘著嘴調皮而又可愛的樣子,我也心軟了”核心的理論是講完了,但你不是沒動過手嗎,還有很多路要走呢..我還舍…”我一把蒙住自己的嘴.  嘿嘿,心裡咋想咋們都明白,是不…別傷感了,繼續咱們上節的東西: 

Linux核心開發之記憶體與I/O訪問(五)

“小王,告訴你一個好訊息,最難理解的部分不知不覺中已經講完了,今天的課程就簡單多了,而且最重要的是咱們的Linux裝置驅動核心理論課也差不多了…”“最難的部分?已經講完了?我咋沒感覺呢..你講的真是太好了,太通俗易懂了,太..”小王調皮的說。“切,就你嘴甜,我還不知道你啊,小腦筋..”我白了小王一樣。  

linux核心分析筆記—-調度

       調度?咋這熟悉,我們是不是常在哪裡聽到。沒錯,是的,調度我們時常聽過,比如交通管制調度啦等。這不,夏天這熱, 標語貼的好:相應國電電力調度,做文明市民,好彆扭啊!不管了。你要是還是不懂,再囉嗦講個事,過年回家,和漂亮的GF回家,為了張普通的硬座票還要排老久對,甚至還可能被坑拿到黃牛票,這時你嘴裡咧咧的啥:XX,啥火車站,做的啥春運調度啊!唉,這次你說到點上了。      

linux核心分析筆記—-進程管理

      進程和線程的概念我就不講了。總之,你記著:核心調度的對象是線程,而不是進程。linux系統中的線程很特別,它對線程和進程並不做特別區分。進程的另外一個名字叫任務(task).我和作者一樣,習慣了把使用者空間啟動並執行程式叫做進程,把核心中啟動並執行程式叫做任務。      核心把進程存放在叫做任務隊列(task list)的雙向迴圈鏈表中,鏈表中的每一項都是類型為task_struct,名稱叫做進程描述符(process

linux核心分析筆記—-系統調用

      在Linux中,系統調用是使用者空間訪問核心的唯一手段,它們是核心唯一的合法入口。實際上,其他的像裝置檔案和/proc之類的方式,最終也還是要通過系統調用進行的。      

Linux核心開發之並發控制(一)

“小濤,你說十一黃金周,火車站,飛機場那些售票系統咋沒一個宕掉的呢。你不宕掉也沒關係,來兩個賣錯票的,說不定哥就去上海看世博,去北京看青梅竹馬的表妹了…”小王抱怨道。“暈死..哥鄙視你,你說都老大不小的人了,怎麼腦子裡天天都是MM之類的事了,能不能有點男子氣概啊..”。“靠,能跟你比啊,你是飽漢不知餓漢饑,要是像你一樣十一和…”  "嗯,啊,哼哼.."沒等他說完,我趕忙塞了雙臭襪子(哪天的也記不住了)。“得得,I 服了

Linux核心開發之簡單字元裝置驅動(下)

    在上一篇中,我們介紹了有關簡單字元裝置驅動中那些簡單但又必須要掌握的結構體和一些源碼中核心的操作函數,這一節我們繼續介紹有關源碼部分的後續相關內容及測試使用的方法(在本文中同時也會給出完整的Makefile檔案,方便大家調試)。static const structfile_operations globalmem_fops ={//這些就是上篇中所實現的所有操作該字元裝置的函數介面,這些最終都會被使用者程式中的open(),read()所調用.owner=

Linux核心開發之簡單字元裝置驅動(上)

廢話少說,先來介紹幾個必須要知道的和字元裝置有關的結構體,然後結合代碼詳細講解。第一部分 必要的裝置結構體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核心分析筆記—-核心可移植性

      關於linux核心的可移植性我不用多說,現在的linux作業系統,你裝系統時應該很明白的知道了,很少說(至少我沒見到)不相容不能裝的問題。今天就來說說這個問題:      1.位元組和資料類型      能夠由機器一次就完成處理的資料被稱為字,字指位的數目。所以我們常聽到機器是多少位的時候,就是指該機的字長。處理器通用寄存器的大小和它的字長是相同的。C語言定義的long類型總對等於機器字長。對於支援的每一種體繫結構,Linux都要將<asm/types.h>中的BITS_

linux核心分析筆記—-進程地址空間

      前邊我已經說過了核心是如何管理實體記憶體。但事實是核心是作業系統的核心,不光管理本身的記憶體,還要管理進程的地址空間。linux作業系統採用虛擬記憶體技術,所有進程之間以虛擬方式共用記憶體。進程地址空間由每個進程中的線性地址區組成,而且更為重要的特點是核心允許進程使用該空間中的地址。通常情況況下,每個進程都有唯一的地址空間,而且進程地址空間之間彼此互不相干。但是進程之間也可以選擇共用地址空間,這樣的進程就叫做線程。      核心使用記憶體描述符結構表示進程的地址空間,由結構體mm_

Linux核心開發之非同步通知與非同步I/O(四)

“小王,接著昨天的來,你知道嗎?在非同步IO中,什麼可以用來做為AIO的通知呢?”我用渴求的眼神望著她."啊?那我咋知道,你說的我能記住就不錯了,讓我發明創造,我可是不會."小王委屈道。“笨死了,我前邊花了那麼多的時間來講訊號之類的東西,聯想一下訊號作為非同步通知的訊號,也想的出來啊,告訴你,我當年用腳肢頭都能想到,可你..真讓我失望”我歎氣到,“算了,也不怪你了,咱們開始繼續學習吧“。  先上代碼:使用訊號作為AIO非同步IO通知機制void setup_io(..){ int fd;

Linux核心開發之中斷與時鐘(一)

“小王,醒醒,開始上課了,今天咱們開始講中斷,這可是進階東西,錯過不補哈”我使勁推著睡夢中的小王。“嗯?感情好啊,快點,快點”小王一聽有新東西講,像打了雞血似的興奮,連我都懷疑起她是不是性格中喜新厭舊。不管那麼多了,我講我的,她厭她的…  啥叫中斷?就是指cpu在執行過程中,出現了某些突發事件時CPU必須暫停執行當前的程式,轉去處理突發事件,處理完畢後CPU有返回原程式被中斷的位置並繼續執行。 

Linux核心開發之中斷與時鐘(三)

  晚上7點10分..“小濤哥,這章不是叫Linux裝置驅動程式之中斷與時鐘,前邊你講了中斷,還給了我很多模版,我都看懂了,這次是不是要開始講時鐘了..”“真聰明,越來越喜歡你這聰明的樣子了,說的不錯,今天就要開始一個新的模組--核心時鐘”我很少夸人,為啥今天誇她呢了,呵呵.  定時器,意思大家都明白,我就不說了,要是不明白,把它想成個鬧鐘總可以吧.. 

Linux核心開發之中斷與時鐘(二)

“小濤哥,快醒醒,快醒醒..”小王使勁推著睡夢中的我,“你不是說今天要講昨天有關的典型模板執行個體嗎…”“啊?小姐啊,現在才早上8點,還讓人睡覺不,別吵”我一頭鑽進被子裡說。“不管,誰讓你昨天不說完,還賣個小關子,害我昨天晚上都沒睡好,想了一晚上…”我揉揉蒙蒙的眼說:“行,權當看在你渴求的心情上,但只此一次,下不為例,我還想好好睡懶覺呢..”昨天我們講了有關中斷方面的東西,鑒於小王你不太懂,我今天就專門拿出一章來說說前邊中斷的使用典型模版,你照抄也方便不是:1)在中斷分類中,我們說到了有關向量中

Linux核心開發之中斷與時鐘(四)

“小王,小王,今天可是這一章節最後一節了,知識點咱們前邊都講過了,今天主要是給你用前邊的東西講一個實際例子---秒字元裝置驅動程式”  這個驅動程式會在被開啟的時候初始化一個定時器並將其添加到核心定時器鏈表中,每秒輸出一次當前的jiffies,這意味著,定時器處理函數中每次都要修改新的expires。不多說了,看程式碼分析:#include …//必要的系統標頭檔#define SECOND_MAJOR 252 /*預設的second的主裝置號*/static int

Linux核心開發之記憶體與I/O訪問(三)

“小王,不瞞你說,我現在是悲喜交加啊,悲的是:這最後一章,我講的是膽顫心驚(以前自己都沒學好,現在也算還賬了),喜的是每講一張,我知道離結束就近了一點,趕快把這個東西過掉,進入下一環節,那又是我牛皮吹破天的時代了”看著小王期盼和懷疑的眼神,我,昔日的風采也不見了。“沒事的,小濤哥,其實說真的,不是我安慰你哈,從開始我什麼都不懂,到現在我也算個入門級的高手了,都是你一手帶過來的,我已經對你推崇備至了,你就放心吧,會的你盡情教,不會的,你慢慢說,我都聽你的”小王善解人意的說。“嗯,你真好,看來我沒看

Linux核心開發之記憶體與I/O訪問(一)

“小王,今天咱們開始講有關記憶體和I/O訪問的內容,心裡先要有點低,這部分內容還是有點煩,有點難的哦”說著話,我心裡都沒底,怕嚇著小王,不瞞你說,當時看這部分,我可是沒少費勁。“哦,那咋辦,不能不學是不?沒事,有小濤哥在,俺就不怕”小王信心十足的說。“哦!看不出來,還讓你來安慰我了”看著小王這充滿信心的樣子,我也沒啥顧慮了。好了,深吸一口氣,開始今天的課程。  

Linux核心開發之記憶體與I/O訪問(二)

“小濤哥,咱們說Linux裝置驅動程式說了那麼久,怎麼從來不說實際裝置呢,頂多就說了下記憶體,總感覺驅動程式是和裝置分離的,怎麼關聯起來..”小王思索著。“不錯,這也正是這次講課的內容,裝置I/O連接埠與I/O記憶體的訪問”我啊,禁不住拍拍她的頭。  對於一塊實際的裝置而言,通常會提供一組寄存器來用於控制裝置,讀寫裝置和擷取裝置狀態,也就是我們常說的控制寄存器,資料寄存器和狀態寄存器。這些寄存器可能位於I/O空間(這時叫做I/O連接埠),也可能位於記憶體空間(對應的記憶體空間被成為I/O記憶體)

總頁數: 3772 1 .... 127 128 129 130 131 .... 3772 Go to: 前往

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。