Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Tutorial] Compile a wireless driver on cubian, take 8812au as an example #470

Open
michalliu opened this issue Sep 14, 2015 · 5 comments
Open

Comments

@michalliu
Copy link
Collaborator

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) ...
@michalliu
Copy link
Collaborator Author

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

@michalliu
Copy link
Collaborator Author

Next, 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

@michalliu
Copy link
Collaborator Author

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

@Shtucer
Copy link

Shtucer commented Dec 22, 2015

In my case it was rtl8192cu.
git clone https://github.com/lwfinger/rtl8192cu.git (link from cubieboard wiki)
make ARCH=arm -C /lib/modules/3.4.79-sun7i/build -M=/path/to/drivre/src modules
insmod rtl8192cu.ko error:

rtl8192cu: disagrees about version of symbol usb_alloc_urb

@Mikebert4
Copy link

Lovely walkthrough - thanks!

I stall when running make: system fails on #include mach/barriers.h - no such file or directory.

Halp!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants