前两天成功的为Orange pi 编译了USB无线网卡驱动,想起几个月前尝试在Mac下为Orange pi编译Android 4.4,由于环境原因失败了,心有不甘,于是想再重新尝试编译一次,并将无线网卡驱动集成进安卓中。

步骤

1.第一步当然还是获取源码了,不过源码不用去谷歌和git上获取,Orangepi已经有打包好的包在百度云了,地址:Android源码

2.搭建环境,因为是Android 4.4 我们需要使用jdk1.6,下载地址:Jdk1.6 for OS X

3.使用jenv管理多版本jdk 使用方法

4.编译内核,因为Orange pi的内核编译工具链无法在Mac下使用,我们需要在ubuntu下编译内核,过程比较简单,也没有出现问题,步骤省略。

5.将编译出的内核文件复制到安卓源码上层目录名为lichee对应的文件夹中,具体可看device/softwinner/common/vendorsetup.sh脚本,其中有以下内容:

function extract-bsp()
{
	LICHEE_DIR=$ANDROID_BUILD_TOP/../lichee
    CHIP_VERSION=$(get_build_var SW_CHIP_PLATFORM)
    if [ "$CHIP_VERSION" = "H8" ];then
	    LINUXOUT_DIR=$LICHEE_DIR/out/sun8iw6p1/android/common
	elif [ "$CHIP_VERSION" = "H3" ];then
		LINUXOUT_DIR=$LICHEE_DIR/out/sun8iw7p1/android/common
    elif [ "$CHIP_VERSION" = "A80" ];then
	    LINUXOUT_DIR=$LICHEE_DIR/out/sun9iw1p1/android/common
    else
        echo "unknow CHIP_VERSION $CHIP_VERSION"
        return
    fi
	LINUXOUT_MODULE_DIR=$LINUXOUT_DIR/lib/modules/*/*
	CURDIR=$PWD

	cd $DEVICE

	#extract kernel
	if [ -f kernel ] ; then
		rm kernel
	fi
	cp $LINUXOUT_DIR/bImage kernel
	echo "$DEVICE/bImage copied!"

	#extract linux modules
	if [ -d modules ] ; then
		rm -rf modules
	fi
	mkdir -p modules/modules
	cp -rf $LINUXOUT_MODULE_DIR modules/modules
	echo "$DEVICE/modules copied!"
	chmod 0755 modules/modules/*

	# create modules.mk
	    (cat << EOF) > ./modules/modules.mk
	# modules.mk generate by extract-files.sh, do not edit it.
	PRODUCT_COPY_FILES += \\
		\$(call find-copy-subdir-files,*,\$(LOCAL_PATH)/modules,system/vendor/modules)
	EOF
	
		cd $CURDIR
}

5.编写编译脚本(非必须,为了省去每次编译需要手敲几次命令),脚本放置在源码根目录,命名为build_opi.sh,增加执行权限,脚本内容如下

#!/bin/bash
source build/envsetup.sh
lunch dolphin_fvd_p1-eng
extract-bsp
export MACOSX_DEPLOYMENT_TARGET=10.8
make -j4

6.执行命令,开始编译

./build_opi.sh

7.遇见错误后,对应下一节的错误解决办法解决后继续编译。

8.还是出现了错误2,进行了各种尝试依旧没有解决,看来还是得在Ubuntu的虚拟机上编译了。

9.在编译成功后,会在下一篇文章中记录添加无线网卡驱动的过程

错误解决办法

1.编译过程出现以下错误

<built-in>:0: error: Unknown value ‘10.11’ of -mmacosx-version-min<built-i

解决办法

从git下载 10.8的SDK,地址:https://github.com/huijizyf/MacOSXSDKs
将MacOSX10.8.sdk 文件夹放入/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs下
终端内执行以下命令:
	sudo vi /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Info.plist
将:
<key>MinimumSDKVersion</key>
<string>10.11</string>
修改为:
<key>MinimumSDKVersion</key>
<string>10.8</string>

2.出现以下错误

clang: error: unsupported option '--gdwarf2'

解决办法:

终端执行以下命令:
	find . -name "*.h" |xargs grep gdwarf2
发现以下4个文件中有这样的描述:/* Define if your assembler supports the --gdwarf2 option. */

prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6/lib/gcc/arm-eabi/4.6.x-google/plugin/include/auto-host.h
prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/auto-host.h
prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/lib/gcc/arm-eabi/4.6.x-google/plugin/include/auto-host.h
prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/lib/gcc/arm-linux-androideabi/4.6.x-google/plugin/include/auto-host.h

对以上五个文件进行修改