線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2185
推到 Plurk!
推到 Facebook!

製作RAMDISK in KERNEL的NetBSD微系統

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-19 11:50:10 IP:220.132.xxx.xxx 未訂閱
製作RAMDISK in KERNEL的NetBSD微系統 http://www.freebsdchina.org/forum/viewtopic.php?t=11106&sid=e845ae15d7b44251d49fc09bb8a3154d    製作RAMDISK in KERNEL的NetBSD微系統     Matthew(黑夜編碼人)  前言 在前面我們已經講過如何製作軟碟上運行的FreeBSD和OpenBSD系統,現在我們來看看如何製作一個運行在軟碟上的NetBSD系統。同軟碟中的OpenBSD系統一樣,我們還是將系統中的所有配製檔及程式全部存放到NetBSD的內核中,這樣整個系統看起來就是一個檔。下面讓我們具體來看看如何完成這樣一個微系統的製作。 0、NetBSD的啟動過程 當硬碟MBR中的引導程式接過啟動之後,MBR中的程式將讀入硬碟NetBSD分區中的引導程式,引導程式默認情況下會載入/boot,然後由boot載入內核/netbsd,此時內核開始檢測一些硬體和做一些初始化。初始化完成後kernel將mount root device,然後啟動系統初始化進程/sbin/init,init將根據/etc/rc中的設置來進行初始化等。 1、定制RAMDISK內核 要使用RAMDISK in KERNEL就必須在內核配製檔中加入以下選項: options MEMORY_DISK_HOOKS options MEMORY_DISK_IS_ROOT # force root on memory disk options MEMORY_DISK_SERVER=0 options MEMORY_DISK_ROOT_SIZE=10000 # size of memory disk, in blocks options MEMORY_RBFLAGS=0x00 # boot in to multi-user mode pseudo-device md 1 # memory disk device (ramdisk) 以上的內核參數意義如下: MEMORY_DISK_ROOT_SIZE : 記憶體磁片大小,以塊為單位 MEMORY_RBFLAGS=0x00 : 啟動到多用戶模式 以下是在我機器上使用的一個內核配製檔 include "arch/i386/conf/std.i386" #options INCLUDE_CONFIG_FILE # embed config file in kernel binary makeoptions COPTS="-Os" # Optimise for space. Implies -O2 # Enable the hooks used for initializing the root memory-disk. options MEMORY_DISK_HOOKS options MEMORY_DISK_IS_ROOT # force root on memory disk options MEMORY_DISK_SERVER=1 # 0 readonly 1 writable options MEMORY_DISK_ROOT_SIZE=10000 # size of memory disk, in blocks options MEMORY_RBFLAGS=0x00 # boot in to multi-user mode maxusers 48 # estimated number of users # CPU support. At least one is REQUIRED. options I386_CPU options I686_CPU # CPU-related options. options MATH_EMULATE # floating point emulation # This option allows you to force a serial console at the specified # I/O address. #options CONSDEVNAME="\"com\"",CONADDR=0x3f8,CONSPEED=9600 # Avoid irq 5 and 7, the most likely cause of problems on modern laptops. options PCIC_ISA_INTR_ALLOC_MASK=0xff5f # Standard system options options INSECURE # disable kernel security levels options RTC_OFFSET=0 # hardware clock is this many mins. west of GMT #options NTP # NTP phase/frequency locked loop options USERCONF # userconf(4) support options PIPE_SOCKETPAIR # smaller, but slower pipe(2) options MALLOC_NOINLINE # Not inlining MALLOC saves memory # File systems file-system FFS # UFS file-system MFS # memory file system file-system MSDOSFS # MS-DOS file system file-system KERNFS # /kern options VNODE_OP_NOINLINE # Not inlining vnode op calls saves mem # Networking options options GATEWAY # packet forwarding options INET # IP ICMP TCP UDP #options PFIL_HOOKS # pfil(9) packet filter hooks # builtin terminal emulations options WSEMUL_VT100 # VT100 / VT220 emulation # different kernel output - see dev/wscons/wsdisplayvar.h options WS_KERNEL_FG=WSCOL_BLACK options WS_KERNEL_BG=WSCOL_WHITE # compatibility to other console drivers #options WSDISPLAY_COMPAT_PCVT # emulate some ioctls #options WSDISPLAY_COMPAT_SYSCONS # emulate some ioctls #options WSDISPLAY_COMPAT_USL # VT handling #options WSDISPLAY_COMPAT_RAWKBD # can get raw scancodes # see dev/pckbc/wskbdmap_mfii.c for implemented layouts #options PCKBD_LAYOUT="(KB_DE | KB_NODEAD)" # allocate a number of virtual screens at autoconfiguration time #options WSDISPLAY_DEFAULTSCREENS=4 # use a large software cursor that doesn't blink options PCDISPLAY_SOFTCURSOR # modify the screen type of the console; defaults to "80x25" #options VGA_CONSOLE_SCREENTYPE="\"80x24\"" # Kernel root file system and dump configuration. config netbsd root on ? type ? #config netbsd root on sd0a type ffs #config netbsd root on ? type nfs # # Device configuration # mainbus0 at root cpu* at mainbus? apm0 at mainbus0 # Advanced power management # Basic Bus Support # PCI bus support pci* at mainbus? bus ? pci* at pchb? bus ? pci* at ppb? bus ? # PCI bridges pchb* at pci? dev ? function ? # PCI-Host bridges pceb* at pci? dev ? function ? # PCI-EISA bridges pcib* at pci? dev ? function ? # PCI-ISA bridges ppb* at pci? dev ? function ? # PCI-PCI bridges # XXX 'puc's aren't really bridges, but there's no better place for them here puc* at pci? dev ? function ? # PCI "universal" comm. cards # ISA bus support isa0 at mainbus? isa0 at pceb? isa0 at pcib? # ISA Plug-and-Play bus support isapnp0 at isa? # Coprocessor Support # Math Coprocessor support npx0 at isa? port 0xf0 irq 13 # x86 math coprocessor # Console Devices # ISA console #pc0 at isa? port 0x60 irq 1 # pccons generic PC console driver # wscons pckbc0 at isa? # pc keyboard controller pckbd* at pckbc? # PC keyboard #pms* at pckbc? # PS/2 mouse for wsmouse vga0 at isa? vga* at pci? dev ? function ? pcdisplay0 at isa? # CGA, MDA, EGA, HGA wsdisplay* at vga? console ? wsdisplay* at pcdisplay? console ? wskbd* at pckbd? console ? #wsmouse* at pms? mux 0 pcppi0 at isa? sysbeep0 at pcppi? # Serial Devices # PCI serial interfaces com* at puc? port ? # 16x50s on "universal" comm boards #cy* at pci? dev ? function ? # Cyclades Cyclom-Y serial boards # ISA Plug-and-Play serial interfaces com* at isapnp? # Modems and serial boards # ISA serial interfaces #options COM_HAYESP # adds Hayes ESP serial board support com0 at isa? port 0x3f8 irq 4 # Standard PC serial ports com1 at isa? port 0x2f8 irq 3 com2 at isa? port 0x3e8 irq 5 #com3 at isa? port 0x2e8 irq 9 #ast0 at isa? port 0x1a0 irq 5 # AST 4-port serial cards #com* at ast? slave ? #boca0 at isa? port 0x100 irq 5 # BOCA 8-port serial cards #com* at boca? slave ? #tcom0 at isa? port 0x100 irq 7 # TC-800 8-port serial cards #com* at tcom? slave ? #rtfps0 at isa? port 0x1230 irq 10 # RT 4-port serial cards #com* at rtfps? slave ? #cy0 at isa? iomem 0xd4000 irq 12 # Cyclades serial cards # Miscellaneous mass storage devices # Network Interfaces # PCI network interfaces fxp* at pci? dev ? function ? # Intel EtherExpress PRO 10 /100B le* at pci? dev ? function ? # PCnet-PCI Ethernet pcn* at pci? dev ? function ? # AMD PCnet-PCI Ethernet rtk* at pci? dev ? function ? # Realtek 8129/8139 amhphy* at mii? phy ? # AMD 79c901 Ethernet PHYs urlphy* at mii? phy ? # Realtek RTL8150L internal PHYs ukphy* at mii? phy ? # generic unknown PHYs # Pseudo-Devices # disk/mass storage pseudo-devices pseudo-device md 1 # memory disk device (ramdisk) #pseudo-device vnd 4 # disk-like interface to files # network pseudo-devices pseudo-device bpfilter 8 # Berkeley packet filter pseudo-device ipfilter # IP filter (firewall) and NAT pseudo-device loop # network loopback pseudo-device ppp 2 # Point-to-Point Protocol pseudo-device pppoe 3 # miscellaneous pseudo-devices pseudo-device pty 2 # pseudo-terminals (Sysinst needs two) # wscons pseudo-devices pseudo-device wsmux # mouse & keyboard multiplexor #pseudo-device wsfont 2、製作ramdisk鏡像 # dd if=/dev/zero of=/ramdisk bs=512 count=9000 # vnconfig -c /dev/vnd0d /ramdisk # disklabel -r -w /dev/vnd0d rdroot # newfs -m 0 -S 512 -i 4096 /dev/vnd0a # mount /dev/vnd0a /mnt # mkdir /mnt/{dev,bin,sbin,etc} # cp /dev/MAKEDEV /mnt/dev # cp /bin/{sh,ls} /mnt/bin # cp /sbin/init /mnt/sbin # cd /mnt/dev/ && ./MAKEDEV ramdisk # echo 'echo "This is my minibsd all in kernel" && /bin/sh' > /mnt/etc/rc # sync && umount /mnt # sync && vnconfig -u vnd0d && sync 3、將ramdisk寫入kernel # mdsetroot /minibsd ramdisk 4、壓縮kernel大小 # gzip -9 -c /minibsd > /minibsd.gz 5、製作目標軟碟 因為系統需要使用/boot(/usr/mdec/boot)來載入kernel,所以我們需要在軟碟上放置boot檔。 # disklabel -B -w -r /dev/fd0a fd1440 # newfs -m 0 -S 512 /dev/fd0a # mount /dev/fd0a /mnt # cp /usr/mdec/boot /mnt # cp /minibsd.gz /mnt/netbsd 現在你的ramdisk in kernel的mininetbsd系統就已經做好了。 注:任何轉載或摘抄請保留作者資訊和注明文章出處(中文FreeBSD用戶組 http://www.cnfug.org) 更多精采盡在CNFUG: http://www.cnfug.org/ _________________ CNFUG(China FreeBSD User Group): http://www.cnfug.org/
系統時間:2024-05-04 19:52:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!