對《android系統源**情景分析》書中例子
在裝置驅動程式中
開啟裝置函式比如
freg_open(struct inode* inode,sruct file* filp)
它的作用實質上就是將file這個檔案結構體中的空指標成員變數private_data賦上你所要訪問的裝置的結構體的位址而已。以便下次讀寫的時候可以通過訪問file檔案結構體來訪問到裝置結構體。
freg_read(struct file* filp,char __user *buf,size_t count,loff_t *f_pos)
}
在裝置驅動程式的模組載入函式中一般會實現的功能是
static int __init freg_init(void)
freg_major = major(dev);
freg_minor = minor(dev);
/*freg
*/freg_dev = kmalloc(sizeof(struct fake_reg_dev), gfp_kernel); //為描述這個裝置的結構體分配儲存空間,在這個裝置結構體中包含字元裝置結構體或者塊裝置結構體
if(!freg_dev)
/**/
err = __freg_setup_dev(freg_dev); //初始化這個裝置結構體(且看下面對這個結構體中實現的功能解釋)
if(err)
下面是初始化這個裝置結構體函式
static int __freg_setup_dev(struct fake_reg_dev* dev)
/*val
*/init_mutex(&(dev->sem));
dev->val = 0;
return 0;
}
在驅動程式寫完之後通過一系列的編譯環境修改將驅動程式編譯進核心當中,詳情見《android系統源**情景分析》一書。
在使用者空間c程式中可以這樣訪問驅動程式
首先呼叫open("dev/freg",o_rdwr);//在使用者空間呼叫了這個系統呼叫以後系統就會從使用者態切換到核心態然後呼叫你寫的核心函式freg_open函式(文章開頭的函式),將"dev/freg"與裝置驅動結構體連線起來。
再呼叫read()就可以讀驅動程式了
工作筆記 C 複習二
一 find函式 find函式宣告 template inputiterator find inputiterator first,inputiterator last,const t val find函式作用 在 first,last 範圍內查詢第乙個與val相等的元素,並返回這個元素的迭代器 i...
SAP工作筆記
sap 筆記整理 sap筆記整理 1一 abap 開發部分 21 常用tcode se80 se38 se11 se10 se93 22 se11 是abap 字典,可以查詢資料庫欄位和儲存資訊。33 se10 用來查詢開發過的程式相關資訊。34 se93 用來發布程式,給程式乙個tcode.3 5...
工作筆記 ALG cscope
alg是路由器的功能,如果兩台pc之間用路由器相連並使用ftp傳輸資料,則內網的資料報經過路由器的時候會有兩個ip位址被替換掉,ip報頭的內網ip通過nat功能被替換掉和tcp報文中的ip被alg功能替換掉。如果兩台pc直接相連不經過路由器則資料報的這兩個ip就都不會被替換掉 vimrc是vim的定...