RTL8188CUS驱动程序编译步骤

RTL8188CUS usb wifi驱动移植到(arm-linux) 一. 编译环境准备 1. 安装ubuntu 我尝试过编译MT7603的driver, 发现在ubuntu kernel 2.6.32上编译会出错, 所以安装的ubuntu kernel版本必须大于2.6.32, 建议是3.0 以上的。 我选择安装ubuntu 12.04(kernel ver: 3.2.0) 安装过程可百度一下,这里略过... 2. 安装编译依赖Lib(编译wpa_supplicant时要用到) 用apt-get安装以下lib : apt-get install libnl-. 阅读详情

说明

出于学习的目的,需要在hi3518ev200平台上接入RTL8188无线网卡传输数据。本文记录自己对编译操作的步骤,以期望帮助到其它的初学者。

RTL8188介绍

嵌入式应用中可供选择的WIFI网络芯片非常多,RTL系列只是众水中的一支,其它的例如XR819、AP6256.有些还将Wifi和蓝牙做在了一起。RTL系列中常见的型号有RTL8188、RTL8723、RTL8189、RTL8192等等。其中,RTL8188是150Mbps的USB2.0接口芯片,而RTL8189是150Mbps的SDIO接口芯片,以上是初学者应该了解的。
我使用的RTL8188又分成很多版本,例如RTL8188ETV/EUS/CUS等等,淘宝上占得比较多的是ETV和EUS,商用网卡成品中,EUS/CUS版本占得较多,这些具体的细节和背后的故事网络上也多有说明。粗略了解可阅读【参考】部分的第1项。
本文使用的芯片具体型号是RTL8188CUS,购买链接可作为学习之用,并非广告,淘宝上也有很多同型号产品。
——注意!经验证,EUS版本的驱动不能支持CUS网卡,如果使用EUS版本驱动CUS硬件,将无法显示wlan0。

驱动程序编译

0.准备操作

在开始之前,你需要做出以下准备:
(1)已经建立了hi3518的交叉编译环境。这一步骤可以参考我做的记录博文,详见【参考】部分第2项。
(2)已经准备好了一份linux内核源码,或者linux下编译需要使用的资源文件。linux源码的获取可以在其官方网站上得到,下载地址详见【参考】部分的第3项。
(3)已经准备好了官方的RTL8188CUS驱动程序源码,我们需要交叉编译得到在嵌入式Linux上运行的ko模块文件,驱动程序源码可从本文末的【原始驱动程序下载】部分得到。 RTL8188CUS和RTL8192CUS的驱动是通用的,所以后文中不必在意这两个名字的混用,官方给的驱动原本也是针对RTL8192CUS的,但在我的开发板上也能正常驱动RTL8188CUS。

1.Makefile文件的修改

在编译之前请确保已经安装make工具,众所周知对Makefile文件的配置是编译顺利的前提。
打开解压后文件夹根目录下的顶层Makefile文件,首先配置平台,因为我们要在hi3518的平台上运行驱动,所以需要新增一个平台配置做适配。将新增的配置项 CONFIG_PLATFORM_ARM_HI3518E 设置为 y,而原程序初始的 CONFIG_PLATFORM_I386_PC设置为 n。
增加平台配置项
而后查找上一项 CONFIG_PLATFORM_MIPS_JZ4760 的配置实例,在其后增加一份新的配置实例如下:
新增配置实例

ifeq ($(CONFIG_PLATFORM_ARM_HI3518), y)
#EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #选择小端模式
ARCH := arm
CROSS_COMPILE := arm-hisiv300-linux-
KVER := 3.4.35
KSRC := /home/wind/Downloads/linux-3.4.y
MODULE_NAME := RTL8188CUS
endif

其中,
ARCH为架构选择;
CROSS_COMPILE为交叉编译器前缀;
KSRC目录为目标linux内核的地址;
KVER是目标内核的版本;
MODULE_NAME是结果文件名,这些需要根据实际需要更改。
——注意! 根据文末【参考】部分第4项中所写的内容,为防万一,Makefile文件起始部分的 CONFIG_POWER_SAVING 项设置为 n。
关闭节能选项

2.源码的修改(重要)

网上查找的很多移植失败的帖子都是死在了这里,所以编译之前,需要耐心将下面文件做出修改。
(1)——将下列文件头的 #include <linux/smp_lock.h> 语句改为 #include <linux/hardirq.h> 。这是因为适配的Linux系统内核不同导致的更改需要,涉及到此项修改的文件有:

./core/rtw_io.c
./core/rtw_cmd.c
./core/rtw_security.c
./core/rtw_mlme.c
./hal/rtl8192c/usb/rtl8192c_cmd.c
./include/rtw_io.h
./os_dep/linux/mlme_linux.c

此处修改方法出处详见【参考】部分第5项。
(2)——在下列文件头增加 #include <linux/interrupt.h> 语句。这是因为 tasklet_struct 结构定义在此文件中,涉及到此项修改的文件有:

./include/rtw_xmit.h
./include/rtw_recv.h

此处修改方法出处详见【参考】部分第6项。
(3)——如果你没有在Makefile设置EXTRA_CFLAGS,那么可以打开 ./include/rtw_byteorder.h 文件,在开头处新增一个 CONFIG_LITTLE_ENDIAN宏定义,在该文件中需要指定使用大端模式还是小端模式,在hi3518中使用的是小端模式。
小端模式定义

3.开始编译

使用Terminal进入驱动程序目录,输入 make编译,稍等几十秒,编译完成后将在当前目录下生成ko模块文件。
使用file命令查看目标文件是否适配平台。
验证编译

*注意事项

如果需要在Windows和虚拟机之间传输文件(夹),可以使用SCP工具,可以参考我做的记录博文,详见【参考】部分第7项。

编译过程输出

wind@WKC:~/Downloads/rtl8192CU_linux_v2.0.1502.20110402$ make
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- -C /home/wind/Downloads/linux-3.4.y M=/home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402  modules
make[1]: Entering directory '/home/wind/Downloads/linux-3.4.y'
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_cmd.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_security.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_debug.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_io.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_ioctl_query.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_ioctl_set.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/ieee80211.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_mlme.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_mlme_ext.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_wlan_util.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_pwrctrl.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_rf.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_recv.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_sta_mgt.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/rtw_xmit.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/efuse/rtl8712_efuse.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/core/led/rtl8192c_led.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/rtl8192c_phycfg.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/rtl8192c_rf6052.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/rtl8192c_dm.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/rtl8192c_rxdesc.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/usb/usb_ops_linux.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/usb/usb_halinit.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/usb/Hal8192CUHWImg.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/usb/rtl8192cu_xmit.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/usb/rtl8192cu_recv.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/hal/rtl8192c/usb/rtl8192c_cmd.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/osdep_service.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/os_intfs.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.o
/home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.c:204:1: warning: data definition has no type or storage class [enabled by default]
 MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
 ^
/home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.c:204:1: warning: type defaults to ‘int’ in declaration of ‘MODULE_DEVICE_TABLE’ [-Wimplicit-int]
/home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.c:204:1: warning: parameter names (without types) in function declaration [enabled by default]
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/ioctl_linux.o
/home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/ioctl_linux.c: In function ‘rtw_wx_get_scan’:
/home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/ioctl_linux.c:1931:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
 }
 ^
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/xmit_linux.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/mlme_linux.o
  CC [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/recv_linux.o
  LD [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/8192cu.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/8192cu.mod.o
  LD [M]  /home/wind/Downloads/rtl8192CU_linux_v2.0.1502.20110402/8192cu.ko
make[1]: Leaving directory '/home/wind/Downloads/linux-3.4.y'
wind@WKC:~/Downloads/rtl8192CU_linux_v2.0.1502.20110402$ 

原始驱动程序下载

百度网盘链接:https://pan.baidu.com/s/1oZrFqBGukPK5PlJVJ7UTsA
提取码:jje1

参考

1.浅析几款USB接口RTL8188/8723/8192EU/8821CU小尺寸经典WiFi模块选型参考
2.【燕卫博】从零开始进行Hi3518_SDK安装、环境搭建和Linux内核编译,并生成可供烧写的uImage
3.Linux内核源码下载地址
4.关于在2440上移植rtl8192和rtl8188cus linux驱动遇到的问题及解决方法!!!
5.Linux下编译驱动代码时smp_lock.h文件找不到的解决方案
6.Linux tasklet 分析笔记(转载)
7.【燕卫博】使用SCP工具和SSH实现主机与Hyper-V虚拟机之间的文件传输
————2019-11-22 @燕卫博————

正点原子嵌入式linux驱动开发——Linux WIFI驱动 正点原子linux驱动开发的学习笔记,这一篇是WIFI驱动 阅读详情

相关推荐

WIFI驱动移植实验:将 rtl8188EUS驱动添加到 Linux 内核中

WIFI驱动移植实验:将 rtl8188EUS驱动添加到 Linux 内核中

wojiaxiaohuang2014的博客 2450

Linux平台RTL8188CUS驱动移植及测试

Linux平台RTL8188CUS驱动移植及测试 一 内核配置以及驱动编译: 1.配置内核wireless选项 进入内核目录,make menuconfig , [*] Networking support —> [*] Wireless —> — Wireless -*- Wireless extensi

小野猫 4981

树莓派做AP发射wifi(RTL8188CUS芯片)

最近在做一个项目,需要用树莓派作为AP发射wifi,对比cubieboard,树莓派的配置容易得多,而且支持也更多。 较为官方的介绍配置为无线热点的文章莫过于这一篇《RPI-Wireless-Hotspot》 按照这个设置,我的其实不成功,于是找到这篇文章《Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB E

Paul_C_V的专栏 6211

瑞昱RTL8188cus 无线网卡驱动移植

2012-12-10 15:58:23|  分类: arm9 linux|字号 订阅 主机 ubuntu10.10。编译工具:arm-linux-gcc 4.3.3嵌入式平台s3c2440 内核linux。2.6.37.4。         刚拿到一个水星无线网卡。我的第一反应是拆开看看。瑞昱rtl8188cus的芯片、我看下网卡自带的光盘资料有l

kerson的专栏 1万+

树莓派使用 RTL8188CUS芯片 开AP模式

Linux下开AP需要用到的软件 hostapd,和用于DNS服务器的 dnsmasq,DNS服务器也可以使用udhcpd。 一开始直接通过apt-get 安装的hostapd 在配置好后提示 打不开 wlan0 或不支持设备。 经过一番实验后发现只有这个能正常运行,编译安装需要libnl 和openssl库。 其中libnl 需要下载编译 可以到主页下载:http://www.infrad

Sky的博客 2562

ARM加载Realtek-8188CUS USB无线网卡(一)_驱动编译与加载

ARM开发板加载Realtek-8188CUS USB无线网卡(一) a、平台选择:CONFIG_PLATFORM_I386_PC = n CONFIG_PLATFORM_ARM_S3C2K4 = y b、修改使用的编译工具、对应的内核目录:

u013686019的专栏 6590

RTL8192CUS驱动程序编译

说明 RTL8192CUS的驱动程序和RTL8188CUS是通用的!! 曾使用RTL8192CUS的驱动程序成功驱动RTL8188CUS,所以将过程记录在了RTL8188CUS的博文中。 相关博文请参考: RTL8188CUS驱动程序编译步骤 原始驱动程序下载 百度网盘链接:https://pan.baidu.com/s/1oZrFqBGukPK5PlJVJ7UTsA 提取码:jje1 后记 之...

Turix附属空间[已停用] 440

RTL8821CU_WiFi_linux_v5.8.1.5驱动

RTL8821CU_WiFi_linux_v5.8.1.5驱动

记在Ubuntu上装rtl8188cus无线网卡驱动

参照:http://my.oschina.net/u/1187531/blog/484703 安装成功,特此记录 光盘中自带的linux驱动是基于内核2.6的,ubuntu14的内核是3.13,根据光盘中默认的驱动,得知nw336 model是RTL8188CUS,官方下载地址:http://www.realtek.com.tw/downloads/downloadsView.a

daregone_3824的专栏 2897

上网协议 Realtek RTL8188CU Wireless LAN 802.11n

Realtek RTL8188CU Wireless LAN 802.11n USB 2.0 Network Adapter_1006.2.810.2010_6.1_x86.zip

RTL8188CU 原理图

RTL8188CU 原理图

fw150us linux驱动程序,fast FW150US USB无线网卡Linux驱动安装

由于笔记本没有自带无线网卡,所以买了一块fast FW150US USB无线网卡。该网卡只自带了window下的驱动,经过一番折腾,终于安装好了Linux下的驱动,在此记录以便以后遇到同样问题能够快速解决。首先查看网卡型号,如下:root@yongmi-hn:~# lsusbBus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub...

weixin_36119965的博客 656

【Ultrascale+ MPSOC学习记录】10、PS端以太网使用lwip

还是参考ALINX教程,学习PS端以太网如何使用,从教程中可以看到,开发板使用了一个xilinx默认不支持的phy JL2121,所以需要修改lwip的库源码。

ryo891012的博客 879

rtl驱动 ubuntu 禁用_转载:Ubuntu 14.04 安装 rtl8188cus 驱动

光盘中自带的linux驱动是基于内核2.6的,ubuntu14的内核是3.13,根据光盘中默认的驱动,得知nw336 model是RTL8188CUS,官方下载地址:http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=3&PNid=21&PFid=48&Level=5&Conn=4&Do...

weixin_39529463的博客 256

接地设计的本质:按电流类型选择物理连接方式

接地是电子系统中实现电位参考、噪声抑制与安全保护的基础技术,其核心原理在于为不同性质的电流提供可控的低阻抗返回路径。从直流到GHz频段,电流的频率特性、能量等级和持续时间决定了接地的物理实现方式——工频安全电流依赖低电阻导体,高频噪声需低感平面或磁珠衰减,ESD脉冲要求受控泄放电阻,浪涌能量则必须通过独立短路径导入大地。这种‘目的决定方式’的设计逻辑,直接关联EMC合规性、信号完整性与系统可靠性。本文聚焦PCB级与设备级工程实践,详解安全地、功能地、浪涌地与静电地的判据差异及六种典型连接策略,帮助硬件工程师

weixin_36369848的博客 258

STM32CubeMX最新版下载安装全攻略(附官网访问问题解决方案)

本文提供了STM32CubeMX最新版的详细下载与安装指南,并针对国内开发者常见的官网访问缓慢、注册验证邮件延迟等问题,给出了实用的解决方案和备选策略。通过清晰的步骤解析,帮助用户快速部署这一强大的STM32图形化配置工具,从而高效启动嵌入式开发项目。

weixin_28256233的博客 192

RTL8188EUS驱动程序编译步骤

说明 出于学习的目的,需要在hi3518ev200平台上接入RTL8188无线网卡传输数据。本文记录自己对编译操作的步骤,以期望帮助到其它的初学者。 RTL8188介绍 嵌入式应用中可供选择的WIFI网络线片非常多,RTL系列只是众水中的一支,其它的例如XR819、AP6256.有些还将Wifi和蓝牙做在了一起。RTL系列中常见的型号有RTL8188、RTL8723、RTL8189、RTL8192...

Turix附属空间[已停用] 5343

《雷达入门课 》系列文章(5)线性调频连续波雷达基本原理(第1讲)

S=B/Tc,是调频斜率。这里的混频公式推导过程比较简单,具体的混频过程如果感兴趣可以看下面粗略的推导,混频的本质就是频谱搬移,分为上变频和下变频,一般我们用下变频,即差频信号,因此需要一个低通滤波器即可滤出我们所需要的信号。答案就是因为中频信号能够映射出目标的距离信息,换句话说就是目标的距离不一样,返回的时间τ也就不一样,因此中频信号的频率大小也就不一样,可以说距离和中频信号是成映射关系的。中频只是表示信号频段的程度词,不是表示信号的状态词,意思就是说中频是指信号的频率不是很高,正好处于中间的地位。

【调皮连续波】雷达技术领域知识博主 6020

Linux使用wifi(RTL8188EUS)

Linux移植RTL8188EUS驱动

L1643319918的博客 6989

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 383

SXU-软件项目管理-朱少民-第九章 项目监控与控制 第十章 项目收尾 附相关习题

软件项目管理-朱少民-第九章 项目监控与控制 附相关习题

weixin_63597914的博客 1488

将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)

本文是基于在某东购买的usb无线网卡(RTL8188CUS芯片)来制作无线热点。本来想制作一个一键脚本,不过先把实现的过程记录下来。 参考文章 Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB EW-7811Un (RTL8188CUS chipset) Why won’t dnsmasq’s DHCP s

talkxin的博客 8803

如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)

pandas和numpy这两个库是数据科学和数据分析中经常使用的工具包,原生的Dify无法直接使用这两个库,需要手动安装后才可以使用。本文将介绍如何在Dify中安装pandas和numpy,并在代码执行节点中运行使用pandas和numpy。Dify的代码执行节点中的python逻辑,实际是运行在Dify沙盒中的,因此我们在沙盒中安装pandas和numpy就可以了。如果您有在Dify中添加pandas、numpy的应用需求,欢迎关注作者进行交流。

litlit023的专栏 5632

RTL8192EU驱动程序编译步骤

说明 出于学习的目的,需要在hi3518ev200平台上接入RTL8192无线网卡传输数据。本文记录自己对编译操作的步骤,以期望帮助到其它的初学者。 RTL8192介绍 嵌入式应用中可供选择的WIFI网络线片非常多,RTL系列只是众水中的一支,其它的例如XR819、AP6256.有些还将Wifi和蓝牙做在了一起。RTL系列中常见的型号有RTL8188、RTL8723、RTL8189、RTL8192...

Turix附属空间[已停用] 3501

【第24例】华为 IPD 体系 | RMT 需求管理团队

RMT需求管理团队

产品线负责人 1762

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

EDUP EP-N8508(RTL8188CUS) Linux驱动安装

http://quartergeek.com/?p=178 本人一直使用的是无线路由上网,怎奈笔记本上的Intel Pro/Wireless 3945ABG十分的不耐用,信号在Windows下勉勉强强,但在Linux下完全扫描不出信号……试了N方法,都没办法,只好再买一个网卡啦……于是就入手号称世界最小的USB无线网卡EDUP EP-N8508,在Windows下表现优秀(好歹也是802

choclover的专栏 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: RTL8188EUS驱动程序编译步骤
下一篇: RTL8192EU驱动程序编译步骤
燕卫博
博客等级 码龄7年 312粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值