<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN">
		<id>http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE--MicroWRT_%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91</id>
		<title>第十一课--MicroWRT 驱动开发 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE--MicroWRT_%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91"/>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE--MicroWRT_%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91&amp;action=history"/>
		<updated>2026-04-21T23:56:08Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE--MicroWRT_%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91&amp;diff=7506&amp;oldid=prev</id>
		<title>Shengkai81@gmail.com：Created page with &quot;{| style=&quot;width: 800px;&quot; |- | 本节教程主要介绍如何在MicroWRT上做驱动开发。   ==openWRT中驱动介绍==  在Openwrt 整套系统中，扩张的所有软件...&quot;</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E7%AC%AC%E5%8D%81%E4%B8%80%E8%AF%BE--MicroWRT_%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91&amp;diff=7506&amp;oldid=prev"/>
				<updated>2015-01-27T04:53:32Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{| style=&amp;quot;width: 800px;&amp;quot; |- | 本节教程主要介绍如何在MicroWRT上做驱动开发。   ==openWRT中驱动介绍==  在Openwrt 整套系统中，扩张的所有软件...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| style=&amp;quot;width: 800px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
本节教程主要介绍如何在MicroWRT上做驱动开发。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==openWRT中驱动介绍==&lt;br /&gt;
&lt;br /&gt;
在Openwrt 整套系统中，扩张的所有软件包在package 目录下面，自己添加的应用也可以在这里目录里面增加。&lt;br /&gt;
而openwrt 所扩展的内核驱动在package 里面的kernel 目录下面。自己也可以在这里增加驱动，这里我们就增加一个驱动。&lt;br /&gt;
首先在这个目录下面增加一个example 文件夹，我们写的驱动就在这个文件夹下面。&lt;br /&gt;
首先在这个目录下面增加一个Makefile 文件，这个文件规定了驱动在openwrt 下面的规则。&lt;br /&gt;
Makefile 内容为下面的内容：&lt;br /&gt;
&lt;br /&gt;
 1 #&lt;br /&gt;
 2 # Copyright (C) 2008-2010 OpenWrt.org&lt;br /&gt;
 3 #&lt;br /&gt;
 4 # This is free software, licensed under the GNU General Public License v2.&lt;br /&gt;
 5 # See /LICENSE for more information.&lt;br /&gt;
 6 #&lt;br /&gt;
 7 include $(TOPDIR)/rules.mk&lt;br /&gt;
 8 include $(INCLUDE_DIR)/kernel.mk&lt;br /&gt;
 9 PKG_NAME:=example&lt;br /&gt;
 10 PKG_RELEASE:=1&lt;br /&gt;
 11 include $(INCLUDE_DIR)/package.mk&lt;br /&gt;
 12 define KernelPackage/example&lt;br /&gt;
 SUBMENU:=Other modules&lt;br /&gt;
 TITLE:=Example driver&lt;br /&gt;
 FILES:=$(PKG_BUILD_DIR)/example/example.ko&lt;br /&gt;
 AUTOLOAD:=$(call AutoLoad,30,example,1)&lt;br /&gt;
 KCONFIG:=&lt;br /&gt;
 13 endef&lt;br /&gt;
 14 define KernelPackage/example/description&lt;br /&gt;
 Kernel module to generate button hotplug events&lt;br /&gt;
 15 endef&lt;br /&gt;
 16 EXTRA_KCONFIG:= \&lt;br /&gt;
 CONFIG_EXAMPLE=m&lt;br /&gt;
 17 EXTRA_CFLAGS:= \&lt;br /&gt;
 $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \&lt;br /&gt;
 $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \&lt;br /&gt;
 18 MAKE_OPTS:= \&lt;br /&gt;
 ARCH=&amp;quot;$(LINUX_KARCH)&amp;quot; \&lt;br /&gt;
 CROSS_COMPILE=&amp;quot;$(TARGET_CROSS)&amp;quot; \&lt;br /&gt;
 SUBDIRS=&amp;quot;$(PKG_BUILD_DIR)/example&amp;quot; \&lt;br /&gt;
 EXTRA_CFLAGS=&amp;quot;$(EXTRA_CFLAGS)&amp;quot; \&lt;br /&gt;
 $(EXTRA_KCONFIG)&lt;br /&gt;
 19 define Build/Prepare&lt;br /&gt;
 mkdir -p $(PKG_BUILD_DIR)&lt;br /&gt;
 $(CP) ./src/* $(PKG_BUILD_DIR)/&lt;br /&gt;
 20 endef&lt;br /&gt;
 21 define Build/Compile&lt;br /&gt;
 $(MAKE) -C &amp;quot;$(LINUX_DIR)&amp;quot; \&lt;br /&gt;
 $(MAKE_OPTS) \&lt;br /&gt;
 modules&lt;br /&gt;
 22 endef&lt;br /&gt;
 23 $(eval $(call KernelPackage,example))&lt;br /&gt;
&lt;br /&gt;
这里主要介绍一下这个文件：&lt;br /&gt;
前6 行是注释，这里不用管。&lt;br /&gt;
第7 行和第8 行包括上两级目录配置。&lt;br /&gt;
第9 行为驱动的名字。第10 行为版本号。第11 行为包括上一级目录配置。&lt;br /&gt;
第12-13 行之间的内容为在make menuconfig 的时候在配置界面上面显示的方式。&lt;br /&gt;
SUBMENU 是显示的子选项&lt;br /&gt;
TITLE 是显示的内容&lt;br /&gt;
FILES 是生成的目标。&lt;br /&gt;
AUTOLOAD 是显示的顺序。&lt;br /&gt;
根据这个配置，在配置界面上面的显示为下图所示：&lt;br /&gt;
&lt;br /&gt;
[[File:qudong.jpg|800px|thumb|center|Module Configuration]]&lt;br /&gt;
&lt;br /&gt;
第14-15 行的内容为帮助中显示的内容。&lt;br /&gt;
第19-20 行的内容为编译前的准备工作。&lt;br /&gt;
第21-22 行的内容为编译的选项。&lt;br /&gt;
&lt;br /&gt;
这样一个makefile 就写好了。这里面用到了几个环境变量这里描述一下。&lt;br /&gt;
PKG_BUILD_DIR：编译时的目录，对应于驱动就是build_dir/target-**/linux-**/&lt;br /&gt;
ARCH:编译目标架构&lt;br /&gt;
CROSS_COMPILE：交叉编译器&lt;br /&gt;
&lt;br /&gt;
在目录下面创建一个src 目录，在src 目录下面创建example 目录，这里放驱动的源文件。&lt;br /&gt;
这里首先创建一个helloworld 驱动。&lt;br /&gt;
增加一个kconfig 文件&lt;br /&gt;
&lt;br /&gt;
  #config EXAMPLE&lt;br /&gt;
     tristate “This is a example”&lt;br /&gt;
     default n&lt;br /&gt;
     help&lt;br /&gt;
        This is a example, for debugging kernel model.&lt;br /&gt;
	If unsure, say N.&lt;br /&gt;
&lt;br /&gt;
增加一个Makefile 文件&lt;br /&gt;
 &lt;br /&gt;
 obj-m := example.o&lt;br /&gt;
&lt;br /&gt;
增加一个example.c 文件&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;linux/module.h&amp;gt;&lt;br /&gt;
  #include&amp;lt;linux/kernel.h&amp;gt;&lt;br /&gt;
  static int __init helloworld_init(void)&lt;br /&gt;
  {&lt;br /&gt;
     printk(&amp;quot;helloworld driver init\n&amp;quot;);&lt;br /&gt;
     return 0;&lt;br /&gt;
  }	&lt;br /&gt;
  static void __exit helloworld_exit(void)&lt;br /&gt;
  {&lt;br /&gt;
     printk(&amp;quot;helloworld driver exit\n&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
  module_init(helloworld_init);&lt;br /&gt;
  module_exit(helloworld_exit);&lt;br /&gt;
  MODULE_AUTHOR(&amp;quot;Yan Wu&amp;quot;);&lt;br /&gt;
  MODULE_LICENSE(&amp;quot;GPL&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
这样一个简单的驱动就完成了，下面就可以编译了。&lt;br /&gt;
执行make package/kernel/example/compile V=99 就会编译出驱动。&lt;br /&gt;
在目录build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/example/example/example.ko，&lt;br /&gt;
找到example.ko文件，然后上传到板子上，用命令“insmod example.ko” 就加载上了模块。这样一个简单的驱动就完成了。&lt;br /&gt;
&lt;br /&gt;
本节介绍的只是一个简单的驱动开发例子，但是他包含了驱动开发的基本框架，复杂的驱动开发都是对上面各个步骤的一个扩充。&lt;br /&gt;
&lt;br /&gt;
为了方便玩家在编写Makefile和C文件的时候出错，现在测试文件上传上来，玩家可以直接下现在使用。&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==测试例程==&lt;br /&gt;
Example file '''[[File:example.zip]]'''&lt;/div&gt;</summary>
		<author><name>Shengkai81@gmail.com</name></author>	</entry>

	</feed>