我工作的公司开发的产品需要我们使用的嵌入式Linux,就像许多其他的Buildroot一样.
无论如何,我想使用Git将项目置于源代码控制之下,因为它是我们公司所有其他项目的源代码控制工具.问题是我不知道应该在源代码管理中保留哪些文件(因为保持整个buildroot目录似乎过度使用).
我最近在我们的组织中解决了同样的问题,我发现这是一个有趣的话题.我将在这里描述我们的部分解决方案:
管理您使用的buildroot版本
编辑:最近的经验对我强调了这一点.
Buildroot为每个版本的Buildroot编写不同的配置文件.为了能够共享这些,您需要向每个人指定您的存储库使用哪个版本的Buildroot.
在树外建造
我强烈建议在树外构建: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树.
我通过使用git submodules和buildroot 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)
您有两个基本选择。
在存储库中提取 buildroot tarball 并像这样导入它当然不是一个好主意,因为这使得更新 buildroot 树甚至应用上游补丁变得困难。如果您确实希望将其放在自己的存储库中,请使用 git subtree merge,这样至少可以保留上游历史记录。
第三种选择是使用 Android 的repo工具来组合 buildroot、linux、您自己的代码和您修改的其他包的 git 存储库。这结合了我给出的两个选项中最好的一个(易于修改并支持全局标签/分支)。但我自己从未尝试过,所以我不能保证它会很好用。