歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下驅動開發Tiny6410

Linux下驅動開發Tiny6410

日期:2017/3/1 9:48:25   编辑:Linux編程

內核:linux-2.6.38

編譯器:arm-linux-gcc4.5.1

主機:VMware 7.0 + Fedora9-i386

首先,由於筆者的NAND FLASH是MLC2的,通過u-boot不能啟動,所以只好用友善提供的superboot工具,但能啟動起來就OK了,現在還是菜鳥,等學習Linux夠格了,再來解決這個問題。

Tiny6410下裸機程序玩的已經差不多了,開始學習Linux下驅動程序,對這個一直懷有敬畏之心,內核70%~80%的代碼都是由驅動組成的,而且玩驅動玩到極致的都是大牛,比較崇拜。。。

1. 搭建環境,編譯內核

解壓縮下載的內核linux-2.6.38-2012-8-30.tar.bz2到目錄opt/FriendlyARM/mini6410/linux下,命令:

tar-xjvf linux-2.6.38-2012-8-30.tar.bz2

cp config_linux_mini6410.config

makemenuconfig

2. 構建NFS服務器

前提將根文件系統rootfs_qtopia_qt4.tar.tgz解壓縮到/opt/FriendlyARM/mini6410/linux/目錄下,

gedit/etc/exports

在裡面增加一句:

/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4*(rw,sync,no_root_squash)

意思是導出目錄/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4

rw 可讀寫 sync 將內存內容直接寫入到磁盤上,不等待

no_root_squash 表示允許掛接此目錄的客戶機享有該主機的root 身份

保存後退出,啟動nfs服務:service nfs restart

設置開發板的IP地址為10.0.5.113,設置虛擬機的IP地址為10.0.5.111,具體在虛擬機裡面配置方法可以參考另一篇博文 http://www.linuxidc.com/Linux/2014-02/96800p10.htm 然後使用ping命令測試兩者是否通了,若通,則在開發板命令行下輸入:

mount -tnfs -o nolock 10.0.5.111:/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4 /mnt

nolock表示禁用文件鎖,這個命令將主機的/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4掛載到開發板的/mnt目錄上

NFS功能非常強大,在主機上修改源碼,編譯,然後就可以在開發板上直接使用,而不需要像FTP那樣下載運行,太方便了。。。。。。。~_~

3. 編寫簡單的hello_world測試代碼測試是否可通

注意:確認開發板運行的內核和源碼一致

測試代碼很簡單,是從linux設備驅動上扒下來的,只是在加載和卸載時彈出消息.

代碼如下:

#include <linux/init.h>
#include <linux/module.h>


//#define GPKDAT

MODULE_LICENSE("GPL");
MODULE_AUTHOR("jefby");
static int __init hello_init(void)
{
printk("Tiny 6410 hello module init.\n");
return 0;
}

static void __exit hello_exit(void)
{
printk("Tiny 6410 leds module exit.\n");
}


module_init(hello_init);
module_exit(hello_exit);

其中Makefile如下:

ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /opt/FriendlyARM/mini6410/linux/linux-2.6.38
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.ko *.o *.order *~ *symvers *.mod.c
endif

4.編譯並測試代碼

在目錄(在/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4中)下make然後按第2步所示掛載到開發板上運行,具體如下:

>cd /mnt

>cd hello

>insmod ./hello.ko@加載hello驅動模塊,會彈出消息如下圖1所示

>lsmod @此時可以看到hello模塊已經被加載到內核上了,如下圖1所示

>rmmod@刪除模塊,此時會打印消息如下圖所示

圖1

5.如此基本流程已經通了,以後可以按順序開發字符、塊和網絡驅動了!!!

Copyright © Linux教程網 All Rights Reserved