Time of Update: 2018-12-03
struct super_operation new_super{ .read=new_read; .write=new_write; // 更多的這樣的語句};另外還有一種文法是下面這個樣子的:struct super_operation new_super{ read: new_read; write: new_write; // 更多的這樣的語句}; 第一種吧,在核心中為結構體變數賦值,這樣賦值不用關係結構體變數中元素的順序的問題。而第二種,是C中的位段。 有些資訊在儲存時,
Time of Update: 2018-12-03
總覺的在驅動的read,write,ioctl裡面進行大的記憶體申請會有問題。我看到的一些別人的驅動都不是這麼做的。都是在probe的時候,定義個結構體,申請個足夠大的記憶體,和其中有指標和裝置有關係。這樣你在read。write,ioctl的時候,都可以通過檔案標識符得到裝置,裝置通過和結構體的關係得到結構體指標,從而得到申請的記憶體指標,你就可以使用已經申請好的記憶體,而不是在read裡面定義個大數組。
Time of Update: 2018-12-03
如何修改Linux命令提示字元 2011-02-10 14:01:23 www.hackbase.com 來源:互連網 Linux修改環境變數PS1(命令列提示符),可以使用vi編輯/etc/profile檔案,在最後加上:export PS1=’[u@h W]$ ‘即可,其中u顯示目前使用者帳號,h顯示當前主機名稱,W顯示當前路徑,$顯示’$'符號 Linux修改環境變數PS1(命令列提示符),可以使用vi編輯/etc/profile檔案,在最後加上:export
Time of Update: 2018-12-03
在核心2.4中堆棧是這麼定義的: union task_union { struct task_struct task; unsigned long
Time of Update: 2018-12-03
剛剛 開始研究 嵌入式Linux 感覺 比較難 接下來的日子裡 我會與大家 一起分享我的學習成果 也作為我的學習筆記吧“學習貴在堅持,別畏難”首先是 Linux 的基礎Linux 的特點:1.免費 開源2.可移植性,裝置平台無關性3.強大的網路功能4.POSIX(可移植作業系統介面)標準5.多任務,多使用者作業系統也這是由於這些優點 所以常被應用於 企業服務應用(sina,baidu...) 嵌入式系統(ARM,MIPS,PowerPC...)以及個人桌面應用(redhat Ubuntu ...
Time of Update: 2018-12-03
阻塞型字元裝置驅動前面說到了 如何?read write
Time of Update: 2018-12-03
嵌入式Linux作業系統學習規劃ARM+LINUX路線,主攻嵌入式Linux作業系統及其上應用軟體開發目標: (1) 掌握主流嵌入式微處理器的結構與原理(初步定為arm9) (2) 必須掌握一個嵌入式作業系統 (初步定為uclinux或linux,版本待定) (3) 必須熟悉嵌入式軟體開發流程並至少做一個嵌入式軟體項目。 從事嵌入式軟體開發的好處是:
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
終於可以清閑下來打理一下我的blog了,台資企業真的事情很多很煩……前幾篇文章對字元裝置有個簡單介紹,並以簡單的一個字元裝置驅動作結尾,其實linux上大部分驅動程式都是字元裝置程式,Linux源碼中也可以看到很多的字元裝置驅動,所以供學習的代碼還是很多的。這一節本想說一下如何測試裝置驅動,但是因為最近看了看核心鏈表,所以趁還記的比較清楚趕緊記錄下來。有不到位的地方煩請指正。Linux
Time of Update: 2018-12-03
Linux
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但從這本書商還是能學到很多) 每次都有一些收穫 現在終於能夠些一些代碼了驅動程式的作用:簡單來說