Android源码编译环境搭建

Android源码编译环境搭建

发表于2年前(2013-10-23 10:24)   

linux环境Android源码编译环境搭建

    之前编译系统apk(区别一般apk具有系统签名)、系统库、镜像都是在别人的搭建好的服务器上进行操作的,虽然从事android移植工作快两年了,但还没自己动手搭建一个android源码编译环境,废话不多说,go(HISI芯片,源码是Hisi提供的)。

一、安装linux操作系统

    可以自己的电脑上装一个虚拟机或者双系统,建议用另外一台电脑做服务器,方便以后的工作。linux操作系统安装方式有很多,下面介绍几种常用的安装方法。
    1.用光盘安装(最简单)
    2.linux镜像+wubi.exe(网上资料很多)
首先,空出一个盘符(如F盘),将下载的ubuntu-12.04-desktop-i386.iso单独放在另一个盘如(D盘),从D盘里的镜像中解压出 wubi.exe,并将ubuntu-12.04-desktop-i386.iso和 wubi.exe放在同一个文件夹下用英文命名(如ubuntu-12.04),然后双击 wubi.exe会安装而不会再去下载镜像,安装过程中让你选择盘符时选择想要安装盘如F盘。         
    3.使用u盘进行安装(博主推荐)
    http://blog.csdn.net/xiazdong/article/details/7523331

注意:安装的时候有install和install_server两个选项,server是不带desk无桌面版本,安装的时候选install就行了

二、搭建编译环境(服务、环境变量等)

    由于博主装的是linux_server无界面操作系统,然后通过网上资料查询到装了一个带有界面GNOME(侏儒版本)sudo apt-get install gdm(侏儒版功能很少)
    在装侏儒之后发现无法启动终端,通过网上的方法:alt-f2 然后输入xterm,就可以打开终端了。
    查看是安装了多少位的系统可以通过 getconf LONG_BIT(最好是装64位系统,开始装32位编译的时候各种问题)

安装之后执行下列步骤:

    步骤1:添加root权限
        在新系统安装之后是没有root用户的,我们需要通过sudo passwd root来添加root用户并赋予初始密码。

    步骤2:安装SSH服务

        SSH服务(TCP端口号22,secure shell),安全的命令解释器,为客户提供安全的shell环境,用于远程管理。
        SSH基于公钥加密(非对称加密)技术: 数据加密传输; 客户端和服务器的身份验证; 
        公钥 和 私钥   是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密;
        不能根据一个密钥而推算出另外一个密钥; 
        公钥对外公开,私钥只有私钥的持有人才知道;
        sudo apt-get install ssh 

    步骤3:配置samba

SMB(Server Message Block 信息服务块)协议,是一种在局域网上共享文件夹和打印机的一种通信协议,它为局域网内不同计算机提供文件以及打印机等资源的共享服务。

    安装Samba
    $sudo apt-get install samba smbfs samba-common smbclient
    创建Samba配置文件
    1. 保存现有的配置文件
    $ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
    2. 打开现有的文件
    $ sudo vim /etc/samba/smb.conf
    在 smb.conf 最后添加
[share]
path = /home/share
available = yes
browseable = yes
public = yes
writable = yes
(注意: 上面的设置中,username 换成你的用户名, 如果在前面有“#”,需要先把它去掉)
    创建samba用户
    $ sudo smbpasswd -a USERNAME (USERNAME 换成你的用户名)
    重启Samba服务
    $ sudo /etc/init.d/smbd reload (修改过 smb.conf 的话要执行一次)
    $ sudo /etc/init.d/smbd restart
   最后也是最重要的一点,一定要记得chmod一下home/share目录的权限,要不登陆不进去,会报网络权限不够
     骤4:  安装JDK环境     从官网上下载一个linux_64位JDK版本, http://download.oracle.com/otn-pub/java/jdk/6u38-b05/jdk-6u38-linux-x64.bin?AuthParam=1382075406_61d8d0910661adb3a7ae893a841380dc  下载链接地址
    1.创一个目录用来存放jdk
    mkdir /usr/local/java
    2.把jdk-6u38-linux-x64.bin拷贝到目录下然后执行安装
    ./usr/local/java/jdk-6u38-linux-x64.bin
    3.配置环境变量 
    vi /etc/profile 把下面属性添加到最后一行

#set java environment
export JAVA_HOME=/usr/local/java/jdk1.6.0_38
export JRE_HOME=/usr/local/java/jdk1.6.0_38/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

    4.source /etc/profile 重新加载环境变量 
    5.查看java环境是否配置成功

        java -version

    步骤5:配置交叉工具链
  方法1:直接按照hisi的文档,执行他们提供的脚本一步步来
(1)安装依赖包

?
1
2
3
4
5
sudo  apt-get  install  git-core gnupg flex bison gperf \
build-essential zip curl zlib1g-dev libc6-dev \
lib32ncurses5-dev ia32-libs x11proto-core-dev \
libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos
              ( 2)确保服务器上的shell是bash,如果服务器上的shell不是bash,则执行下面操作
$ cd /bin
$ rm –f sh
$ ln –s /bin/bash /bin/sh
        (3)切换至root用户后,在交叉工具链安装目录包下执行命令:
 ./cross.install
(4)退出服务器登录,重新登录服务器
        (5)最后一步检测, 输入“arm-hisiv200-linux-”后按 tab 键,如果能自动将命令补齐,则说明安装成功。 
            如果无法自动补齐,通过下面命令确认环境变量是否正确:
            echo $PATH 如果不正确请用 root 用户编辑/etc/profile 文件: 
            sudo vi /etc/profile 添加如下语句: 
            export PATH="/home/root/bin/x86-arm/arm-hisiv200-linux/target/bin:$PATH"

        方法2:其他几个步骤和上面差不多,就是不用执行hisi提供的脚本,自己实现脚本里面操作

        (1)解压工具链包,到自定义目录(/usr/local/java/)下面(工具链包hisi有提供)
        (2)配置环境变量
             vi /etc/profile/
             在最后一行添加上export PATH=/usr/local/java/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH
        (3)重新装载环境变量 
             source /etc/profile
        (4)打印$PATH查看下环境是否配好 

            echo $PATH

三、在编译过程中出现的问题

  (1)lunch的时候出现

root@ubuntu:/home/ipanel/zhoulc/Android_4.0_JiuLian# lunch full_godbox-eng The program 'make' is currently not installed. You can install it by typing: apt-get install make ** Don't have a product spec for: 'full_godbox' ** Do you have the right repo manifest?
直接执行:apt-get install make

      (2)lunch的时候/bin/bash: prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-gcc: No such file or directory错误

 解决方法:
安装以下 依赖库才能编译android 和uboot和kernel (其实之前安装过,不过没注意失败了:请看步骤5方法1) sudo aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev  (成功)
            sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev java-common unixodbc  (失败)

           失败的时候出现了会报下面的错误(非常头疼,找了好久才找到)  

?
1
2
3
4
5
6
7
8
9
10
11
12
<b> root@ubuntu64: /home/zhangbin #
root@ubuntu64: /home/zhangbin # sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos
Reading package lists... Done
Building dependency tree      
Reading state information... Done
Note, selecting
'lib32z1-dev'  instead of  'lib32z-dev'
Package lib32readline5-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another  source
However the following packages replace it:
lib32readline-gplv2-dev< /b >
然后执行下面的命令就可以解决找不到/bin/bash: prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-gcc: No such file or directory的问题了

root@ubuntu64:/home/zhangbin# sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev  lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos

      (3)插曲在操作过程中不小心弄坏了环境变量导致root所有命令不能使用
如何恢复linux环境变量 
        这主要是路径问题,先查看$PATH变量的设置。 echo $PATH
里面的格式是xxx:xxx:xxx:xxx 
这应该没包含/usr/bin这个路径。 
执行下面命令就可以将这个路径包含进去: 
export PATH=/usr/bin/:$PATH 这样就可以用root操作命令了。

    然后vi 把/etc/profile 改回来

    (4)编译错误   

     Install: out/host/linux-x86/bin/monkeyrunner
    host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp
    <command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
    <built-in>:0:0: note: this is the location of the previous definition
    cc1plus: all warnings being treated as errors 
    解决方法: vi ./build/core/combo/HOST_linux-x86.mk 
    把 HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0改成 
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

    (5)编译错误
/bin/bash: xmllint: command not found
方法:sudo apt-get  install libxml2-utils

     /bin/bash: xsltproc: command not found
    方法:sudo apt-get install xsltproc

最后附送两份文档
    由于博主没有按文档一步步来操作,所以搭建过程中出现了各种各样的错误,有文档还是好帮手啊。自己动手亲自做了,才知道好多细节问题要注意,最大的收获还是属性了linux的环境和vi操作。
    ubuntu10.04配置手册.pdf+Android SDK 开发指南.pdf.rar

分享到: 2赞
声明:OSCHINA 博客文章版权属于作者,受法律保护。未经作者同意不得转载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
http://www.linuxidc.com/Linux/2014-12/110459.htm Samba-4.1.14服务器安装和配置 http://www.2cto.com/os/201408/327930.html 【Linux笔记】sambav4.1.9源码安装及基本使用说明 http://blog.sina.com.cn/s/blog_627617bf0101s4ps.html samba4.1.6源代码部署及配置 (2014-04-04 09:41:00)转载 2016/6/14 15:23 由于ubuntu14.04.4麒麟版本使用: sudo apt-get install samba安装的samba是:V4.3.9 共享文件时ubuntu上的samba V4.3.9会出错(崩溃)。 所以直接使用源码安装来共享文件了(从win7来访问ubuntu14.04.4麒麟版本)。 标签: samba linux资源共享 smb 分类: Samba SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。 samba服务器搭建: 1.解压samba-4.1.6.tar.gz得到samba-4.1.6目录 tar -xvzf samba-4.1.6.tar.gz 2.进入samba-4.1.6目录,在该目录下输入: ./configure --prefix=/usr/local sudo ./configure --prefix=/usr/local/samba-4.1.6 make make install sudo make install 注意:4.x版本的samba的build system是基于python的,必须安装有python2.5版本以上。(python3.x系列的不行) 如果系统没有符合条件的python版本,可以运行samba-4.1.6目录下的install_with_python.sh,会自动帮你安装python。(./install_with_python.sh /usr/local) 3.创建一个文件夹,用来共享文件 mkdir -p /home/fzuir/share chmod 777 /home/fzuir/share 4.samba配置 将samba源码目录samba-4.1.6中的samba-4.1.6/examples/smb.conf.default复制到安装目录,一般是/usr/local/samba/etc/中 cp ~/samba-4.1.6/examples/smb.conf.default /usr/local/samba/etc/ 修改配置文件 sudo vim /usr/local/samba/smb.conf (1)修改samba服务器的安全模式,samba的安全模式有:(默认是user,不修改也可) share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。 user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。 server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。 domain:域安全级别,使用主域控制器(PDC)来完成认证。 修改方法:在配置文件中查找security=user,把前面的注释#去掉。 (2)添加文件共享定义信息 修改方法:在配置文件末尾添加如下内容: [Share] comment=Shared Folder path=/home/fzuir/share #public=yes(允许匿名访问) writable=yes(可写) #readonly=yes(只读) valid users=fzuir (可访问用户名,组可用 @组名) create mask=0700 directory mask=0700 available=yes browseable=yes [rootroot] comment=rootroot Shared Folder path=/ #public=yes writable=yes #readonly=yes valid users=rootroot create mask=0700 directory mask=0700 available=yes browseable=yes (3)修改编码 在[global]段内添加如下三行: display charset=UTF-8 unix charset=UTF-8 dos charset=cp936 5.添加samba用户 添加fzuir这个网络访问账户,fzuir用户如果已存在则不用。 sudo useradd fzuir 上面只是新增了fzuir这个用户,却没有赋予本机登录密码,所以只能从远程访问,不能从本机登录。而且samba的登录密码可以和本机登录密码不一样。 现在在samba中添加这个帐号 sudo /usr/local/samba/bin/smbpasswd -a fzuir sudo /usr/local/samba-4.1.6/bin/smbpasswd -a fzuir cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ sudo /usr/local/samba-4.1.6/bin/smbpasswd -a rootroot Ignoring unknown parameter "display charset" New SMB password: Retype new SMB password: Added user rootroot. cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ 6.测试并启动samba sudo /usr/local/samba/bin/testparm cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ sudo /usr/local/samba-4.1.6/bin/testparm Load smb config files from /usr/local/samba-4.1.6/etc/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Unknown parameter encountered: "display charset" Ignoring unknown parameter "display charset" Processing section "[homes]" Processing section "[printers]" Processing section "[rootroot]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] dos charset = cp936 workgroup = MYGROUP server string = Samba Server server role = standalone server log file = /usr/local/samba/var/log.%m max log size = 50 dns proxy = No idmap config * : backend = tdb [homes] comment = Home Directories read only = No browseable = No [printers] comment = All Printers path = /usr/spool/samba printable = Yes print ok = Yes browseable = No [rootroot] comment = rootroot Shared Folder path = / valid users = rootroot read only = No create mask = 0700 directory mask = 0700 cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ 重启samba: sudo /usr/local/samba/sbin/smbd restart sudo /usr/local/samba/sbin/nmbd restart sudo /usr/local/samba-4.1.6/sbin/smbd restart sudo /usr/local/samba-4.1.6/sbin/nmbd restart 7.在不同的系统之间访问samba (1)windows下:在文件管理器地址栏中输入\\samba服务器IP 即可以查看共享文件夹或者打印机。 \\192.168.0.8 (2)linux下: 方法1:使用smbclient 客户机以同样方式安装samba ①列出某个IP地址所提供的共享文件夹 sudo /usr/local/samba/bin/smbclient -L 192.168.0.1 -U username%password ②使用smbclient获取共享文件 sudo /usr/local/samba/bin/smbclient //192.168.0.1/Share -U username%password 执行成功后进入smbclient环境,出现命令提示符:smb:\> 这里可使用的命令有: ?:列出所有可用命令 cd:进入共享文件目录 del:删除某个文档 lcd:变换本机目录 ls:查看目前所在目录 dir:同ls get:下载单个文件 mget:下载多个文件 mput:上传多个文件 put:上传单个文件 rm:删除文件夹 exit:离开 方法2:使用mount进行挂载 可以使用mount挂载远程共享文件夹: sudo mount -o username=fzuir,password=123456 //192.168.0.1/Share /mnt/tmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值