- A+
今日科技快讯近日,有消息称阿里体育A轮融资估值70亿元。阿里体育集团成立于2015年9月,由阿里巴巴控股,新浪和云峰基金共同出资。成立之初,即成为国际足联俱乐部世界杯2015-2022年的独家冠名赞助商。去年1月,阿里体育又将美国职业橄榄球大联盟NFL在中国的转播权纳入囊中。
作者简介本篇作者 Nipuream,陆陆续续投了好几篇稿,算是作者里的老司机了。今天,他将分享编译Android源码并写入硬件设备的过程,感兴趣的朋友可以仔细看看。
Nipuream的博客地址:
http://blog.csdn.net/yanghuinipurean
搭建环境16年底,从深圳转战到杭州,当然也重新换了份工作,记得刚来的时候非常的辛苦,因为10月份广东还是比较热的,到杭州这边好冷,那时候严重的不适应,很严重的感冒… 这段时间尝试去了解了下源码,还是收获很多的,现在努力学习cpp中,准备往这方面转了。因为新公司都是在源码上编译的,所以或多或少也学习研究了下,记得刚开始下载Android源码的时候,那个蛋疼,折腾了我一个多星期,现在写篇文章总结下。
我选择的是在window上安装虚拟机,我知道好多人用mac去编译,穷屌丝也有穷屌丝的门路,钱不是我们阻止我们学习的障碍,充分利用window和linux各自的优势,我觉得并不比mac逊色多少。安装好了如下图所示:
sudo apt-get install Git-core gnupg flex bison gperf build-essential zip curl zliblg-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
根据我惨痛的经历,一般编译不成功基本都是环境有问题,代码有问题的可能性是非常的小的。如果有些库安装不了,使用sudo apt-get update一下,如果还是不行,就得自行搜索解决一下了。另外还要安装交叉编译器和jdk,其中如果对交叉编译器不明白的或者不知道如何配置的请看这篇文章
http://www.linuxidc.com/Linux/2013-06/85902.htm
其中jdk需要注意的是在android5.0之后就要使用openjdk了,具体原因就是因为Oracle和google的那场官司了,使用命令 apt-get install openjdk-7-jdk.安装完成之后得配置下环境变量,可以在 etc/profile 或者是 ~/.bashrc文件最后输入:
配置成功后,应该如下图所示:
另外,交叉编译器安装成功之后,要将Linux根目录的Makefile文件中cpu架构改成arm的,如下图所示:
编译编译linux
执行build.sh config配置环境:
然后直接执行 ./build.sh 命令开始编译
首先要切换到我们的android目录下,然后执行envsetup.sh脚本配置我们的环境,然后选择我们要编译的分支,具体步骤如图:
接下来,我们要把 linux 编译好的 uboot 和 kenel 拷贝到我们 android 目录下,因为我们已经执行过我们的 envsetup.sh 脚本了,而 envsetup.sh 脚本又执行了我们的 device/softwinner/common/vendorsetup.sh 脚本,vendorsetup.sh 的脚本中有个函数叫做 extract-bsp(),我们来看下这个函数:
可以看到从 linux 目录拷贝 kernel 和一些 modules,需要主要的是 get_lichee_out_dir() 函数,Linux 目录一定要放在android目录上层目录下,自己查看源码即可。
接下来,我们便可以执行我们的make命令来编译我们的android系统了,make后面可以带个参数表示执行编译的线程条数,如果make -j8,后面的数字一般都是你电脑cpu的核数乘以2。
我的电脑是6核的,所以我可以用 make -j12,但是我就使用了 make -j8,整个编译的过程很漫长,中途可能会报错,报错的原因90%以上都是环境没有配置好,大概一般的3个小时50分钟左右就会编译结束,当然这个时间也是根据你计算机cpu的能力的,像用公司的编译服务器编译,只需要十几分钟…
编译成功后,我们使用 vendorsetup.sh 脚本里面的 pack函数 将编译出来的镜像文件打包成 rom,如图所示,红色部分表示生成的路径。
具体每个厂商都会提供烧录软件的,即使没有提供也会把烧录的步骤的脚本发给你的,比如芯灵图家的A33板子就是用 PhoenixSuit 烧录的,我们公司的是在 fastboot 模式下,烧录rom的。按照具体的步骤做就行了,接下来发张将自己编译过的 android6.0系统 烧录到硬件的效果图,很是有成就感,有么有。
访问虚拟机毕竟是两个系统,操作起来也不是很方面,文件互访有很多方案,但是我觉得基于 samba 服务是最方便的,window本身就集成了samba服务,所以只需要在ubuntu系统上安装下即可,首先 sudo apt-get install samba,安装完成之后,敲入命令 vim /etc/samba/smb.conf , 在这个文件末尾添加几句话,如图所示:
接下来设置 root 的密码,敲入命令 smbpasswd -a root ,然后重新启动samba服务, service smb restart,查看samba进程是否启动 ps -ef。注意有点非常的重要,我们需要设置虚拟机网络为桥接模式,这样就会自动获取ip连接网络了。最后在window上映射我们Linux的磁盘,如图所示:
输入我们虚拟机的ip就行了,进入Z盘就很方便的访问我们linux中的文件系统了。可以看到这就是我们的Linux文件系统的根目录。当然你也可以通过ssh访问我们的linux,下面是我通过Xshell访问我们的虚拟机。
原文链接:https://news.html5.qq.com/share/3818170161?ch=060000&tabId=0&tagId=MttWXSource&docId=3818170161&url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzA5MzI3NjE2MA%3D%3D%26idx%3D1%26mid%3D2650239167%26sn%3D68ce12a5a0fab3cceda9bae8d889504b&clientWidth=360&dataSrc=85&qburl=qb%3A%2F%2Fext%2Fread%3Fcid%3DMttWXSource%26type%3D0%26mttsummaryid%3D3818170161%26b_f%3D060000%26bizid%3D1&sc_id=G5Oy8DB
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫