Linux-Linaro Kernel Tree Process
- This Page is Obsolete
This Page is Obsolete
Linux Linaro kernel tree
What the linux-linaro kernel is for
Make it possible to start working on a project depending on features being developed in Linaro, but not yet accepted upstream. And provide a single source for all these features.
- Let the developers to validate their code through the CI loop before submitting it upstream
- Let to test how different features go together (integration testing)
- Let start working on project depending on the features before they make it into upstream
There are two main branches. Each of these branches is created by merging its topic branches (each topic representing a feature) into its base.
- linux-linaro branch (ll) has everything in. Is intended to make the kernel releases from. Should be used by projects which need the most recent Linaro kernel features, and do not provide features for inclusion into linux-linaro. ll is based on linux-linaro-core-tracking tree. ll topics are mostly integration branches from the Landing Teams to enable the board(s) supported - one topic branch per Landing Team.
- linux-linaro-core-tracking branch (llct) follows the mainline, and is based on the most recent -rc. This is where generic, mainline based topics are merged into. This branch is to be used as a baseline to develop board specific code to be included into ll tree. llct topic examples: big-LITTLE-MP, Gator.
Most of llct's and ll's topics are rebased. Hence llct and ll are not history trees.
Both llct and ll are tagged on every update. The tags are llct-YYYYMMDD.X and ll-YYYYMMDD.X respectively (YYYY is year, MM - month, DD - date, X - counter which starts from 0). Since February 2013 every ll-YYYYMMDD.X tag has corresponding ll_YYYYMMDD.X branch, which is created from the tag, and is never updated afterwards. gerrit couldn't handle tags, and uses these branches instead.
One week before the end of every cycle (on the components release date) linux-linaro kernel release are made from the ll tree. The monthly releases are tagged as linux-linaro-V.V-rcX-YYYY.MM-N (V.V-rcX or V.V is the mainline version the tree is based on, YYYY.MM is the cycle like 2013.02, -N (a counter starting from 1) is added if the initial release candidate wasn't good enough, and release has been respinned).
All the other branches in linux-linaro-tracking.git are for internal use.
The ll kernel is released every month to https://releases.linaro.org/YY.MM/components/kernel/linux-linaro , where YY is the year and MM is the month (e.g. 13.08 for the August 2013 release). The manifests there are rather for reference (what stuff the kernel is made from), they are not intended to be used with the ll-fold.sh script to recreate the tree. The released versions of linux-linaro tree is tagged linux-linaro-V.V[-rcX]-YYYY.MM[-N]. Here V.V-rcX (or V.V) stands for the mainline kernel version the tree is based on, YYYY.MM is the year and the month of the release, N is an optional number (starts from 0: YYYY.MM -> YYYY.MM-1 -> YYYY.MM-2 or YYYY.MM-0 -> YYYY.MM-1 ->...) to distinguish between release candidates if they are more than one for a particular release.
All linux-linaro trees are generated by merging all the relevant topics together. The topics, their merge order, and the remote git repositories where the topics are to be pulled from are listed in the manifest file. The current manifest format allows to use specific topic versions (not only the tip), and is being used starting from the 12.05 cycle. The manifest consists of "remote" and "topic" lines, and the order of "topic" lines establishes the order in which the topics are merged: the topic from the 2nd line is merged into the topic from the 1st line, then the topic from the 3d line is merged. etc.
Here is the format of the records:
topic <name> <remote/branch> [TIP|PIN] <commit> [merge|rebase]
- [TIP|PIN] describe the the "version" of the topic to be used when creating the tree:
TIP : use the tip of the topic. <commit> must be "-" (means "tip of the branch") in this case
PIN : pin the topic at particular commitid. <commit> must not be "-"
- merge : merge the topic into the tree.
- rebase : rebase the topic from the most recent llct or the mainline release / release candidate (v3.x[-rc*]) tag onto the current tree before merging the topic into the tree. If the topic doesn't look like llct or the mainline based no rebase is done.
remote <remote name> <remote URL>
where <remote name> matches the <remote> in the "topic" line
Linux Linaro tools
At the moment there is just one script - ll-fold.sh.
To set up a working environment do the following (let's suppose that everything will be in the sanbox directory):
mkdir sandbox cd sandbox git clone git://git.linaro.org/kernel/linux-linaro-manifest.git ll.manifest git clone git://git.linaro.org/kernel/linux-linaro-tracking.git ll cd ll git config rerere.autoupdate true mkdir .git/rr-cache
The directories layout created is important. The kernel tree and the manifests directory must be in the same directory (sandbox in the above example) and the name of the manifest directory must be <kernel directory name>.manifest.
To re-create a kernel tree from the pinned manifest, find out the commit id of the desired pinned manifest (this manual step is the limitation of the current version - go to linux-linaro-manifest.git, select one of the three branches, e.g. linux-linaro-tracking, and check its shortlog). Then from the kernel directory run the following command:
ll-fold.sh <kernel-tree-name> pinned <manifest commit id>
E.g.: example uses the obsoleted llt branch
ll-fold.sh linux-linaro-tracking pinned 7a8cb19163744f5b287548f8f9bdc5ee00d2edb0
The commit id above corresponds to "PINNED manifest and solutions for llt-20120613.0". So the kernel tree created by running the command above would be identical to llt-20120613.0:
Creating linux-linaro-tracking... <snip> Successfully created integration-linux-linaro-tracking *** Creating the pinned manifest is disabled ynk@ynk-srv:~/sandbox/ll$ git branch | grep ^* * integration-linux-linaro-tracking ynk@ynk-srv:~/sandbox/ll$ git show | grep ^commit commit be67582e43353c677cf007d63bca4d82fd23b185 ynk@ynk-srv:~/sandbox/ll$ git show llt-20120613.0 | grep ^commit commit 05655946ee38809bbdc5644321abc4ae82579fa6 ynk@ynk-srv:~/sandbox/ll$ git diff llt-20120613.0 | wc -l 0
Adding a topic to linux-linaro kernel and maintaining it
To have a topic included into linux-linaro, send an email to linux-linaro kernel maintainer with subject like "please add xyz topic to [llct|ll]". The email must contain the URL and the git branch to git pull from. If the topic has dependencies on other topics, these topics must be listed in the email, so that the topic merge order could be properly set up. The email sender becomes the topic owner, and is responsible for keeping the topic up-to-date, and for informing the maintainer about changes to topic's URL or branch name, and about topic obsolescence.
Here are the requirements for the topics:
- The topic must be a branch in a public git repository anyone could pull from. The URL and the branch name should not change as long as possible, and any changes must be emailed to linux-linaro kernel maintainer.
- What tree the topic branch must be based on:
- llct topic must be based on a recent enough -rc of the mainline tree (please don't go ahead of the most recent -rc), or on another topic already in linux-linaro-core-tracking. In the latter case the name of the topic used as the base must be in the "add the topic" request.
- ll topic must be based on a recent enough -rc of the mainline tree (please don't go ahead of the most recent -rc), or on "the agreed llct version" (see below), or on another topic already in linux-linaro. In the latter case the name of the topic used as the base must be in the "add the topic" request.
Often topics come together with config fragments. They belong to the kernel/configs.git at git.linaro.org, config-boards-tracking and config-boards-3.<current number> (the board specific ones), or config-core-tracking and config-core-3.<current number> (the generic ones). The patches for kernel/configs.git should be posted to linaro-dev or linaro-kernel mailing list.
"the agreed llct version" is the one mentioned in the linux-linaro schedule for the current cycle for the nearest ll rebuild.
Here is the list of the topic owner's duties:
- Keep the topic up-to-date. Once added to linux-linaro, the topic will be included into all the further linux-linaro releases. No "add this topic to the next release" request every month is needed. The topic updates are pulled from the topic's remote repos into linux-linaro-tracking repo regularly. Topics are not required to be history trees, rebasing the topics is ok.
- Notify the linux-linaro kernel maintainer if
- the topic is no longer needed, and must be dropped from linux-linaro
- the topic's remote URL and/or branch name changed
- Work with the linux-linaro kernel maintainer on resolving the merge conflicts caused by the topic. The linux-linaro maintainer emails the conflict to the topic owner, the topic owner replies with the solution.
- Fix the bugs in the remote topic branch, so that the fixes can be pulled from there into linux-linaro.
Using config fragments in linux-linaro trees
The config fragments (handled by scripts/kconfig/merge_config.sh in the kernel tree) are used starting from the 2012.04 release. http://git.linaro.org/gitweb?p=kernel/configs.git;a=summary
linux-linaro kernel maintainer
Andrey Konovalov < email@example.com >
Previous version of the linux-linaro kernel process
Platform/DevPlatform/LinuxLinaroKernelTreeProcess (last modified 2016-05-10 12:57:53)