Compile Driver for Android (Raspberry Pi)
The following instructions cover the driver compiling process for RED 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.
Android Nougat
1. Prepare build environment by official Android guide
sudo apt-get update sudo apt-get install openjdk-8-jdk sudo apt-get install dosfstools genisoimage bc libssl-dev python2.7 python-mako git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
2. Install Repo:
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
3. Checkout Android Sources
mkdir android-raspberry; cd android-raspberry repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r36 git clone https://github.com/android-rpi/local_manifests .repo/local_manifests repo sync -j$(nproc)
4. Setup environment variables
sudo ln -s /sbin/mkdosfs /home/${USER}/bin/ source build/envsetup.sh lunch rpi3-eng
5. Build Kernel
cd kernel/rpi ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2709_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg PATH=$ANDROID_BUILD_PATHS$PATH ARCH=arm CROSS_COMPILE=arm-linux-androideabi- make zImage dtbs -j$(nproc)
6. Get the latest qcacld-2.0 sources from 8devices:
cd ~ git clone https://github.com/8devices/qcacld-2.0.git -b caf-wlan/LNX.LEH.4.2.2.2 cd qcacld-2.0
7. Build qcacld-driver module
PATH=$ANDROID_BUILD_PATHS$PATH KERNEL_SRC=$ANDROID_BUILD_TOP/kernel/rpi/ ARCH=arm CROSS_COMPILE=arm-linux-androideabi- make wlan-sdio -j$(nproc)
8. Include driver into Android build system
mkdir $ANDROID_BUILD_TOP/device/brcm/rpi3/firmware/qcacld-2.0 ln -s $PWD/firmware/{usb,sdio} $ANDROID_BUILD_TOP/device/brcm/rpi3/firmware/qcacld-2.0 ln -s $PWD/wlan-{usb,sdio}.ko $ANDROID_BUILD_TOP/device/brcm/rpi3/firmware/qcacld-2.0
9. Patch for auto-loading
patch -p1 -d $ANDROID_BUILD_TOP/device/brcm/rpi3/ < android-patches/0001-load-usb-driver.patch patch -p1 -d $ANDROID_BUILD_TOP/device/brcm/rpi3/ < android-patches/0002-add-usb-blobs.patch
10. Build Android source
cd ~/android-raspberry make ramdisk systemimage -j$(nproc)
11. Prepare SD card
Partitions of the card should be set-up like followings. p1 512MB for BOOT : Do fdisk : W95 FAT32(LBA) & Bootable, mkfs.vfat p2 512MB for /system : Do fdisk, new primary partition p3 512MB for /cache : Do fdisk, mkfs.ext4 p4 remainings for /data : Do fdisk, mkfs.ext4
12. Mount BOOT
partition as /mnt/p1
then copy files
cp $ANDROID_BUILD_TOP/device/brcm/rpi3/boot/* /mnt/p1/ cp $ANDROID_BUILD_TOP/kernel/rpi/arch/arm/boot/zImage /mnt/p1/ cp $ANDROID_BUILD_TOP/kernel/rpi/arch/arm/boot/dts/bcm2710-rpi-3-b.dtb /mnt/p1/ cp $ANDROID_BUILD_TOP/kernel/rpi/arch/arm/boot/dts/overlays/vc4-kms-v3d.dtbo /mnt/p1/overlays/vc4-kms-v3d.dtbo cp $ANDROID_BUILD_TOP/out/target/product/rpi3/ramdisk.img /mnt/p1/
13. Write system partition
sudo dd if=$ANDROID_BUILD_TOP/out/target/product/rpi3/system.img of=/dev/<p2> bs=1M
14. Once you have android up and runnning, insert the module with:
insmod /lib/modules/wlan-sdio.ko