[OK210開發板體驗]入門篇(4)編程入門(NFS登錄、驅動入門)

原創 2015-12-23 14:25:00 [OK210開發板體驗]入門篇(4)編程入門(NFS登錄 驅動入門)
前面分別介紹了


【OK210開發板體驗】的第一篇:開箱驗板
【OK210開發板驗】的第二篇:板載資源
【OK210開發板體驗】的第三篇:開發環境(軟件安裝,開發環境,燒寫系統)
今天是【OK210開發板體驗】的第四篇:編程入門的介紹,主要包括以下內容:
一 NFS環境配置及登錄
二 驅動環境搭建
三 下階段安排


一 NFS環境配置及登錄
還記得在第三篇中介紹NFS的搭建嗎?NFS主要用來通過網線來實現代碼的上傳,無需通過手動的方式將程序燒寫到SD卡中,方便程序的開發及調試,這節簡單回顧一下NFS的搭建過程,然后通過實際操作來演示NFS的登錄。
(一)NFS搭建:
1 在Ubuntu下的設置
1)NFS服務安裝
Ubuntu上默認是沒有安裝NFS服務器的,首先要安裝NFS服務程序,執行如下命令:
    sudo apt-get install nfs-kernel-server
ps: (安裝nfs-kernel-server時,apt會自動安裝nfs-common和portmap)
2)NFS服務配置
  在終端執行如下命令,打開配置文件 
  sudo vim /etc/exports
  在文件的最下面輸入如下
  /home/ok210/nfs *(rw,sync,no_root_squash
)
  然后保存退出。
ps:
   /home/ok210/nfs表示共享目錄,即我們在上節創建的nfs目錄,用來存放調試的程序代碼
   *:表示主機(NFS客戶端)的ip地址(本機終端ifconfig命令就可以獲得本機的ip地址),在此表示任意的IP的地址
   rw:讀/寫權限,只讀權限的參數為ro;
   sync:數據同步寫入內存和硬盤,也可以使用async,此時數據會先暫存于內存中,而不立即寫入硬盤。
   no_root_squash:NFS 服務器共享目錄用戶的屬性,如果用戶是 root,那么對于這個共享目錄來說就具有root的權限。
3)重新編譯內核
ok210默認的Linux內核是不支持NFS服務器的,所以需要重新編譯內核,選擇其支持NFS服務,具體見上節的內核燒寫部分。
2 在OK210下的設置
1)設置IP地址
使用NFS服務器,首先是使Ubuntu和OK210內核支持NFS服務;其次是使兩設備相互可以ping通。默認一般兩設備的IP是ping不通的。現假設Ubuntu的IP(使用ifconfig查看)地址為192.168.1.102,那么需要將OK210的IP地址設置為同一網段,即可設置為192.168.1.x(x表示除102,1以外的其他數值,但要小于255)。
打開串口終端,輸入如下命令進行設置
ifconfig down
ifconfig eth0 192.168.1.113 netmask 255.255.0.0 
route add default gw 192.168.1.1
ifconfig up
ps:也可將上述代碼寫到板子/etc/init.d/rcS文件的最下面,這樣就不用每次掛載時執行上述代碼,而是OK210在啟動時,自動掛載。
2)掛載NFS
首先使用網線連接OK210和電腦,使Ubuntu和OK210能夠實現網絡互聯,首先檢查是否可以ping通,比如出現如下信息,說明可以ping通.

接著執行命令:
mount -n -o nolock 192.168.1.102:/home/ok210/nfs /mnt
3)NFS測試
在串口終端進入/mnt目錄,即可以看到在Ubuntu的/home/ok210/nfs下的文件,如下所示,即表示NFS服務
成功設置.

 

  驅動環境搭建
Linux驅動的編寫,大致分為兩個過程,第一個過程為測試階段,即為某一具體的設備,添加必要的驅動模塊,為了節省編譯時間,需要將代碼單獨放在一處,在編譯時,只需要要調用內核的頭文件即可;第二個過程為布置階段,即為某一具體設備,添加完整、可靠的驅動模塊,即該過程將驅動模塊編譯到內核鏡像文件中,它需要將驅動模塊的代碼,添加到內核源碼樹中,下面將逐一介紹
(一)階段一
新建一目錄,并編寫測試代碼

 

1.     cd /home/ok210/nfs/drivers/demo

2.     sudo vim demo.c

復制代碼

1.     // /home/ok210/nfs/drivers/demo/demo.c 

2.     #include "linux/init.h"

3.     #include "linux/module.h"

4.      

5.     static int hello_init(void)

6.     {

7.             printk(KERN_ALERT"Hello World linux-driver-module\n");//注意,必須是KERN_ALEAT及以上級別,不然不會打印

8.            return 0;

9.     }

10.   

11.  static int hello_exit(void)

12.  {

13.          printk(KERN_ALERT"Goodbye linux-driver-module\n");

14.          return 0;

15.  }

16.   

17.  module_init(hello_init);

18.  module_exit(hello_init);

19.   

20.  MODULE_LICENSE("GPL");

21.  MODULE_AUTHOR("gjianw217@163.com");

復制代碼

ps:
(1)
mkdir的-p選項允許你一次性創建多層次的目錄,而不是一次只創建單獨的目錄。
(2)
init.h 定義了驅動的初始化和退出相關的函數,幾乎每個linux驅動都有個module_init(與module_exit的定義在Init.h (\include\linux) 中)。
(3)
module.h 定義了內核模塊相關的函數、變量及宏。 如上面的MODULE_LICENSE("GPL")和 MODULE_AUTHOR("gjianw217@163.com")。其MODULE_LICENSE指定許可,必須指定;MODULE_AUTHOR,聲明作者;還有MODULE_DESCRIPTION,對這個模塊作一個簡單的描述,這個描述是"human-readable"的;MODULE_VERSION,模塊的版本;MODULE_ALIAS,模塊的別名;MODULE_DEVICE_TABLE,告訴用戶空間這個模塊支持什么樣的設備等。

添加編譯文件 Makefile
sudo  vim Makefile

1.     #demo Makefile

2.     ARCH=arm

3.     CROSS_COMPILE=/home/ok210/arm-2009q3/bin/arm-none-linux-gnueabi-

4.     APP_COMPILE=/home/ok210/arm-2009q3/bin/arm-none-linux-gnueabi-

5.     #obj-m := app-drv.o

6.     obj-m := demo.o

7.     #KDIR := /path/to/kernel/linux/

8.     KDIR := /home/ok210/android-kernel-samsung-dev/

9.     PWD := $(shell pwd)

10.  default:

11.      make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules

12.  app:app.c

13.      $(APP_COMPILE)gcc -o app app.c

14.  clean:

15.      $(MAKE) -C $(KDIR) M=$(PWD) clean

復制代碼

ps:
(1)這個Makefile算是一個通用的模板,其中CROSS_COMPILE和APP_COMPILE=arm-linux-指定交叉編譯器的位置,obj-m指定驅動模塊的目標文件(如將驅動模塊命令為app-drv.c,則此處應該為app-drv.o);KDIR指定內核的位置。
(2)當執行make時,進行內核模塊的編譯;當執行make app時,進行應用測試程序的編譯;當執行make clean時,刪除編譯的過程文件

編譯并加載到板上
   sudo make
4   驅動模塊的測試
以上 3 步都是在 ubuntu 下執行的,接下來在 OK210 完成 。打開串口終端 SecureCRT ,進入 NFS 掛載目錄,執行如下程序,

1.     cd /mnt/drivers/demo/

2.     insmod demo.ko

3.     lsmod   demo.ko

4.     rmmod demo.ko

復制代碼

最后的結果如下所示,表明成功。

  下階段安排
這樣驅動模塊的基本環境及驅動開發的基本流程介紹完畢,階段二的介紹,參考附錄部分。自此【OK210試用體驗】入門篇的4篇博文已完成:
OK210 試用體驗入門篇( 1 ):開箱驗板 OK210 試用體驗入門篇( 2 ):板載資源
OK210 試用體驗入門篇( 3 ):開發環境(軟件安裝,開發環境,燒寫系統) 
【OK210 試用體驗】入門篇( 4 ):編程入門( NFS 登錄、驅動入門)

接下來進行第二階段的檢驗,即【 OK210 試用體驗】功能篇,功能篇現打算從驅動入手,應用提現的原則進行。結合項目要求,主要從以下幾個方面進行介紹:
1 LED 顯示
2 Key 響應
3 ADC 采集
4 DS18B20 溫度檢測
5 IRAD 紅外探測
6 PWM 驅動
7 )串口 通信



附錄:
將驅動代碼按類型放到內核源碼樹相應目錄下(drivers/demo/demo.c)

1.     //driver/demo/demo.c 

2.     #include "linux/init.h"

3.     #include "linux/module.h"

4.      

5.     static int hello_init(void)

6.     {

7.             printk(KERN_ALERT"Hello World linux-driver-module\n");

8.             return 0;

9.     }

10.   

11.  static int hello_exit(void)

12.  {

13.          printk(KERN_ALERT"Goodbye linux-driver-module\n");

14.          return 0;

15.  }

16.   

17.  module_init(hello_init);

18.  module_exit(hello_init);

19.   

20.  MODULE_LICENSE("GPL");

21.  MODULE_AUTHOR("lpj");

復制代碼

在當前目錄下,分別添加編譯文件 driver/demo/Makefile 文件里,

1.     #driver module demo

2.     obj-$(CONFIG_HELLODRV) += hello.o

復制代碼

driver/demo/Kconfig文件里

1.     menu USER_DEVICE_DRIVERS//4中可以看到它

2.     config HELLODRV

3.     tristate "Hello"

4.     help

5.     This is a demo driver programming.

6.     endmenu

復制代碼

修改上層目錄文件,將其添加到內核中
在driver/Makefile文件里
obj-$(CONFIG_HELLODRV)+=demo
在文件里driver/Kconfig 里
source drivers/demo/Kconfig
在arch/arm/Kconfig文件里
source "drivers/demo/Kconfig"
4進行系統配置并編譯
make menuconfigmake
5加載內核鏡像文件到板上,使用命令檢查
lsmod dmesg



相關產品 >

  • OKMX6UL-C開發板

    飛凌嵌入式專注imx6系列imx6ul開發板、飛思卡爾imx6ul核心板等ARM嵌入式核心控制系統研發、設計和生產,i.mx6UL系列產品現已暢銷全國,作為恩智浦imx6ul,imx6ul開發板,i.mx6提供者,飛凌嵌入式提供基于iMX6 iMX6UL解決方案定制。

    了解詳情
    OKMX6UL-C開發板
  • OKMX6ULL-C開發板

    40*29mm,雙網雙CAN,8路串口| i.MX6ULL開發板是基于NXP i.MX6ULL設計開發的的一款Linux開發板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應場景豐富。 了解詳情
    OKMX6ULL-C開發板

推薦閱讀 換一批 換一批