Linux

【PC】Linuxビルドのノウハウ ②WindowsからLinuxへのファイルコピー、ビルドツールのインストール、make menuconfig/make all

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア

Linuxのカーネルビルドの方法を知りたいけど簡単にまとめられた情報源がない

こんな悩みを解決します。

今回やることは3つ。

  1. WindowsからLinuxにファイルコピー
  2. ビルドツールのインストール
  3. make menuconfig/make all

バージョン情報

Linux Kernel 3.14

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

WindowsからLinuxへのファイルコピーをscpでやってみたいです…。

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

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

【 scp 】コマンド――リモートマシンとの間でファイルをコピーするを読みました。scpによるコピーを試みたところエラー発生。横道に逸れた調査なので今回はパスします(次回試してみたいネタではあります)。

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

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

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

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

linux-3.14.79.tar.xzはWindowsからLinux側のホームディレクトリにコピーされました。xzなのでJオプションを付けてtar解凍します。linux-3.14.79が出来ました。

$ tar Jxvf linux-3.14.79.tar.xz

なんかJオプション付けなくても解凍できました。イマドキのtarは高機能ですね。

linux-3.14.79の中を探索

ls。カーネルソースって感じですね。

linux-3.14.79を/usr/srcに移動

カーネルソースは/usr/srcに置くことになってるらしいので、そうしました。

$ sudo mv linux-3.14.79 /usr/src

.configをコピー

/bootにconfig-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

カーネルコンフィギュレーション画面が開きました。今回は閲覧のみで特にパラメタの変更はしません。

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

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

抜けた後のコンソールログはこんな感じ。

$ 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から再開します。

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。