A40i 开发板 Android 系统编译

 Android系统编译


A40i &T3 板卡用户可以通过飞凌嵌入式提供的网盘链接获取OKA40i-C开发板软件和硬件的文档及源码。软件和硬件的文档及源码下载方法不清楚的可联系飞凌嵌入式客服索取。

硬件平台:OKA40i-C 开发板 


注:本文介绍安卓编译方法也适用于飞凌嵌入式 OKT3-C开发板,其它平台仅供参考使用。

一、安装Ubuntu 14.04 x64bit及编译环境


在这里建议用户使用Ubuntu真机进行编译,飞凌提供Android 7.1.1的代码在Ubuntu14.04 LTS 64位系统docker下编译测试通过。

注:推荐电脑配置处理器:Core(TM) i7   内存:8G以上;

由于android7编译环境建立复杂,所以只提供docker环境。

详见:用户资料\应用\OKA40i-C docker编译环境指导 

二、源码包安装


请使用飞凌提供的源码包,含有lichee,android,文件所在路径如下:

用户资料\Android\源码\lichee\lichee.tar.gz

用户资料\Android\源码\android\xaa

用户资料\Android\源码\android\xab

用户资料\Android\源码\android\xac

用户资料\Android\源码\android\xad

用户资料\Android\源码\android\xae

说明:由于源代码超过3G,所以android才用分包形式:分成xaa,xab,xac,xad,xae类型文件。

生成目录结构的命令(注意该命令需要root权限),如下:

#  mkdir -p  /root/workspace/allwinner

#  cd  /root/workspace/allwinner

复制源码压缩包到虚拟机或者真实机器的/root/workspace/allwinner/路径。


lichee释放

步骤1:验证源码压缩包完整性,与lichee_md5.txt对比,命令如下

#  md5sum lichee.tar.gz

步骤2:解压缩源码,命令如下。

#  cd  /root/workspace/allwinner/

#  tar xvf  lichee.tar.gz


 android释放

步骤1:验证压缩包完整性,与android_md5.txt对比,命令如下

#  md5sum xaa

#  md5sum xab

#  md5sum xac

#  md5sum xad

#  md5sum xae

步骤2:生成源码压缩包,命令如下

#  cat xa* > android.tar.gz

步骤3:验证源码压缩包完整性,与android_md5.txt对比,命令如下

#  md5sum android.tar.gz

步骤4:解压缩源码,命令如下。

#  cd  /root/workspace/allwinner/

#  tar xvf  android.tar.gz


验证释放后文件目录结构正确

步骤1:

/root/workspace/allwinner$ pwd

/root/workspace/allwinner

步骤2:

/root/workspace/allwinner$ ls

android lichee

三、 Android系统的编译


准备好A40i开发板 Android源码:


1、编译前的准备


请确认当前系统swap分区大小,若swap分区不足会造成编译Android源码失败,推荐4G。

查看swap分区情况:

$cat  /proc/swaps

在此提供一种通过创建swap文件的方式来增加swap分区大小的操作方法,可作为参考:

$sudo  fallocate  -l  4G  /swapfile

$sudo  chmod  600  /swapfile

$sudo  mkswap  /swapfile

$sudo  swapon  /swapfile

$sudo  vim  /etc/fstab

在/etc/fstab文件最后添加如下内容:

/swapfile  none  swap  sw  0  0

2、 Android全编译


进入A40i 源码目录,执行以下命令:

进入docker

# cd /root/workspace/allwinner/

root@c4bcf404fa6d:~/workspace/allwinner# pwd

/root/workspace/allwinner

root@c4bcf404fa6d:~/workspace/allwinner# ls

android  lichee

步骤1:配置lichee编译内核

备注:v1表示v1核心板,其他表示适应v2核心板

$ cd  /root/workspace/allwinner/

$cd  lichee

$./build.sh config

I have already read, understood and accepted the above terms? [Y/N] Y

Welcome to mkscript setup progress

All available chips:

0. sun8iw11p1

Choice: 0

All available platforms:

0. android

1. androidm

2. dragonboard

3. linux

4. camdroid

Choice: 1

All available kernel:

0. linux-3.10

Choice: 0

All available boards:

0. a40-OKA40i_C

1. a40-p1

2. t3-mp1

3. t3-mp3

4. t3-p1

5. t3-p2

6. t3-p3

Choice: 0

All available lcd resolutions:

0. 480x272

1. 800x480_v1

2. 1024x600_v1

3. 1024x600mipi_v1

4. 1280x800_v1

5. 800x480

6. 800x600

7. 1024x600

8. 1024x600mipi

9. 1280x800

Choice: 7

步骤2:lichee编译内核

$ ./build.sh

INFO: build lichee OK.

步骤3:导入android编译环境变量

$  cd  /root/workspace/allwinner/android/

$  source  build/envsetup.sh

#输出:

including device/asus/fugu/vendorsetup.sh

including device/generic/mini-emulator-arm64/vendorsetup.sh

including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh

including device/generic/mini-emulator-mips/vendorsetup.sh

including device/generic/mini-emulator-mips64/vendorsetup.sh

including device/generic/mini-emulator-x86/vendorsetup.sh

including device/generic/mini-emulator-x86_64/vendorsetup.sh

including device/google/dragon/vendorsetup.sh

including device/google/marlin/vendorsetup.sh

including device/htc/flounder/vendorsetup.sh

including device/huawei/angler/vendorsetup.sh

including device/lge/bullhead/vendorsetup.sh

including device/linaro/hikey/vendorsetup.sh

including device/moto/shamu/vendorsetup.sh

including device/softwinner/a40-OKA40i_C/vendorsetup.sh

including device/softwinner/a40-p1/vendorsetup.sh

including device/softwinner/common/vendorsetup.sh

including device/softwinner/t3-p3/vendorsetup.sh

including sdk/bash_completion/adb.bash

步骤4:配置A40i android板卡

$  lunch 24

#输出:

============================================

PLATFORM_VERSION_CODENAME=REL

PLATFORM_VERSION=7.1.1

TARGET_PRODUCT=a40_OKA40i_C

TARGET_BUILD_VARIANT=eng

TARGET_BUILD_TYPE=release

TARGET_BUILD_APPS=

TARGET_ARCH=arm

TARGET_ARCH_VARIANT=armv7-a-neon

TARGET_CPU_VARIANT=cortex-a7

TARGET_2ND_ARCH=

TARGET_2ND_ARCH_VARIANT=

TARGET_2ND_CPU_VARIANT=

HOST_ARCH=x86_64

HOST_2ND_ARCH=x86

HOST_OS=linux

HOST_OS_EXTRA=Linux-4.15.0-58-generic-x86_64-with-Ubuntu-14.04-trusty

HOST_CROSS_OS=windows

HOST_CROSS_ARCH=x86

HOST_CROSS_2ND_ARCH=x86_64

HOST_BUILD_TYPE=release

BUILD_ID=NMF27D

OUT_DIR=out

步骤5:复制内核模块和内核到android

$  extract-bsp

#输出:

/root/workspace/allwinner/android/device/softwinner/a40-OKA40i_C/bImage copied!

/root/workspace/allwinner/android/device/softwinner/a40-OKA40i_C/modules copied!

注意:第一次执行extract-bsp命令报个错误,可以忽略,要再执行一遍extract-bsp

步骤6:编译android系统 

$ make -j8

说明:j后边参数编译任务数量,如果是4核8线程cpu,那么j8。

编译成功如图所示:

注意:首次编译时间长,编译时间与编译主机配置有关系;

步骤7:打包镜像文件

$ pack

打包完成如图:

注: 1.Android的编译过程需要耗费较长的时间,时间长短视电脑配置而定。

 2.编译生成的镜像路径因使用环境不同,可能会有差异,相对路径为lichee/tools/pack下。


四、 A40i 驱动代码路径


设备

驱动程序源代码在内核中的位置

设备名

网卡驱动

drivers/net/ethernet/allwinner/

/sys/class/net/eth*

LCD背光驱动

video/sunxi/disp2/disp/

 

LED驱动

drivers/leds/leds-gpio.c

/sys/class/leds/

USB接口U盘

drivers/usb/storage/

/dev/sdx

USB 3G

drivers/usb/serial/

/dev/ttyUSB*

USB Camera

drivers/media/usb/uvc/uvc_video.c

 

SD卡驱动

drivers/mmc/card/

drivers/mmc/host/sun*

/dev/block/mmcblk0pX

LCD FrameBuffer

drivers/video/sunxi/disp2/disp/lcd/

/dev/fb0

ft5x06电容触摸

drivers/input/touchsrcreen/

/dev/input/eventx

gt9xx电容触摸

/drivers/input/touchscreen/

dev/input/eventx

电阻触控驱动TDB

/drivers/input/touchscreen/sunxi/sunxi-ts.c

 

RTC实时时钟驱动

drivers/rtc/rtc-rx8010.c

drivers/rtc/rtc-sunxi.c /*不加载*/

/dev/rtc0

/dev/rtc0

串口驱动

drivers/tty/serial/sunxi-uart.c

/dev/tty*

看门狗驱动

arch/arm/mach-sunxi/sun8i.c

/dev/

WIFI

drivers/net/wireless/

wlan0

音频驱动

sound/soc/sunxi

/dev/snd/

SPI控制器

drivers/spi/spi-sunxi.c

/dev/spidev0.0等

按键驱动

drivers/input/keyboard/sunxi-keyboard.c

 

Smart card reader

drivers/char/sunxi-scr/sunxi-scr.c

 

摄像头ov5640

drivers/media/platform/sunxi-vfe/

 

tvin

drivers/media/platform/sunxi-tvd/

 

twi驱动

drivers/i2c/i2c-sunxi.c

 

sata驱动

drivers/ata/ahci_sunxi.c

 


五、 代码路径


HAL代码路径:

设备

源代码在android中的位置

库名

uart/RS485   串口

hardware/aw/serialport

libserial_port


APP代码路径:

名称

源代码在位置

备注

Camera3

vendor/forlinx/public/package/apps

预安装app

MainMenu

vendor/forlinx/public/package/apps

预安装app

chrome

vendor/forlinx/public/package/apps

预安装app

Update

vendor/aw/private/apk/

预安装app

ESFileExplorer

vendor/aw/public/prebuild/apk

预安装app

CarletDriverRecorder

vendor/aw/public/prebuild/apk

预安装app


设备

源代码在用户资料中的位置

备注

Camera3.rar

Android\测试程序

app

MainMenu.zip

Android\测试程序

app


六、 安装Android系统


1、 更新镜像到A40i板卡


烧写镜像存储位置

1 用户资料\ Android\镜像\sun8iw11p1_androidm_a40-OKA40i_C_uart0-1024x600.img

1 用户资料\ Android\镜像\sun8iw11p1_androidm_a40-OKA40i_C_uart0-1280x800.img

USB烧写工具存储位置

1 用户资料\Android\工具\phoenixsuit_V1.1.0_20150325.rar

将phoenixsuit_V1.1.0_20150325.rar在windows下解压后,点击PhoenixSuit_CN.msi进行安装。

 

点击“下一步”,选择“浏览”,选择安装路径。选择“下一步”。

 

选择“下一步”,程序安装。

 

安装完成之后选择“完成”“关闭”。

 

 

安装完成之后,桌面出现PhoenixSuit快捷方式,点击图标 打开USB烧写工具。

 

选择“一键刷机”项,选择“浏览”添加对应镜像路径。

 

上电时,需要同时按下FEL(K3)和RESET(K7)键,然后松开RESET(K7)按键,此时核心板进入OTG烧写模式,然后松开FEL(K3)进行烧写状态;烧写完成后如下:

 


2、 SD卡烧写工具安装使用


1 用户资料\Android\工具\PhoenixCard_V310_20130618.rar

将PhoenixCard_V310_20130618.rar在windows下解压后,双击PhoenixCard.exe运行。

PhoenixCard软件用于将待量产的固件通过SD卡读卡器写入SD卡中。 用户可以选择不同的模式将SD卡烧写成量产模式或者是启动模式,烧写完成后可以用烧写好的SD卡来进行设备量产或者启动。

PhoenixCard软件界面如下:

SD读卡器卡插入电脑usb接口,点击[获取盘符],点击[镜像文件]浏览A40i的固件镜像,选择[卡量产],点击[烧录],制卡完成状态:烧写完成后进度条完成。

制作完成之后的卡,插入断电的开发板,上电。等待烧写,烧写完成后如下: