前回だいぶ脱線しましたが、今回も脱線しながら少しずつ進みます。

【関連記事】


【キーワード】
scp、Tera Term、.config、ビルドツール、make menuconfig、make all、make-kpkg。
  • 2019/7/8
④The Linux Kernel Archive(本家)でカーネル3.14を落とす(後編)

さて、例によってこういうディレクトリ構成が出てきました。何がどこに入ってるのかワカラナイんですよね。
a1
適当にlinux→kernel→v3.xと掘ったところ、カーネル3.14が居そうな感じ。
1

カーネル3.14は3.14.79が一番新しいバージョンみたい(2016年9月11日8:05 75M )
2

ダウンロードした(74.9MB)。
3

⑤カーネルアーカイブをWindowsからLinuxにコピーしたい。

なんとなくscpでコピーしてみたい...。

Windows10でCMDプロンプトを開きscpと打ってみた。Usageが出るので使えそう。
1

Linuxでもscpと打ってみた。Usageが出るので使えそう。
1

【 scp 】コマンド――リモートマシンとの間でファイルをコピーするを読んだ。いくつかコマンド打ち込んだがエラー発生。ちょっとメンドクサイ感じだし、横道に逸れた調査なので今回はパス(次回試してみたいネタではある)。

TeraTermで効率良くファイル転送を読んだところ、WindowsからLinuxにファイル転送する場合、TeraTermウィンドウにファイルをドラッグ&ドロップすればよいみたい。(LinuxからWindowsにファイル転送する方法も書いてあった。これも次回ネタ。)

ドラッグ&ドロップしたら、こんな画面が出てきて。
1

OK押したらコピーが始まり、ファイル転送できた。Tera Term超便利。
2

⑥linux-3.14.79.tar.xzを解凍する

linux-3.14.79.tar.xzはLinux側のホームディレクトリにコピーされた。xzなのでJオプションを付けてtar解凍。linux-3.14.79が出来た。
$ tar Jxvf linux-3.14.79.tar.xz
(なんかJオプション付けなくても解凍できた。イマドキのtarは高機能みたい。)
1

⑦linux-3.14.79の中を探索。

ls。カーネルソースって感じ。
1

⑦linux-3.14.79を/usr/srcに移動

カーネルソースは/usr/srcに置くことになってるらしいので、そうする。
$ sudo mv linux-3.14.79 /usr/src
⑧.configをコピー

/bootconfig-3.13.0-165-genericという名前でカーネル3.13.165の.configが置いてあるので、/usr/src/ linux-3.14.79に.configという名前でコピーする。これにより現在動作してるカーネルとホボ同じ設定になるはず(設定項目にバージョン毎の差異があると完全一致しないという意味でホボ)。
$ cp /boot/config-3.13.0-165-generic /usr/src/linux-3.14.79/.config
⑨ビルドツールのインストール

そういえば、このUbuntu14は組込LinuxをビルドしてるPCなので、ビルドツールがインストール済み。デフォルトでは入ってない気がするので明示的にインストールしておく。初心者向けKernelのビルド手順を読むと、これらのツールを入れとくといいみたい。
$ sudo apt-get -y update
$ sudo apt-get -y install build-essential
$ sudo apt-get -y install libncurses-dev
$ sudo apt-get -y install fakeroot
$ sudo apt-get -y install kernel-package
$ sudo apt-get -y install linux-source
$ sudo apt-get -y install libssl-dev
カーネル4.16ではこれもいるみたい。
$ sudo apt-get -y install bison 
$ sudo apt-get -y install flex
ツールがinstall済かを見るにはどうすればいいか。aptコマンドチートシートを読んだ。sudo dpkg -lを打つとインストール済みのパッケージが全部表示されるみたいなのでgrepでキーワードを絞る。
$ sudo dpkg -l | grep build-essential hitしたしインストール済みだった。
$ sudo dpkg -l | grep libncurses-dev hitしなかったがインストール済だった。
$ sudo dpkg -l | grep fakeroot hitしたしインストール済みだった。
$ sudo dpkg -l | grep kernel-package hitしなかったのでインストールした。
$ sudo dpkg -l | grep linux-source hitしなかったのでインストールした(カーネル3.13のソース)。
$ sudo dpkg -l | grep libssl-dev hitしなかったのでインストールした。
$ sudo dpkg -l | grep bison hitしなかったのでインストールした。
$ sudo dpkg -l | grep flex hitしなかったのでインストールした。 
さらにsudo apt show kernel-packageを試してみた。パッケージの情報が表示された(上記ツールの中でパッケージ情報が表示できないのもいくつかある)。
$ sudo apt show kernel-package
Package: kernel-package
Priority: optional
Section: universe/misc
Installed-Size: 1,890 kB
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Manoj Srivastava <srivasta@debian.org>
Version: 12.036+nmu3
Depends: build-essential, make (>= 3.80-10), po-debconf, gettext, file, debianutils (>= 2.30), binutils (>= 2.12), util-linux (>= 2.10o), module-init-tools (>= 0.9.10)
Recommends: cpio
Suggests: linux-source | kernel-source, e2fsprogs (>= 1.41.4), libncurses-dev, docbook-utils, xmlto, bzip2, linux-initramfs-tool, grub (>= 0.93) | grub2, jfsutils (>= 1.1.3), mcelog (>= 0.6), oprofile (>= 0.9), pcmciautils (>= 004), ppp (>= 2.4.0), procps (>= 3.2.0), reiserfsprogs (>= 3.6.3), squashfs-tools (>= 4.0), udev (>= 081), xfsprogs (>= 2.6.0), quota, btrfs-tools
Download-Size: 427 kB
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
APT-Manual-Installed: yes
APT-Sources: http://jp.archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
Description: A utility for building Linux kernel related Debian packages.
 This package provides the capability to create a Debian kernel image
 package by just running make-kpkg kernel_image in a kernel source
 directory tree.  It can also package the relevant kernel headers into
 a kernel-headers package. In general, this package is very useful if
 you need to create a custom kernel, if, for example, the default
 kernel does not support some of your hardware, or you wish a leaner,
 meaner kernel.  It also scripts the steps that need be taken to
 compile the kernel, which is quite convenient (forgetting a crucial
 step once was the initial motivation for this package). Please look at
 /usr/share/doc/kernel-package/Rationale.gz for a full list of advantages
 of this package.

⑩make menuconfigでカーネルコンフィギュレーション画面を開く

/usr/src/linux-3.14.79/でmake menuconfigを打つ。
$ cd /usr/src/linux-3.14.79/
$ make menuconfig
カーネルコンフィギュレーション画面が開いた。今回は特にパラメタの変更はしない。
1

「Save」を押すと.configをそのまま保存するか、リネームするか聞いてくるので「OK」を押す。
1

.configの書き込み成功。「Exit」で抜けるとカーネルコンフィギュレーション画面に戻るので、更に「Exit」を押して抜ける。
1

抜けた後のコンソールログはこんな感じ。
$ make menuconfig
scripts/kconfig/mconf Kconfig


*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

⑩make allでカーネルイメージとドライバモジュール(*.ko)をビルド

とりあえずこれでビルドしてみる。
$ make all
scripts/kconfig/conf --silentoldconfig Kconfig
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_64.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
  CHK     include/config/kernel.release
  UPD     include/config/kernel.release

  (ビルドがひたすら続く…)
2014年ぐらいに初めてカーネルビルドにチャレンジしたとき。職場のGURU的存在からmake allmake installで行け、と教わったので、今回もそれでいこうと思ったのだが、ビルドが長いので待っている間に初心者向けKernelのビルド手順+ + カーネル再構築 + +を読むと誰もmake allしてない。みんなmake-kpkgでビルドしてる。どゆこと?

どうもmake-kpkgでビルドするとパッケージ管理対象になる。するとdpkgでインストールできるようになって便利みたい。せっかくビルドしているが構築したバイナリは一旦お蔵入りにしよう(そのうち試してみよう)。次回、make-kpkgから再開します。

続く
IMG_20190705_081907


詳解 Linuxカーネル 第3版
Daniel P. Bovet
オライリー・ジャパン
2007-02-26


組み込みLinuxシステム構築 第2版
Karim Yaghmour
オライリージャパン
2009-10-26


Linuxデバイスドライバ 第3版
Jonathan Corbet
オライリージャパン
2005-10-22



スポンサードリンク