网络推荐



本广告位招租!

推荐给好友 上一篇 | 下一篇

制作RAMDISK in KERNEL的NetBSD微系统

BSD爱好者乐园LA&liw9uk

Matthew(黑夜编码人) <matthew@cnfug.org>BSD爱好者乐园6Xk \]to r3aR

BSD爱好者乐园 I5] eF nS _Pw

前言

.@i8Dg gBSD爱好者乐园I J ?(g`X7c

在前面我们已经讲过如何制作软盘上运行的FreeBSD和OpenBSD系统,现在我们来看看如何制作一个运行在软盘上的NetBSD系统。同软盘中的OpenBSD系统一样,我们还是将系统中的所有配制文件及程序全部存放到NetBSD的内核中,这样整个系统看起来就是一个文件。下面让我们具体来看看如何完成这样一个微系统的制作。

Wg`(ltBSD爱好者乐园'F$cGr_n6XRH4z

0、NetBSD的启动过程BSD爱好者乐园3G.}'\ k(s

si2l0{XQL;[当硬盘MBR中的引导程序接过启动之后,MBR中的程序将读入硬盘NetBSD分区中的引导程序,引导程序默认情况下会加载/boot,然后由boot载入内核/netbsd,此时内核开始检测一些硬件和做一些初始化。初始化完成后kernelmount root device,然后启动系统初始化进程/sbin/init,init将根据/etc/rc中的设置来进行初始化等。

;n a|"mbW E9K7ZBSD爱好者乐园.h{%Y~drBoN9l

1、定制RAMDISK内核

$]%JdVC4P4@%~`JBSD爱好者乐园3`*II/J-e*HR V]

要使用RAMDISK in KERNEL就必须在内核配制文件中加入以下选项:BSD爱好者乐园0{(lD @"sgM"w

options MEMORY_DISK_HOOKS
7kh nS;N}options MEMORY_DISK_IS_ROOT # force root on memory diskBSD爱好者乐园 DWJ a P
options MEMORY_DISK_SERVER=0
4MohyOz p ~options MEMORY_DISK_ROOT_SIZE=10000 # size of memory disk, in blocks
Y h]!e#Sq2?7Loptions MEMORY_RBFLAGS=0x00 # boot in to multi-user modeBSD爱好者乐园({ c)v;^4tY%wR
pseudo-device md 1 # memory disk device (ramdisk)
&r3D{IW5KOZ

gRc8de%RBSD爱好者乐园 O @K^:g%A.KY

BSD爱好者乐园 K U'h3jL&t nkS

以上的内核参数意义如下:BSD爱好者乐园uN:X7F'lYuih_,`

#K'J(m/ReMEMORY_DISK_ROOT_SIZE : 内存磁盘大小,以块为单位BSD爱好者乐园a ]\7ly]PX2J.d
MEMORY_RBFLAGS=0x00 : 启动到多用户模式

$g7B1dH.A?q!o

/?AGw ]$\'eJ以下是在我机器上使用的一个内核配制文件BSD爱好者乐园'[]D oqy)D;@2X

include "arch/i386/conf/std.i386"BSD爱好者乐园:n:K _,R4|]l

N1z7] UP.^rKBSD爱好者乐园kN0H \J7U#B m

#options INCLUDE_CONFIG_FILE # embed config file in kernel binaryBSD爱好者乐园W] Q,Ao vep.vZ

BSD爱好者乐园E.z1M&V+KE(]1rr

makeoptions COPTS="-Os" # Optimise for space. Implies -O2

7H!j6B:WQ V'j6KBSD爱好者乐园Kc5\8|(Fe#O

# Enable the hooks used for initializing the root memory-disk.
)s+v E!p:B a2moptions MEMORY_DISK_HOOKS
C&``bs2J,z.Iqb9Coptions MEMORY_DISK_IS_ROOT # force root on memory disk
ni(h8o VkCkD+?options MEMORY_DISK_SERVER=1 # 0 readonly 1 writableBSD爱好者乐园"R ~W1R&IP
options MEMORY_DISK_ROOT_SIZE=10000 # size of memory disk, in blocksBSD爱好者乐园!h8F+n4^nK!}gdx
options MEMORY_RBFLAGS=0x00 # boot in to multi-user modeBSD爱好者乐园%r'u_K)O2]2\G

BSD爱好者乐园f'KB/m#u X4[?#}

maxusers 48 # estimated number of usersBSD爱好者乐园C,z%OY5^8[

5VnIB5h# CPU support. At least one is REQUIRED.
\'w jT6o+X] {qoptions I386_CPU
)nmB9|tf(UpHoptions I686_CPUBSD爱好者乐园 mq8G:QWmk

BSD爱好者乐园 Y1`Q;O2S [}

# CPU-related options.BSD爱好者乐园Rx0vT7@VSA
options MATH_EMULATE # floating point emulationBSD爱好者乐园 GqnRd3x

$t5c Lk't'p?# This option allows you to force a serial console at the specified
1o#e h-Wh#C5R# I/O address.BSD爱好者乐园*T:?e4`G3hT m
#options CONSDEVNAME="\"com\"",CONADDR=0x3f8,CONSPEED=9600BSD爱好者乐园N2[.a)h#d2d _,i"n

BSD爱好者乐园L,q)A4s+^O@o

# Avoid irq 5 and 7, the most likely cause of problems on modern laptops.BSD爱好者乐园:x \oOE
options PCIC_ISA_INTR_ALLOC_MASK=0xff5fBSD爱好者乐园~5Ns [J _z9h3E

BSD爱好者乐园 sE5g8iOp/W _x

# Standard system optionsBSD爱好者乐园1K$Q:H i[f7Z

SmC:pm#E#P5Ioptions INSECURE # disable kernel security levelsBSD爱好者乐园 vT z6w5}k T[

BSD爱好者乐园#u2u/drv

options RTC_OFFSET=0 # hardware clock is this many mins. west of GMTBSD爱好者乐园*Qa$~)q7PY_ {
#options NTP # NTP phase/frequency locked loopBSD爱好者乐园9k4x]z!o/r/b G2y4T

BSD爱好者乐园7bUi5r)ha \4Pf

options USERCONF # userconf(4) supportBSD爱好者乐园bhx ]T7H.mebg
options PIPE_SOCKETPAIR # smaller, but slower pipe(2)BSD爱好者乐园6kjVOx,W-|V0R
options MALLOC_NOINLINE # Not inlining MALLOC saves memoryBSD爱好者乐园b?-MK#?hP{M

5^*rxM5T,{+q# File systems
erLt s;QI Cfile-system FFS # UFS
4NLw)eY-|AEfile-system MFS # memory file systemBSD爱好者乐园AV+Es7e3b@
file-system MSDOSFS # MS-DOS file system
U@.o8@ @F+Afile-system KERNFS # /kernBSD爱好者乐园8waWB8D#H8vMI3z

BSD爱好者乐园 d'`'D0r;b#^.x9_ T

options VNODE_OP_NOINLINE # Not inlining vnode op calls saves mem

^$f%z0v!w[8Op_BSD爱好者乐园@-Q&O n;{qIJ}x

# Networking options
Jy6]&R$DJKoptions GATEWAY # packet forwardingBSD爱好者乐园1B5P)}'k7u
options INET # IP + ICMP + TCP + UDP
C5o!~ EJC'b#options PFIL_HOOKS # pfil(9) packet filter hooksBSD爱好者乐园 K8F ] p9OR%Gt1p

Y$R h [-Q U# builtin terminal emulations
4eX~1D9Doptions WSEMUL_VT100 # VT100 / VT220 emulation
Bv$n[u/RvU# different kernel output - see dev/wscons/wsdisplayvar.h
j ?RH-R0s0AHoptions WS_KERNEL_FG=WSCOL_BLACKBSD爱好者乐园;f!?w z#A'b7O M9^@
options WS_KERNEL_BG=WSCOL_WHITE
h*eRyU!s# compatibility to other console driversBSD爱好者乐园6y*Q]0Ljv.pP$k
#options WSDISPLAY_COMPAT_PCVT # emulate some ioctlsBSD爱好者乐园 `t+w;ej i1Q4~/Q:p
#options WSDISPLAY_COMPAT_SYSCONS # emulate some ioctls
V Q7^8sa[p)Id#options WSDISPLAY_COMPAT_USL # VT handling
]!k]DZ6]8E#options WSDISPLAY_COMPAT_RAWKBD # can get raw scancodesBSD爱好者乐园j$bE"h2le3v
# see dev/pckbc/wskbdmap_mfii.c for implemented layouts
6j$O+B"[&Y{#options PCKBD_LAYOUT="(KB_DE | KB_NODEAD)"
g~i'}4w5nw^$m+w# allocate a number of virtual screens at autoconfiguration time
d o:f$IddR#options WSDISPLAY_DEFAULTSCREENS=4
`9WfN8Hp3N:z$s# use a large software cursor that doesn't blink
5zCGfl;Q'X6Woptions PCDISPLAY_SOFTCURSORBSD爱好者乐园#HC^8| Hb0nH
# modify the screen type of the console; defaults to "80x25"
+z%WD6~_#options VGA_CONSOLE_SCREENTYPE="\"80x24\""BSD爱好者乐园9wxlHe3a

Q e+C8kFK"gG# Kernel root file system and dump configuration.
2mR1iE Sconfig netbsd root on ? type ?
a O*f2x\$_&Y#config netbsd root on sd0a type ffs
(lo*E4f%Z` `#config netbsd root on ? type nfs

| E4?Jo i7} y;s*Zh

8lQ ~Br#BSD爱好者乐园8f/K0G Ux
# Device configurationBSD爱好者乐园0Ll&W Fx4F
#BSD爱好者乐园_9F%kF;kE!t

r c S7V%J } Bmainbus0 at root

v(\/X5a\bm'rO

-G)H f:KDq0q6cd,?cpu* at mainbus?

N {P{7Sy p"w

$`T,K(^/~S9japm0 at mainbus0 # Advanced power management

G2Dku+TZ `BSD爱好者乐园+k)Q8q ]9p3DV7|

BSD爱好者乐园fY J6t-f@1i
# Basic Bus Support

$}ET\~7^:hX

6NP4V|4ltp# PCI bus support
6h.Th!y'|OI%i!_[.fpci* at mainbus? bus ?BSD爱好者乐园6[(o"bBHeM
pci* at pchb? bus ?BSD爱好者乐园&^"W T:nB$A0M
pci* at ppb? bus ?BSD爱好者乐园$E)Vn u5}b/\+o1h*S

_ZEW)M!r# PCI bridges
se2v5j4uapchb* at pci? dev ? function ? # PCI-Host bridgesBSD爱好者乐园.He&\4dq/Y
pceb* at pci? dev ? function ? # PCI-EISA bridges
\C~-\,V!@1upcib* at pci? dev ? function ? # PCI-ISA bridgesBSD爱好者乐园/Ba"n.H&Ym
ppb* at pci? dev ? function ? # PCI-PCI bridges
"V}[c }# XXX 'puc's aren't really bridges, but there's no better place for them hereBSD爱好者乐园.yX(|P(J
puc* at pci? dev ? function ? # PCI "universal" comm. cardsBSD爱好者乐园0_ KY/G{c

-^6v9@Zkn5a-R# ISA bus supportBSD爱好者乐园~#gzJ9z1y \
isa0 at mainbus?
J)@0I G&G~:li@W6fisa0 at pceb?
#sL%vaCisa0 at pcib?BSD爱好者乐园X,v j4ch*q M

BSD爱好者乐园1X L8{j!b P

# ISA Plug-and-Play bus support
$y\+h:B8C9`I |isapnp0 at isa?BSD爱好者乐园h9e)~ R@9QV _+U vY

BSD爱好者乐园:WzJM0Xi'?M

# Coprocessor SupportBSD爱好者乐园3QgG#KJsx]@\d

BSD爱好者乐园!X7t9S/x1Dr$d1{'Sf

# Math Coprocessor support
3rP8`~e1RCnpx0 at isa? port 0xf0 irq 13 # x86 math coprocessor

-lt+C6oyBSD爱好者乐园R&|} VfW5U,KH

BSD爱好者乐园aMQ Smp)rQ?
# Console DevicesBSD爱好者乐园/m`o+O?/v_ y_

O*K&@qh0D'b/t# ISA consoleBSD爱好者乐园EF3m WaEh8Z A?[
#pc0 at isa? port 0x60 irq 1 # pccons generic PC console driver

*Kj%FAP T:K&tw8e

qu)];Z,]# wscons
&O!N8F.c b_Ipckbc0 at isa? # pc keyboard controllerBSD爱好者乐园aj i.Q2e+i
pckbd* at pckbc? # PC keyboardBSD爱好者乐园$vq[+qhmSv*M
#pms* at pckbc? # PS/2 mouse for wsmouseBSD爱好者乐园0jU Ds0q
vga0 at isa?BSD爱好者乐园"@a#g.Z;MP8q8j0D
vga* at pci? dev ? function ?
o7O(rE7E Dpcdisplay0 at isa? # CGA, MDA, EGA, HGABSD爱好者乐园-w)s/c/TW:K
wsdisplay* at vga? console ?
-TQ,{T$QUf5[wsdisplay* at pcdisplay? console ?
?e1MOm#Vwskbd* at pckbd? console ?BSD爱好者乐园5uSi}R z)^Z[l
#wsmouse* at pms? mux 0BSD爱好者乐园YI#S&Y} o CY

/a z.}bOp5Mpcppi0 at isa?BSD爱好者乐园_D H&c@V0C*{
sysbeep0 at pcppi?BSD爱好者乐园 Xj%r2L|^4MRw

-SV/UVL;[xn&L!Z# Serial Devices

LR_Tq1~i3P NBSD爱好者乐园~#\E S6DQh3OX

# PCI serial interfacesBSD爱好者乐园 }h|1@:l$M"J*p
com* at puc? port ? # 16x50s on "universal" comm boardsBSD爱好者乐园A2BX nr2n:QpE2U!e
#cy* at pci? dev ? function ? # Cyclades Cyclom-Y serial boards

'X,y^ m&inBSD爱好者乐园0e_'h eb#^8E4E

# ISA Plug-and-Play serial interfacesBSD爱好者乐园&I(z O\:x'R
com* at isapnp? # Modems and serial boards

,U(y|'H;pQ4M&^

$kb g.L/k^LCo# ISA serial interfacesBSD爱好者乐园tn5pc5K;pH
#options COM_HAYESP # adds Hayes ESP serial board supportBSD爱好者乐园$_l5Hu+h+e;O
com0 at isa? port 0x3f8 irq 4 # Standard PC serial ports
bC!hh+tc5P+jcom1 at isa? port 0x2f8 irq 3
Ob}n@Dcom2 at isa? port 0x3e8 irq 5BSD爱好者乐园W I%km;RZn
#com3 at isa? port 0x2e8 irq 9
d:o @p"M;E*Z#ast0 at isa? port 0x1a0 irq 5 # AST 4-port serial cardsBSD爱好者乐园`?l)Ef+?)J qE%G6{,z,P
#com* at ast? slave ?
7J.hg,VUv\#boca0 at isa? port 0x100 irq 5 # BOCA 8-port serial cardsBSD爱好者乐园zJVR,~oZ&H
#com* at boca? slave ?
)N d#O-k;M#tcom0 at isa? port 0x100 irq 7 # TC-800 8-port serial cards
FrIF'nCxo#com* at tcom? slave ?
N0c~4A-hO[@#rtfps0 at isa? port 0x1230 irq 10 # RT 4-port serial cards
K[:? Umt#com* at rtfps? slave ?
E;Z ]o4G#cy0 at isa? iomem 0xd4000 irq 12 # Cyclades serial cards

}-Wft sBSD爱好者乐园&bV){8Q+hX-G ~ R

# Miscellaneous mass storage devices

@Tk `k)D;Y0rBSD爱好者乐园%hUt2m T yN(K

# Network Interfaces

a!ac'O'X@ N;N bBSD爱好者乐园p v#Ol*Y

# PCI network interfacesBSD爱好者乐园5C*vK(n {/E
fxp* at pci? dev ? function ? # Intel EtherExpress PRO 10+/100BBSD爱好者乐园7x1^!Y4t$^
le* at pci? dev ? function ? # PCnet-PCI EthernetBSD爱好者乐园n9k(a/B v#}
pcn* at pci? dev ? function ? # AMD PCnet-PCI Ethernet
}+?'}&?Va xBrtk* at pci? dev ? function ? # Realtek 8129/8139BSD爱好者乐园&c.W7H+AO{

@ { c @Zkbamhphy* at mii? phy ? # AMD 79c901 Ethernet PHYs
,h{#J6L m-T)Furlphy* at mii? phy ? # Realtek RTL8150L internal PHYsBSD爱好者乐园{Xb9d'K8TG
ukphy* at mii? phy ? # generic unknown PHYsBSD爱好者乐园}B![N;~s.cRy

*rW1Y7R @I"y# Pseudo-Devices

6dM9v&frg0w*oP7PBSD爱好者乐园]/C-G#T-p'MN

# disk/mass storage pseudo-devicesBSD爱好者乐园?s{:z-KE4A
pseudo-device md 1 # memory disk device (ramdisk)
d i-H2ID3R"g#pseudo-device vnd 4 # disk-like interface to filesBSD爱好者乐园fm*})GkB

BSD爱好者乐园 Wqa4k(VP-w

# network pseudo-devices
2Cr@j"}-Hpseudo-device bpfilter 8 # Berkeley packet filterBSD爱好者乐园%f[j(b:L ]/}
pseudo-device ipfilter # IP filter (firewall) and NAT
(e$N:hx c;Ij|q4z}pseudo-device loop # network loopbackBSD爱好者乐园8C/F4QtA,A @ ~
pseudo-device ppp 2 # Point-to-Point Protocol
(sr4C`N2Upseudo-device pppoe 3BSD爱好者乐园5tXyw/e%ls%Qo

BSD爱好者乐园(sI8B.UA(e2@(a }l6F,I

# miscellaneous pseudo-devices
PuT4deFz:M Y-B@pseudo-device pty 2 # pseudo-terminals (Sysinst needs two)
|/k'UOc:w A# wscons pseudo-devices
b}'F0w C&jIqpseudo-device wsmux # mouse & keyboard multiplexor
r,p gm&Fu/UK#pseudo-device wsfontBSD爱好者乐园"Ie&r[2rhoj
BSD爱好者乐园s2e8i?.@6y{+C-r:F

D]0Yn!z+_BSD爱好者乐园C,HAU W7G

;Lj!az+M9?m[7]'Z2、制作ramdisk镜像
)r@Q LI(qmI;Gr

# dd if=/dev/zero of=/ramdisk bs=512 count=9000BSD爱好者乐园W([ a$\3j:q
# vnconfig -c /dev/vnd0d /ramdisk
x_(uT t+Z# disklabel -r -w /dev/vnd0d rdrootBSD爱好者乐园+sVV+C c P6q~
# newfs -m 0 -S 512 -i 4096 /dev/vnd0a
`/~degv%H# mount /dev/vnd0a /mntBSD爱好者乐园2](LP7uS:~o4N6K \3fN
# mkdir /mnt/{dev,bin,sbin,etc}BSD爱好者乐园K-JA{'DX.?
# cp /dev/MAKEDEV /mnt/devBSD爱好者乐园SD#}O6I2U[
# cp /bin/{sh,ls} /mnt/binBSD爱好者乐园,e/w9`E}(E A"n
# cp /sbin/init /mnt/sbinBSD爱好者乐园kg,m@\|q
# cd /mnt/dev/ && ./MAKEDEV ramdiskBSD爱好者乐园 p2\-i*WNJ]{7P
# echo 'echo "This is my minibsd all in kernel" && /bin/sh' > /mnt/etc/rc
\*eEs ?"]-i# sync && umount /mnt
N@&hs"AQ# sync && vnconfig -u vnd0d && sync
&g;sdvOp5F1|g
BSD爱好者乐园!i,fQ&y/Bha+O

BSD爱好者乐园 ~ ZY#r1EVKQ o!EJ-{ H

;Iq lmBlKB3、将ramdisk写入kernelBSD爱好者乐园0D]El[~*D

# mdsetroot /minibsd ramdisk
i3J+Vl%A2|'L|o
BSD爱好者乐园jAK t:G'b-B

*U(J(B9U{#r#G

yhCu?4g8A4、压缩kernel大小
V(Wz2|/s-|6[

# gzip -9 -c /minibsd > /minibsd.gz
BSD爱好者乐园"zJ9g^]O$\T/S],]

)} L'q uv.rBSD爱好者乐园`Yt(d;u#{/qY

5、制作目标软盘

&b@4BNLBSD爱好者乐园$Y]8O H2k!n

因为系统需要使用/boot(/usr/mdec/boot)来加载kernel,所以我们需要在软盘上放置boot文件。
;p!Hj7M gMg

# disklabel -B -w -r /dev/fd0a fd1440BSD爱好者乐园%a(j9KN)_|H&c
# newfs -m 0 -S 512 /dev/fd0aBSD爱好者乐园!I:D*K\j
# mount /dev/fd0a /mntBSD爱好者乐园q2lJF:A\Y#g
# cp /usr/mdec/boot /mntBSD爱好者乐园)P,PS E0ix6i.K`
# cp /minibsd.gz /mnt/netbsdBSD爱好者乐园'w!W#p;q B
BSD爱好者乐园)z \V"O.y&r

BSD爱好者乐园*}v,` `x4v

am0lx0`)s-v现在你的ramdisk in kernel的mininetbsd系统就已经做好了。

)E8~WX qD

[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: kernel ramdisk
 

评分:0

我来说两句

seccode