查看“固件构建指南——环境搭建与编译步骤”的源代码
←
固件构建指南——环境搭建与编译步骤
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=编译环境搭建= ==安装Ubuntu操作系统== 建议装在本机(编译速度快),没有条件的可以装在虚拟机中。 推荐版本:16.04LTS Desktop AMD64(其他版本也可(必须为64位),但可能会存在软件包源依赖问题导致配置步骤和预期效果与本文不符,有能力的用户可以尝试!) ==安装所需组件== 在终端窗口内输入下列命令: sudo apt-get install bison build-essential ccache curl flex gcc-multilib g++-multilib git gnupg gperf lib32ncurses5-dev sudo apt-get install lib32z1-dev libc6-dev-i386 libgl1-mesa-dev libreadline6-dev:i386 libx11-dev:i386 libxml2-utils m4 sudo apt-get install python-markdown tofrodos unzip x11proto-core-dev xsltproc zip zlib1g-dev:i386 bc u-boot-tools sudo apt-get install gawk #A133编译必需 ==安装JDK== ===安装Oracle JDK 1.6(针对Android 4.4)=== 1. 下载jdk-6u45-linux-x64.bin(可在资料光盘/环境搭建中下载) 2. 在Ubuntu系统中创建JDK安装目录(若已存在则可跳过): sudo mkdir /usr/lib/jvm 3. 拷贝jdk-6u45-linux-x64.bin到此目录: sudo cp jdk-6u45-linux-x64.bin /usr/lib/jvm 4. 执行安装: cd /usr/lib/jvm sudo chmod 777 jdk-6u45-linux-x64.bin sudo ./jdk-6u45-linux-x64.bin 安装完成后会在当前目录下生成jdk1.6.0_45文件夹。 5. 配置环境变量 编辑/etc/profile文件: sudo gedit /etc/profile 在文件结尾添加: export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin 保存后重启系统生效。 ===安装OpenJDK 7(针对Android 5.1/6.0)=== 由于目前16.04LTS软件源已移除OpenJDK 7,无法通过apt-get安装,这里提供一个较老版本的离线安装包。 1. 下载openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz(可在资料光盘/环境搭建中下载) 2. 在Ubuntu系统中创建JDK安装目录(若已存在则可跳过): sudo mkdir /usr/lib/jvm 3. 拷贝openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz到此目录: sudo cp openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz /usr/lib/jvm 4. 解压并重命名: cd /usr/lib/jvm sudo tar xvf openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz -C . sudo mv java-se-7u75-ri java-7-openjdk-amd64 目前不需要配置环境变量,因为Android BSP的Makefile可以自动查找java-7-openjdk-amd64这个路径并调用它。 ===安装OpenJDK 8(针对Android 7.1/10/13)=== 在终端窗口中输入下列命令: sudo apt-get update sudo apt-get install openjdk-8-jdk 注意:目前发现最新的OpenJDK 8(运行命令/usr/lib/jvm/java-8-openjdk-amd64/bin/java -version查看版本为8u292-b10-0ubuntu)与Android 7.1(可能10/11也存在此问题)BSP中的Jack编译工具存在兼容性问题,导致Jack Server不能正常启动,无法完成编译(禁用Jack后仍无法正常编译)。建议退回到老版本(1.8.0_03-Ubuntu或其他较老的版本),并关闭系统自动更新防止又自己升级到最新。方法: 1. 卸载原OpenJDK-8:sudo apt-get purge openjdk-8-jdk 2. 检查当前系统软件源有哪些OpenJDK-8可用版本:apt-cache madison openjdk-8-jdk 3. 安装老版本的OpenJDK-8:sudo apt-get install openjdk-8-jdk=版本名 注:可能需要先安装该版本的依赖库后才能安装成功,具体请参考apt的提示进行操作。另参考下面的资料: [https://www.cnblogs.com/EasonJim/p/7144017.html Ubuntu通过apt-get安装指定版本和查询指定软件有多少个版本] ==降级make版本== 1. 下载make-3.81.tar.gz(可在资料光盘/环境搭建中下载) 2. 解压、编译并安装: tar xvf make-3.81.tar.gz -C . cd make-3.81 ./configure make sudo make install 3. 替换原有make 上述操作默认将make安装到/usr/local/bin下,我们备份下原版本(4.1)并链接当前版本(3.81): cd /usr/bin sudo mv make make.bak sudo ln -s /usr/local/bin/make make 此时再执行make -v显示版本为GNU Make 3.81。 =编译步骤= ==解压源代码== 解压Lichee(Linux BSP)部分到当前目录: $ tar -zxvf lichee.tar.gz -C . 解压Android部分到当前目录: $ tar -zxvf android.tar.gz -C . (对于A133:Linux BSP更名为Longan,注意辨别!) ==源码结构== 对于A33/A64/A40i: SPL(底层引导代码):lichee/brandy U-Boot:lichee/brandy/uboot-xxxx.xx Linux内核:lichee/linux-3.x 系统配置(env.txt和fex文件等):lichee/tools/pack/chips/sunxiwxpx/config Android源码:android 对于A133: SPL(底层引导代码):longan/brandy U-Boot:longan/brandy/brandy-2.0/uboot-2018 Linux内核:longan/kernel/linux-4.9 系统配置(env.txt和fex文件等):longan/device/config/chips/a133/config Android源码:android 对于T527: SPL(底层引导代码):longan/brandy U-Boot:longan/brandy/brandy-2.0/uboot-2018 Linux内核:longan/kernel/linux-5.15 Allwinner BSP源码:longan/bsp(即全志自己的驱动、内核配置等已经与主线kernel分开存放了) 系统配置(env.txt和fex文件等):longan/device/config/chips/t527/config Android源码:根目录(注意longan目录已经在Android源码根目录下了) ==编译U-Boot== 默认无需编译。若要修改U-Boot,编译方法如下: 在brandy/uboot-xxxx.xx目录下(对于A133/T527为brandy/brandy-2.0/uboot-2018)执行: 对于A33:make distclean & make sun8iw5p1 -j16 对于A64:make distclean & make sun50iw1p1_config & make -j16 对于A40i:make distclean & make sun8iw11p1_config & make -j16 对于A133:make distclean & make sun50iw10p1_config & make -j16 对于T527:make distclean & make sun55iw3p1_defconfig & make -j16 (编译生成的相关bin文件会自动拷贝到打包目录下) ==编译Lichee/Longan== 初次编译(使用原厂源码)请先配置编译选项,在lichee(A133为longan)目录下执行: $ ./build.sh config 会依次显示若干选项,输入对应的数字按回车选择对应的选项,最终完成配置。 对于A33(Android 4.4):依次选 0.sun8iw5p1 -> 0.android-> 0.linux-3.4 -> 0.vstar 对于A64(Android 6.0):依次选 0.sun50iw1p1 -> 0.android -> 0.linux-3.10 -> 2.p2 对于A40i(Android 7.1):依次选 0.sun8iw11p1 -> 1.androidm -> 0.linux-3.10 -> 0.a40-p1 对于A133(Android 10):依次选 0.android -> 0.a133 -> 2.c3 对于T527(Android 13):依次选 0.android -> 2.t527 -> 0.hdevb -> 2.default (弘迪开源源码默认已经进行了此配置,可无需执行!) 然后进行编译: $ ./build.sh ==编译Android并打包== 在android目录下依次执行以下命令: $ source build/envsetup.sh $ lunch 会显示若干选项,输入对应的数字按回车选择对应的选项,最终完成配置。 对于A33(Android 4.4):选 vstar-eng 对于A64(Android 6.0):选 tulip_p2-eng 对于A40i(Android 7.1):选 a40_p1-eng 对于A133(Android 10):选 ceres_c3-eng 对于T527(Android 13):选 t527_hdevb_arm64-userdebug $ extract-bsp $ make -j8 CPU有几线程-j后面的数字就是几。例如使用i5 8250U,是4核8线程的处理器,则这里参数为-j8。若make过程中出现内存不足的情况可尝试参数降为-j4或更低。编译过程大概持续数小时,视电脑配置不同而定。 $ pack 对于A33/A64/A40i:打包好的固件位于lichee/tools/pack下面。 对于A133/T527:打包好的固件位于longan/out下面。 ==清理源码(用于打包备份)== 清理Linux BSP: 对于A33/A64/A40i:执行lichee下的./clean.sh即可。 对于A133/T527:执行longan下的./build.sh clean即可。 清理Android: 在android目录下执行make clean即可清理已编译内容。 =常见问题= A:关于A33 Android 4.4编译Lichee遇到的报错 Q:需要修改源码的下列部分: lichee/brandy/u-boot-2011.09/Makefile中删掉-llounny lichee/brandy/u-boot-2011.09/arch/arm/lib/board.c中删掉下列内容: extern void setup_vga_output_mode(void); extern void lounny_verify(void); setup_vga_output_mode(); lounny_verify(); lichee/brandy/u-boot-2011.09/board/sunxi/Makefile中删掉COBJS-y += vga_output_mode.o和COBJS-y += lounny.o lichee/linux-3.4/drivers/misc/Makefile中删掉下列内容: obj-$(CONFIG_HDGM_ENCRYPT) += hdgm_encrypt.o obj-$(CONFIG_HDGM_ENCRYPT) += liblounny.jmk A:A64 Android 6.0编译android部分时遇到“unsupported reloc 42 (43) against global symbol art::Runtime::instance_”错误 Q:问题的原因在于AOSP中的预编译好的ld程序存在bug,我们使用Ubuntu系统默认的ld来替换它。具体步骤如下: 将aosp中的ld改名: $ cd prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin $ mv ld ld.old 使用soft link,链接到全局ld: $ ln -s /usr/bin/ld.gold ld
返回至
固件构建指南——环境搭建与编译步骤
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
工具
链入页面
相关更改
特殊页面
页面信息