<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

手把手教你學(xué)linux驅動(dòng)開(kāi)發(fā) OK6410系列之01---模塊編程

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

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

本文引用地址:http://dyxdggzs.com/article/201611/322698.htm

操作系統:ubuntu 9.10

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

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

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

二、實(shí)驗原理

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

模塊可以動(dòng)態(tài)的裝載到內核中。

三、實(shí)驗步驟

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

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

#arm-linux-gcc-v

輸入命令后,如果顯示以上信息,則表示開(kāi)發(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、編寫(xiě)模塊源文件

#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");

代碼解釋?zhuān)?/p>

static int __init hello_init(void)

static void __exit hello_exit(void)

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

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

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

– __exit標記

該代碼僅用于模塊卸載。

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

module_init(hello_init);

module_exit(hello_exit);

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

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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>