Time of Update: 2018-12-03
阻塞型字元裝置驅動前面說到了 如何?read write
Time of Update: 2018-12-03
來自:http://blog.csdn.net/dongliqiang2006/archive/2009/06/12/4262950.aspx【節選】:Linux啟動之後,只要一段時間不動鍵盤(開發板上用IO擴充出來的鍵盤),LCD就會自動關閉(黑屏、顯示慢慢消失之類),只要按下鍵盤就能恢複。 這個問題讓我花了一天多的時間。其實如果是手持功能,這樣也沒有什麼。但是我們公司的產品是要一直顯示東西的,必須解決這個問題。我看了很多論
Time of Update: 2018-12-03
核心啟動卡在Uncompressing Linux..... done, booting the kernel.這好像是個老生常談的問題了。成因在網上也羅列了很多種,可這次我碰到的,卻沒百度出解決方案,糾結了我很久才解決。我先把造成Uncompressing Linux..... done, booting the kernel.的常見的幾種可能再羅列一下1、機器碼不匹配解決方案:在配置核心時開啟debug Kernel hacking -> Kernel low-level
Time of Update: 2018-12-03
並發 競態 (訊號量與自旋鎖)代碼傳至並發競態控制並發進程 導致競態的一個例子前面所述的字元驅動都是沒有考慮並發竟態的情況,想象一下一個進程去讀一個字元裝置,另一個進程在同一時間向這個裝置寫入(完全有這種情況)原來裝置中存有 A B C D 要想裝置寫入1 2 3 4 每次讀寫一個位元組t1t2t3t4t5t6t7t8RWWRWRRWA12233D4R:
Time of Update: 2018-12-03
主要的檔案操作方法實現檔案操作函數有很多的操作介面,驅動編程需要實現這些介面,在使用者編程時候系統調用時候會調用到這些操作struct file_operations {...loff_t (*llseek) (struct file *, loff_t, int);ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*write) (struct file *, const char __user
Time of Update: 2018-12-03
socket進程通訊與網路通訊使用的是統一套介面,只是地址結構與某些參數不同。一。建立socket服務端的流程如下:(1)建立socket,類型為AF_LOCAL或AF_UNIX,表示用於進程通訊:int server_fd;int client_fd;//client file descriptorstruct sockaddr_un server_addr; struct sockaddr_un client_addr;size_t
Time of Update: 2018-12-03
字元裝置中 重要的資料結構大部分字元驅動設計三個重要的資料結構<linux/fs.h>struct file_operationsstruct filestruct inode 一、檔案操作 在之前的一篇文章中已經有介紹了如何去生情字元裝置裝置號,但是沒有做任何的工作,也就只能寫一個不能工作的字元裝置;struct file_operations
Time of Update: 2018-12-03
似乎每一章介紹的內容比較少,但學習是一個循序漸進的過程,不在於一天學多少,重要的一天能真正的學懂多少,所以我主張一步一步來,從多個渠道去學習知識,實現互補。本節測試代碼傳到此處了:char_step1 大家可以下載測試一下。字元裝置的註冊與裝置節點的自動建立cdev 結構核心內部使用struct
Time of Update: 2018-12-03
字元裝置類比pipe的驅動程式讓我們用一個”pipe“的裝置驅動去結束簡單字元裝置吧(這裡所說的pipe並非標準的pipe只是類比了一個從一端寫入從另一端寫入的裝置)測試代碼1 測試代碼2設計思路用一個圖來說明(可是畫了很久喲)簡單說來就是一個進程寫入緩衝區,另一個進程可以讀出,讀出後原buffer中的資料被置為無效值,自訂一個結構#define MAX_SIMPLE_LEN 1024//buffer 資料長度struct simple_dev{ char
Time of Update: 2018-12-03
說點上節沒有講完的話題使用者地址檢測 簡單模組調試 以及一些雜項檢測使用者空間地址的有效性上一節中提到在read write時候要檢測使用者空間傳遞的參數地址是否是有效地址,有的核心功能會自行檢測,但是在調用輕量級的核心功能時候,就可能不去檢測使用者空間的地址是否有效,如果此時使用者無傳遞一個無效地址,而核心功能去操作了它,這時棘手的問題出現了,輕則核心oops
Time of Update: 2018-12-03
簡單字元裝置驅動1、主次裝置號主裝置號標識裝置串連的的驅動,此裝置號由核心使用,標識在相應驅動下得對應的裝置在linux中裝置號是一個32位的dev_t類型typedef __u32 __kernel_dev_t;typedef __kernel_dev_t dev_t;crw------- 1 root root 10, 1 Apr 11 2011 psaux crw------- 1 root root 4, 1 Oct 2803:04 tty1 crw-rw-rw-
Time of Update: 2018-12-03
第三次看了LDD3了(雖然現在已經是kernel3.0但從這本書商還是能學到很多) 每次都有一些收穫 現在終於能夠些一些代碼了驅動程式的作用:簡單來說
Time of Update: 2018-12-03
CU首頁 ┊ fh265>>部落格 微博 相簿 個人中心 好友 訊息 [退出] ┊ 隨便看看公告:緬懷Dennis Ritchie活動開賽啦!小白的部落格——提升自已,分享別人xiaobai.blog.chinaunix.net好的女人可以不共用。好的技術絕對要共用! 首頁 | 博文目錄 | 相簿 | 部落格圈 | 關於我 | 留言設定檔diytvgy微博論壇發紙條打招呼加關注加好友部落格訪問:74410博文數量:42部落格積分:687部落格等級:中校關注人氣: 4註冊時間:20
Time of Update: 2018-12-03
CU首頁 ┊ fh265>>部落格 微博 相簿 個人中心 好友 訊息 [退出] ┊ 隨便看看公告:緬懷Dennis Ritchie活動開賽啦!小白的部落格——提升自已,分享別人xiaobai.blog.chinaunix.net好的女人可以不共用。好的技術絕對要共用! 首頁 | 博文目錄 | 相簿 | 部落格圈 | 關於我 | 留言設定檔diytvgy微博論壇發紙條打招呼加關注加好友部落格訪問:74404博文數量:42部落格積分:687部落格等級:中校關注人氣: 4註冊時間:20
Time of Update: 2018-12-03
fork函數在linux中非常重要,因為進程大多是通過它來建立的,比如linux系統在啟動時首先建立了進程0,之後的很多進程藉助do_fork得到建立.這兩天在看匿名管道時瞭解了下fork,其應用畢竟廣,這裡只說些我才學到的吧.首先來看例1.#include "stdio.h" #include "unistd.h" #include "stdlib.h" int main(){ int i; printf("hello world %d/n",getpid()); i=3;
Time of Update: 2018-12-03
對於我的電腦,安裝的是CentOS6.3系統,操作過程為:1.進入X視窗後,在VirtualBox的軟體菜單裡面選擇“裝置”--“安裝增強功能”2.在案頭上出現一個光碟機符號,表明光碟機載入成功。3.開啟終端,進入/media檔案夾,會看到一個檔案,名字為VBoxAdditions,進入該目錄。4.超級使用者運行sh VBoxLinuxAdditions.run 。會出現下面所列的內容,然後reboot,就可以進行自動切換了。安裝的過程中,出現building the main
Time of Update: 2018-12-03
本文出自:http://blog.csdn.net/hongchangfirst1其中/usr,usr不是user的縮寫,而是unix software resource的縮寫。就是說/usr是unix作業系統軟體資源的目錄。 2tar -jxvf
Time of Update: 2018-12-03
本文出自:http://blog.csdn.net/hongchangfirst 上次講了Linux進程描述符,這次我們在講講記憶體描述符,Linux的記憶體描述符也用一個結構體來表示,具體是mm_struct結構體,在linux/mm_types.h裡定義。Linux作業系統就是用這個結構體實現記憶體的管理,我們先看一下具體的欄位情況。 struct mm_struct {//擁有該結構體的進程的虛擬位址空間的大小 unsigned long task_size; /*
Time of Update: 2018-12-03
輸入裝置(如按鍵,鍵盤,觸控螢幕,滑鼠,蜂鳴器等)是典型的字元裝置,其一般的工作機制是底層在按鍵,觸摸等動作發生時產生一個中斷(或驅動通過timer定時查詢),然後cpu通過SPI,I2C或者外部儲存空間匯流排讀取索引值,座標等資料,放一個緩衝區,字元裝置驅動管理該緩衝區,而驅動的read()介面讓使用者可以讀取索引值,座標等資料。在Linux中,輸入子系統是由輸入子系統裝置驅動層、輸入子系統核心層(Input Core)和輸入子系統事件處理層(Event Handler)組成。其中裝置驅動層提
Time of Update: 2018-12-03
本文出自:http://blog.csdn.net/hongchangfirst/article/details/7075026 大家都知道進程,可是知道linux是怎麼管理其進程的嗎?每一個進程都有一個進程描述符,具體是task_struct結構體儲存相關的資訊,在linux/sched.h檔案裡定義,那麼我們先看看linux核心3.0版本的task_struct結構體的定義吧(刪除了不必要的欄位,只保留了重要的欄位)。同時歡迎大家轉載和交流。struct