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

Tor*_*ato 9 git buildroot

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

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

Try*_*gve 5

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

管理您使用的buildroot版本

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

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

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

在树外建造

我强烈建议在树外构建:http://buildroot.org/downloads/manual/manual.html#_building_out_of_tree

$ cd ~/platform/proj-arm; make O=$PWD -C path/to/buildroot
Run Code Online (Sandbox Code Playgroud)

添加配置文件和目标覆盖到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
Run Code Online (Sandbox Code Playgroud)

将更改保存为buildroot作为修补程序

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


mil*_*ton 5

我通过使用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
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一个br-external目录并将其填充,类似于buildroot自己的package / configs / board目录,如BR2_EXTERNAL文档1中所述

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
Run Code Online (Sandbox Code Playgroud)

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

make BR2_EXTERNAL=$PWD/br-external -C buildroot <boardname>_defconfig
Run Code Online (Sandbox Code Playgroud)

您的BR2_EXTERNAL位置将被缓存以供进一步调用。

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

另外,如果您决定将buildroot版本升级到较新的版本,唯一的麻烦就是升级子模块并提交。非常适合配置管理。

cd buildroot
git pull origin latest-release
cd ..
git add buildroot
git commit -m 'buildroot latest-release upgrade'
Run Code Online (Sandbox Code Playgroud)


Arn*_*out 1

您有两个基本选择。

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

在存储库中提取 buildroot tarball 并像这样导入它当然不是一个好主意,因为这使得更新 buildroot 树甚至应用上游补丁变得困难。如果您确实希望将其放在自己的存储库中,请使用 git subtree merge,这样至少可以保留上游历史记录。

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