基於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。