<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 手把手教你學(xué)linux驅(qū)動開發(fā) OK6410系列之01---模塊編程

          手把手教你學(xué)linux驅(qū)動開發(fā) OK6410系列之01---模塊編程

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          一、實驗環(huán)境

          開發(fā)機環(huán)境

          本文引用地址:http://www.ex-cimer.com/article/201611/322698.htm

          操作系統(tǒng):ubuntu 9.10

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

          6410板子內(nèi)核源碼路徑:/work/linux-2.6.36.2-v1.05/

          目標(biāo)板環(huán)境:OK6410-Alinux2.6.36

          二、實驗原理

          模塊時在內(nèi)核空間運行的,模塊中不能使用glibc庫中的函數(shù)。

          模塊可以動態(tài)的裝載到內(nèi)核中。

          三、實驗步驟

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

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

          #arm-linux-gcc-v

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

          編輯/etc/profile文件添加把編譯器路徑到環(huán)境變量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聲明,因為這種函數(shù)在特定文件之外沒有其它意義
          – __init標(biāo)記

          表明該函數(shù)只在初始化期間使用。

          模塊裝載后,將該函數(shù)占用的內(nèi)存空間釋放

          – __exit標(biāo)記

          該代碼僅用于模塊卸載。

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

          module_init(hello_init);

          module_exit(hello_exit);

          –宏:module_init/module_exit
          –聲明模塊初始化及清除函數(shù)所在的位置
          –裝載和卸載模塊時,內(nèi)核可以自動找到相應(yīng)的函數(shù)

          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縮進(jìn)。
          • KDIR為6410開發(fā)板的內(nèi)核源碼路徑
          • test.o,因為我們的源文件為test.c,所以這里要寫test.o
          • Makefile文件與test.c文件放在同一個目錄下,比如/work/lab/test01/
            上一頁 1 2 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();