X-000-PRE-开发环境搭建

作者:wowo 发布于:2016-4-23 20:20 分类:X Project

1. 前言

本文是“X Project”的第一篇文章,介绍怎么从零开始搭建“X Project”的开发环境(同样适用于其它的嵌入式Linux开发)。通过该过程,可以使读者对嵌入式Linux开发的基本流程有一个简单的了解,以达到“知其然、知其所以然”的目的。

注1:有关“X Project”的介绍和讨论,可参考“http://www.wowotech.net/forum/viewtopic.php?id=2”。

2. 文章命名规则

由于项目会发布很多文章,为了方便大家阅读,制订了一个简单的规则,即“项目代码-编号-模块名-文章名”这样的四段编码:

项目代码,识别特定的项目,对“X Project”来说,代码为“X”;

编号,是一个3位的十进制数,如000,001等,用来标示先后顺序;

模块名用于区分涉及到的功能模块,初步计划有如下模块:PRE(开发前的准备阶段,如开发环境等);UBOOT;KERNEL;ROOTFS;DEBIAN;UBUNTU;ANDROID,后续如果有需要,会再增加。

文章名,本篇文章的描述。

3. 开发环境组成

如今的嵌入式Linux开发,涉及如下的开发环境:

开发过程

图片1 嵌入式Linux开发环境组成

1)Internet

这是一个open source的时代,linux kernel又是open source的典型代表,因此,Linux相关的开发工作,一定不能离开互联网:

在“X Project”的初期阶段,我们会从Internet搜集各种开源软件,如U-boot、Linux kernel等,作为我们开发的基准;

在“X Project”的开发阶段,我们会从Internet查阅知识、讨论问题,并将阶段性的成果分享出来;

等等。

2)Code server & Code review server

Linux相关的开发工作,涉及到非常庞大的代码量,u-boot、kernel、android等等,同时又是多人协同工作,因而需要一台服务器以及相应的版本管理工具管理这些代码,这就是代码服务器(code server)。得益于open source的力量,提供了免费的Git(版本管理工具)以及github[1](代码服务器),我们就恭敬不如从命了。

与此同时,为了提高代码质量,提交到代码服务器的代码,需要经过多人的审核,才能最终被接受,这就是代码审核服务器的作用(code review server)。同样,我们有强大的open source,可以使用免费的Gerrit(代码审核工具)以及gerrithub[2](代码审核服务器)。

注2:代码审核的过程,也是一个互相学习、互相提高的过程,希望大家能够重视,积极参与。

3)Build server

编译服务器(Build server)负责把程序员语言(汇编/C/C++等)转换为机器语言。由于代码量庞大,编译的过程非常消耗CPU和memory资源(换句话说,耗钱!),所以,再伟大的open source,在钱面前,都麻烦了,结果是我们没有免费的编译服务器可供使用。

通常情况下,在公司环境中,会有几台专用的PC(或server),当作编译服务器,负责代码的编译工作。但是在开放社区(例如我们的“X Project”),由于条件有限,大家只能使用个人的PC,作为编译服务器。

4)Host

Host是我们日常工作用的PC,在开发过程中,负责如下事项:

登陆到Build server,进行代码的下载、编译、上传等工作(如果PC就是build server,则省略登陆的过程);

上网查阅资料;

和小伙伴们交流、讨论、沟通;

文档的记录和整理;

和Target交互,进行固件更新、状态监控、调试、测试等工作。

5)Target

Target是嵌入式Linux运行的目标硬件平台,例如开发板、手机等。Target可以联网,可以在项目开发的初期通过Uart、USB等和Host通信。

4. 开发步骤

“X Project”的开发步骤总结如下:

1)准备工作,包括:

Target、Host、Build server、Code server、Code review server的准备;

初始化Code server,确定基本的目录结构;

从开源社区import基础的开源软件,当前主要包括u-boot和kernel。

2)代码下载

3)设计、coding、编译

4)将编译结果放到Target中运行

5)将改动提交到代码审核服务器审核

6)如果审核不通过,继续步骤3~5

7)如果审核通过,自动merge到代码服务器

8)重复步骤3~7,直至取得阶段性的成果

9)将阶段性成果push到开源社区,然后重复步骤3~8,直至项目完成

5 开发环境搭建

5.1 Target

由“关于“X Project””的可知,“X Project”对Target没有要求,大家手边的开发板、旧手机等设备,只要满足如下的条件,就可以使用:

功能正常;

有简单的硬件资料;

有简单的原理图;

能否从USB、SD/MMC卡、U盘等任意一种介质启动。

5.2 Host和Buid server

Host和Build server可以是同一台PC(相信大部分人都是如此),也可以使用多台PC。Host没有特殊要求,Windows系统或者Linux都OK。但Build server一定要选用Linux环境,有三种方案:

1)Linux OS(如Ubuntu、Debian等)。

2)Windows OS,使用虚拟机(VMware或者VirtualBox)运行Linux OS(Ubuntu、Debian等)。

3)Windows OS,使用Cygwin、MSYS2等GNU模拟器,模拟Linux环境(使用这种方法的时候,需要特别注意,Linux kernel的source code中,同一个目录下存在两个名称相同、只有大小写不同的文件,而Windows系统不区分大小写,因而会出现问题)。

Build server应安装代码编译所需基本工具,如git、make、binutils、make、交叉编译工具等。有关Build server的大家,本文不再详细介绍(相信大家的折腾能力),如有需要,后面会使用单独的文章描述。

5.3 Code server
5.3.1 github

我们使用github作为code server,相关的步骤包括:

1)注册github账号并登陆。

2)创建一个组织(organizations),用来将该项目的多个代码仓库分组(group)。

创建组织的链接如下:https://github.com/account/organizations/new

最终“X Project”所在的组织地址为:https://github.com/wowotechX

具体的创建步骤不再详细介绍,大家如有疑问,可以论坛中提问。

注3:github没有为代码仓库(repository)提供分组功能,如果账号下面创建、clone的仓库过多,Dashboard下面会存在长长的一串仓库列表,非常不便。再加上如果有些仓库名类似的话,就更麻烦了。这个问题可以借助github的organizations功能解决(organizations的初衷并不是做这个事情),即为每一个项目,创建一个organizations,该organizations下所有的仓库独立分组(类似于一个目录)。

5.3.2 代码仓库的规划

“X Project”暂时提供如下的仓库(repository),后续会根据需要新增:

u-boot,基于最新版本的u-boot开发,提供bootloader的功能;

linux,基于最新版本的kernel开发,会在某一个时间的,rebase到为了一个long team的kernel上;

build,提供代码编译相关的工具、脚本等,暂时包括如下目录:
        tools,各个平台的交叉编译工具;
        scripts,一些方便的编译脚本。

tools,编译之外的工具支持,如固件的打包、添加header等,暂时包括如下目录:
        common,通用工具及其Makefile文件;
        xxx,某个芯片厂商有关的特定目录(例如有些芯片需要为boot image添加特定的header等)。

5.3.3 代码仓库的初始化

1)新建u-boot repository,并从官网导入当前版本

新建repository的链接为:https://github.com/organizations/wowotechX/repositories/new

创建成功后的repository地址为:https://github.com/wowotechX/u-boot

通过repository页面底部的import按钮,可以从外部导入代码:
        导入的链接为:https://import.github.com/wowotechX/u-boot/import
        可以从u-boot的官方仓库导入:git://git.denx.de/u-boot.git
        填入地址后,github会自动导入,关闭浏览器,睡觉去吧,等待导入完成即可。

注4:代码导入完成后,该仓库所有的分支、提交记录等信息,都会保留,通过git命令即可查看。

2)从Linus的github clone当前版本的linux的kernel

j经过实践,发现采用import的方式,无法成功导入linux kernel,因此这里直接从Linus的github clone,源地址为:

https://github.com/torvalds/linux

clone后位于的地址为:

https://github.com/wowotechX/linux

注5:使用mainline版本不一定稳定的,不过没关系,后续r我们可以ebase到一个稳定的long team版本上,顺便练习下git的使用。

3)新建build和tools两个仓库,并进行必要的初始化

结果如下(子目录暂未创建,后续在用到的时候,会通过git命令创建):

https://github.com/wowotechX/build

https://github.com/wowotechX/tools

5.4 Code review server

TODO,后续会通过专门的文章,介绍基于gerrithub的代码审核方法。

6 总结

本文完成了“X Project”开发环境的搭建工作,后续还会有两篇作为补充的文章,包括:

X-001-PRE-git介绍及操作记录,用于记录X Project有关的git操作命令,通过实践的方式,学习、理解并掌握git的使用;

X-002-PRE-基于Gerrithub的代码审核环境的创建及使用指南,介绍基于gerrithub搭建代码审核服务器的过程,及代码审核的方法和流程。

7 参考文档

[1] github,基于Git的代码服务器,www.github.com

[2] gerrithub,基于Gerrit的代码审核服务器,www.gerrithub.io

 

原创文章,转发请注明出处。蜗窝科技,www.wowotech.net

标签: x project git gerrit build environment

评论:

linux
2019-02-16 16:27
您好,怎么让手机从sd卡启动啊,我没有开发板,只有手机(笑哭)
swxu
2017-04-27 20:31
有免费的build server可以用啊,比如Travis CI, 可以和github完美集成。可以基于它做一系列自动化的事情,如提交代码自动触发代码风格检查、编译、单元测试、部署,有很多开源项目在使用。Travis CI对开源项目免费,商用项目或对CPU有额外需求的项目需要收费。
wowo
2017-04-28 13:30
@swxu:多谢提醒,可以试试~
heziq
2016-12-05 11:10
@wowo
是不是我们也要一步一步的在github创建组织呢?然后以后自己上传代码?每个人都维护自己的baseline呢?
wowo
2016-12-05 11:19
@heziq:没必要创建组织的,可以直接在wowotechX上拉分支开发,我可以给你开权限。
如果你想把所有的过程都跑一边,也可以:-)
heziq
2016-12-04 22:13
github老掉线啊
肿么办
wowo
2016-12-05 11:20
@heziq:是,国内用github,很崩溃。不过我觉得还好,除了kernel不好下,其它的一般都能下载下来。
WL
2017-01-03 23:30
@wowo:可以使用VPS虚拟机下载后打包再用scp到本地,我试过,速度很快,也不怕会掉线,只提供参考,详细怎么操作可以留言我
wowo
2017-01-04 14:01
@WL:VPS的流量还是很费钱啊(如果每人一个的话)。据我的经验,hosts+github的ssh模式,速度还可以,几十kb没有问题,勉强还能用~~
WL
2017-01-04 22:48
@wowo:亚马逊AWS有免费的,主要从github上git代码速度很快!
heziq
2016-12-04 21:42
是不是我们也要一步一步的在github创建组织呢?然后以后自己上传代码?每个人都维护自己的baseline呢?
ps:

好久没上wowo,不过我一直在关注它,wowo是国内不多的原创性技术论坛,而且很有深度,非常基础,不过版主挖的坑太多了,好多部分都只是写了一部分,就没有下文了,比如我一直关注的时间子系统。看了这个x project,准备把握N年前的一个开发板给跑起来,开发板的名字我都忘了,好像是三星的一个很有名气的平台。
wowo
2016-12-05 11:20
@heziq:哈哈,确实,有些坑,希望能有时间慢慢补回来。
ary
2016-08-07 18:42
为什么build仓库下没有看到放交叉编译工具的tools目录,编译工具和编译过程是不是用buildroot来做的?
wowo
2016-08-07 20:23
@ary:我刚刚做了调整,交叉编译工具放在一个单独的仓库里面了,通过make env_prepare,会根据当前的配置和环境,自动下载对应的交叉编译工具。
现在没有引入buildroot,交叉编译工具直接用linaro做的。
jansion
2016-06-30 12:22
请问wowo 我们后来者如何才能跟上进度 参与讨论呢?
wowo
2016-06-30 13:19
@jansion:x project的基本实现步骤,我们会发表出来文章,你跟着做就行了。有相关问题的话,在博客或者讨论区发出来,任何时候都有人解答的。
KUCEN
2016-06-16 22:24
版主觉得树莓派,bbb等开源硬件怎么样,能不能也在这些板子上移植
KUCEN
2016-06-16 22:27
@KUCEN:不好意思,提交回复的时候卡了,写重了
wowo
2016-06-16 22:36
@KUCEN:本来我们觉得,只要有足够的硬件资料就可以移植,但现在发现现实很残酷,就我们现在使用的bubblegum-96来说,资料远远不够,以至于我们都是通过一些开源的source code,把硬件信息倒推出来,再移植。
不过不管怎样,总能进行下去,目的还是能达到的。
所以,关于你的问题,我的答案是:肯定可以,大胆的做吧!困难虽多,但难不住有心人。
KUCEN
2016-06-16 13:26
树莓派或者BeagleBone Black之类的开源硬件可以一起玩玩
wowo
2016-06-16 14:20
@KUCEN:欢迎哈,不过我们做的很慢,希望不要介意~~
JL
2016-05-11 15:03
明白了, 谢谢!
期待X project项目的进一步进展!
wowo
2016-05-11 16:15
@JL:多谢,也希望大家一起参与啊:-)

发表评论:

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog