內核: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.如此基本流程已經通了,以後可以按順序開發字符、塊和網絡驅動了!!!