基于HI3559A,Hi3559AV100_SDK_V2.0.3.1,cfg80211
主要分为两部分:
1、在内核中添加WIFI模块,并编译出ko文件到文件系统
2、编译WiFi工具wpa及相关库,制作Rootfs
一、在内核中添加wifi功能
1、将bcmdhd的驱动文件夹放在内核的linux-x-x/drivers/net/wireless目录下
2、修改drivers/net/wireless的Kconfig文件,添加如下:
source "drivers/net/wireless/bcmdhd/Kconfig"
3、修改drivers/net/wireless/Makefile,添加如下:
obj-$(CONFIG_BCMDHD) += bcmdhd/
4、进入coning配置WiFi
括号里指定了固件在roofs内的路径,在制作人roofs的时候,要把固件添加进去。
5、修改GPIO相关配置
在bcmdhd驱动文件夹下dhd_gpio.c
static int gpio_wl_reg_on = 174; // WL_REG_ON is input pin of WLAN module #ifdef CUSTOMER_OOB static int gpio_wl_host_wake = 0; // WL_HOST_WAKE is output pin of WLAN module #endif
搜索一下reg_on,将WL_REG_ON都给改了
修改设备树文件,添加SDIO节点
6、编译内核之前配置
在osdrv目录下,make myconfig
将驱动单独编译为模块
二、制作roofs
1、编译相关库与工具、roofs
注意编译时,将生成的文件指定输入到文件夹,然后通过makefile遍进文件系统
1 ...... 2 ########################################################################################## 3 #task [4] prepare rootfs 4 ########################################################################################## 5 hirootfs_prepare: prepare 6 @echo -e $(GREEN)"---------task [4] prepare rootfs " $(DONE) 7 ifeq ($(OSDRV_DIR)/pub/$(PUB_ROOTFS), $(wildcard $(OSDRV_DIR)/pub/$(PUB_ROOTFS))) 8 pushd $(OSDRV_DIR)/pub/$(PUB_ROOTFS); chmod +w usr/bin; chmod +w usr/sbin; chmod +w sbin; popd 9 rm $(OSDRV_DIR)/pub/$(PUB_ROOTFS)* -rf 10 endif 11 tar xzf $(OSDRV_DIR)/rootfs_scripts/rootfs.tgz -C $(OSDRV_DIR)/pub 12 mv $(OSDRV_DIR)/pub/rootfs $(OSDRV_DIR)/pub/$(PUB_ROOTFS) 13 echo $(TOOLCHAIN_DIR)/$(TOOLCHAIN_RUNTIME_LIB) $(TOOLCHAIN_RUNTIME_LIB_C) 14 tar xzf $(TOOLCHAIN_DIR)/$(TOOLCHAIN_RUNTIME_LIB)/$(TOOLCHAIN_RUNTIME_LIB_C) -C $(OSDRV_DIR)/pub/$(PUB_ROOTFS) 15 pushd $(OSDRV_DIR)/pub/$(PUB_ROOTFS); $(OSDRV_CROSS)-strip ./lib/*; popd 16 mv $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib64 17 mkdir $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib 18 mv $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib64/ld-2.24.so $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib 19 rm $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib64/ld-linux-aarch64.so.1 20 cd $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/lib;ln -s ld-2.24.so ld-linux-aarch64.so.1;cd - 21 cp $(OSDRV_DIR)/../mpp/out/linux/multi-core/ko/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/komod/ -af 22 chmod +x $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/komod/load* 23 mkdir -p $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/root/app 24 mkdir -p $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/share/udhcpc 25 mkdir -p $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/man 26 mkdir -p $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/system/etc/firmware/ 27 # 在此后添加 28 cp ~/backup/root_file/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/root/ -af 29 30 31 cp ~/backup/wifi_app/firmware/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/system/etc/firmware/ 32 cp ~/backup/wifi_app/bin/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/bin/ 33 cp ~/backup/wifi_app/rootfs_lib/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/lib/ 34 cp ~/backup/wifi_app/_install/bin/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/bin 35 cp ~/backup/wifi_app/_install/lib/*.so $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/lib/ 36 cp ~/backup/wifi_app/_install/lib/*.so.* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/lib/ 37 cp ~/backup/wifi_app/_install/man/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/man/ -rf 38 cp ~/backup/wifi_app/_install/sbin/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/sbin/ 39 cp ~/backup/wifi_app/_install/share/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/usr/share/ -rf 40 cp ~/backup/wifi_app/_install/etc/* $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/etc/ -rf 41 # cp /home/shanon/backup/rcS $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/etc/init.d/ -af 42 43 ......
相关文件都在backup目录下。root_file目录下是一些脚本文件,
烧进板子后,运行脚本配置网络。
注意:
在编译内核模块时,会生成ko文件,需要将相关的ko文件拷贝到根文件系统下的/lib目录下
modules文件在编译内核模块下会输出到:
Hi3559AV100_SDK_board_v2/osdrv/pub/rootfs_glibc_multi-core_arm64/lib/modules/4.9.37/kernel$
将kernel文件夹及其以下的文件都拷贝到/lib/modules/4.9.37/目录下,其中就包含了bcmdhd.ko和cfg80211.ko和 mac80211.ko
总言之,将编译模块后的4.9.37目录下的除build目录和source目录的其他文件与文件夹拷贝到文件系统的/lib/modules/4.9.37目录下即可。
注意:
修改了SDIO与WL_Reg_on引脚,对应的uboot表格里面的引脚配置也要修改,生成新的uboot。