summaryrefslogtreecommitdiffstats
path: root/mwifiex_8997/README_OPENWRT
blob: 90a67226dd1b9d9828892214f3b038f64a34dbdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
=================================================================================
        U S E R  M A N U A L  F O R  OpenWrt

This section describes detailed steps to add Marvell Wireless NIC (sdio/usb/pcie)
driver to OpenWrt build system.

Add marvell driver (sdio/usb/pcie) to OpenWrt build system.

1. Go to the openwrt source code folder
2. make menuconfig
	choose x86 platform
	other general openwrt configurations please refer to:
	https://wiki.openwrt.org/doc/howto/build
3. After make menuconfig
	make sure that following configurations are set in .config
	CONFIG_PACKAGE_hostapd=y
	CONFIG_PACKAGE_hostapd-common=y
	CONFIG_PACKAGE_kmod-cfg80211=y
4. Go to the openwrt source code folder and Compile openwrt BSP
	make V=s [-j[number]]
5. After the first time compiling, openwrt/dl folder will be created
   , related packages will be downloaded during compiling, so you need
   network access as long as you need to compile openwrt BSP.
6. Go to the openwrt source code folder: openwrt/dl/
7. Find compat-wireless-xxxx-xx-xx.tar.bz2, and uncompress the package
8. Go to compat-wireless-xxxx-xx-xx/drivers/net/wireless/marvell/
9. Modify compat-wireless-xxxx-xx-xx/drivers/net/wireless/marvell/Kconfig

	source "drivers/net/wireless/marvell/libertas/Kconfig"
	source "drivers/net/wireless/marvell/libertas_tf/Kconfig"
	source "drivers/net/wireless/marvell/mwifiex/Kconfig"
	+source "drivers/net/wireless/marvell/mrvl-pcie/Kconfig"
	+source "drivers/net/wireless/marvell/mrvl-sd8xxx/Kconfig"
	+source "drivers/net/wireless/marvell/mrvl-usb/Kconfig"

10. Modify compat-wireless-xxxx-xx-xx/drivers/net/wireless/marvell/Makefile

	obj-$(CPTCFG_LIBERTAS_THINFIRM)	+= libertas_tf/
	obj-$(CPTCFG_MWIFIEX)	+= mwifiex/
	+obj-$(CPTCFG_MRVL_PCIE)  += mrvl-pcie/
	+obj-$(CPTCFG_MRVL_SD8XXX) += mrvl-sd8xxx/
	+obj-$(CPTCFG_MRVL_USB) += mrvl-usb/

11. Go to compat-wireless-xxxx-xx-xx/drivers/net/wireless/marvell/
12. mkdir (mrvl-pcie/mrvl-sd8xxx/mrvl-usb)
13. copy (pcie/sdio/usb)/wlan_src/* to (mrvl-pcie/mrvl-sd8xxx/mrvl-usb)
14. Go to mrvl-pcie/mrvl-sd8xxx/mrvl-usb
15. Add new Kconfig:
	mrvl-pcie/Kconfig

	+config MRVL_PCIE
	+	tristate "Marvell Wireless Driver for PCIE 8997"
	+	depends on m
	+	depends on PCI
	+	depends on CFG80211
	+	depends on WIRELESS_EXT
	+	---help---
	+	  This adds support for wireless adapters based on Marvell
	+	  pcie 8997 chipsets with PCIe interface.
	+
	+	  If you choose to build it as a module, it will be called
	+	  pcie8xxx.

	mrvl-sd8xxx/Kconfig

	+config MRVL_SD8XXX
	+	tristate "Marvell sdio 802.11n/802.11ac Wireless cards"
	+	depends on m
	+	depends on MMC
	+	depends on CFG80211
	+	depends on WIRELESS_EXT
	+	---help---
	+	  A driver for Marvell sdio 802.11n/802.11ac Wireless cards.

	mrvl-usb/Kconfig

	+config MRVL_USB
	+	tristate "Marvell sdio 802.11n/802.11ac Wireless cards"
	+	depends on m
	+	depends on USB
	+	depends on CFG80211
	+	depends on WIRELESS_EXT
	+	---help---
	+	A driver for Marvell sdio 802.11n/802.11ac Wireless cards.

16. Open moal_main.h under (mrvl-pcie/mrvl-sd8xxx/mrvl-usb)/mlinux/

	find #define COMPAT_VERSION_CODE KERNEL_VERSION_CODE(x, x, x)
	modify (x, x, x) to the kernel version code of backports/compat-wireless package

	backported kernel version code could be found in
	compat-wireless-xxxx-xx-xx/version as following

	'BACKPORTED_KERNEL_VERSION="v4.4-rc5-1913-gc8fdf68"'
	v4.4 means KERNEL_VERSION(4, 4, 0)

17. Modify (mrvl-pcie/mrvl-sd8xxx/mrvl-usb)/Makefile

	# OpenWrt support
	-CONFIG_OPENWRT_SUPPORT=n
	+CONFIG_OPENWRT_SUPPORT=y

	...

	#############################################################################
	# Select Platform Tools
	#############################################################################

	MODEXT = ko
	-ccflags-y += -I$(M)/mlan
	+ccflags-y += -I$(M)/drivers/net/wireless/marvell/(mrvl-pcie/mrvl-sd8xxx/mrvl-usb)/mlan
	ccflags-y += -DLINUX


	ifeq ($(CONFIG_EMBEDDED_SUPP_AUTH), y)
	-ccflags-y += -I$(M)/mlan/esa
	-ccflags-y += -I$(M)/mlan/esa/common
	+ccflags-y += -I$(M)/drivers/net/wireless/marvell/(mrvl-pcie/mrvl-sd8xxx/mrvl-usb)/mlan/esa
	+ccflags-y += -I$(M)/drivers/net/wireless/marvell/(mrvl-pcie/mrvl-sd8xxx/mrvl-usb)/mlan/esa/common
	endif

18. compress compat-wireless-xxxx-xx-xx to its original .tar.bz2 format
19. Go to the openwrt source code folder: openwrt/package/kernel/mac80211/
20. Modify openwrt/package/kernel/mac80211/Makefile.

	PKG_DRIVERS = \
		adm8211 \
		ath ath5k ath9k ath9k-common ath9k-htc ath10k \
		b43 b43legacy \
		carl9170 \
		hermes hermes-pci hermes-pcmcia hermes-plx\
		iwl-legacy iwl3945 iwl4965 iwlwifi \
		lib80211 \
		libipw ipw2100 ipw2200 \
		libertas-sdio libertas-usb libertas-spi \
		mac80211-hwsim \
		mt7601u \
		mwl8k mwifiex-pcie \
		+mrvl-pcie \
		+mrvl-sd8xxx \
		+mrvl-usb \
		p54-common p54-pci p54-spi p54-usb \
		rt2x00-lib rt2x00-pci rt2x00-usb \
		rt2400-pci rt2500-pci rt2500-usb \

	...

	+define KernelPackage/mrvl-pcie
	+  $(call KernelPackage/mac80211/Default)
	+  TITLE:=Marvell pcie wireless driver
	+  URL:=http://wireless.kernel.org/en/users/Drivers/mwifiex
	+  DEPENDS+= @PCI_SUPPORT +kmod-mac80211 +@DRIVER_11N_SUPPORT
	+  FILES:= \
	+	$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-pcie/mlan.ko \
	+	$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-pcie/pcie8xxx.ko
	+  AUTOLOAD:=$(call AutoProbe,mrvl-pcie)
	+endef

	+define KernelPackage/mrvl-pcie/description
	+ Kernel modules for Marvell pcie 802.11n/802.11ac PCIe Wireless cards
	+endef

	+define KernelPackage/mrvl-sd8xxx
	+  $(call KernelPackage/mac80211/Default)
	+  DEPENDS+= +kmod-cfg80211 +kmod-lib80211 +kmod-mmc +@DRIVER_WEXT_SUPPORT
	+  TITLE:=Marvell sdio Wireless Driver
	+  FILES:= \
	+	$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-sd8xxx/mlan.ko \
	+	$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-sd8xxx/sd8xxx.ko
	+  AUTOLOAD:=$(call AutoProbe, mrvl-sd8xxx)
	+endef

	+define KernelPackage/mrvl-sd8xxx/description
	+ Kernel modules for Marvell sdio 802.11n/802.11ac Wireless cards
	+endef

	+define KernelPackage/mrvl-usb
	+  $(call KernelPackage/mac80211/Default)
	+  DEPENDS+= @USB_SUPPORT +kmod-cfg80211 +kmod-usb-core +kmod-lib80211 +@DRIVER_WEXT_SUPPORT
	+  TITLE:=Marvell usb Wireless Driver
	+  FILES:= \
	+	$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-usb/mlan.ko \
	+	$(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-usb/usb8xxx.ko
	+  AUTOLOAD:=$(call AutoProbe, mrvl-usb)
	+endef

	+define KernelPackage/mrvl-usb/description
	+ Kernel modules for Marvell usb 802.11n/802.11ac Wireless cards
	+endef

	...

	config-$(call config_package,mwl8k) += MWL8K
	config-$(call config_package,mwifiex-pcie) += MWIFIEX MWIFIEX_PCIE
	+config-$(call config_package,mrvl-pcie) += MRVL_PCIE
	+config-$(call config_package,mrvl-sd8xxx) += MRVL_SD8XXX
	+config-$(call config_package,mrvl-usb) += MRVL_USB
	config-$(call config_package,rtl8180) += RTL8180
	config-$(call config_package,rtl8187) += RTL8187

	...

	$(eval $(call KernelPackage,mwl8k))
	$(eval $(call KernelPackage,mwifiex-pcie))
	+$(eval $(call KernelPackage,mrvl-pcie))
	+$(eval $(call KernelPackage,mrvl-sd8xxx))
	+$(eval $(call KernelPackage,mrvl-usb))
	$(eval $(call KernelPackage,p54-common))

OpenWrt configuration
21. Go to OpenWrt srouce code folder
22. Make menuconfig

   select one of the newly added marvell driver
	│-> Kernel modules
	│	-> Wireless Drivers
	|		->mrvl-pcie
	|		->mrvl-sd8xxx
	|		->mrvl-usb

23. Other general configurations, please refer to the https://wiki.openwrt.org/doc/howto/build
24. after menucofig make soure that following configurations are seletect

	CONFIG_PACKAGE_hostapd=y
	CONFIG_PACKAGE_hostapd-common=y
	CONFIG_PACKAGE_kmod-cfg80211=y

	Go to openwrt folder and re-build openwrt BSP
	make V=s [-j[number]]

	After openwrt BSP is successfully build, kernel modules could be found
	both in the build folder and the running OS once openwrt is boot up.
	kernel modules will be written to u-disk while openwrt img is burned to u-disk.

	kernel modules in openwrt build dir:
	openwrt/build_dir/target-x86_64_uClibc-0.9.33.2/linux-x86_64/compat-wireless-2016-01-10/
	ipkg-x86_64/kmod-mrvl-(usb/sd8xxx/pcie)/lib/modules/3.18.45/

	kernel modules in openwrt running OS:
	/lib/modules/xx.xx.xx/

25. To support SDIO card in OpenWrt x86 platforma
	Add following kernel configurations for OpenWrt
	Go to OpenWrt source code foler

	make kernel_menuconfig

	Device Drivers---->
		--- MMC/SD/SDIO card support
                  [ ]   MMC debugging
                  [ ]   MMC host clock gating
                  *** MMC/SD/SDIO Card Drivers ***
                  < >   MMC block device driver
                  < >   SDIO UART/GPS class support
                  < >   MMC host test driver
                  *** MMC/SD/SDIO Host Controller Drivers ***
                  <*>   Secure Digital Host Controller Interface support
                  <*>   SDHCI support on PCI bus
                  [ ]     Ricoh MMC Controller Disabler
                  < >   SDHCI platform and OF driver helper
                  < >   Winbond W83L51xD SD/MMC Card Interface support
                  < >   TI Flash Media MMC/SD Interface support
                  < >   ENE CB710 MMC/SD Interface support
                  < >   VIA SD/MMC Card Reader Driver
                  < >   Renesas USDHI6ROL0 SD/SDIO Host Controller support

	Compile OpenWrt using Make V=s, then write openwrt img to u-disk and boot up

26. Bring up marvell wireless NIC on OpenWrt system

	copy pcie/sdio/usb firmware to /lib/firmware/mrvl folder
	On OpenWrt running OS
	scp usrname@<target_pc ip address>:/path/firmware.bin /lib/firmware/mrvl

	Another way is to add firmware binary to OpenWrt source code

27. load marvell pcie/sdio/usb driver modules

    End with Marvell Wirelss NIC card bring up on OpenWrt

=======================================================================================================
If firmware is copied to OpenWrt via scp, following steps could be ignored.
28. Add firmware binary in OpenWrt
	Copy pcie/usb/sdio firmware to folder:
	openwrt/build_dir/target-x86_64_uClibc-0.9.33.2/linux-firmware-52442afee9907bc32a058f22bb3295d040677c26/mrvl/
29. Go to penwrt/package/firmware/linux-firmware
	Modify marvell.mk as following

	+Package/mrvl-pcie-firmware = $(call Package/firmware-default,Marvell PCIE8997 firmware)
	+define Package/mrvl-pcie-firmware/install
	+	$(INSTALL_DIR) $(1)/lib/firmware/mrvl
	+	$(INSTALL_DATA) \
	+		$(PKG_BUILD_DIR)/mrvl/pcieusb8997_combo_v4.bin \
	+		$(1)/lib/firmware/mrvl/
	+endef
	+$(eval $(call BuildPackage,mrvl-pcie-firmware))

	+Package/mrvl-sd8xxx-firmware = $(call Package/firmware-default,Marvell SDIO8997 firmware)
	+define Package/mrvl-sd8xxx-firmware/install
	+	$(INSTALL_DIR) $(1)/lib/firmware/mrvl
	+	$(INSTALL_DATA) \
	+		$(PKG_BUILD_DIR)/mrvl/sdsd8997_combo_v4.bin \
	+		$(1)/lib/firmware/mrvl/
	+endef
	+$(eval $(call BuildPackage,mrvl-sd8xxx-firmware))

	+Package/mrvl-usb-firmware = $(call Package/firmware-default,Marvell SDIO8997 firmware)
	+define Package/mrvl-usb-firmware/install
	+	$(INSTALL_DIR) $(1)/lib/firmware/mrvl
	+	$(INSTALL_DATA) \
	+		$(PKG_BUILD_DIR)/mrvl/usbusb8997_combo_v4.bin \
	+		$(1)/lib/firmware/mrvl/
	+endef
	+$(eval $(call BuildPackage,mrvl-usb-firmware))

30. re-modify openwrt/package/kernel/mac80211/Makefile

	for PCIE
	+  DEPENDS+= @PCI_SUPPORT +kmod-mac80211 +@DRIVER_11N_SUPPORT +mrvl-pcie-firmware
	for SDIO
	+  DEPENDS+= +kmod-cfg80211 +kmod-lib80211 +kmod-mmc +@DRIVER_WEXT_SUPPORT +mrvl-sd8xxx-firmware
	for USB
	+  DEPENDS+= @USB_SUPPORT +kmod-cfg80211 +kmod-usb-core +kmod-lib80211 +@DRIVER_WEXT_SUPPORT +mrvl-usb-firmware
31. Go to step 25.
=======================================================================================================
To support SDIO, USB and PCIE in one OpenWrt BSP
if no need to support multi bus types in one BSP, ignore the following steps
32. Re-modify Modify openwrt/package/kernel/mac80211/Makefile.
	for PCIE
        +       $(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-pcie/mlan-pcie.ko \
	for SDIO
	+       $(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-sd8xxx/mlan-sdio.ko \
	for USB
	+       $(PKG_BUILD_DIR)/drivers/net/wireless/marvell/mrvl-usb/mlan-usb.ko \
33. Re-modify (mrvl-pcie/mrvl-sd8xxx/mrvl-usb)/Makefile
	for PCIE

	-obj-m := mlan.o
	-mlan-objs := $(MLANOBJS)
	+obj-m := mlan-pcie.o
	+mlan-pcie-objs := $(MLANOBJS)

	for SDIO

	-obj-m := mlan.o
	-mlan-objs := $(MLANOBJS)
	+obj-m := mlan-sdio.o
	+mlan-sdio-objs := $(MLANOBJS)

	for USB

	-obj-m := mlan.o
	-mlan-objs := $(MLANOBJS)
	+obj-m := mlan-usb.o
	+mlan-usb-objs := $(MLANOBJS)
34. Go to step 25.