Last Update: "2007/03/15 08:50:29 makoto"
3.99.19
3.99.19 の古い kernel を作り直した時の記録です
usr/src/sys
usr/src/sys/common
の二つを開けます。
setenv FTP /e/u/j/ftp/pub/NetBSD/snapshot/20060506ts
109 18:54 mkdir 3.99.19
115 18:55 cd 3.99.19/
116 18:56 tar zxf ${FTP}/source/sets/syssrc.tgz
117 19:04 tar ztvf ${FTP}/source/sets/src.tgz
118 19:04 tar zxvf ${FTP}/source/sets/src.tgz usr/src/common
config を用意します。今回は sys/arch/macppc/conf/ZS-L2-1M-PB2-SHM
という名前で、内容は次の通り
# $NetBSD$
#
# GENERIC kernel, plus ...
include "arch/macppc/conf/GENERIC"
options ZS_CONSOLE_ABORT
options L2CR_CONFIG="(L2SIZ_1M|L2CLK_20|L2RAM_PB2)"
options SHMMAXPGS=2048
options NKMEMPAGES_MAX=24576
options DDB_ONPANIC=0
念の為 gcc-3.4.5 を使うことにします
cd sys/arch/macppc/conf
config ZS-L2-1M-PB2-SHM
cd ../../compile/ZS-L2-1M-PB2-SHM
131 19:13 env PATH=/usr/pkg/gcc34/bin:${PATH} make depend netbsd
何と ..
-c ../../../../kern/kern_synch.c
{standard input}: Assembler messages:
{standard input}:654: Error: symbol `bpendtsleep' is already defined
と言われてしまう
562 #if defined(DDB) && !defined(GPROF) && !defined(DDB_ONPANIC)
563 /* handy breakpoint location after process "wakes" */
564 __asm(".globl bpendtsleep\nbpendtsleep:");
565 #endif
add the red word. Or with some gcc version, you may need following change.
#if defined(DDB) && !defined(GPROF) && !defined(DDB_ONPANIC) && DDB_ONPANIC != 0
赤字の部分を追加)。実はちょっと間違えて単に make と続けた時に
In file included from ../../../../net/if_bridge.c:107:
../../../../net/if_llc.h:54: warning: '__packed__' attribute ignored for field of type 'struct '
../../../../net/if_llc.h:58: warning: '__packed__' attribute ignored for field of type 'struct '
../../../../net/if_llc.h:62: warning: '__packed__' attribute ignored for field of type 'struct '
../../../../net/if_llc.h:74: warning: '__packed__' attribute ignored for field of type 'struct '
../../../../net/if_llc.h:83: warning: '__packed__' attribute ignored for field of type 'struct '
*** Error code 1
これは簡単には分らないが、消して見る (gcc 4.1.2 の時 ?)
gcc-3.4.5 なら、これは言われないので戻す。
ちなみに、
options NKMEMPAGES_MAX=24576
の行を追加した理由は次のような panic で、
panic: malloc: out of space in kmem_map
Stopped in pid 362.1 (nfsd) at netbsd:cpu_Debugger+0x14: addi 1,1,16
db> bt
at panic+1bc
at malloc+1c4
at ufs_readdir+3a8
at VOP_READDIR+4c
at nfsrv_readdir+5dc
at nfssvc_nfsd+56c
at sys_nfssvc+2c4
at syscall_plain+d8
at setfault+c54
db>
この時は
vm.nkmempages = 12288
だった。
一つのディレクトリに、沢山のファイルがあると、こうなるのでは ? という気も
している。(例えば 数万の単位で)。
古い port-sparc のメール:
http://mail-index.netbsd.org/port-sparc/2001/08/22/0000.html
次のように書くのはどうか ? と書いてある ?
options NKMEMPAGES_MAX="((24 * 1024 * 1024) >> PAGE_SHIFT)" # default 24MB worth
PAGE_SHIFT が 12 ( PAGE_SIZE = 4096 ) だとすると、
今回の 24576 は
96 M 相当ということになるかな。
96*1024*1024/4096 = 24576
ufs が malloc する時に、だめだよって言えばいいのでは ? という気もするけれど
実は別の panic をします。実記憶が 224M なので、
224/4*1024*1024/4096 = 14336
を使って、もう一度作り直しました。
|