----- ここから cross 環境の作成 と バイナリの作成方法について(linux 版 その1) linux(vine)で、NetBSD の cross make 環境を作りました。 これは手順書です。 私自身はほとんど使わないと思いますので、レポートを頂けたら助かります。 -------------- 前準備 hpcmips の ソース一式を入手しておきます。 ( 注意 NetBSD-1.4 ではありません。まだ対応できていません。) あと、inc+lib-xxx.tar.bz2 も入手した方が良いかも知れません。 ソースとバイナリは、ftp://ftp.jp.netbsd.org/pub/NetBSD-jp/hpcmips から入手可能です。 以下 の説明では、次の環境変数がセットしてあることのを前提とします。 CRS=/usr/local/mipsel-netbsd MACHINE=hpcmips MACHINE_ARCH=mips また、cross 環境の構築では、PATH を通さないことを前提とします。 さらに、cross 環境の実行では、PATH を通すことを前提とします。 -------------- I) cross 環境の構築 cross 環境は展開した usr/src から構築します。後で self 環境も作るので、 変更する場合は、オリジナルを取っておいてから、やるようにします。 作成する順番は、1) make 自体 2) bfd 3) binutils,ld,as 4) egcs です。 1) make の作成 1-1) 前準備 最初に make の環境を作っておきます。 sys.mk を参照するので、mk の方もここでやっておきます。 つぎに usr/src/share/mk を $CRS/share/mk $CRS/sahre/mk.cross にコピーしておいて次のパッチを当てます。 mk.cross.patch mk.patch 1-2) bmake の 作成 usr/src/usr.bin で、 cp -r make make.cross として、作業用の directory を作り、つぎのパッチを当てます。 make.cross.patch make -f Makefile.boot で bmake ができるのでこれを使って make を 作成します。 1-3) make の作成 これで環境ができたはずなので、make を作ってみます。 $CRS/bin/make -I $CRS/share/mk.cross これを $CRS/bin にインストールしておきます。 cp make $CRS/bin 1-4) test の make test の仕様が NetBSD と違うので、一応作っておきます。 $CRS/bin/make -I $CRS/share/mk.cross cp test $CRS/bin で make できますが、static link されてしまうので注意。 test の Makefile に LDSTATIC= をいれるようにします。 --------------------- 2) bfd の make 2-1) 準備 loader tsort がないようです。先に作っておきます。 tsort の make には次が必要。 LDADD+= -ldb lorder は、lorder.sh を $CRS/bin/lorder に置いて実行権を付けるだけで OK 2-2) bfd の make cd usr/src/gnu/lib/bfd # ../../dist/bfd/elf32-mips.c を編集して、 # #define ELF_MAXPAGESIZE 0x4000 # としておく。(16K ページ対応) # もうぼちぼち、16K ページ対応は必要ありませんね。 # 今回は外します。 あと、sys/core.h がみつからずエラーになので、 mkdir sys cp work-directory/root/usr/include/sys/core.h sys としておく。 linux では、MAXCOMLEN がないので、エラーになります。 次のように sys/core.h を修正して次に行きましょう。 #ifndef MAXCOMLEN #define MAXCOMLEN 16 #endif $CRS/bin/make -I $CRS/share/mk.cross で make できます。 -------------- 3) binutils の make 3-1) 準備 付属の bison ではうまくいかないようなので、 yacc を先にインストールします。 cd usr/src/usr.bin/yacc $CRS/bin/make -I $CRS/share/mk.cross で OK 。 3-2) binutils の make cd usr/src/gnu/usr.bin/binutils $CRS/bin/make -I $CRS/share/mk.cross で OK 。 mv -f addr2line/addr2line $CRS/bin mv -f ar/ar $CRS/bin mv -f c++filt/c++filt $CRS/bin mv -f nm/nm $CRS/bin mv -f objdump/objdump $CRS/bin mv -f ranlib/ranlib $CRS/bin mv -f size/size $CRS/bin mv -f strings/strings $CRS/bin mv -f strip/strip $CRS/bin 3-3) ld の make cd ../ld.new $CRS/bin/make -I $CRS/share/mk.cross だけでは、make できませんでした。 ../../dist/include/fnmatch.h が次のようになっているので、 #if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE) #define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ #define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ #define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ #endif Makefile に次を追加します。 CPPFLAGS+= -D_GNU_SOURCE 3-4) gas の make cd ../gas.new $CRS/bin/make -I $CRS/share/mk.cross mv as $CRS/bin で OKです。 ---------------------------------- 4) egcs の make egcs は cross make に対応しているので、変更点はあまり多くありませんが、 とりあえず、cross 環境を別につくって次のパッチをあててください。 cp -r egcs egcs.cross egcs.patch あと、src/gnu/dist/gcc/config も少しいじっています。 こちらは、gcc.patch を参考にしてください。 $CRS/bin/make -I $CRS/share/mk.cross mv cc/gcc $CRS/bin mv cc1/cc1 $CRS/bin mv cc1plus/cc1plus $CRS/bin mv cpp/cpp $CRS/bin mv g++/g++ $CRS/bin mv collect2/collect2 $CRS/bin 5) host_gcc $CRS/bin パスが通ってしまうと、native の cc が $CRS/bin/as を使うので、 具合が悪いようです。 次のように HOST_CC を実行する cc の wrapper を作ります。 (mk/bsd.own.mk は修正済) ------------- host_gcc #!/bin/sh PATH=/usr/bin:/bin export PATH /usr/bin/gcc $* -------------------- ------------ 6) config cross で config を作ってみました。 ちょっと変更しないと OS 依存の部分が引っかかります。 config.patch を参考にしてください。 ------------ これでひとまず、cross 環境ができました。 さて、本当にこれで作ったカーネルが動くのか... userland は本当に構築できるのか... だれかお試しください。 試した結果は、pbsd-mg2 まで。 --------------------------- begin 664 crosskit-linux.tar.bz2 M0EIH.3%!629361$"XB``#05_KOVX`$%__________O__W_X``@(```"`!`"( M8`V]]$WL-.524"I.V&C.P```````&@(:*,U$VDCTC$]3(/4:`T:8@``````# M3$#(!PT`T`!H#0&@```::--`&0``#1ID&&DI^1I4_1(--#(`:&@!IH`:`T`` M`````)"D$-*>$T)FE/4\1I&_53TC]4/4>IH:?JFCU``T-,GJ:8@#0&.&@&@` M-`:`T```#31IH`R```:-,@P5)$)IJ8C)H)DR$9!H934\%-J;0:3TR(]$Q#33 M3TF)Z:@S4\8O_[R/-X.-A5DL$R-B$[00EP;[;&VVQ.4I+)Q0\GJZ>9R8R952 M<:2R>*6DA_XQ8`5PB""IY/@[!J+`0P\^V)49Q*A`&)T<&#(,%`8>!!WSH??T ME*I54R5X6K1C&8609]^GHP8^[G8:!H:A37;2\JA6'*3,/D+FR-$W^'.?Q:/O MJC^.UJ+'YE?FT M1.2B-CN*<7![RX\E^'/6"T53YJ6>:>H,CL?,NQ[1/B.&WC<:W;V5+:5##-G+ M*:R%UB(QETVBWFGW[>@+[C&,H3CD\(]H\#SONLFTP+=^;L1UI)>GK1Y%E3X_ MG2SY/.KZYY_/GVTI*G:=JYT2'AOQL[[]V'B>+/"ZVWAJ19"Q!BS9F^M"'>D; MV\P4HVW`))"%:WAKS-TL-)YQ2^H(,(,)"#&'YLHTM8-VS)WL<%\_N2'G8Z5* M4Y=D^LOJSM&K7-5[JO#P`UEO!AQ\Y"A[PQ7\A[=%_2EF/R:,(9LIP'\&T>AN MI[K[#WCU6QW9:.ET5[[E>3H[<9EX3G:W.YVQZ>3&\3C=U&VV\1@+BMG)OGJF M2O"RYW4?NMPQC&-THVW)3>W#=K#,&V'I'8J72SZIUUJCW.9"7@*@O#^YVJ2+ M_>;^R\PDE%4295/R(H_U6618IYU[*?AEWT/4#&_]CVU%TR?*_@]'7BTE&+IJ M?8>'%W"6*RSKG4&*HILD75'S,^$\1LG:(%R\>SA/)65>Y@M7CQ^)6/2:YCAG MY^?@R71'8J*J3C2$>6$_I=)9)4^8^MY6`*J1*GLONS]U3]QZH\!2&4\J[GG; M7;;[GCO^*/C55*GXYW*_&QEWQ3U/A22.A$ZTGFY7SO1#"DI2I244*3Y*BRAO M;RSX'JJ4I2E+/P+KO7G*8F:Z>Z+HZO`S$J7?9D=Y=&OXWX?'S>P]@]8X=]@7':9VT\DH7\2\?='4LP,&:!EPEO%"EB:%.3&JBBI553Y6I&0OJKDPP&QC MU+2LYC6$TEY4>F7]NR[)')))($S_0I#I#W1Y@1L%NPW`<'"!E'&]BR@3A*;2 M='QF%M34JUZJ22SI$W,FM@:;%6V-CRJ3UX*DNP=<EE+*C^: MQ[7PK%.!XDN?/!N8PA`Q!$GJ",P%53K0@"-#QR/$D$DZF$.<:1635KFR>@MS+&.)ABIFW7QY& M"EK;[K;3&^I6FEJLO9SU%V.'&,]6I-7+J3]1=BK.FT8$2D(`"**3&C M7!@6,PJ08J@&40-6N#Q38<&+?D*I,F7)FFJ.88W,DPM1JMHJ^ME,&>-BVR3F MU<'C33/IK3G4VN_79N=;6Q$W:5E@C54,%S-DZZD3$DY*2N]X63K^"9&]L6>E MVFF4=1A+`F[6*L*3-5MU615924J=KLKP#LH5HE*^G+)%ZY]:V5K#6>$]8ZH_ MD*(@ZQ,8OI.;W_>>*SZ"O6HQZ;HDB`+#K"(P#(T4HT["<) MQ[$Y54O_D=3=)OA/7.7$HYM?V1J,#^:5,.+1PVCD/?T5/YFO8NT?4>R8_ MX];K5*?!2,^PUE*V?I7%ORS(QB?32Z92;HX(VL&+-4BEDMQF4T3:^!BR*C88 M2V]2<1R(YFQRM]WS.&]F^EDZS@F!S=I9I-1BNCH691PNINE'<=HQ>#E MET="8-R2R<5I?8P6EXL;G)PZN0P8867+YS1.@KG91CC.U"#B\K*+H;=C M@8&Z0W5KC74K5PFM7?J8%#IZ%DQLO&DQ=JYFBCGI+1O-1-NJF,T34P;D3D92 MS*COCD7:)EWJ:^:,B\Z-YA-QAM-R6-S,HW(:VQ7-&A4OI@N7-TV+]#DL6:,U MBG9'%BC!&8T:G8P%XSTR?3 M[GE^3)=3*]O21^<^%=ZKOCN>-Q4HE.^4[%Y/$[YX*E3%EX63"J4^\>7&9&I2 MG4NS>C]GQJ8QVI7[&,ZG:^7UJHB_P2)C[YFC)JMX,4_59Y2O\Y/HC_OD&9M+ M[:ESD;+FLC6FPL%1):7_2\2[6Y-K&S&595C2R]H7'KL$R:UD+L#.1-9L/G_> MI93:;5U)4I5,VM=I&Q9G-L+-1J6;&M944].C%A@HQDGY/V_;_7^OV[Y#@<97 M[;$MO1^M)'.J?R,*CR-^1^&2SZ"B=;2W4R@X/JE*G8V.5/?J?;;ZE[.YK;_4 MLPR937]N,O)QPL93!4?-_N8*R68C]^11%23VSHG.XCR4-8FK8N]='J=E$I6O M@;":D_*^;BZ?.5[5_D>CTSV73 MS.4LF^,XWYH-BCQ)[&!CLE'N%&* MGER\#IU2;LWLL4TDG2IPDV,XDWP\"E5G$F<3`.&&U=BQL:J2CBSNG:;W&3^U/)DO$G M@GC=1UNVAU'OR&VRH72>UC$TI.F*W?75;7:3=M,G&UHC3-@2XX"M0RFWUY9R M\JKKFXXBC5'0CQ#AFZ4ZS6=>R':=N(\;\Z=&!K3ZIW3J,W";Z]-+##IPGFE6G2GNF,4_%+-IY+/$VMU]&YY MO*^>+:AUDP47