Author Topic: [Tutorial] Compile a wireless driver on cubian, take 8812au as an example  (Read 3503 times)

Offline cubieplayer

  • Full Member
  • ***
  • Posts: 177
  • Karma: +22/-1
    • View Profile
Long time no see guys. Here is a tutorial about compling drivers on cubian

check the original post at github: https://github.com/cubieplayer/Cubian/issues/470


-----------------------------------------------------------------------------------------------------------------


This is an tutorial to show you how to compile a wireless driver on cubian. Let's take 8812au for example, first install kernel-headers.

apt-get install linux-headers
You will see a list of available headers

Package linux-headers is a virtual package provided by:
  linux-headers-3.4.79-sun7i 3.4.79-4cubian
  linux-headers-3.4.79-sun4i 3.4.79-4cubian
  linux-headers-vexpress 3.2+46
  linux-headers-omap 3.2+46
  linux-headers-mx5 3.2+46
  linux-headers-3.2.0-4-vexpress 3.2.68-1+deb7u3
  linux-headers-3.2.0-4-omap 3.2.68-1+deb7u3
  linux-headers-3.2.0-4-mx5 3.2.68-1+deb7u3
You should explicitly select one to install.
Since my device is A10, i choose linux-headers-3.4.79-sun4i

apt-get install linux-headers-3.4.79-sun4i
System responds

root@Cubian:/home/cubie# apt-get install linux-headers-3.4.79-sun4i
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  binutils cpp cpp-4.6 gcc gcc-4.6 gcc-4.6-base libc-bin libc-dev-bin libc6
  libc6-dev libgomp1 libmpc2 libmpfr4 linux-libc-dev make manpages-dev
Suggested packages:
  binutils-doc cpp-doc gcc-4.6-locales gcc-multilib autoconf automake1.9
  libtool flex bison gdb gcc-doc libmudflap0-4.6-dev gcc-4.6-doc libgcc1-dbg
  libgomp1-dbg libquadmath-dbg libmudflap0-dbg binutils-gold glibc-doc
  make-doc
The following NEW packages will be installed:
  binutils cpp cpp-4.6 gcc gcc-4.6 gcc-4.6-base libc-dev-bin libc6-dev
  libgomp1 libmpc2 libmpfr4 linux-headers-3.4.79-sun4i linux-libc-dev make
  manpages-dev
The following packages will be upgraded:
  libc-bin libc6
2 upgraded, 15 newly installed, 0 to remove and 69 not upgraded.
Need to get 31.9 MB of archives.
After this operation, 82.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://packages.cubian.org/ wheezy/main linux-headers-3.4.79-sun4i armhf 3.4.79-4cubian [7,620 kB]
Get:2 http://http.debian.net/debian/ wheezy/main libc-bin armhf 2.13-38+deb7u8 [1,170 kB]
Get:3 http://http.debian.net/debian/ wheezy/main libc6 armhf 2.13-38+deb7u8 [4,021 kB]
Get:4 http://http.debian.net/debian/ wheezy/main manpages-dev all 3.44-1 [1,737 kB]
Get:5 http://http.debian.net/debian/ wheezy/main libgomp1 armhf 4.7.2-5 [25.7 kB]
Get:6 http://http.debian.net/debian/ wheezy/main libmpfr4 armhf 3.1.0-5 [516 kB]
Get:7 http://http.debian.net/debian/ wheezy/main libmpc2 armhf 0.9-4+b1 [31.9 kB]
Get:8 http://http.debian.net/debian/ wheezy/main binutils armhf 2.22-8+deb7u2 [4,481 kB]
Get:9 http://http.debian.net/debian/ wheezy/main gcc-4.6-base armhf 4.6.3-14 [141 kB]
Get:10 http://http.debian.net/debian/ wheezy/main cpp-4.6 armhf 4.6.3-14 [4,065 kB]
Get:11 http://http.debian.net/debian/ wheezy/main cpp armhf 4:4.6.3-8 [16.7 kB]
Get:12 http://http.debian.net/debian/ wheezy/main gcc-4.6 armhf 4.6.3-14 [4,290 kB]
Get:13 http://http.debian.net/debian/ wheezy/main gcc armhf 4:4.6.3-8 [5,012 B]
Get:14 http://http.debian.net/debian/ wheezy/main libc-dev-bin armhf 2.13-38+deb7u8 [219 kB]
Get:15 http://http.debian.net/debian/ wheezy/main linux-libc-dev armhf 3.2.68-1+deb7u3 [814 kB]
Get:16 http://http.debian.net/debian/ wheezy/main libc6-dev armhf 2.13-38+deb7u8 [2,355 kB]
Get:17 http://http.debian.net/debian/ wheezy/main make armhf 3.81-8.2 [382 kB]
Fetched 31.9 MB in 4min 14s (125 kB/s)                                         
Preconfiguring packages ...
(Reading database ... 26652 files and directories currently installed.)
Preparing to replace libc-bin 2.13-38+deb7u4 (using .../libc-bin_2.13-38+deb7u8_armhf.deb) ...
Unpacking replacement libc-bin ...
Processing triggers for man-db ...
Setting up libc-bin (2.13-38+deb7u8) ...
(Reading database ... 26653 files and directories currently installed.)
Preparing to replace libc6:armhf 2.13-38+deb7u4 (using .../libc6_2.13-38+deb7u8_armhf.deb) ...
Unpacking replacement libc6:armhf ...
Setting up libc6:armhf (2.13-38+deb7u8) ...
INIT: version 2.88 reloading
Selecting previously unselected package libgomp1:armhf.
(Reading database ... 26653 files and directories currently installed.)
Unpacking libgomp1:armhf (from .../libgomp1_4.7.2-5_armhf.deb) ...
Selecting previously unselected package libmpfr4:armhf.
Unpacking libmpfr4:armhf (from .../libmpfr4_3.1.0-5_armhf.deb) ...
Selecting previously unselected package libmpc2:armhf.
Unpacking libmpc2:armhf (from .../libmpc2_0.9-4+b1_armhf.deb) ...
Selecting previously unselected package binutils.
Unpacking binutils (from .../binutils_2.22-8+deb7u2_armhf.deb) ...
Selecting previously unselected package gcc-4.6-base:armhf.
Unpacking gcc-4.6-base:armhf (from .../gcc-4.6-base_4.6.3-14_armhf.deb) ...
Selecting previously unselected package cpp-4.6.
Unpacking cpp-4.6 (from .../cpp-4.6_4.6.3-14_armhf.deb) ...
Selecting previously unselected package cpp.
Unpacking cpp (from .../cpp_4%3a4.6.3-8_armhf.deb) ...
Selecting previously unselected package gcc-4.6.
Unpacking gcc-4.6 (from .../gcc-4.6_4.6.3-14_armhf.deb) ...
Selecting previously unselected package gcc.
Unpacking gcc (from .../gcc_4%3a4.6.3-8_armhf.deb) ...
Selecting previously unselected package libc-dev-bin.
Unpacking libc-dev-bin (from .../libc-dev-bin_2.13-38+deb7u8_armhf.deb) ...
Selecting previously unselected package linux-libc-dev:armhf.
Unpacking linux-libc-dev:armhf (from .../linux-libc-dev_3.2.68-1+deb7u3_armhf.deb) ...
Unpacking libc6-dev:armhf (from .../libc6-dev_2.13-38+deb7u8_armhf.deb) ...
Selecting previously unselected package linux-headers-3.4.79-sun4i.
Unpacking linux-headers-3.4.79-sun4i (from .../linux-headers-3.4.79-sun4i_3.4.79-4cubian_armhf.deb) ...
Selecting previously unselected package make.
Unpacking make (from .../make_3.81-8.2_armhf.deb) ...
Selecting previously unselected package manpages-dev.
Unpacking manpages-dev (from .../manpages-dev_3.44-1_all.deb) ...
Processing triggers for man-db ...
Setting up libgomp1:armhf (4.7.2-5) ...
Setting up libmpfr4:armhf (3.1.0-5) ...
Setting up libmpc2:armhf (0.9-4+b1) ...
Setting up binutils (2.22-8+deb7u2) ...
Setting up gcc-4.6-base:armhf (4.6.3-14) ...
Setting up cpp-4.6 (4.6.3-14) ...
Setting up cpp (4:4.6.3-8) ...
Setting up gcc-4.6 (4.6.3-14) ...
Setting up gcc (4:4.6.3-8) ...
Setting up libc-dev-bin (2.13-38+deb7u8) ...
Setting up linux-libc-dev:armhf (3.2.68-1+deb7u3) ...
Setting up libc6-dev:armhf (2.13-38+deb7u8) ...
Setting up linux-headers-3.4.79-sun4i (3.4.79-4cubian) ...
Examining /etc/kernel/header_postinst.d.
run-parts: executing /etc/kernel/header_postinst.d/000_header_prepare 3.4.79-sun4i /boot/uImage-3.4.79-sun4i
############################
#    preparing headers     #
#      please wait         #
############################
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf --oldconfig Kconfig
drivers/net/wireless/bcmdhd/Kconfig:42:warning: defaults for choice values not supported
#
# configuration written to .config
#
scripts/kconfig/conf --silentoldconfig Kconfig
drivers/net/wireless/bcmdhd/Kconfig:42:warning: defaults for choice values not supported
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  Generating include/generated/mach-types.h
  HOSTCC  scripts/genksyms/genksyms.o
  HOSTCC  scripts/genksyms/lex.lex.o
  HOSTCC  scripts/genksyms/parse.tab.o
  HOSTLD  scripts/genksyms/genksyms
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTLD  scripts/mod/modpost
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/pnmtologo
  HOSTCC  scripts/conmakehash
  HOSTCC  scripts/bin2c
############################
# headers is ready to use  #
############################
Setting up make (3.81-8.2) ...
Setting up manpages-dev (3.44-1) ...
This is the second step, Let's clone the driver

git clone --depth=1 https://github.com/gnab/rtl8812au
As the author state, we need modify the makefile

...
CONFIG_PLATFORM_I386_PC = n
...
CONFIG_PLATFORM_ARM_RPI = y
Third, Let make the driver binary

cd rtl8812au
make
Here is the log

make ARCH=arm CROSS_COMPILE= -C /lib/modules/3.4.79-sun4i/build M=/home/cubie/rtl8812au  modules
make[1]: Entering directory `/usr/src/linux-headers-3.4.79-sun4i'
  CC [M]  /home/cubie/rtl8812au/core/rtw_cmd.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_security.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_debug.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_io.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_ioctl_query.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_ioctl_set.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_ieee80211.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_mlme.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_mlme_ext.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_wlan_util.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_vht.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_pwrctrl.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_rf.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_recv.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_sta_mgt.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_ap.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_xmit.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_p2p.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_tdls.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_br_ext.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_iol.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_sreset.o
  CC [M]  /home/cubie/rtl8812au/core/efuse/rtw_efuse.o
  CC [M]  /home/cubie/rtl8812au/os_dep/osdep_service.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/os_intfs.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/usb_intf.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/usb_ops_linux.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/ioctl_linux.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/xmit_linux.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/mlme_linux.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/recv_linux.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/ioctl_cfg80211.o
  CC [M]  /home/cubie/rtl8812au/os_dep/linux/rtw_android.o
  CC [M]  /home/cubie/rtl8812au/hal/hal_intf.o
  CC [M]  /home/cubie/rtl8812au/hal/hal_com.o
  CC [M]  /home/cubie/rtl8812au/hal/hal_com_phycfg.o
  CC [M]  /home/cubie/rtl8812au/hal/hal_phy.o
  CC [M]  /home/cubie/rtl8812au/hal/led/hal_usb_led.o
  CC [M]  /home/cubie/rtl8812au/hal/HalPwrSeqCmd.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/Hal8812PwrSeq.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/Hal8821APwrSeq.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_xmit.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_sreset.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_hal_init.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_phycfg.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_rf6052.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_dm.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_rxdesc.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_cmd.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/usb/usb_halinit.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/usb/rtl8812au_led.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/usb/rtl8812au_xmit.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/usb/rtl8812au_recv.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/usb/usb_ops_linux.o
  CC [M]  /home/cubie/rtl8812au/hal/rtl8812a/rtl8812a_mp.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/odm_debug.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/odm_interface.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/odm_HWConfig.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/odm.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/HalPhyRf.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_FW.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_MAC.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_BB.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_RF.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_FW.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_MAC.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_BB.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_RF.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/HalPhyRf_8812A.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8812a/odm_RegConfig8812A.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_FW.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_MAC.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_BB.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_RF.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_MAC.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_BB.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_RF.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/HalPhyRf_8821A.o
  CC [M]  /home/cubie/rtl8812au/hal/OUTSRC/rtl8821a/odm_RegConfig8821A.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_mp.o
  CC [M]  /home/cubie/rtl8812au/core/rtw_mp_ioctl.o
  LD [M]  /home/cubie/rtl8812au/8812au.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/cubie/rtl8812au/8812au.mod.o
  LD [M]  /home/cubie/rtl8812au/8812au.ko
Now we have the driver, let's make it working

insmod 8812au.ko
System responds

<6>usbcore: registered new interface driver rtl8812au
No error, XD, lsmod gives the following output

Module                  Size  Used by
8812au                921495  0
8021q                  17936  0
garp                    6120  1 8021q
stp                     1992  1 garp
llc                     5276  2 stp,garp
ipt_MASQUERADE          2242  1
iptable_nat             4838  1
nf_nat                 18746  2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4      14320  3 nf_nat,iptable_nat
nf_defrag_ipv4          1358  1 nf_conntrack_ipv4
nf_conntrack           84756  4 ipt_MASQUERADE,nf_nat,iptable_nat,nf_conntrack_ipv4
iptable_filter          1533  1
ip_tables              12581  2 iptable_filter,iptable_nat
x_tables               16829  4 ip_tables,ipt_MASQUERADE,iptable_filter,iptable_nat
sunxi_cedar_mod        10544  0
mali                  113556  0
ump                    56983  1 mali
gpio_sunxi              9412  0
rt73usb                22257  0
rt2x00usb              11279  1 rt73usb
rt2x00lib              42406  2 rt73usb,rt2x00usb
8188eu                525404  0
mac80211              247465  2 rt2x00lib,rt2x00usb
Your card should working fine
Cubian:http://cubian.org/ Cubian  Helpdesk:https://github.com/cubieplayer/Cubian/issues

Offline brubetinha

  • Newbie
  • *
  • Posts: 1
  • Karma: +0/-0
    • View Profile
Re: [Tutorial] Compile a wireless driver on cubian, take 8812au as an example
« Reply #1 on: December 03, 2015, 12:45:26 pm »
Hi cubieplayer!

I have an A10 and I need the mt7610u driver so I have installed the linux-headers (3.4.79-sun4i) and then compiled the driver, as you told.
Everything went normal but when I plug the wifi dongle and type dmesg:

[ 9148.797557] usb 3-1: new high-speed USB device number 3 using sw-ehci
[ 9245.147336] mt7650u_sta: disagrees about version of symbol usb_alloc_urb
[ 9245.164751] mt7650u_sta: Unknown symbol usb_alloc_urb (err -22)
[ 9245.186399] mt7650u_sta: disagrees about version of symbol usb_free_urb
[ 9245.203445] mt7650u_sta: Unknown symbol usb_free_urb (err -22)
[ 9245.220646] mt7650u_sta: disagrees about version of symbol usb_alloc_coherent
[ 9245.238801] mt7650u_sta: Unknown symbol usb_alloc_coherent (err -22)
[ 9245.261470] mt7650u_sta: disagrees about version of symbol usb_put_dev
[ 9245.278293] mt7650u_sta: Unknown symbol usb_put_dev (err -22)
[ 9245.294791] mt7650u_sta: disagrees about version of symbol usb_get_dev
[ 9245.311444] mt7650u_sta: Unknown symbol usb_get_dev (err -22)
[ 9245.328061] mt7650u_sta: disagrees about version of symbol usb_submit_urb
[ 9245.345513] mt7650u_sta: Unknown symbol usb_submit_urb (err -22)
[ 9245.362759] mt7650u_sta: disagrees about version of symbol usb_free_coherent
[ 9245.380639] mt7650u_sta: Unknown symbol usb_free_coherent (err -22)
[ 9245.398195] mt7650u_sta: disagrees about version of symbol usb_control_msg
[ 9245.415743] mt7650u_sta: Unknown symbol usb_control_msg (err -22)
[ 9245.432927] mt7650u_sta: disagrees about version of symbol usb_kill_urb
[ 9245.451986] mt7650u_sta: Unknown symbol usb_kill_urb (err -22)
[ 9254.223125] usb 3-1: USB disconnect, device number 3

what could be wrong ?

Offline slovenia

  • Hero Member
  • *****
  • Posts: 504
  • Karma: +47/-0
    • View Profile
Re: [Tutorial] Compile a wireless driver on cubian, take 8812au as an example
« Reply #2 on: December 15, 2015, 03:09:45 am »
This driver will most likely won't work on kernel 3.4 but it's working on 4.x, driver is a part of kernel.

I got one of those cheap adapters, not very fast but stable.
Debian and Ubuntu images with kernel 3.4.110, 4.3.3, 4.4
http://www.armbian.com