Notebook

これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。

HTML ファイル生成日時: 2024/11/21 17:40:55.112 (台灣標準時)

NetBSD でのカーネルの再構築の方法

ソースコードの取得

CVS を使って NetBSD のソースコードを取得する。以下のようにすれば、 NetBSD-current のソースコードを得ることができる。

# setenv CVSROOT :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
# setenv CVS_RSH ssh
# mkdir -p /somewhere/in/the/disk/src_0999
# cd /somewhere/in/the/disk/src_0999
# ${cvs} -q checkout -P src
# ${cvs} -q checkout -P xsrc
# ls -l
total 4
drwxr-xr-x  26 root  wheel  1024 Feb  4 18:21 src
drwxr-xr-x   5 root  wheel   512 Feb  4 18:43 xsrc

シンボリックリンクを張る

ソースコードは /usr 以下にあるようになっていると便利である。シンボリッ クリンクを張る。

# cd /usr
# ls -F
INSTALL/  bin/      include/  libdata/  local/    pkg/      share/
X11R7/    games/    lib/      libexec/  mdec/     sbin/     tests/
# ln -s /somewhere/in/the/disk/src_0999/src
# ln -s /somewhere/in/the/disk/src_0999/xsrc
# ls -F
INSTALL/  bin/      include/  libdata/  local/    pkg/      share/    tests/
X11R7/    games/    lib/      libexec/  mdec/     sbin/     src@      xsrc@

カーネルの設定ファイルの作成

カーネルの再構築のための設定ファイルを作成する。今回は、 GENERIC カー ネルの設定ファイルを使い、 nvmm (NetBSD Virtual Machine Monitor) の仮 想デバイスを追加したカーネルを作成する。

# cd /usr/src/sys/arch/amd64/conf
# ls
ALL                 INSTALL             XEN3_DOM0           kern.ldscript.kaslr
CVS                 INSTALL_XEN3_DOMU   XEN3_DOMU           majors.amd64
GENERIC             MODULAR             files.amd64         std.amd64
GENERIC_KASLR       Makefile.amd64      kern.ldscript       std.xen
GENERIC_USERMODE    NOCOMPAT            kern.ldscript.Xen
# cp -pi GENERIC OBS_GEN_20210204
# vi OBS_GEN_20210204
# diff GENERIC OBS_GEN_20210204 
1193c1193
< #pseudo-device        nvmm                    # NetBSD Virtual Machine Monitor
---
> pseudo-device nvmm                    # NetBSD Virtual Machine Monitor

カーネルのコンパイル

カーネルをコンパイルする。

# cd /usr
# mkdir obj
# cd src
# pwd
/usr/src
# ./build.sh -U -j 6 tools
# ./build.sh -U -j 6 kernel=OBS_GEN_20210204

.....

#      link  OBS_GEN_20210204/netbsd
/somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64/bin/x86_64--netbsd-ld -Map netbsd.map --cref -T netbsd.ldscript -Ttext 0xffffffff80200000 -e start -z max-page-size=0x200000 -X -o netbsd ${SYSTEM_OBJ:[@]:Nswapnetbsd.o} ${EXTRA_OBJ} vers.o swapnetbsd.o
NetBSD 9.99.79 (OBS_GEN_20210204) #0: Thu Feb  4 20:50:59 CST 2021
   text    data     bss     dec     hex filename
21008964         717688 3473408 25200060        18085bc netbsd
mv -f netbsd netbsd.gdb
/somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64/bin/x86_64--netbsd-strip -g -o netbsd netbsd.gdb
===> Kernels built from OBS_GEN_20210204:
  /somewhere/src_0999/src/sys/arch/amd64/compile/obj/OBS_GEN_20210204/netbsd
===> build.sh ended:      Thu Feb  4 20:51:21 CST 2021
===> Summary of results:
         build.sh command:    ./build.sh -U -j 6 kernel=OBS_GEN_20210204
         build.sh started:    Thu Feb  4 20:46:43 CST 2021
         NetBSD version:      9.99.79
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 9.99.79 amd64
         HOST_SH:             /bin/sh
         MAKECONF file:       /etc/mk.conf (File not found)
         TOOLDIR path:        /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64
         DESTDIR path:        /somewhere/src_0999/src/obj/destdir.amd64
         RELEASEDIR path:     /somewhere/src_0999/src/obj/releasedir
         Updated makewrapper: /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64/bin/nbmake-amd64
         Building kernel without building new tools
         Building kernel:     OBS_GEN_20210204
         Build directory:     /somewhere/src_0999/src/sys/arch/amd64/compile/obj/OBS_GEN_20210204
         Kernels built from OBS_GEN_20210204:
          /somewhere/src_0999/src/sys/arch/amd64/compile/obj/OBS_GEN_20210204/netbsd
         build.sh ended:      Thu Feb  4 20:51:21 CST 2021
===> .

新たなカーネルのインストール

新たに作ったカーネルを / にコピーする。

# cd /
# ls -l *netbsd*
-rwxr-xr-x  1 root  wheel  29143192 Feb  4 02:13 netbsd
# cp -pi netbsd netbsd_9.99.79_original
# cp -f /usr/src/sys/arch/amd64/compile/obj/OBS_GEN_20210204/netbsd /netbsd
# cp -f /usr/src/sys/arch/amd64/compile/obj/OBS_GEN_20210204/netbsd /netbsd.999079.OBS_GEN_20210204
# ls -l *netbsd*
-rwxr-xr-x  1 root  wheel  29152664 Feb  4 20:56 netbsd
-rwxr-xr-x  1 root  wheel  29152664 Feb  4 20:59 netbsd.999079.OBS_GEN_20210204
-rwxr-xr-x  1 root  wheel  29143192 Feb  4 02:13 netbsd_9.99.79_original

新たなカーネルで再起動

新たなカーネルで再起動する。

# shutdown -r now

バージョンの確認

新たなカーネルで起動した後、バージョンを確認してみる。

# uname -srm
NetBSD 9.99.79 amd64

ユーザーランドの構築

ユーザーランドを構築し、インストールする。

# cd /usr
# rm -rf obj
# mkdir obj
# cd src
# pwd
/usr/src
# ./build.sh -j 6 -U tools

.....

===> Tools built to /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64
===> build.sh ended:      Thu Feb  4 21:17:16 CST 2021
===> Summary of results:
         build.sh command:    ./build.sh -j 6 -U tools
         build.sh started:    Thu Feb  4 21:10:50 CST 2021
         NetBSD version:      9.99.79
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 9.99.79 amd64
         HOST_SH:             /bin/sh
         MAKECONF file:       /etc/mk.conf (File not found)
         TOOLDIR path:        /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64
         DESTDIR path:        /somewhere/src_0999/src/obj/destdir.amd64
         RELEASEDIR path:     /somewhere/src_0999/src/obj/releasedir
         Updated makewrapper: /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64/bin/nbmake-amd64
         Tools built to /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64
         build.sh ended:      Thu Feb  4 21:17:16 CST 2021
===> .
# ./build.sh -j 6 -x -U distribution

.....

make distribution started at:  Thu Feb  4 21:20:50 CST 2021
make distribution finished at: Thu Feb  4 22:34:47 CST 2021
===> Successful make distribution
===> build.sh ended:      Thu Feb  4 22:34:47 CST 2021
===> Summary of results:
         build.sh command:    ./build.sh -j 6 -x -U distribution
         build.sh started:    Thu Feb  4 21:20:49 CST 2021
         NetBSD version:      9.99.79
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 9.99.79 amd64
         HOST_SH:             /bin/sh
         MAKECONF file:       /etc/mk.conf (File not found)
         TOOLDIR path:        /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64
         DESTDIR path:        /somewhere/src_0999/src/obj/destdir.amd64
         RELEASEDIR path:     /somewhere/src_0999/src/obj/releasedir
         Updated makewrapper: /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64/bin/nbmake-amd64
         Successful make distribution
         build.sh ended:      Thu Feb  4 22:34:47 CST 2021
===> .
# ./build.sh -x -U install=/

.....

make installworld started at:  Thu Feb  4 22:45:08 CST 2021
make installworld finished at: Thu Feb  4 22:45:49 CST 2021
===> Successful installworld to /
===> build.sh ended:      Thu Feb  4 22:45:49 CST 2021
===> Summary of results:
         build.sh command:    ./build.sh -x -U install=/
         build.sh started:    Thu Feb  4 22:45:08 CST 2021
         NetBSD version:      9.99.79
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 9.99.79 amd64
         HOST_SH:             /bin/sh
         MAKECONF file:       /etc/mk.conf (File not found)
         TOOLDIR path:        /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64
         DESTDIR path:        /somewhere/src_0999/src/obj/destdir.amd64
         RELEASEDIR path:     /somewhere/src_0999/src/obj/releasedir
         Updated makewrapper: /somewhere/src_0999/src/obj/tooldir.NetBSD-9.99.79-amd64/bin/nbmake-amd64
         Successful installworld to /
         build.sh ended:      Thu Feb  4 22:45:49 CST 2021
===> .

ユーザーランドが新しいものに置き換わっていることが確認できる。

# ls -l /bin/ | head
total 1774
-r-xr-xr-x  2 root  wheel   18728 Feb  4 22:33 [
-r-xr-xr-x  1 root  wheel   18808 Feb  4 22:33 cat
lrwxr-xr-x  1 root  wheel      11 Feb  4 22:33 chgrp -> /sbin/chown
-r-xr-xr-x  1 root  wheel   23152 Feb  4 22:33 chio
-r-xr-xr-x  1 root  wheel   14256 Feb  4 22:33 chmod
-r-xr-xr-x  1 root  wheel   30200 Feb  4 22:33 cp
-r-xr-xr-x  1 root  wheel   50208 Feb  4 22:33 cpio
-r-xr-xr-x  1 root  wheel  183640 Feb  4 22:33 csh
-r-xr-xr-x  1 root  wheel   23624 Feb  4 22:33 date

必要であれば、再起動する。

以上で、カーネル及びユーザーランドを再構築することができた。

参考文献



Frequently accessed files

  1. Computer___Python/20220518_0.html
  2. Computer___Network/20230726_00.html
  3. Misc___Taiwan/20240207_00.html
  4. Computer___Network/20230516_00.html
  5. Computer___FreeBSD/20220621_0.html
  6. Computer___Python/20220715_0.html
  7. Computer___Network/20230508_00.html
  8. Food___Taiwan/20220429_0.html
  9. Computer___NetBSD/20220817_3.html
  10. Computer___Python/20220410_0.html
  11. Computer___Network/20240416_00.html
  12. Computer___Network/20240130_00.html
  13. Computer___Debian/20210223_1.html
  14. Computer___NetBSD/20230119_00.html
  15. Computer___Python/20210124_0.html
  16. Computer___Python/20221013_0.html
  17. Computer___NetBSD/20220818_1.html
  18. Computer___NetBSD/20220428_0.html
  19. Science___Math/20220420_0.html
  20. Computer___NetBSD/20240101_02.html
  21. Computer___NetBSD/20220808_0.html
  22. Computer___TeX/20230503_00.html
  23. Computer___NetBSD/20230515_00.html
  24. Science___Astronomy/20220503_0.html
  25. Computer___NetBSD/20210127_0.html
  26. Computer___Python/20240101_00.html
  27. Computer___Network/20220413_1.html
  28. Computer___Python/20220816_1.html
  29. Computer___NetBSD/20210204_0.html
  30. Travel___Taiwan/20220809_2.html


HTML file generated by Kinoshita Daisuke.