解决编译小米Max内核源码后,WiFi驱动模块不能启动的问题

去年,在成功编译小米Max的内核源码后,刷入手机发现WiFi驱动并不能正常加载,通过一翻操作后,成功启动WiFi驱动。这里分享一下我完整的解决过程。

 

小米FAQ已经给出原因:

 

因为WiFi驱动模块是由高通开发的,不是小米开发的,所以不在小米的开源仓库里面,需要去下载高通的开源项目QAEP。WiFi模块源码在QAEP项目里的vendor/qcom/opensource/wlan/prima

 

 

腾讯云新建一台按量计费的香港服务器,用完可以立刻销毁。

由于高通源码巨大,本人下载小米Max的有115G,所以新建的时候推荐选500G硬盘大小

 

安装下载环境

yum install -y git curl screen
curl https://storage.googleapis.com/git-repo-downloads/repo > /bin/repo
chmod 777 /bin/repo

 

启动screen来后台开一个shell下载,防止下载过程中SSH突然掉线

screen -S test

执行后会来到一个全新的SSH界面(其他screen操作详情请百度)

 

高通QAEP源码的下载命令为

$ repo init -u git://codeaurora.org/platform/manifest.git -b [branch] -m [manifest] --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable

其中branch的分支应该选择release,manifest选$tag.xml

例如小米4的cancro-kk-oss分支:

~/Qualcomm_Android$ repo init -u git://codeaurora.org/platform/manifest.git -b release -m LNX.LA.3.5.2.2.1-04310-8x74.0.xml --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable

所以这里我的命令为:

mkdir /myDownload cd /myDownload repo init -u git://codeaurora.org/platform/manifest.git -b release -m LA.BR.1.3.4-05310-8976.0.xml --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable

然后执行同步命令(下载代码)

~/Qualcomm_Android$ repo sync -j8

FYI:高通这个仓库真的很大,下载需要大量时间(本人腾讯云香港下了16个小时)

repo sync -f -j4 --no-tags --no-clone-bundle 
// --no-tags:减少不需要的tag下载,可以缩减下载的代码量 
// -f:当某个库因为网络原因货其他原因下载失败的时候可以继续进行,避免已经下载的代码不能写入到硬上 
// -j4:开启4个线程来下载,这个根据CPU和硬盘的性能决定的

附小米原文

高通源码下载完成后

取出vendor/qcom/opensource/wlan文件夹

其中.git文件夹比较占空间,而且也无用,可以删除

打开Makefile发现是这样的

这怎么编译?别慌,小修改即可

1.首先将Kbuild文件内容全部复制到Makefile的头部

2.将头部的两段代码删除,删除原因在英文注释里,我们是编译成外部wlan.ko模块文件,所以不需要这两段

 

然后在头部补上一句

KERNEL_BUILD := 0

 

 

3.在Makefile尾部的这里4句屏蔽掉,因为我们要重新写一个obj-m出来

 

 

4.将Makefile尾巴这两句改写成正常的格式,并放在Makefile文件头部

 

WLAN_ROOT := $(PWD)
MODNAME := wlan
KBUILD_OPTIONS := WLAN_ROOT
KBUILD_OPTIONS += MODNAME

5.将Makefile底部重写增加obj-m

 

#加入这句话的目的是为了接下来要查看编译器的预定义有哪些
$(info info $(CDEFINES))
ifneq ($(KERNELRELEASE),)    
	$(MODNAME)-objs:=$(OBJS)
	obj-m := $(MODNAME).o
else
	KERNEL_SOURCE := /hydrogen-m-oss/output
all:    
	$(MAKE) $(EXTRA_CFLAGS)  -C $(KERNEL_SOURCE)  SUBDIRS=$(CURDIR) ARCH=arm64 \
	CROSS_COMPILE=aarch64-linux-android- M=$(PWD) modules 
clean:    
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers    
endif

主要是多个了obj-m来指定生成的模块

至此Makefile修改完成

 

重新make一下

会发现还是有错,提示某些未定义。

这时候

$(info info $(CDEFINES))

那句话就派上用场了

 

可以看到编译器总共有哪些定义,格式为-DXXXXXXXXXXX

我复制下来,将"-D"替换成"#define "后如下

要在哪些地方加上这些定义呢?答:每个头文件最顶部,当然我不可能一个一个手动加进去,

用一些技巧就好了

手动搜索出*.h结尾的头文件,新建一个文件夹,全部复制出来,

 

我全部扔进notepad++打开,并发现每个头文件顶部都有一个Copyright (c)字样。

 

这就好办了

先把每个文件的Copyright (c)替换成这样,

再最终替换

替换完成

注意要加上,这个好像是必须的,不加编译不通过

#define WCN_PRONTO

 

替换完成后务必检查替换进去的#define定义数量是否完整,因为notepad++替换文本有长度限制

 

如果完整,则可以按全部保存。

接下来把替换完毕的.h头文件放入Kernel/include目录下(防止编译wifi驱动时候编译器找不到他们)

重新make,即可编译成功

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值