如何在源代码管理下获得buildroot项目

时间:2014-01-08 21:08:36

标签: git buildroot

我所工作的公司开发的产品需要我们使用的嵌入式Linux,其他许多产品Buildroot

无论如何,我想使用Git将项目置于源代码控制之下,因为它是我们公司所有其他项目的源代码控制工具。问题是我不知道应该在源代码管理中保留哪些文件(因为保持整个buildroot目录似乎过度)。

3 个答案:

答案 0 :(得分:5)

我最近在我们的组织中解决了同样的问题,我发现这是一个有趣的话题。我将在这里描述我们的部分解决方案:

管理您使用的构建版本

编辑:最近的经验对我强调了这一点。

Buildroot为每个版本的Buildroot编写不同的配置文件。为了能够共享这些,您需要向每个人指定您的存储库使用哪个版本的Buildroot。

  1. 您可以在您的仓库中包含Buildroot作为git子模块。好的,如果您的公司只有一个Buildroot项目。
  2. 在README文件中指定要使用的版本,或为其编写自定义检查。
  3. 构建树外

    我强烈建议您使用树构建:http://buildroot.org/downloads/manual/manual.html#_building_out_of_tree

    $ cd ~/platform/proj-arm; make O=$PWD -C path/to/buildroot
    

    将配置文件和目标叠加添加到git

    将.config文件和子配置文件添加到git存储库。我的回购包含以下内容:

    .config
    README.md
    linux.config
    build/busybox-1.22.1/.config
    libdc1394.patch
    opencv_2.3.1a.patch
    target-overlay/README~
    target-overlay/etc/dropbear/dropbear_ecdsa_host_key
    target-overlay/etc/dropbear/dropbear_rsa_host_key
    target-overlay/etc/fstab
    target-overlay/etc/httpd.conf
    target-overlay/etc/init.d/S51mount_html
    target-overlay/etc/init.d/S52new_ip_address
    target-overlay/etc/init.d/S53httpd
    target-overlay/etc/network/interfaces
    target-overlay/etc/shadow
    target-overlay/etc/sshd_config
    target-overlay/lib/firmware/rtl_nic/rtl8168g-2.fw
    target-overlay/root/.ssh/authorized_keys
    

    将更改保存为buildroot作为补丁

    每当您更改buildroot存储库中的内容时,请分支出该功能,并为其创建补丁。将补丁保留在存储库中,并使用README.md文件向其他人解释如何将其应用于buildroot树。

答案 1 :(得分:4)

我通过使用git submodulesbuildroot br-external功能解决了同样的问题。

从这个意义上说,您只需要启动一个空的存储库并导入一个buildroot版本作为它的子模块。

mkdir myrepo; cd myrepo
git init
touch README; git add README; git commit -m "Initial commit"
git submodule add -b <preferred release/tag/branch> git://git.buildroot.net/buildroot
git submodule update --init

然后您可以创建一个br-external目录,并按照BR2_EXTERNAL文档1中的说明填充类似buildroot自己的包/配置/板目录。

mkdir br-external
# below command assumes you have all structures ready somewhere else
cp -fva .../configs .../package .../board br-external
touch br-external/{Config.in,external.mk}
(edit Config.in and external.mk)
git add br-external

执行此操作后,您只需要运行buildroot defconfig步骤,将绝对路径传递到br-external目录,就像这样。

make BR2_EXTERNAL=$PWD/br-external -C buildroot <boardname>_defconfig

您的BR2_EXTERNAL位置会被缓存以进行进一步的调用。

最好的部分是你只需要对br-external内部的内容进行版本控制,并且buildroot以一种所有自定义内容被正确分隔的方式构建配置菜单(“用户提供的选项”菜单项)。

此外,如果您决定将buildroot版本提升到新版本,唯一的麻烦就是升级子模块并提交它。完美的配置管理。

cd buildroot
git pull origin latest-release
cd ..
git add buildroot
git commit -m 'buildroot latest-release upgrade'

答案 2 :(得分:1)

您有两个基本选项。

  1. 最简单的方法是克隆buildroot存储库(它不是很大)并根据发布标记创建自己的分支。这使您可以轻松地对buildroot进行修改,但很难创建全局标记和分支(即为buildroot和您自己的代码提供相同的标记)。但是,如果你想将它与你自己代码的存储库结合起来(所以一切都可以标记在一起),你必须使用git子模块或子树合并(两者都不是很方便),或者你必须将它保存为单独的存储库并使用第二种解决方案进行集成。
  2. 您可以将您的产品基于buildroot tarball并编写一个构建脚本,下载tarball,提取它,配置它(通过调用* make xxx_defconfig *)并构建它。最近添加的BR2_EXTERNAL机制(将于2014.02发布)使您可以轻松地在buildroot树之外保留自己的添加内容。但是,如果您需要更改核心基础结构中的任何内容,则必须在下载的tarball上应用修补程序,这很不方便。
  3. 在您的存储库中提取buildroot tarball并将其导入这样做当然不是一个好主意,因为这使得更新buildroot树甚至应用上游补丁变得很困难。如果您确实需要它在您自己的存储库中,请使用git子树合并,以便至少保留上游历史记录。

    第三种选择是使用Android的 repo 工具来组合buildroot,linux,您自己的代码和您修改的其他软件包的git存储库。这结合了我给出的两个选项中的最佳选择(易于修改并支持全局标签/分支)。但我自己从未尝试过,所以我不能保证它能够很好地运作。