===== 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: * [[https://boundarydevices.com/wiki|Development board vendor wiki]] * [[https://boundarydevices.com/buildroot-2017-08-imx-platforms|Buildroot guide for i.MX platforms]] * [[https://boundarydevices.com/product/sabre-lite-imx6-sbc|Device homepage]] * [[https://boundarydevices.com/just-getting-started|Console connection guide]] ---- === 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 [[https://boundarydevices.com/just-getting-started|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