前言
根据前几篇文章,我们发现最通用的解决方式就是自己编译内核,然后在编译时添加我们需要的外接网卡驱动。当然编译为内核模块也是可以的,但总的来说,是一样的,我们这里先以驱动编译进内核为例进行说明。
设备
- 红米1s
内核镜像
我从github上找了一份,虽然小米官方也开放了内核源码,但根据说明还需要和高通的wlan代码进行合并才不能变成完整的代码,考虑到网速等问题,官方的代码我以后找时间试试。
armani-dev/android_kernel_xiaomi_armani
流程
- 交叉编译工具链,我一开始使用了NDK中的,结果语法规则检查太严厉,一堆问题,后来转为使用
gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabi.tar.xz
- 内核配置文件使用了(此时还没有添加网卡驱动,先编译试试)
cp arch/arm/configs/cyanogenmod_armani_defconfig .config
- 修改MakeFile文件的
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi- (此时已配好了交叉编译工具的PATH环境变量)
- 接下来可以尝试make
make
- 在编译的过程中会遇到很多问题。大致记录如下(遇到再改):
#include <smd_private.h> 改为#include "smd_private.h"
#include <ImmVibeSPI.c>改为#include "ImmVibeSPI.c"
#include <tspdrvOutputDataHandler.c>
#ifdef CONFIG_HIGH_RES_TIMERS
#include <VibeOSKernelLinuxHRTime.c>
#else
#include <VibeOSKernelLinuxTime.c>
#endif
改为
#include "tspdrvOutputDataHandler.c"
#ifdef CONFIG_HIGH_RES_TIMERS
#include "VibeOSKernelLinuxHRTime.c"
#else
#include "VibeOSKernelLinuxTime.c"
#endif
文件drivers/video/msm/mdss/mdss_mdp_trace.h
#define TRACE_INCLUDE_PATH . 改为 #define TRACE_INCLUDE_PATH ../../drivers/video/msm/mdss/
- 不停的改,不停的编译,最后会得到我们需要的zImage
- 到这一步还不算完,似乎还有一个设备树的问题,具体还需要学习。