Compile Driver for Linux (BD-SL-i.MX6)

The following instructions cover the driver compiling process for BLUE bean on devices running Linux. We recommend using Debian or Ubuntu. It also might be possible to compile on OSX. Compiling directly on a Windows platform is not supported. However, if all you have available is a windows machine then we would recommend to set up a linux based virtual machine.


Before compiling qcacld drivers for BD-SL-i.MX6, you have to prepare the kernel and a buildroot file system. Official guides listed below:


Prepare buildroot with kernel

1. Download the Buildroot and qcacld sources:

git clone https://github.com/8devices/qcacld-2.0/ -b CNSS.LEA.NRT_3.0
git clone https://github.com/buildroot/buildroot -b 2018.02.x
cd buildroot/

2. Use default configuration for the board:

make nitrogen6x_defconfig

3. Configure Linux:

make linux-menuconfig

Enable:

Device Drivers -> Network device support -> Wireless LAN -> Intersil devices -> IEEE 802.11 for Host AP (M)

Save and exit.

4. Configure buildroot:

make menuconfig

Here You can enable packages that You want to include in the filesystem (i.e. openssh, iw, etc.). Type / to search. Enable:

 Target packages -> Networking applications -> wireless tools
 Target packages -> Networking applications -> hostapd
 Target packages -> Networking applications -> wpa_supplicant
 Target packages -> Networking applications -> iw

Save and exit.

5. Build the image:

make -j${nproc}

6. Apply the kernel patch:

cd output/build/linux-custom/
patch -p1 < ../../../../qcacld-2.0/patches/NXP-i.MX6/0001-Disable-other-voltages-than-1.8V-for-SDIO.patch
for i in ../../../../qcacld-2.0/patches/kernel/v4.9.11/* ; do patch -p1 < $i ; done
cd ../../../

7. Rebuild the image:

make -j${nproc}

8. Plug the USB stick/SD card to the computer and find out it's name with:

sudo fdisk -l

9. Write the image to the media:

sudo dd if=images/sdcard.img of=/dev/sdX bs=1M
sync

Build qcacld driver

1. Enter qcacld directory:

 cd ../qcacld-2.0/

2. Edit the Makefile file (also change the path /home/user to your own):

ARCH=arm
KERNEL_SRC=/home/user/output/build/linux-custom/
CROSS_COMPILE=/home/user/output/host/opt/ext-toolchain/bin/arm-linux-gnueabihf-

3. Build the driver:

make -j${nproc}

Transfer data to media

1. Mount the media (where X = your drive's letter, Y = your partition number):

sudo mount /dev/sdXY /mnt/

2. Copy drivers to system:

sudo cp wlan-sdio.ko /mnt/lib/modules/4.1.15/extra/
sudo cp -r firmware_bin/sdio/* /mnt/lib/firmware/
sync

3. Unmount partition

sudo umount /mnt/

Boot

Plug media into the board and connect into it via a serial connection as shown on console connection guide.
Upon powering, the device should load the operating system automatically.

The default user login is root without a password.

1. Remove the stock driver (not supported by 8devices) and reboot the device:

rm ./lib/modules/4.1.15/extra/wlan.ko
reboot

2. Once rebooted, load the driver module from 8devices:

modprobe cfg80211
insmod /lib/modules/4.1.15/extra/wlan-sdio.ko