Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Yoctoで綺麗なkernel configを作る

2 733 vues

Publié le

OpenEmbedded/Yoctoでsccを使って綺麗にkernel configをレイヤ分けする話(未完成)

Publié dans : Logiciels
  • Login to see the comments

Yoctoで綺麗なkernel configを作る

  1. 1. しばらくやっていなかった自己紹介 ● SHIMADA Hirofumi ● オンラインでは、最近はMastodon中心に出没 ● 東海道らぐ 名古屋案内人 – 各地の開催の手伝いとかスケジュール調整とか – 若い人をめっちゃ勧誘したりとか ● おーぷんここん開発者 opencocon.org – IRC代わりのMastodon : inari.opencocon.org ● OSC名古屋 現地担当のような何か – 最近OSC名古屋を担う人が誰もいないので...
  2. 2. しばらくやっていなかった自己紹介 ● SHIMADA Hirofumi ● オンラインでは、最近はMastodon中心に出没 ● 東海道らぐ 名古屋案内人 – 各地の開催の手伝いとかスケジュール調整とか – 若い人をめっちゃ勧誘したりとか ● おーぷんここん開発者 opencocon.org – IRC代わりのMastodon : inari.opencocon.org ● OSC名古屋 現地担当のような何か – 最近OSC名古屋を担う人が誰もいないので...
  3. 3. 超久々に ここんの話 喋るよ!
  4. 4. Yoctoで綺麗な kernel configを作る SHIMADA Hirofumi, @shimada@inari.opencocon.org @shmada@mstdn.maud.io
  5. 5. 最近私を知った人が 知らなさそうなこと ● Linuxディストリ作っています – 制作開始から、まもなく10年になります ● OSC初出展がちょうど2008年なので – 休み休み作っている感じのペースですが... ● 古いマシンを活用するという分野において、OSCの 中ではNetBSDと自作OS勢の次くらいに古参です ● 実演用旧型PCをめっちゃ持っています – 普段出していないだけで...
  6. 6. 改めて:opencoconとは 旧型PCを シンクライアント として 再利用する Linuxディストリビューション
  7. 7. 色々なプロトコルで繋がる opencocon ● シンクライアント:X, VNC, RDP, SPICE, x2go ● Webブラウザ ● VPNクライアント:SSH (Port Forwarding), SoftEther ほか ● 起動時のメニュー画面から簡単接続 – シンクライアント特化型ディストリビューション ● x86 PC, Raspberry Pi 版
  8. 8. なぜシンクライアントか? ● 通常、古い世代のLinux活用といえば軽量Linuxディストリ、しか しそれでも辛いケースがある – 特にWebブラウザは昨今大変きついものがある ● シンクライアントであれば、クライアント側のマシン負荷は大幅 に軽く、遅いマシンでも割といける – ただしホストマシンとネットワーク、 サーバ(VNC, x2go等)が必須になる – 動画や3Dはしんどい事が多い – ときに音声も怪しいことがある ● これにより、古い世代のマシンを動態保存ではなく、現用機とし て使うことが可能になる
  9. 9. 必要スペック Live CD Install to harddisk ※ by hand; currentry no installer CPU i486 or later Memory 64 MB 32 MB Disk space Not needed 400MB
  10. 10. おーぷんここんは 古くて珍しいマシン大好き
  11. 11. 特徴のある古いマシン向けに.. ● PC/AT互換機は星の数ほどあり、把握が困難 ● 実際作ってると、通常のビジネス/ホーム用PCではなく、 過去に出ていた”とがった”PCで opencocon を使っている人 が目立つことが判明した – Libretto(東芝), LOOX(富士通), MURAMASA(シャープ), KOHJINSHA, など ● なので、こういったマシン向けのチューニングを主に行っている – 他ディストリでの動作が困難/不可能な世代のマシンを手広くカバー している – もちろん、一般的なビジネスPCでも動くはず
  12. 12. 近状:opencocon v10a ● 去年のOSC名古屋?合わせでリリースした ● x2go対応を新規搭載 – しかしメニュー周りが未完成 – Qt5:15年以上マシンの古いマシンでは少々しんどいかもしれない ● ブラウザをFirefoxに変更 – libc変更に伴い、WebKit系が軒並み駄目になったので... ● その後KRACK対策リリースを出したのみ ● 歴代のバージョンに比べ、それほど出来がよくない – グラフィックドライバ対応がいくつか v9 に比べおかしくなっている事が ある
  13. 13. opencoconの コードリファクタリング ● プロジェクト開始から時間が経ち、そろそろ過去の遺 物とか、メンテのしんどい謎コードが増えてきた ● なので、以下の清掃を v10 より始めている – Init.d まわりのスクリプト ← v10 で完了 – Initrd のスタートアップ・CD検出まわりのスクリプト – Linux kernelのdefconfig – Live CD作成時のISO作成まわり – OpenEmbedded/Yoctoのビルドスクリプト ← v11で実施
  14. 14. opencoconの コードリファクタリング ● プロジェクト開始から時間が経ち、そろそろ過去の遺 物とか、メンテのしんどい謎コードが増えてきた ● なので、以下の清掃を v10 より始めている – Init.d まわりのスクリプト ← v10 で完了 – Initrd のスタートアップ・CD検出まわりのスクリプト – Linux kernelのdefconfig – Live CD作成時のISO作成まわり – OpenEmbedded/Yoctoのビルドスクリプト ← v11で実施
  15. 15. Linux kernelのconfig ● Linux kernel に含める機能やパラメータをcompile 前に選択できる機構 ● 各種ドライバや機能(ファイルシステム)等のオンオフ ができる ● 昔はここがチューニングポイントであったため、い じっている人が多かったものの、最近はdefconfig (標準のconfig)のままでもうまく動くことが多い
  16. 16. ここんの持っている秘伝のタレ: defconfig ● 古いマシンやハードウェアにサポートを向けるため、defconfigか ら多くの部分をいじっている https://github.com/dejiko/meta-coconport/blob/master/cocon486/recipes-kernel/linux/linux /defconfig ● これを、旧プロジェクトを立ち上げた大昔 (2.6.x) から継ぎ足し・ バージョンアップしながら、独自のdefconfigをメンテし続けていた ● しかし近年は、自分でも訳がわからなってきた ● 加えて、x86以外のプラットフォームも台頭してきたため、これらと 同期する必要があるなど、厄介な事情が増えてきた – 例:USBデバイスをひとつ有効にするために、複数のdefconfigを調査・ 編集して、それぞれ正しく当たったかテストする必要がある。 – そのたび3700行のconfigを追うのは辛い。
  17. 17. defconfigをバラバラにしたい ● 少なくとも cocon486 ( opencocon x86※ 版のマシン名) 固有の部分と、それ以外を分割したい ● Shell scriptとかである程度はできなくもない ● しかし、レイヤ構造を持っている OpenEmbedded/Yocto でこれがうまくいくのかと いうのは前々から疑問があったため、進んでいな かった – 何か良い仕組みがあれば、それに乗りたい。
  18. 18. Yocto : SCC ファイル ● kernelのdefconfigをレイヤごとにappendできる仕組み ● “scc stands for Series Configuration Control, but the naming has less significance in the current implementation of the tooling than it had in the past. Consider scc files to be description files. “ https://www.yoctoproject.org/docs/1.6.1/kernel-dev/kerne l-dev.html#ftn.idm1901712 ● ● ● WindRiverによる簡単な説明 https://knowledge.windriver.com/en-us/000_Products/ 000/010/060/000/030/000_Wind_River_Linux_Kernel_Dev elopment%2C_LTS/010/050 ●
  19. 19. .scc ファイル ● scc ファイルには、 – includeで他のsccファイルを参照することができる – kernel の (def)config に追記することができる – kernel に patch を当てる指定をいれることができる ● OpenEmbedded/Yoctoのレイヤ構造と親和性があ る – つまり、優先度の順に各レイヤの同じ名前のrecipeにあ る、sccファイルが順に読み込まれる
  20. 20. kernel の (def)config に追記 ● 直接sccファイルに書くのではなく、defconfigからの 変更点を .cfg ファイルに書いて、sccから指定する ● こう書く kconf hardware zynqmp.cfg kconf non-hardware thinclient.cfg
  21. 21. kernelにpatchを当てる ● こう書く patch 2961-amd-xgbe-Add-hardware-features-debug-output.patch patch 2962-amd-xgbe-Add-per-queue-Tx-and-Rx-statistics.patch patch 2963-amd-xgbe-Convert-to-using-the-new-link-mode.patch patch 2964-net-ethtool-Add-macro-to-clear-a-link-mode.patch
  22. 22. Recipe(.bb)でsccを見るようにする(1) ● Linux_4.14.25.bb SECTION = "kernel" DESCRIPTION = "Mainline Linux kernel" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7" KBRANCH ?= "master" require recipes-kernel/linux/linux-yocto.inc SRC_URI = "${KERNELORG_MIRROR}/linux/kernel/v4.x/linux-${PV}.tar.xz;name=kernel file://thinclient-usb-device.cfg" S = "${WORKDIR}/linux-${PV}" SRC_URI[kernel.md5sum] = "c55f9b201ed60b03ee879efd263d01dd" SRC_URI[kernel.sha256sum] = "6dcfbf79c068e51c1b06edb1ce58ddc9ca351f862bf2a144e96106ec3f21e587"
  23. 23. Recipe(.bb)でsccを見るようにする(2) ● cocon486/recipes-kernel/linux/linux_4.14.%.bbappend FILESEXTRAPATHS_prepend := "${THISDIR}/files:" KMACHINE_cocon486 ?= "cocon486" COMPATIBLE_MACHINE_cocon486 = "cocon486" KCONFIG_MODE ?= "alldefconfig" KBUILD_DEFCONFIG_cocon486 = "i386_defconfig" SRC_URI_append_cocon486 += " file://cocon486-standard.scc "
  24. 24. これまで 例えば、とある USBデバイスのサポート追加したい!  → CONFIG_*******_****** の行を cocon486 の defconfig coconx64 の defconfig ac100 の defconfig ... の defconfig に追記する
  25. 25. sccを使うと ● 1個所の .cfg に追記するだけで、 ● そのレイヤを使うkernel全てにbuild時反映される

×