查看“第十二课--MicroWRT 驱动开发”的源代码
←
第十二课--MicroWRT 驱动开发
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | 本节教程主要介绍如何在MicroWRT上做驱动开发。 ==openWRT中驱动介绍== 在Openwrt 整套系统中,扩张的所有软件包在package 目录下面,自己添加的应用也可以在这里目录里面增加。 而openwrt 所扩展的内核驱动在package 里面的kernel 目录下面。自己也可以在这里增加驱动,这里我们就增加一个驱动。 首先在这个目录下面增加一个example 文件夹,我们写的驱动就在这个文件夹下面。 首先在这个目录下面增加一个Makefile 文件,这个文件规定了驱动在openwrt 下面的规则。 Makefile 内容为下面的内容: 1 # 2 # Copyright (C) 2008-2010 OpenWrt.org 3 # 4 # This is free software, licensed under the GNU General Public License v2. 5 # See /LICENSE for more information. 6 # 7 include $(TOPDIR)/rules.mk 8 include $(INCLUDE_DIR)/kernel.mk 9 PKG_NAME:=example 10 PKG_RELEASE:=1 11 include $(INCLUDE_DIR)/package.mk 12 define KernelPackage/example SUBMENU:=Other modules TITLE:=Example driver FILES:=$(PKG_BUILD_DIR)/example/example.ko AUTOLOAD:=$(call AutoLoad,30,example,1) KCONFIG:= 13 endef 14 define KernelPackage/example/description Kernel module to generate button hotplug events 15 endef 16 EXTRA_KCONFIG:= \ CONFIG_EXAMPLE=m 17 EXTRA_CFLAGS:= \ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \ $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \ 18 MAKE_OPTS:= \ ARCH="$(LINUX_KARCH)" \ CROSS_COMPILE="$(TARGET_CROSS)" \ SUBDIRS="$(PKG_BUILD_DIR)/example" \ EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ $(EXTRA_KCONFIG) 19 define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ 20 endef 21 define Build/Compile $(MAKE) -C "$(LINUX_DIR)" \ $(MAKE_OPTS) \ modules 22 endef 23 $(eval $(call KernelPackage,example)) 这里主要介绍一下这个文件: 前6 行是注释,这里不用管。 第7 行和第8 行包括上两级目录配置。 第9 行为驱动的名字。第10 行为版本号。第11 行为包括上一级目录配置。 第12-13 行之间的内容为在make menuconfig 的时候在配置界面上面显示的方式。 SUBMENU 是显示的子选项 TITLE 是显示的内容 FILES 是生成的目标。 AUTOLOAD 是显示的顺序。 根据这个配置,在配置界面上面的显示为下图所示: [[File:qudong.jpg|800px|thumb|center|Module Configuration]] 第14-15 行的内容为帮助中显示的内容。 第19-20 行的内容为编译前的准备工作。 第21-22 行的内容为编译的选项。 这样一个makefile 就写好了。这里面用到了几个环境变量这里描述一下。 PKG_BUILD_DIR:编译时的目录,对应于驱动就是build_dir/target-**/linux-**/ ARCH:编译目标架构 CROSS_COMPILE:交叉编译器 在目录下面创建一个src 目录,在src 目录下面创建example 目录,这里放驱动的源文件。 这里首先创建一个helloworld 驱动。 增加一个kconfig 文件 #config EXAMPLE tristate “This is a example” default n help This is a example, for debugging kernel model. If unsure, say N. 增加一个Makefile 文件 obj-m := example.o 增加一个example.c 文件 #include <linux/module.h> #include<linux/kernel.h> static int __init helloworld_init(void) { printk("helloworld driver init\n"); return 0; } static void __exit helloworld_exit(void) { printk("helloworld driver exit\n"); } module_init(helloworld_init); module_exit(helloworld_exit); MODULE_AUTHOR("Yan Wu"); MODULE_LICENSE("GPL"); 这样一个简单的驱动就完成了,下面就可以编译了。 执行make package/kernel/example/compile V=99 就会编译出驱动。 在目录build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/example/example/example.ko, 找到example.ko文件,然后上传到板子上,用命令“insmod example.ko” 就加载上了模块。这样一个简单的驱动就完成了。 本节介绍的只是一个简单的驱动开发例子,但是他包含了驱动开发的基本框架,复杂的驱动开发都是对上面各个步骤的一个扩充。 为了方便玩家在编写Makefile和C文件的时候出错,现在测试文件上传上来,玩家可以直接下现在使用。 |} ==测试例程== Example file '''[[File:example.zip]]'''
返回至
第十二课--MicroWRT 驱动开发
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息