新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 手把手教你學linux驅動開發 OK6410系列之01---模塊編程

        手把手教你學linux驅動開發 OK6410系列之01---模塊編程

        作者: 時間:2016-11-28 來源:網絡 收藏
        一、實驗環境

        開發機環境

        本文引用地址:http://www.104case.com/article/201611/322698.htm

        操作系統:ubuntu 9.10

        交叉編譯環境:arm-linux-gcc4.2.2 ,安裝位置 /usr/local/arm/4.3.2/

        6410板子內核源碼路徑:/work/linux-2.6.36.2-v1.05/

        目標板環境:OK6410-Alinux2.6.36

        二、實驗原理

        模塊時在內核空間運行的,模塊中不能使用glibc庫中的函數。

        模塊可以動態的裝載到內核中。

        三、實驗步驟

        注意:最好使用root用戶進行以下實驗,否則需要利用sudo

        1、驗證交叉編譯工具配置正確。安裝交叉編譯器的步驟見《OK6410-A開發板LINUX2.6.36用戶手冊.pdf》5-5小節。

        #arm-linux-gcc-v

        輸入命令后,如果顯示以上信息,則表示開發環境正確。否則需要將arm-linux-gcc所在的路徑加入到PATH中。方法如下:

        編輯/etc/profile文件添加把編譯器路徑到環境變量PATH中

        # vi /etc/profile

        PATH=/usr/local/arm/4.3.2/bin:$PATH
        1. exportPATH

        輸入以下命令使配置生效。
        #source /etc/profile

        2、編寫模塊源文件

        #vitest.c

        1. #include
        2. #include
        3. #include
        4. staticint__inithello_init(void)
        5. {
        6. printk("Helloworldn");
        7. return0;
        8. }
        9. staticvoid__exithello_exit(void)
        10. {
        11. printk("Goodbyeworldn");
        12. }
        13. module_init(hello_init);
        14. module_exit(hello_exit);
        15. MODULE_LICENSE("DualBSD/GPL");

        代碼解釋:

        static int __init hello_init(void)

        static void __exit hello_exit(void)

        – static聲明,因為這種函數在特定文件之外沒有其它意義
        – __init標記

        表明該函數只在初始化期間使用。

        模塊裝載后,將該函數占用的內存空間釋放

        – __exit標記

        該代碼僅用于模塊卸載。

        printk 內核函數,打印信息,類似于用戶空間glibc庫中的printf,注意在內核中不能使用glibc庫中的函數。

        module_init(hello_init);

        module_exit(hello_exit);

        –宏:module_init/module_exit
        –聲明模塊初始化及清除函數所在的位置
        –裝載和卸載模塊時,內核可以自動找到相應的函數

        3、編寫Makefile文件

        #viMakefile

        1. obj-m:=test.o
        2. KDIR:=/work/linux-2.6.36.2-v1.05/
        3. all:
        4. make-C$(KDIR)M=$(shellpwd)modules
        5. clean:
        6. make-C$(KDIR)M=$(shellpwd)clean

        注意:

        • 1、2、4行頂行寫,3、5行使用tab縮進。
        • KDIR為6410開發板的內核源碼路徑
        • test.o,因為我們的源文件為test.c,所以這里要寫test.o
        • Makefile文件與test.c文件放在同一個目錄下,比如/work/lab/test01/
          上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 四会市| 商水县| 长治县| 阿荣旗| 门头沟区| 蕉岭县| 喀喇沁旗| 石城县| 青神县| 昭通市| 石嘴山市| 理塘县| 石阡县| 江口县| 丘北县| 南丹县| 丰顺县| 泉州市| 牡丹江市| 迁西县| 波密县| 炉霍县| 乐清市| 三河市| 云南省| 会昌县| 淳化县| 彭泽县| 育儿| 渑池县| 时尚| 徐州市| 海南省| 东宁县| 定结县| 富蕴县| 翁牛特旗| 安徽省| 建平县| 尉氏县| 孟州市|