Linux下驱动开发之一-------Tiny 6410
2013-12-02 20:51
344 查看
内核:linux-2.6.38
编译器:arm-linux-gcc4.5.1
主机:VMware 7.0 + Fedora9-i386
首先,由于笔者的NAND FLASH是MLC2的,通过u-boot不能启动,所以只好用友善提供的superboot工具,但能启动起来就OK了,现在还是菜鸟,等学习Linux够格了,再来解决这个问题。
6410下裸机程序玩的已经差不多了,开始学习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,具体在虚拟机里面配置方法可以参考另一篇博文
/article/10492681.html然后使用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设备驱动上扒下来的,只是在加载和卸载时弹出消息.
代码如下:
其中Makefile如下:
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.如此基本流程已经通了,以后可以按顺序开发字符、块和网络驱动了!!!
编译器:arm-linux-gcc4.5.1
主机:VMware 7.0 + Fedora9-i386
首先,由于笔者的NAND FLASH是MLC2的,通过u-boot不能启动,所以只好用友善提供的superboot工具,但能启动起来就OK了,现在还是菜鸟,等学习Linux够格了,再来解决这个问题。
6410下裸机程序玩的已经差不多了,开始学习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,具体在虚拟机里面配置方法可以参考另一篇博文
/article/10492681.html然后使用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.如此基本流程已经通了,以后可以按顺序开发字符、块和网络驱动了!!!
相关文章推荐
- Linux驱动的开发与移值——为Tiny210加入AC97驱动Wm9713
- linux驱动开发“飞凌ok6410开发板之系列led驱动的开发”
- Linux驱动的开发与移值——为Tiny210加入AC97驱动Wm9713
- linux下ok6410驱动开发环境搭建基本教程
- Linux字符设备驱动之Tiny6410 LED驱动分析
- Linux驱动开发-OK6410-LED字符设备驱动实现过程
- 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
- 慢慢学Linux驱动开发,第八篇,LDD3中第三章scull注释详解
- Linux驱动开发环境配置(内核源码树构造) --------转
- Linux驱动开发:USB驱动之usb_skel分析
- Linux驱动开发___helloWorld模块编译
- Linux驱动开发必看:详解神秘内核
- Davinci DM6446开发攻略——LINUX GPIO驱动源码移植
- linux驱动开发的经典书籍
- ok6410-第03篇-Windows和Linux下开发的区别
- linux驱动开发环境的搭建 转一下别的大虾的经验
- linux驱动开发 方法谈
- linux嵌入式开发平台网卡驱动解决办法
- linux 下千兆网卡驱动开发 网络设备驱动的层次结构 (三)
- Linux驱动开发必看