経緯
久しぶりにi.MX6でYoctoをいじろうと思って、Repoを使用してマニフェストを落としてこようと実行したが、上手くいかない。
repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.14.38-6UL_ga
おかしい。Repoのバージョンが上がったから?と思ったが、
まずgit://git.freescale.comが生きていない。
2015年に Freescale が NXP Semiconductors に合併されたのは記憶に新しい。しかしi.MX用のgitリポジトリサイト「git.freescale.com」は最近までは生きていたと思う。少なくとも2019年までは使えたんじゃないかと。
調査
という事で、調査開始。
https://community.nxp.com/t5/i-MX-Processors/git-freescale-com-down/m-p/996004/highlight/true
嗚呼、阿鼻叫喚。そりゃそうだ。…いや、他人事ではない。
このスレッドの作成日時が2020年2月なので、やはりここ1~2年の事の様だ。
TechSupportが「もう復活は無い」と断言している。ヒドス。
上のスレッドによると、git://git.freescale.com のリポジトリは git://github.com/NXP/imx-firmware に移されたとの事で、とりあえず中を見てみるが、それらしきものが無い…なんだよ…
もうちょっと調査。
https://community.nxp.com/t5/i-MX-Processors/git-freescale-com-not-working-Any-new-link/m-p/998841
どうやらgithub.com/NXPの他に https://source.codeaurora.org/external/imx/
にあるらしい。
Code Auroraとは…
QUALCOMMがメインとなり、QUALCOMM製チップセットのオープンソース開発を実施しているサイト。
https://www.wdic.org/w/TECH/Code%20Aurora%20Forum
え、QUALCOMM? NXPの敵じゃないの?
なんか怪しいが、本当にある???どれどれ…

あった。(リリースレイヤーのmeta-fsl-bsp-releaseもあった)
どれ、対象のマニフェストを確認。default.xmlをのぞく。


いや古いままなんかーい!!
どうやら、ブランチに「nxp/」がつくものは古いままの模様。これではRepoで指定したところで上手くいかないんじゃないか?
実際上手くいかなかった。
# repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp.git -b nxp/imx-3.14.38-6UL_ga : # repo sync : fatal: Unable to look up git.freescale.com (port 9418) (No address associated with hostname)
なんやねん…
解決策
これらを見て分かったのは、URLをまず変える事。そりゃそうだ。
git://git.freescale.com/imx ↓以下に変更 https://source.codeaurora.org/external/imx
imx-4.1-krogothなどは上記対応済みなので、Repoで指定すれば取ってこれた。なので、新しいブランチのマニフェストは以下の感じで問題無いはず。
repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogoth repo sync
しかし、古いマニフェストは対応されていない。
ということで、解決策を2パターンほど考えた。
解決策その1 : Repoを使わず、manifestを解釈して個々のgitリポジトリを持ってくる
個人的にはこっちの方で良いんじゃないかと思っている。
というのも、Repoがもう使いにくくてしょうがない。SSHやPythonのバージョンなど環境の変化で結構振り回される。
また古いバージョンのマニフェストは今後リビジョンがマイナーアップデートされることもないはずなので。新しいバージョンは素直に「nxp/」がついてないブランチをRepoから使用することをお奨めする。
Repoのmanifestを参考に、gitで落としリビジョンを合わせるという力業を実施。
例:default.xml (ブランチ:nxp/imx-3.14.38-6UL_ga)
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<default sync-j="2"/>
<remote fetch="git://git.freescale.com/imx" name="fsl-release" />
<remote fetch="git://git.yoctoproject.org" name="yocto"/>
<remote fetch="git://github.com/Freescale" name="freescale"/>
<remote fetch="git://git.openembedded.org" name="oe"/>
<remote fetch="git://github.com/OSSystems" name="OSSystems"/>
<remote fetch="git://github.com/meta-qt5" name="QT5"/>
<project remote="yocto" revision="83aa565d93aacae484976562ef1ae8dbbb6b2bc0" name="poky" path="sources/poky"/>
<project remote="yocto" revision="c5326c90d6754c8630504ae29244907b0841c3a9" name="meta-fsl-arm" path="sources/meta-fsl-arm"/>
<project remote="oe" revision="10d3c8f85280a0bf867a8e4f84bcda81c290d28e" name="meta-openembedded" path="sources/meta-openembedded"/>
<project remote="freescale" revision="89c605386ec81d64b38562acbc66942964fad971" name="fsl-community-bsp-base" path="sources/base">
<copyfile dest="README" src="README"/>
<copyfile dest="setup-environment" src="setup-environment"/>
</project>
<project remote="freescale" revision="436b86e3421736216412bdbb21cd9cb08c758c75" name="meta-fsl-arm-extra" path="sources/meta-fsl-arm-extra"/>
<project remote="freescale" revision="836bdf5a9d500ed258f1ddc07d89eca74a704098" name="meta-fsl-demos" path="sources/meta-fsl-demos"/>
<project remote="OSSystems" revision="4b27058a8275a5310161459c9bb8f4c52a77762c" name="meta-browser" path="sources/meta-browser" />
<project remote="QT5" revision="fc026381545650e10fdd488d5b2a3b2d78f87793" name="meta-qt5" path="sources/meta-qt5" />
<project remote="fsl-release" name="meta-fsl-bsp-release" path="sources/meta-fsl-bsp-release" revision="fido_3.14.38_6UL_ga" >
<copyfile src="imx/tools/fsl-setup-release.sh" dest="fsl-setup-release.sh"/>
</project>
</manifest>
上のmanifestをgit個々で解釈したshellscript
#!/bin/bash
CUR_DIR=`echo $(cd $(dirname $0) && pwd)`
mkdir sources
cd sources
git clone git://git.yoctoproject.org/poky
cd poky
git checkout 83aa565d93aacae484976562ef1ae8dbbb6b2bc0
cd ../
git clone git://git.yoctoproject.org/meta-fsl-arm
cd meta-fsl-arm
git checkout c5326c90d6754c8630504ae29244907b0841c3a9
cd ../
git clone git://git.openembedded.org/meta-openembedded
cd meta-openembedded
git checkout 10d3c8f85280a0bf867a8e4f84bcda81c290d28e
cd ../
git clone git://github.com/Freescale/fsl-community-bsp-base
mv fsl-community-bsp-base base
cd base
git checkout 89c605386ec81d64b38562acbc66942964fad971
cp README ${CUR_DIR}
cp setup-environment ${CUR_DIR}
cd ../
git clone git://github.com/Freescale/meta-fsl-arm-extra
cd meta-fsl-arm-extra
git checkout 436b86e3421736216412bdbb21cd9cb08c758c75
cd ../
git clone git://github.com/Freescale/meta-fsl-demos
cd meta-fsl-demos
git checkout 836bdf5a9d500ed258f1ddc07d89eca74a704098
cd ../
git clone git://github.com/OSSystems/meta-browser
cd meta-browser
git checkout 4b27058a8275a5310161459c9bb8f4c52a77762c
cd ../
git clone git://github.com/meta-qt5/meta-qt5
cd meta-qt5
git checkout fc026381545650e10fdd488d5b2a3b2d78f87793
cd ../
git clone https://source.codeaurora.org/external/imx/meta-fsl-bsp-release
cd meta-fsl-bsp-release
git checkout remotes/origin/nxp/fido_3.14.38_6UL_ga
cp imx/tools/fsl-setup-release.sh ${CUR_DIR}
cd ../
cd ${CUR_DIR}
まぁ力業だが、もうこれでいい。(他のマニフェストの場合はnameやrevision、その他ファイルコピー箇所などを適宜変更する必要があります。)
解決策その2 : オレオレリポジトリを作り、その中にmanifestを入れ、Repoでそのリポジトリを指定する。
それでも俺はRepoを使いたいんじゃ~!って方はこっちか。というかこっちが正統派?
自身でリポジトリを立ち上げ、その中にマニフェストを作る。で、Repoでそのリポジトリを指定すればOK。
git init manifest # リポジトリ名はお好きに cd manifest vi default.xml
git://git.freescale.com/imx を https://source.codeaurora.org/external/imx に変更して作成。
例:default.xml (ブランチ:nxp/imx-3.14.38-6UL_ga が元データ)
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<default sync-j="2"/>
<remote fetch="https://source.codeaurora.org/external/imx" name="fsl-release" /> <!-- ここのfetch URLを変更 -->
<remote fetch="git://git.yoctoproject.org" name="yocto"/>
<remote fetch="git://github.com/Freescale" name="freescale"/>
<remote fetch="git://git.openembedded.org" name="oe"/>
<remote fetch="git://github.com/OSSystems" name="OSSystems"/>
<remote fetch="git://github.com/meta-qt5" name="QT5"/>
<project remote="yocto" revision="83aa565d93aacae484976562ef1ae8dbbb6b2bc0" name="poky" path="sources/poky"/>
<project remote="yocto" revision="c5326c90d6754c8630504ae29244907b0841c3a9" name="meta-fsl-arm" path="sources/meta-fsl-arm"/>
<project remote="oe" revision="10d3c8f85280a0bf867a8e4f84bcda81c290d28e" name="meta-openembedded" path="sources/meta-openembedded"/>
<project remote="freescale" revision="89c605386ec81d64b38562acbc66942964fad971" name="fsl-community-bsp-base" path="sources/base">
<copyfile dest="README" src="README"/>
<copyfile dest="setup-environment" src="setup-environment"/>
</project>
<project remote="freescale" revision="436b86e3421736216412bdbb21cd9cb08c758c75" name="meta-fsl-arm-extra" path="sources/meta-fsl-arm-extra"/>
<project remote="freescale" revision="836bdf5a9d500ed258f1ddc07d89eca74a704098" name="meta-fsl-demos" path="sources/meta-fsl-demos"/>
<project remote="OSSystems" revision="4b27058a8275a5310161459c9bb8f4c52a77762c" name="meta-browser" path="sources/meta-browser" />
<project remote="QT5" revision="fc026381545650e10fdd488d5b2a3b2d78f87793" name="meta-qt5" path="sources/meta-qt5" />
<project remote="fsl-release" name="meta-fsl-bsp-release" path="sources/meta-fsl-bsp-release" revision="fido_3.14.38_6UL_ga" >
<copyfile src="imx/tools/fsl-setup-release.sh" dest="fsl-setup-release.sh"/>
</project>
</manifest>
※「revision=”fido_3.14.38_6UL_ga”」の箇所は「revision=”nxp/fido_3.14.38_6UL_ga”」にしなきゃダメかと思っていたが、どっちでも大丈夫そう。
で、コミットしてrepoでリポジトリを指定してinit。
git commit -m "add manifest"
repo init -u (パス)/manifest repo sync
大きな企業は古いもの、弱いものは簡単に切り捨てますね。
今後も気を付けなければいけません。