這個是我最近自己寫的一個driver,其實是我有寫兩種方式,或許你會好奇跟上面那篇文章,使用的方式為什麼差那麼多,因為你對應的handware不能說只有一種方式撰寫,但常用的寫法是哪些,為什麼大家面對那個device都這樣寫,自己要注意跟去比較,然後去挑你最適合的,雖然code可能長相會差很多部過流程都是差不多才對,你要先知道你撰寫方式的struct,對他填入正確呼叫的方式,像是我下列code的東西他的struct file_operations,在來你要了解他的方式為何,file_operations是定義驅動程式的system call與實作system call的struct,可參考Fs.h (include\linux)  :

struct file_operations {
    struct module *owner;
    loff_t (*llseek) (struct file *, loff_t, int);
    ssize_t (*read) (struct file *, char *, size_t, loff_t *);

funlife1 發表在 痞客邦 留言(0) 人氣()

從很久以前就很想去撰寫這類的文章,但因為文筆不夠生動,知識技巧和技術深度其實都無法寫到自己想要的感覺,所以等了很久,雖然現在還是很肉腳,但至少我找到想要的主題,讓我們慢慢進入linux 世界吧!

 

先談論我的工作內容,不管在第一個工作(代理商)或是第二個工作(系統廠),其實每個工作接觸的面和點都不同,像是在代理商自家產品要很了解,尤其是在regisiter & datasheet,因為不提供total solution,不然有提供solution 是買人家的system 在po自家公司的code,非常少見所以不列入討論範圍,所以後來轉型開始往driver(kernel space)面少點深,在第二個工作已經進來三個月,就接了兩個project,第一個是keil c 8051的架構(這個找時間在額外開一個文章來討論),第二個就是從8051 porting到 MIPS linux embedded system,時間很趕沒時間去發揮到很多,對專案程度而已第二家公司摸的會比較多面但時間緊湊摸不到點,因為在這過程也在學習所以這次開始po文,當作是一個成長紀錄,廢話不多說就開始吧!!

 

撰寫driver有很多技巧,在你面對硬體上也有不同的特性,像是大架構arm mips 雖然大家都說他很相似,其實還是很多不同的地方,舉例來說在gpio mips就是一個單一feature 在arm 部分 就有分periph,更不用提x86 或是 其他的,在細看內容 小從簡單的gpio up/down 到 gpio 寫出 i2c 或是usb等等,要了解需求在針對需求用對方法,下列介紹就針對我現在在看的地方。

funlife1 發表在 痞客邦 留言(0) 人氣()