目前分類:coding經驗談 (3)

瀏覽方式: 標題列表 簡短摘要

經由前篇的文章介紹,相信也對整個流程和相關 struct有所了解,讓我在PO另外一個用法,keyword "proc_dir_entry",Linux的PROC檔案系統是procedure檔案系統和kernel檔案系統的組成的,是kernel模擬出來的軟體檔案系統,讓kernel對user space的資訊窗口,所以你可以看到/proc的每一個檔案都代表kernel裡面專屬的function,linux的工具像是ps、top也是從這邊提取所要的資訊,雖然它是一個很便捷的寫法,在debug上也有相當高的便利,但取決哪種用法還是像我一開始說的那樣,在面對不同的device要用不同的方式,不然就枉費linux提供相當多可以對應的struct and method,不過在i2c來說算是適合用這種寫法才對。

再來我們一樣來看要用的struct,這次應該有注意到它提供的讓你填入function並沒有那麼多,相對提供了很多parameter,但主要我用到的還是read/write,如果你在去看read_porc_t的struct,會有一個很重要的東西就是page,page是來自kernel輸入的parameter,其餘的都是輸出的參數,若是有太多資料是無法達成一次傳輸,要用offset來分批傳輸,下面code有寫出來。

struct proc_dir_entry {
    unsigned short low_ino;
    unsigned short namelen;

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

這個是我最近自己寫的一個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) 人氣()