Tiny4412 开发板 编译环境搭建【转】
本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369
版权声明:本文为博主原创文章,未经博主允许不得转载。
- /**************************************************************************************
- * Function : Tiny4412 开发板 编译环境搭建
- * Create Date : 2016/04/04
- * Author : NTSK13
- * Email : beijiwei@qq.com
- * Copyright : 欢迎大家和我一起交流学习,转载请保持文章的完整性。
- 任何单位和个人不经本人书面允许不得用于商业用途。
- ***************************************************************************************
我使用的是VirtualBox +Ubuntu
VirtualBox 版本 : 5.0.16 r105871 (使用最新版即可)
Ubuntu : ubuntu-15.10-desktop-amd64.iso
在安装的时候安装语言选择 English,不建议选择中文,方便开发。
在安装的时候,虚拟机不要联网。
配置用户的时候设定一个密码,比如1234.
记住这个密码,以后设置root登录的时候会用到这个密码。
建议有空间的选择70GB以上的空间,、我的62GB,编译完之后就剩余1GB 左右了。
以下是配置:
<1> 以root用户登录
1、先解除root锁定,为root用户设置密码
打开终端输入:sudo passwd root
Password: <--- 输入你当前用户的密码,就是之前安装Ubuntu的那个密码1234
Enter new UNIX password: <--- 新的Root用户密码
Retype new UNIX password: <--- 重复新的Root用户密码
passwd:已成功更新密码
2设置root自动登录
sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
文件内容最终为:
[SeatDefaults]
autologin-user=root #启动后以root身份自动登录
greeter-session=unity-greeter
user-session=ubuntu
在刚修改完root权限自动登录后,发现开机出现以下提示:
Error found when loading /root/.profile
stdin:is not a tty
…………
解决方法:在终端中用命令gedit /root/.profile,打开文件后找到“mesg n”,
将其更改为“tty -s && mesg n”。
<二>虚拟机窗口大小问题 和共享文件夹的设置
这个需要安装Guest Additions(增强包) 在VirtualBox 安装目录下有这个iso
1.安装:VirtualBoxGuestAddition.iso文件
可以在VirtualBox的安装目录下找到。
直接在虚拟机的主菜单上点击“安装增强功能”,Unbuntu会自动挂载一个iso。
打开终端,cd /media/cdrom0目录下,运行sudo ./VBoxLinuxAdditions-x86.run。待完整的出现下面的信息后表示安装成功了。
Verifying archive integrity... All good.
Uncompressing VirtualBox 3.0.4 Guest Additions for Linux
installation......................................................................................................
..................................................................................................................
......
VirtualBox 3.0.4 Guest Additions installation
Building the VirtualBox Guest Additions kernel module...
Building the shared folder support kernel module...
Building the drm support kernel module...
Installing the VirtualBox Guest Additions...
Successfully installed the VirtualBox Guest Additions.
You must restart your guest system in order to complete the installation.
装完重启之后,鼠标就可以在Host主机系统和虚拟系统之间自由移动而不需按右边Ctrl键切换了,而且虚拟系统的窗口可以拉动,
位置合适的话Ubuntu桌面会自动全屏显示。如果开启了与Host系统共享剪贴板的话,还可以在Host系统与虚拟系统之间进行复制/剪切和粘贴。
2.设置共享文件夹
重启完成后点击"设备" ->分配数据空间,添加一个共享文件夹,选项固定和临时是指该文件夹是否是持久的。
共享名可以任取一个自己喜欢的,比如"vboxshd",尽量使用英文名称。
D:\Vbox\shd ,这个是windows 的目录,以后共享文件可以放在这个路径下。
3.挂载共享文件夹
若要使用共享文件夹功能,必须安装linux guest additions,安装增强功能,.如果你不想每一次手动挂载,可以使用以下方法,在系统启动时执行挂接脚本,成功自动挂接
# gedit /etc/rc.local
1. 在文件的最后加入上面手动挂接的命令:
mount -t vboxsf vboxshd /mnt/shd // vboxshd 是共享数据空间的名称
2. cd /mnt/
mkdir shd
注意:一定要在mount之前,确定已经加载了vboxsf模块。
如果不加载的话,会出现mount出错的情况。
/sbin/mount.vboxsf: mounting failed with the error: No such device
Ubuntu启动后 一般会在 /media/ 目录下挂载共享文件夹。
<三>添加国内 Ubuntu 源
如果不添加,接下来安装 Android 编译需要的工具的时候,有几个无法安装。
cp /etc/apt/sources.list /etc/apt/sources.list_bak
gedit /etc/apt/sources.list
在最后加上:
deb http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse
之后,sudo apt-get update
加其他国内源也是一样的方法。
<四>安装android源代码编译所需的软件包
Ubuntu 默认安装后是不带软件开发相关的组件的,因此需要先安装一系列的软件开发组件,
请先保存你的电脑能正常访问互联网络。
第一步,先从Tiny4412 光盘中拷贝 tools 目录下的 ubuntu 目录到tmp 。
第二步,安装jdk6 :
# cd /tmp/ubuntu/jdk6/
# chmod 755 install-sun-java6.sh
# ./install-sun-java6.sh
第三步,通过执行install-devel-packages.sh 脚本,联网安装软件开发相关的软件包:
# cd /tmp/ubuntu/
# chmod 755 install-devel-packages.sh
# ./ install-devel-packages.sh
中途会询问是否下载软件包,输入Y 回车即可。
最后一步,Android5.0.2 的编译 需要使用的是openjdk-7-jdk,
但是,friend 官方没提这个事情,坑。。。
apt-get install openjdk-7-jdk
之后:执行./ install-openjdk7,sh
附送一个shell 脚本 install-openjdk7,sh 来设置 Javajdk:
=================================================================================================================================
#!/bin/sh
# Update symbolic links for Java
update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java-7-openjdk-amd64/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-7-openjdk-amd64/bin/javac" 1
update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/lib/jvm/java-7-openjdk-amd64/bin/javadoc" 1
update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/libnpjp2.so" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/java-7-openjdk-amd64/bin/javaws" 1
update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jvm/java-7-openjdk-amd64/bin/jar" 1
# Choose the javayou installed as default
update-alternatives --config java
update-alternatives --config javac
update-alternatives --config javadoc
update-alternatives --config mozilla-javaplugin.so
update-alternatives --config javaws
update-alternatives --config jar
# Verify installation
java -version
javac -version
==============================================================================================================
<五>安装交叉编译器GCC
使用的是官方的 arm-linux-gcc-4.5.1 (和Mini210 相同),它在编译内核时会自动采用 armv7
指令集,支持硬浮点运算,下面是安装它的详细步骤。
Step1:将光盘Android 目录中的arm-linux-gcc-4.5.1-v6-vfp-YYYYMMDD.tgz 复制到/tmp 目
录,然后进入到该目录,执行解压命令:
#cd /tmp
#tar xvzf arm-linux-gcc-4.5.1-v6-vfp-YYYYMMDD.tgz –C /
注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change ”的第一个字母,在此
是改变目录的意思。
执行该命令,将把arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1 目录
Step2:把编译器路径加入系统环境变量,运行命令
#gedit ~/.bashrc
编辑~/.bashrc 文件,注意“bashrc ”前面有一个“. ”,修改最后一行为 export
PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin ,注意路径一定要写对,否则将不会有效。
保存退出。
重新登录系统 ,使以上设置生效,在命令行输入
arm-linux-gcc –v ,会出现GCC 相关信息,这说明交叉编译环境已经成功安装
<六>解压安装Android 内核源代码 并编译:
在工作目录/opt/FriendlyARM/tiny4412/android 中执行:
#cd /opt/FriendlyARM/tiny4412/android
#tar xvzf /tmp/Android-5.0.2/linux-3.0.86-YYYYMMDD.tgz
将创建生成linux-3.0.86 目录,里面包含了完整的内核源代码
说明:YYYYMMDD 是发行更新日期标志,请以光盘中实际日期尾缀为准。
(2)解压安装Android 源代码包
在工作目录/opt/FriendlyARM/tiny4412/android 中执行:
#cd /opt/FriendlyARM/tiny4412/android
#tar xvzf /tmp/Android/Android-5.0.2/android-5.0.2-fs-YYYYMMDD.tar.gz
将创建android-5.0.2 目录。
说明:YYYYMMDD 是发行或更新日期标志,请以光盘中实际日期尾缀为准。
ps: android-5.0.2 源码放在那里都无所谓,因为编译工具都加入到 环境变量里边了。
我把源码放在了 /root/aa\文件夹下,fandroid目录中,
android5 就是android5.0.2 源码目录,kernel 是Linux3.0.86 内核 源码 目录。
注意还有两个 编译脚本 bandroid.sh 和 bernel.sh 分别是 android 和kernel 的编译脚本.
编译的时候直接
cd /home/fandroid
./bandroid.sh 和 ./bkernel.sh 就OK了。
这两个文件记得加X权限。
自己写的 bandroid.sh:
======================================================================================
set -e -o pipefail
exec > >(tee android.log)
exec 2>&1
cd ./android5
. setenv
make -j4
./gen-img.sh
rm -rf /media/sf_vboxshd/bin/
mkdir /media/sf_vboxshd/bin/
cd ..
mv ./android5/*.img /media/sf_vboxshd/bin/
mv ./kernel/arch/arm/boot/zImage /media/sf_vboxshd/bin/
======================================================================================
bkernel.sh
======================================================================================
set -e -o pipefail
exec > >(tee kernel.log)
exec 2>&1
cd ./kernel
cp tiny4412_android_defconfig .config
make -j4
======================================================================================
编译 android 的时候 可能会遇到如下问题:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Error: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar: unknown package name of class file com/slsi/sec/android/HdmiService.class
target Symbolic: libgui (out/target/product/tiny4412/symbols/system/lib/libgui.so)
target Symbolic: libskia (out/target/product/tiny4412/symbols/system/lib/libskia.so)
out/target/common/obj/PACKAGING/public_api.txt:20: error 5: Added public field android.Manifest.permission.BACKUP
out/target/common/obj/PACKAGING/public_api.txt:81: error 5: Added public field android.Manifest.permission.INVOKE_CARRIER_SETUP
out/target/common/obj/PACKAGING/public_api.txt:105: error 5: Added public field android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
out/target/common/obj/PACKAGING/public_api.txt:115: error 5: Added public field android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST
******************************
You have tried to change the API from what has been previously approved.
To make these errors Go away, you have two choices:
1) You can add "@hide" javadoc comments to the methods, etc. listed in the
errors above.
2) You can update current.txt by executing the following command:
make update-api
To submit the revised current.txt to the main Android repository,
you will need approval.
******************************
build/core/tasks/apicheck.mk:57: recipe for target 'out/target/common/obj/PACKAGING/checkapi-current-timestamp' failed
make: *** [out/target/common/obj/PACKAGING/checkapi-current-timestamp] Error 38
make: *** Waiting for unfinished jobs....
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解决方法:进入 源码目录
cd /root/fandroid/android5/
make update-api
之后 cd ..
./bandroid.sh
重新编译即可。
《七》 配置和编译Linux内核
编译Linux3.0.86 内核:
#cd /opt/FriendlyARM/tiny4412/android/linux-3.0.86
#cp tiny4412_android_defconfig .config ;注意config 前面有个”.”
你可以执行make menuconfig 对配置进行修改,修改完成后,输出make 进行编译:
# make
最后会在arch/arm/boot 目录下生成zImage ,将它替换掉SD 卡images/Android/下的zImage
烧写到Tiny4412 即可。
使用我的脚本:
cd /root/fandroid/android5/
./bkernel.sh
OK
bkernel.sh
======================================================================================
set -e -o pipefail
exec > >(tee kernel.log)
exec 2>&1
cd ./kernel
cp tiny4412_android_defconfig .config
make -j4
======================================================================================
晒一下我编译成功的图:
android开机后的第一个图是官方系统,第二个图是我编译的系统,去掉了 Youtube 等几个 apk。
建议不要使用虚拟机 编译太费时间了,我是 I7 的处理器 +SSD,虚拟机分配了10GB RAM, 完整编译 android 需要2个小时,完整编译 kernel 需要 半个小时。
当然以后单独编译模块会快很多,应该几分钟的事情。
大家酌情使用吧。
Tiny4412 开发板 编译环境搭建【转】的更多相关文章
- IoT设备程序开发及编译环境搭建初体验
引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...
- STM32F407Discovery开发板使用环境搭建
差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...
- ubuntu12.04下CKermit与开发板交互环境搭建
CKermit蛮好的一个调试工具!就像在windows下的telnet,但是还是折腾了一下,现在看来,非常容易,其实我主要是在开发板为正常工作的情况下,以为是CKermit的问题,其实是我开发板开机设 ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- 编译 Linux 3.5 内核烧写 Android 4.2.2 到 Tiny4412 开发板
. . . . . 昨天已经编译了 Android 4.2.2 的源码,详见<Ubuntu 14.04 编译 Android 4.2.2 for Tiny4412>一文. 今天我们继续剩下 ...
- ubuntu12.04下安卓编译环境搭建总结
前言: 因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...
- 内容分享-迅为IMX6开发板编译问题及解决方法
[经验分享]IMX6开发板编译问题及解决方法本文转自迅为IMX6开发板售后讨论群,分享给大家~ 物理主机 win10 64 位专业版.虚拟机 VM12 Pro.开发环境采用迅为提供的开发环境: Ubu ...
- 使用Kotlin开发Android应用 - 环境搭建 (1)
一. 在Android Studio上安装Kotlin插件 按快捷键Command+, -> 在Preferences界面找到Plugins -> 点击Browse repositorie ...
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
随机推荐
- 梦想CAD控件com接口扩展数据
随着CAD应用软件的飞速发展,经常需要保存一些与图形可视性无关的数据,即非图形参数.例如在绘制化验样图中包含品位数据.MxCAD定义了一类参数——实体扩展数据.扩展数据与实体的可视性无关,而是用户根据 ...
- Redis系列(十)--集群cluster
在之前学习了Master-Slave.Sentinel模式,但是在某些情况下还是无法满足系统对QPS等要求,这时候就需要Cluster,Redis3.0支持了cluster 一.为什么使用Cluste ...
- 00JAVA EE
JAVA EE 三层架构 我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器.在JavaEE开发中,几乎全都是基于B/S架构的开发.那么 ...
- 网络编程 - 简单的socket例子
1.客户端 #客户端import socketclient=socket.socket() #生成socket连接对象client.connect(("localhost",696 ...
- TWaver MONO Design中动画的导出与播放
使用过MONO编辑器的朋友都应该了解MONO中支持一些动画的设置,比如开门,开窗,弹出设备,旋转场景,镜头巡航等.但如何将这些动画应用到自己的场景中呢?比如我们在编辑器中给机柜定义了动画,怎样让做好的 ...
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...
- [luogu4127 AHOI2009] 同类分布 (数位dp)
传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...
- Python使用Flask框架,结合Highchart处理csv数据(引申-从文件获取数据--从数据库获取数据)
参考链接:https://www.highcharts.com.cn/docs/process-text-data-file 1.javascript代码 var options = { chart: ...
- Python基础之变量进阶
变量的引用 变量和数据都是保存在内存中的: 在python中函数的参数传递以及返回值都是靠引用传递的. 函数引用的概念 在python中 变量和数据时分开存储的: 数据保存在内存中的一个位置: 变量保 ...
- log4j.properties配置内容的理解
一直知道log4j是用来记录日志的,但一直没去看log4j到底是怎么用的,这两天看了几个log4j.properties配置语句详解的帖子,在这里简陋地记录一下. 在完全不知道log4j怎么用的时候, ...