guowenxue
2024-04-17 5f67ca4a550a4f729b7206e392b795a016d365aa
Driver:IGKBoard-IMX8MP: Add driver build shell script to add new rtl8723du WiFi/BT driver support

Signed-off-by: guowenxue <guowenxue@gmail.com>
3 files added
280 ■■■■■ changed files
drivers/igkboard-imx8mp/build.sh 205 ●●●●● patch | view | raw | blame | history
drivers/igkboard-imx8mp/user/Makefile 40 ●●●●● patch | view | raw | blame | history
drivers/igkboard-imx8mp/user/hello.c 35 ●●●●● patch | view | raw | blame | history
drivers/igkboard-imx8mp/build.sh
New file
@@ -0,0 +1,205 @@
#!/bin/bash
# this project absolute path
PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
# top project absolute path
TOP_PATH=$(realpath $PRJ_PATH/../../)
# binaries build prefix install path
PRFX_PATH=$PRJ_PATH/install
# binaries finally install path if needed
#INST_PATH=/tftp
# download taballs path
TARBALL_PATH=$PRJ_PATH/tarballs
# config file path
CONF_FILE=$TOP_PATH/config.json
# shell script will exit once get command error
set -e
#+-------------------------+
#| Shell script functions  |
#+-------------------------+
function pr_error() {
    echo -e "\033[40;31m $1 \033[0m"
}
function pr_warn() {
    echo -e "\033[40;33m $1 \033[0m"
}
function pr_info() {
    echo -e "\033[40;32m $1 \033[0m"
}
# decompress a packet to destination path
function do_unpack()
{
    tarball=$1
    dstpath=`pwd`
    if [[ $# == 2 ]] ; then
        dstpath=$2
    fi
    pr_info "decompress $tarball => $dstpath"
    mkdir -p $dstpath
    case $tarball in
        *.tar.gz)
            tar -xzf $tarball -C $dstpath
            ;;
        *.tar.bz2)
            tar -xjf $tarball -C $dstpath
            ;;
        *.tar.xz)
            tar -xJf $tarball -C $dstpath
            ;;
        *.tar.zst)
            tar -I zstd -xf $tarball -C $dstpath
            ;;
        *.tar)
            tar -xf $tarball -C $dstpath
            ;;
        *.zip)
            unzip -qo $tarball -d $dstpath
            ;;
        *)
            pr_error "decompress Unsupport packet: $tarball"
            return 1;
            ;;
    esac
}
# parser configure file and export environment variable
function export_env()
{
    export BOARD=`jq -r ".bsp.board" $CONF_FILE | tr 'A-Z' 'a-z'`
    export CROSS_COMPILE=`jq -r ".bsp.cortexAtool" $CONF_FILE`
    export BSP_VER=`jq -r ".bsp.version" $CONF_FILE | tr 'A-Z' 'a-z'`
    export BSP_URL=`jq -r ".bsp.giturl" $CONF_FILE`
    export KER_SRC=linux-imx
    export KER_PATH=$TOP_PATH/kernel/linux-imx
    export DRV_PATH=$TOP_PATH/kernel/install
    export JOBS=`cat /proc/cpuinfo | grep processor | wc -l`
    if [[ $BOARD =~ mx6ull ]] ; then
        export ARCH=arm
    else
        export ARCH=arm64
    fi
}
function build_user()
{
    SRC=user
    if [ ! -d ${SRC} ] ; then
        return ;
    fi
    pr_warn "Build for users driver"
    cd ${SRC}
    sed -i "s|^CROSS_COMPILE ?=.*|CROSS_COMPILE ?= ${CROSS_COMPILE}|g" Makefile
    make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} LINUX_SRC=${KER_PATH} DRV_PATH=${DRV_PATH}/
    cd ${PRJ_PATH}
}
function build_rtl8723du()
{
    SRC=rtl8723du
    cd $PRJ_PATH
    if [ -d $SRC ] ; then
        pr_info "$SRC USB WiFi driver source code fetched already"
    else
        pr_info "start fetch $SRC USB WiFi drver source code"
        if [[ $BSP_URL =~ github.com ]] ; then
            git clone https://github.com/lwfinger/rtw88.git --depth=1 $SRC
        else
            mkdir -p $TARBALL_PATH
            # Download source code packet
            if [ ! -s $TARBALL_PATH/$SRC.tar.xz ] ; then
                wget $BSP_URL/imx/bsp/misc/$SRC.tar.xz -P $TARBALL_PATH
            fi
            # decompress source code packet
            do_unpack $TARBALL_PATH/$SRC.tar.xz
        fi
    fi
    cd $SRC
    pr_warn "start update $SRC USB WiFi driver source code"
    KER_VER=`echo $BSP_VER|awk -F"-" '{print $2}'`
    sed -i "s|^KVER.*|KVER ?= $KER_VER|g" Makefile
    sed -i "s|^KSRC.*|KSRC := ${KER_PATH}|g" Makefile
    sed -i "s|^MODDESTDIR.*|MODDESTDIR := ${DRV_PATH}/lib/modules/${KER_VER}-dirty/extra/|g" Makefile
    sed -i "s|^FIRMWAREDIR.*|FIRMWAREDIR := ${DRV_PATH}/lib/firmware/|g" Makefile
    sed -i '/depmod -a .*/d' Makefile
    pr_warn "start build $SRC USB WiFi driver"
    make -j ${JOBS}
    make install
    depmod -a -b ${DRV_PATH}/ ${KER_VER}-dirty
}
function do_build()
{
    cd $PRJ_PATH
    build_user
    build_rtl8723du
}
function do_clean()
{
    cd $PRJ_PATH
    rm -rf rtl8188fu rtl8723du tarballs
    if [ -d user ] ; then
        cd user
        make clean;
    fi
}
#+-------------------------+
#| Shell script body entry |
#+-------------------------+
export_env
if [[ $# == 1 && $1 == -c ]] ;then
    pr_warn "start clean drivers"
    do_clean
    exit;
fi
pr_warn "start build linux driver for ${BOARD}"
do_build
drivers/igkboard-imx8mp/user/Makefile
New file
@@ -0,0 +1,40 @@
#*********************************************************************************
#      Copyright:  (C) 2021 LingYun IoT System Studio <www.weike-iot.com>
#                  All rights reserved.
#
#       Filename:  Makefile
#    Description:  This Makefile used to compile all the drivers here
#
#        Version:  1.0.0(18/12/2021~)
#                  Author:  Guo Wenxue <guowenxue@gmail.com>
#      ChangeLog:  1, Release initial version on "18/12/2021 01:29:33 PM"
#
#********************************************************************************/
ARCH ?= arm
CROSS_COMPILE ?= /opt/gcc-aarch64-10.3-2021.07/bin/aarch64-none-linux-gnu-
LINUX_SRC ?= ${shell pwd}/../../../kernel/linux-imx/
DRV_PATH ?= ${shell pwd}/../../../kernel/install/
EXTRA_INSTPATH=/tftp
PWD := $(shell pwd)
obj-m += hello.o
modules:
    @echo ${LINUX_SRC}
    @make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -C $(LINUX_SRC) M=$(PWD) modules
    @make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -C $(LINUX_SRC) M=$(PWD) modules_install INSTALL_MOD_PATH=${DRV_PATH} INSTALL_MOD_STRIP=1
    @make clear
install:
    cp -af *.ko ${EXTRA_INSTPATH}
clear:
    @rm -f *.o *.mod* .*.cmd *.symvers *.order
clean: clear
    @rm -f  *.ko
drivers/igkboard-imx8mp/user/hello.c
New file
@@ -0,0 +1,35 @@
/*********************************************************************************
 *      Copyright:  (C) 2021 LingYun IoT System Studio <www.weike-iot.com>
 *                  All rights reserved.
 *
 *       Filename:  hello.c
 *    Description:  This file is the linux kernel sample hello module
 *
 *        Version:  1.0.0(18/12/2021~)
 *         Author:  Guo Wenxue <guowenxue@gmail.com>
 *      ChangeLog:  1, Release initial version on "18/12/2021 10:50:26 AM"
 *
 ********************************************************************************/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static __init int hello_init(void)
{
    printk(KERN_ALERT "Hello, LingYun IoT System Studio!\n");
    return 0;
}
static __exit void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, I have found a good job!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("GuoWenxue <guowenxue@gmail.com>");
MODULE_DESCRIPTION("Linux Kernel hello module");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_INFO(intree, "Y");