blob: 90a67226dd1b9d9828892214f3b038f64a34dbdc [file] [log] [blame]
=================================================================================
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.