全志A40i android7.1 移植wifi驱动的一般流程

一,问题分析

一般情况下移植一款模组,会涉及到驱动,firmware, hal层,方案端的适配。
下面以RTL8723ds为例详细列出移植的通用步骤。


二,移植步骤

1. 移植Wi-Fi驱动

从RTL原厂或者已经支持的其他把内核版本中获取驱动源码。
1.1. 源码重命名为rtl8723ds后放到lichee/linux-3.10/drivers/net/wireless/
1.2. 修改 wireless 目录下的 Kconfig,添加:

source "drivers/net/wireless/rtl8723ds/Kconfig"

1.3. 修改 wireless 目录下的 Makefile添加

obj-$(CONFIG_RTL8822CS) += rtl8723ds/

1.4. 修改 rtl8723ds 目录下的 Makefile

CONFIG_PLATFORM_I386_PC = n
....
CONFIG_PLATFORM_ARM_SUNxI = y

1.5. 修改 platform 文件
SDIO 接口模组 路径:

lichee/linux-3.10/drivers/net/wireless/rtl8189fs/platform/platform_ARM_SUNnI_sdio.c

可以从其他已经支持的模组中拷贝。

完成以上步骤之后,在lichee/linux-3.10/,执行 make menuconfig ARCH=arm,将所需 Wi-Fi driver 编译为模块,进行编译。


2. 添加 BT firmware

路径:android/hardware/realtek/bluetooth/firmware
把 rtl8723ds_config 和 rtl8723ds_fw 添加到此目录,Wi-Fi 不需要 Firmware。

3. 确认 dts 中模组的 GPIO pin 正确分配

lichee/linux-3.10/arch/arm/boot/dts/sun50iw1p1-perf1_v1_0.dts

     wlan:wlan {
         compatible = "allwinner,sunxi-wlan";
         clocks = <&clk_losc_out>;
         wlan_power = "vcc-wifi";
         wlan_io_regulator = "vcc-wifi-io";
         wlan_busnum = <1>;
         wlan_regon = <&r_pio PL 2 1 1 1 0>;
         wlan_hostwake = <&r_pio PL 3 6 0 0 0>;
         status = "okay";
     };
     bt:bt {
         compatible = "allwinner,sunxi-bt";
         clocks = <&clk_losc_out>;
         bt_power = "vcc-wifi";
         bt_io_regulator = "vcc-wifi-io";
         bt_rst_n = <&r_pio PL 4 1 1 1 0>;
         status = "okay";
     };
     btlpm:btlpm {
         compatible = "allwinner,sunxi-btlpm";
         uart_index = <1>;
         bt_wake = <&r_pio PL 6 1 1 1 1>;
         bt_hostwake = <&r_pio PL 5 6 0 0 0>;
         status = "okay";
     };
 };

wifi dts配置说明:

“clocks” 用于配置使用主控提供的 32k 时钟;
“pinctrl-0” 用于配置 pin 的复用功能;
“pinctrl-names” 用于配置 pin state;
4 “wlan_busnum” 表示 WiFi 所使用的 SDIO 控制器号;
“wlan_power” 表示给 WiFi 模组供电的 regulator 名称;
“wlan_io_regulator” 表示给 WiFi 模组的 GPIO 供电的 regulator 名称;
“wlan_regon” WiFi 模组 power on 控制引脚;
“wlan_hostwake” 表示 WiFi 唤醒主控的 GPIO;
“chip_en” 表示 WiFi 模组使能引脚,硬件未使用时不配置;
“power_en” 表示模块外部的电源开关控制引脚;
bt dts配置说明:
“clocks” 用于配置使用主控提供的 32k 时钟;
“bt_power” 表示 BT 模组所用的供电,与 wlan_power 相同;
“bt_io_regulator” 表示 BT 模组所用的 IO 供电,与 wlan_regulator 相同;
“bt_rst_n” 表示 Bt 模组 power on 控制引脚;
“uart_index” 表示 BT 模组使用的硬件通信端口号;
“bt_wake” 表示 BT 模组休眠后被唤醒时的控制引脚;
“uart_index” 表示 BT 模组使用的硬件通信端口号;
“bt_hostwake” 表示 BT 模组中断输出引脚,用于唤醒 AP;
当前 SDK 中的 board.dts 已经有模组的 GPIO 配置,如果硬件连接不一样,请根据实际硬件原理图进行配置

4. 方案端适配 Wi-Fi/BT 模组加载

android/device/softwinner/a40-p1/BoardConfig.mk

# wifi and bt configuration
BOARD_WIFI_VENDOR := realtek
BOARD_USR_WIFI    := rtl8723ds
WIFI_DRIVER_MODULE_PATH := "/system/vendor/modules/8723ds.ko"
WIFI_DRIVER_MODULE_NAME := "8723ds"
WIFI_DRIVER_MODULE_ARG  := "ifname=wlan0 if2name=p2p0"

# 2. Bluetooth Configuration
BOARD_BLUETOOTH_VENDOR    := realtek
BOARD_HAVE_BLUETOOTH_NAME := rtl8723ds

“BOARD_WIFI_VENDOR := realtek” 指明使用 realtek 的 Wi-Fi 模组,常见的有 broadcom、realtek、xradio;
“BOARD_USR_WIFI” 指明具体使用的 Wi-Fi 型号;
“WIFI_DRIVER_MODULE_PATH” 表示该模组的驱动 ko 的路径;
“WIFI_DRIVER_MODULE_NAME” 表示该模组的驱动名称;realtek 的各个 Wi-Fi 的驱动名称不一样,需根据实际情况设置;
“BOARD_BLUETOOTH_VENDOR” 指明使用那个厂商的 bt 模组,常见的有 broadcom、realtek、xradio;
“BOARD_HAVE_BLUETOOTH_NAME” 指定蓝牙模组型号。

5.配置init文件

各平台通用,一般不需要修改。
android/device/softwinner/a40-common/init.sun8iw11p1.rc android/device/softwinner/a40-common/init.sun8iw11p1.rc

5.1. Wi-Fi资源和服务配置

on post-fs-data
# Create the directories used by the Wireless subsystem
mkdir /data/vendor/wifi 0771 wifi wifi
mkdir /data/vendor/wifi/wpa 0770 wifi wifi
mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
# broadcom/realtek/xradio wifi sta p2p concurrent service
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \ -O/data/vendor/wifi/wpa/sockets -dd \ -g@android:wpa_wlan0
interface android.hardware.wifi.supplicant@1.0::ISupplicant default
interface android.hardware.wifi.supplicant@1.1::ISupplicant default
interface android.hardware.wifi.supplicant@1.2::ISupplicant default
socket wpa_wlan0 dgram 660 wifi wifi
class main
disabled
oneshot```

5.2.BT资源和服务配置

on post-fs-data
# Create the directories used by the Wireless subsystem
mkdir /data/vendor/wifi 0771 wifi wifi
mkdir /data/vendor/wifi/wpa 0770 wifi wifi
mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
# broadcom/realtek/xradio wifi sta p2p concurrent service
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \ -O/data/vendor/wifi/wpa/sockets -dd \ -g@android:wpa_wlan0
interface android.hardware.wifi.supplicant@1.0::ISupplicant default
interface android.hardware.wifi.supplicant@1.1::ISupplicant default
interface android.hardware.wifi.supplicant@1.2::ISupplicant default
socket wpa_wlan0 dgram 660 wifi wifi
class main
disabled
oneshot

5.3.init.wireless.bluetooth.rc相关配置文件

on boot
# UART device
chmod 0660 ${persist.vendor.bluetooth_port}
chown bluetooth net_bt_admin ${persist.vendor.bluetooth_port} # bluetooth power up/down interface
chmod 0660 /sys/class/rfkill/rfkill0/state
chmod 0660 /sys/class/rfkill/rfkill0/type
chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/state
chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/type
write /sys/class/rfkill/rfkill0/state 0 # bluetooth MAC address programming
chown bluetooth net_bt_admin ${ro.bt.bdaddr_path}
on property:persist.vendor.bluetooth_vendor=broadcom
insmod /vendor/modules/bcm_btlpm.ko
setprop vendor.driver.lpm.load 1
on property:persist.vendor.bluetooth_vendor=realtek
insmod /vendor/modules/rtl_btlpm.ko
setprop vendor.driver.lpm.load 1
on property:persist.vendor.bluetooth_vendor=xradio
insmod /vendor/modules/xradio_btlpm.ko
insmod /vendor/modules/xradio_btfdi.ko
setprop vendor.driver.lpm.load 1
on property:persist.vendor.bluetooth_vendor=sprd
insmod /vendor/modules/sprdbt_tty.ko
chmod 0666 /sys/class/rfkill/rfkill1/state
chmod 0666 /sys/class/rfkill/rfkill1/type
chmod 0660 /dev/ttyBT0
chown bluetooth net_bt_admin /dev/ttyBT0
setprop vendor.driver.lpm.load 1
on property:vendor.driver.lpm.load=1
chmod 0660 /proc/bluetooth/sleep/lpm
chmod 0660 /proc/bluetooth/sleep/btwrite
chmod 0660 /proc/bluetooth/sleep/btwake
chown bluetooth net_bt_admin /proc/bluetooth/sleep/lpm
chown bluetooth net_bt_admin /proc/bluetooth/sleep/btwrite
chown bluetooth net_bt_admin /proc/bluetooth/sleep/btwake
on property:persist.vendor.bluetooth_vendor=realtek && property:sys.boot_completed=1
setprop persist.vendor.bluetooth.rtkcoex true
on property:persist.vendor.bluetooth_vendor=realtek && property:sys.boot_completed=0
setprop persist.vendor.bluetooth.rtkcoex false
on property:persist.vendor.bluetooth_vendor=xradio && property:vold.post_fs_data_done=1
mkdir /data/vendor/bluetooth 0771 bluetooth bluetooth
mkdir /data/vendor/bluetooth/sdd 0770 bluetooth bluetooth
mkdir /data/vendor/bluetooth/fdi 0770 bluetooth bluetooth```


  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 介绍了一下全志A40i的SDK下载,整个过程还是比较简单的,需要根据具体的需求选择对应的操作系统平台进行下载。 首先,需要进入全志官网,再点击“技术支持”模块,在下拉列表中选择“SDK下载”进行进入。 进入之后,会看到下面有四个选项按钮,分别是Android SDK、Linux SDK、Windows SDK和Mac SDK。如果开发者需要进行Android应用的开发,可以选择“Android SDK”,如果需要进行嵌入式Linux系统的开发,则需要选择“Linux SDK”。 在选择好SDK所需平台之后,再输入A40i的型号,点击“搜索”进行搜索。搜索结果会出现该型号所对应的SDK版本,可以根据自己的具体需求进行下载。下载过程中,需要提供一些信息进行认证。 下载完成之后,一般会有相关的安装教程和使用文档,需要开发者仔细阅读,以便更好地使用SDK进行开发工作。 ### 回答2: 全志a40i是一种高性能、低功耗的芯片,广泛运用于智能设备、嵌入式系统等领域。为了方便开发者使用全志a40i芯片,全志公司提供了相应的SDK(软件开发工具包)下载服务。 全志a40i的SDK下载可以通过以下步骤完成: 首先,在电脑的浏览器中输入“全志a40i sdk下载”,并点击搜索。找到全志公司官方网站,并进入该网站。 接着,在官网的搜索栏中输入“a40i”,点击搜索按钮,找到与全志a40i芯片相关的资料。 然后,在资料列表中找到“SDK”或者“软件开发工具包”下载链接,点击该链接即可进行下载。 最后,下载完成后,将该SDK安装到电脑中,并参考官方文档进行使用,即可进行全志a40i芯片的开发。 需要注意的是,下载全志a40i的SDK前,开发者需要先参考官方文档,了解该芯片型号的特性、接口等基本信息,以便更好地使用SDK开发出适合该芯片的智能设备、嵌入式系统等应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值