SPARC bootable CD-ROM: CRK Linux 2.2.14 Sparc` ^77ھ@SILO0.98!0h)@ !@L!] @?!!@4 S@:!! :  2O * a* * !@6!]  , 4@6!] 0  $!*@- ] 0@!@ I@! $ L2@!@$$, h!!@ u !u ($u 0! u h u uu u @ u u ou (finddevicegetpropbootpathstdoutopencloseseekreadwrite/chosenexit`!)@@a S2``*``(*` 0@ ,*` 0 +   0<$ )*4$`$`$ :  * * a**@$  g ,g`,,4` 0`, ?`@ I  L @ `"`(@`t@`\@,`` CD001LINUX CRK Linux 2.2.14 Sparc !!66"f  ) CRK-2002092202 stock CRK Linux 2.2.14 Sparc 2002092212025600200209221202560000000000000000002002092212025600 CD001LINUX CRK Linux 2.2.14!!%/@JJ"llf  ) CRK-2002092202 stock CRK Linux 2.2.14 Sparc 002092212025600200209221202560000000000000000002002092212025600 CD001YBOOTZDEV[ETCMODULES\SBIN]UTILS +DOCUMENTATIONSPARCJSPARC64eSPARC^SPARC641ARM3CDROM4FB 5FILESYSTEMS7I3868ISDN:KBUILD;M68K <NETWORKINGAPOWERPCBS390CSOUNDFSYSCTL GTELEPHONY HVIDEO4LINUX 2.2K 2.2f BINg LIBh ROOTi SBINj USR_ BIN` LIBa ROOTb SBINc USR2 NWFPE@IP_MASQIBTTVBLOCK CDROM!FC4"FS%IPV4'MISC(NET)SCSI*VIDEOLBLOCKMCDROMNFC4OFSRIPV4TMISCUNETWSCSIXVIDEOk"LIBd'LIBYBOOTZDEV[ETCMODULES\SBIN]UTILS +DOCUMENTATIONSPARCJSPARC64eSPARC^SPARC641ARM3CDROM4FB 5FILESYSTEMS7I3868ISDN:KBUILD;M68K <NETWORKINGAPOWERPCBS390CSOUNDFSYSCTL GTELEPHONY HVIDEO4LINUX 2.2K 2.2f BINg LIBh ROOTi SBINj USR_ BIN` LIBa ROOTb SBINc USR2 NWFPE@IP_MASQIBTTVBLOCK CDROM!FC4"FS%IPV4'MISC(NET)SCSI*VIDEOLBLOCKMCDROMNFC4OFSRIPV4TMISCUNETWSCSIXVIDEOk"LIBd'LIBlbootdevetcmmodulessbin utilszDocumentation nsparcsparc64 sparcsparc64}arm cdromfbfilesystemsi386isdn kbuildm68knetworkingpowerpcs390 sound sysctltelephonyvideo4linuxo 2.2.14-5.0 2.2.14-5.0 bin lib root sbin usr bin lib root sbin usr ~ nwfpeip_masqbttv pblock qcdromrfc4sfsuipv4vmiscwnetxscsi yvideo block cdromfc4fsipv4miscnetscsi video"lib'liblbootdevetcmmodulessbin utilszDocumentation nsparcsparc64 sparcsparc64}arm cdromfbfilesystemsi386isdn kbuildm68knetworkingpowerpcs390 sound sysctltelephonyvideo4linuxo 2.2.14-5.0 2.2.14-5.0 bin lib root sbin usr bin lib root sbin usr ~ nwfpeip_masqbttv pblock qcdromrfc4sfsuipv4vmiscwnetxscsi yvideo block cdromfc4fsipv4miscnetscsi video"lib'libf  )SPRRPX$mAAmTFf  )f  7f  )CEff  )RRPX$mAAmTFf  )f  7f  )rYYf  94BOOTRRNM bootPX$mAAmTFf  94f  96f  94pZZe 5"DEVRRNMdevPX$mAAmTFe 5"f  8f p[[f  :)ETCRRNMetcPX$mAAmTFf  :)f  .f  :)xf 8MODULESRRNM modulesPX$mAAmTFf 8f  :2f 8r\\f  %SBINRRNM sbinPX$mAAmTFf  %f  f  %t]]f  2UTILSRRNM utilsPX$mAAmTFf  2f  2f  2ff 8RRPX$mAAmTFf 8f  7f 8ff  )RRPX$mAAmTFf  )f  7f  )++00f ; DOCUMENTATIONRRNMDocumentationPX$mAAmTFf ;f f &|AhhAd# MAKEDEV.;1RRNM MAKEDEVPX$mmTFd#f .f ;tf SPARCRRNM sparcPX$mAAmTFf f f xJJf 77SPARC64RRNM sparc64PX$mAAmTFf 77f f 77ff RRPX$mAAmTFf f  7f ff 8RRPX$mAAmTFf 8f  7f 8vf '2.2RRNM2.2.14-5.0PX$mAAm TFf 'f f ;5ff 'RRPX$mAAm TFf 'f  7f ;5ff RRPX$mAAmTFf f  7f ~d$ .RHKMVTAG;1RRNM.rhkmvtagPX$$$TFd$f .f ;5tf 8BLOCKRRNM blockPX$mAAmTFf 8f f ;5t d#CDROMRRNM cdromPX$mAAmTFd#f f ;5p!!f 8FC4RRNMfc4PX$mAAmTFf 8f f ;5n""f 8FSRRNMfsPX$mAAmTFf 8f f ;5r%%f 8IPV4RRNM ipv4PX$mAAmTFf 8f f ;5r''f 8MISCRRNM miscPX$mAAmTFf 8f f ;5f  MODULES.DEP;1RRNMmodules.depPX$$$TFf f .f ;5p((f 8NETRRNMnetPX$mAAmTFf 8f f ;5r))f 8SCSIRRNM scsiPX$mAAmTFf 8f f ;5t**d#VIDEORRNM videoPX$mAAmTFd#f f ;5ff 8RRPX$mAAmTFf 8f  7f ;5ff 'RRPX$mAAm TFf 'f  7f ;5|œd# LINEAR.O;1RRNM linear.oPX$$$TFd#f .f ;5x44d#LOOP.O;1RRNM loop.oPX$$$TFd#f .f ;5v|((|d#NBD.O;1RRNM nbd.oPX$$$TFd#f .f ;5zd# RAID0.O;1RRNM raid0.oPX$$$TFd#f .f ;5z==d# RAID1.O;1RRNM raid1.oPX$$$TFd#f .f ;5z>d#SYSV.O;1RRNM sysv.oPX$$$TFd#f .f ;5vTTmmd#UFS.O;1RRNM ufs.oPX$$$TFd#f .f ;5xKKd#VFAT.O;1RRNM vfat.oPX$$$TFd#f .f ;5f%%f 8RRPX$mAAmTFf 8f  7f ;5ff 'RRPX$mAAm TFf 'f  7f ;5x,,d#IPIP.O;1RRNM ipip.oPX$$$TFd#f .f ;5|<55>d$ CS4231.O;1RRNM cs4231.oPX$$$TFd$f .f ;5xhddhd$DBRI.O;1RRNM dbri.oPX$$$TFd$f .f ;5vT!!Td$DMY.O;1RRNM dmy.oPX$$$TFd$f .f ;5vwwd$IPX.O;1RRNM ipx.oPX$$$TFd$f .f ;5<)) >d DASD.;1RRNM DASDPX$$$TFd f /f &fCCf :RRPX$mAAmTFf :f  7f &f++00f ;RRPX$mAAmTFf ;f  7f &xc   AD1816.;1RRNM AD1816PX$$$TFc  f /f &xttb # ALS007.;1RRNM ALS007PX$$$TFb #f /f &c5)AUDIOEXCELDSP16.;1RRNMAudioExcelDSP16PX$$$TFc5)f /f &xc 9AWE32.;1RRNM AWE32PX$$$TFc 9f /f &11c5)CHANGELOG.AWE;1RRNMChangeLog.awePX$$$TFc5)f /f &b 4CHANGELOG.MULTISOUND;1RRNMChangeLog.multisoundPX$$$TFb 4f /f &| c* CMI8330.;1RRNM CMI8330PX$$$TFc*f /f &| c 5' CMI8338.;1RRNM CMI8338PX$$$TFc 5'f /f &x b # CS4232.;1RRNM CS4232PX$$$TFb #f /f &x ||b # ES1370.;1RRNM es1370PX$$$TFb #f /f &x b # ES1371.;1RRNM es1371PX$$$TFb #f /f &t c'ESS.;1RRNMESSPX$$$TFc'f /f &| 88b 4 ESS1868.;1RRNM ESS1868PX$$$TFb 4f /f & c5) INSTALL.AWE;1RRNMINSTALL.awePX$$$TFc5)f /f & j55jd INTRODUCTION.;1RRNMIntroductionPX$$$TFd f /f &x DDc-MAD16.;1RRNM MAD16PX$$$TFc-f /f &| d6 MAESTRO.;1RRNM MaestroPX$$$TFd6f /f & c 5' MULTISOUND.;1RRNMMultiSoundPX$$$TFc 5'f /f &x+ +c MWAVE.;1RRNM mwavePX$$$TFc f /f &x. .a--ad NM256.;1RRNM NM256PX$$$TFd f /f &t4 4b8OPL3.;1RRNM OPL3PX$$$TFb8f /f &|5 5c5) OPL3-SA.;1RRNM OPL3-SAPX$$$TFc5)f /f &|7 7c & OPL3-SA2.;1RRNM OPL3-SA2PX$$$TFc &f /f &t: :LLb OPTI.;1RRNM OptiPX$$$TFb f /f &|> >c  PCM1-PRO.;1RRNM PCM1-proPX$$$TFc f /f &t? ?d PSS.;1RRNMPSSPX$$$TFd f /f &@ @- -c5) README.AWE;1RRNMREADME.awePX$$$TFc5)f /f &E EcREADME.MODULES;1RRNMREADME.modulesPX$$$TFcf /f &H Hc5) README.OSS;1RRNMREADME.OSSPX$$$TFc5)f /f &xk kc-SOLO1.;1RRNM solo1PX$$$TFc-f /f &l l[ [b # SONICVIBES.;1RRNMsonicvibesPX$$$TFb #f /f &n nb& SOUNDBLASTER.;1RRNMSoundblasterPX$$$TFb& f /f &|o oc 5' SOUNDPRO.;1RRNM SoundProPX$$$TFc 5'f /f &|r r  b  TROPEZ+.;1RRNM Tropez+PX$$$TFb f /f &s sb # ULTRASOUND.;1RRNMultrasoundPX$$$TFb #f /f &t tc +VIA-CHIPSET.;1RRNMVIA-chipsetPX$$$TFc +f /f &|u uc VIBRA16.;1RRNM VIBRA16PX$$$TFcf /f &xw w7,,7c-VWSND.;1RRNM vwsndPX$$$TFc-f /f &} }22c5) WAVEFRONT.;1RRNMWavefrontPX$$$TFc5)f 0f &fFFf ;RRPX$mAAmTFf ;f  7f &f++00f ;RRPX$mAAmTFf ;f  7f &x  c &FS.TXT;1RRNM fs.txtPX$$$TFc &f 0f & c & KERNEL.TXT;1RRNMkernel.txtPX$$$TFc &f 0f &x W Wc & README.;1RRNM READMEPX$$$TFc &f 0f & c & SUNRPC.TXT;1RRNMsunrpc.txtPX$$$TFc &f 0f &x c &VM.TXT;1RRNM vm.txtPX$$$TFc &f 0f &fGGf ;RRPX$mAAmTFf ;f  7f &f++00f ;RRPX$mAAmTFf ;f  7f &z D99Dd  IXJ.TXT;1RRNM ixj.txtPX$$$TFd f 0f &fHHf ;RRPX$mAAmTFf ;f  7f &f++00f ;RRPX$mAAmTFf ;f  7f &| rDDrc  API.HTML;1RRNM API.htmlPX$$$TFc f 0f &rIIf ;BTTVRRNM bttvPX$mAAmTFf ;f f & b RADIOTRACK.TXT;1RRNMradiotrack.txtPX$$$TFb f 0f & c- README.BUZ;1RRNMREADME.buzPX$$$TFc-f 0f &fIIf ;RRPX$mAAmTFf ;f  7f &fHHf ;RRPX$mAAmTFf ;f  7f &x b 5 CARDS.;1RRNM CARDSPX$$$TFb 5 f 0f & cCONTRIBUTORS.;1RRNMCONTRIBUTORSPX$$$TFcf 0f &t b ICS.;1RRNMICsPX$$$TFb f 0f &| c   INSTALL.;1RRNM INSTALLPX$$$TFc  f 0f &| p pc  PROBLEMS.;1RRNM PROBLEMSPX$$$TFc f 0f &x b  README.;1RRNM READMEPX$$$TFb f 0f & c.README.FIRST;1RRNMREADME.FIRSTPX$$$TFc.f 0f & b README.HAUPPAUGE;1RRNMREADME.HauppaugePX$$$TFb f 0f & zzb  README.MIRO;1RRNMREADME.MIROPX$$$TFb f 0f & b  README.PCI;1RRNMREADME.PCIPX$$$TFb f 0f & ++c README.RADIO;1RRNMREADME.RADIOPX$$$TFc f 0f & c README.WINVIEW;1RRNMREADME.WINVIEWPX$$$TFc f 0f &x BBc  THANKS.;1RRNM THANKSPX$$$TFc f 0f &fJJf 77RRPX$mAAmTFf 77f  7f 77ff 8RRPX$mAAmTFf 8f  7f 8vKKf 2.2RRNM2.2.14-5.0PX$mAAm TFf f f 77fKKf RRPX$mAAm TFf f  7f 77fJJf 77RRPX$mAAmTFf 77f  7f 77tLLf 4BLOCKRRNM blockPX$mAAmTFf 4f f  tMMdCDROMRRNM cdromPX$mAAmTFdf f  pNNf 4FC4RRNMfc4PX$mAAmTFf 4f f  nOOf 5FSRRNMfsPX$mAAmTFf 5f f  rRRf 5IPV4RRNM ipv4PX$mAAmTFf 5f f  rTTf 5MISCRRNM miscPX$mAAmTFf 5f f   PPf  MODULES.DEP;1RRNMmodules.depPX$$$TFf f 0f  pUUf 5NETRRNMnetPX$mAAmTFf 5f f  rWWf 6SCSIRRNM scsiPX$mAAmTFf 6f f  tXXdVIDEORRNM videoPX$mAAmTFdf f  fLLf 4RRPX$mAAmTFf 4f  7f  fKKf RRPX$mAAm TFf f  7f 77 pQQpdIDE-FLOPPY.O;1RRNMide-floppy.oPX$$$TFdf 0f   d IDE-TAPE.O;1RRNMide-tape.oPX$$$TFdf 0f  | 88d LINEAR.O;1RRNM linear.oPX$$$TFdf 0f  x xDDxdLOOP.O;1RRNM loop.oPX$$$TFdf 0f  v 44dNBD.O;1RRNM nbd.oPX$$$TFdf 0f  z P Pd RAID0.O;1RRNM raid0.oPX$$$TFdf 0f  z MMd RAID1.O;1RRNM raid1.oPX$$$TFdf 0f  z @@d RAID5.O;1RRNM raid5.oPX$$$TFdf 0f  fMMdRRPX$mAAmTFdf  7f  fKKf RRPX$mAAm TFf f  7f 77fNNf 4RRPX$mAAmTFf 4f  7f  fKKf RRPX$mAAm TFf f  7f 77v |YY|dFC4.O;1RRNM fc4.oPX$$$TFdf 0f  v **dSOC.O;1RRNM soc.oPX$$$TFdf 0f  z$ $11d SOCAL.O;1RRNM socal.oPX$$$TFdf 0f  fOOf 5RRPX$mAAmTFf 5f  7f  fKKf RRPX$mAAm TFf f  7f 77|+ +LYYLd AUTOFS.O;1RRNM autofs.oPX$$$TFdf 0f  7 7dBINFMT_JAVA.O;1RRNMbinfmt_java.oPX$$$TFdf 0f  : :H))HdBINFMT_MISC.O;1RRNMbinfmt_misc.oPX$$$TFdf 0f  x@ @TTdCODA.O;1RRNM coda.oPX$$$TFdf 0f  v   dFAT.O;1RRNM fat.oPX$$$TFdf 0f  x TTdHPFS.O;1RRNM hpfs.oPX$$$TFdf 0f  z d MINIX.O;1RRNM minix.oPX$$$TFdf 0f  z ^??^d MSDOS.O;1RRNM msdos.oPX$$$TFdf 0f  z d NCPFS.O;1RRNM ncpfs.oPX$$$TFdf 0f  x dNFSD.O;1RRNM nfsd.oPX$$$TFdf 0f  , ,d NLS_CP437.O;1RRNMnls_cp437.oPX$$$TFdf 0f  0 0d NLS_CP737.O;1RRNMnls_cp737.oPX$$$TFdf 0f  4 4d NLS_CP775.O;1RRNMnls_cp775.oPX$$$TFdf 0f  8 8PPd NLS_CP850.O;1RRNMnls_cp850.oPX$$$TFdf 0f  < >d# sysv.o,TTmmd# ufs.o.KKd# vfat.o"uuf 8"oof '2<55d#ip_masq_user.oDd#"ip_masq_vdolive.o6d dd#ip_vs_lc.o6 d#ip_vs_rr.o8 d#ip_vs_wlc.o8h hd#ip_vs_wrr.o.,,d# ipip.o.Üd# rarp.o"vvf 8"oof '4**d$amd7930.o8ͻd$appletalk.o0߸mmd$audio.o2>>d$cs4231.o.hddhd$ dbri.o,T!!Td$ dmy.o,wwd$ ipx.o6<))))d:Configure.help8bIO-APIC.txt>bIO-mapping.txt<66c-README.DAC9608GGd README.moxa0ppbSMP.txtFb48$VGA-softcursor.txt(}}f 9arm@  MMbbinfmt_misc.txt,f 9 cdrom<!!&;;&d computone.txt:??I Id2cpqarray.txt8AAd devices.txt<eea%%ac5)digiboard.txt:jjc5)digiepca.txt<llS//Sbexception.txt&f 9fb8f 9filesystems4rr11c  ftape.txt<yyb hayes-esp.txt*f 9i3860}}&bb&cide.txt6--binitrd.txtBttb6# ioctl-number.txt*f :isdn2bjava.txtB%%d  joystick-api.txtJOOd (joystick-parport.txt:bssbd joystick.txt.f : kbuild@~NN~d kernel-docs.txtLd *kernel-parameters.txt2bkmod.txt4ʝ d knfsd.txt4̒ c-locks.txt2??` **logo.gif233c5logo.txt*f :m68kBggb 1 magic-number.txt<ttbmandatory.txt0..b mca.txt.@@b/ md.txt6L Lc 5'memory.txt4  c 9mkdev.ida8q""qc-modules.txt:nAAnd moxa-smartio2##c-mtrr.txt0 c &nbd.txt6f :networking8TTbnfsroot.txtBe%%ed  oops-tracing.txt6BBb paride.txt8cparport.txt0d pci.txtDcca/"pcwd-watchdog.txt0f :powerpc2DDd proc.txt811!!bramdisk.txt8HHrrbriscom8.txt0II: :b52rtc.txt*f :s390BOOc  scsi-generic.txt2NNbscsi.txtFaar rb:6$serial-console.txt<ccc5sgi-visws.txtBddk kb52 smart-config.txt0ggEEbsmp.tex0ffWWb 0smp.txt,f : sound<qq2;;2b specialix.txt<yy  bspinlocks.txt:}}GGcstallion.txt2B88Bc/svga.txt.M,,Mc   sx.txt.f ; sysctl4c-sysrq.txt4f ;telephony8((bunicode.txt8f ;video4linux: bwatchdog.txt@ ` 5xterm-linux.xpm"}}f 9"zzf ;4c3Netwinder.c3 README,~~f 9 nwfpe"~~f 9"}}f 9,c3 NOTES.c3 README6c3README.FPE* c3TODO"f 9"zzf ;2b5200-INDEX2a ),Makefile,wwb6" aztcdFĬʬc%8$cdrom-standard.tex.ޔb cdu31a,22b cm206*bgscd.PPc/! ide-cd,GGb isp16(_ mcd*rrc)6mcdx,` 5. optcd,b6" sbpcd*  _ _bsjcd4b6"sonycd535"f 9"zzf ;2b,00-INDEX@66b 53framebuffer.txt< b 'internals.txt:;;c5)matroxfb.txt4##c &tgafb.txt6$$88c5)vesafb.txt"f 9"zzf ;2''c300-INDEX2((c3adfs.txt2)) c $affs.txt2..==c5)coda.txt8GG((c/%fat_cvf.txt2MMc ,hpfs.txt4NNbisofs.txt4OOzzb!*ncpfs.txt2PPddbntfs.txt4QQ!!bromfs.txt4VV c5)smbfs.txt8XXa +$sysv-fs.txt0YYc &ufs.txt6ZZV Vb  %umsdos.txt2\\ )) c5)vfat.txt0bbHHc"vfs.txt"f 9"zzf ;<kk b ;zero-page.txt"f :"zzf ;2mmd 00-INDEX0nn[[c 5'CREDITS6oop pd HiSax.cert4qq^oo^c 5'INTERFACE<c-INTERFACE.fax.ppd  README6d README.FAQ:|XX|c 5'README.HiSax> c &README.act2000:AAc &README.audio:((d README.avmb1<))c 5'README.concapBHHc- README.diversion: d README.eicon6d README.fax>  c 5'README.hfc-pci6c &README.icn:d README.pcbit4~//~bREADME.sc>ww`README.syncppp6c &README.x258bsyncPPP.FAQ"f :"zzf ;2c00-INDEX:ɿcbug-list.txt:ccommands.txtH̺EEc&config-language.txt"f :"zzf ;2Ւa !00-INDEXFc-$kernel-options.txt"f :"zzf ;2O Oc-00-INDEX4ii` *3c505.txt400d13c90x.txt4c)66pack.txt:HHvvc &Configurable4__c &DLINK.txt2llb6"PLIP.txt<%%c 5'README.sb10004balias.txtHMMc &&arcnet-hardware.txt6]]c &arcnet.txt2;;a;ax25.txt6<<{{c-baycom.txt8@@``d7bonding.txt2BB((d comx.txt2II c)7cops.txt6KKYYc-cs89x0.txt4WW!!c)7de4x5.txt4\\b1)depca.txt2]]b6"dgrs.txt0cc`55`b6"eql.txt:jj c ethertap.txt4ll77b6"ewrk3.txt6nnc5)filter.txt>oob",framerelay.txt<qqd ip-sysctl.txt>wwb0 ip_dynaddr.txt0f :ip_masq4uu c5)ipddp.txt2xx``b irda.txt@yy%%c  lapb-module.txt2~~c ltpc.txt<c-multicast.txt8@@` *$ncsa-telnet@''bnet-modules.txt8G Gc &olympic.txtFc &$policy-routing.txt0b0 ppp.txt. c   pt.txt8  c  routing.txt6bshaper.txt6m%%md sis900.txt8jBBjd9sk98lin.txt2``b sktr.txt2;;a !smc9.txt> c 9soundmodem.txt0` 1tcp.txt2d tlan.txt4b6"tulip.txt6hh`4"vortex.txt>3**3d wan-router.txt84$$4d wanpipe.txt866c 9wavelan.txt<bx25-iface.txt0''bx25.txt:ƸPPc &z8530drv.txt"f :"f :Bѱb - ip_masq-API-ex.c"f :"zzf ;2b 500-INDEX:Әc 1 ppc_htab.txt0hhc'smp.txt4G Gc 9sound.txtDppb 5"zImage_layout.txt"f :"zzf ;*> >d DASD0ڗd cds.txt"f :"zzf ;.c   AD1816.ttb # ALS007,c 9 AWE32@c5)AudioExcelDSP160 c*CMI83300 c 5'CMI8338. b # CS4232<11c5)ChangeLog.aweJb 4(ChangeLog.multisound( c'ESS0 88b 4ESS18688 c5)INSTALL.awe: j55jd Introduction, DDc- MAD160 d6Maestro6 c 5'MultiSound,. .a--ad  NM256*4 4b8OPL305 5c5)OPL3-SA27 7c &OPL3-SA2*: :LLb Opti2> >c PCM1-pro(? ?d PSS6H Hc5)README.OSS6@ @- -c5)README.awe>E EcREADME.modules2o oc 5'SoundPro:n nb& Soundblaster0r r  b Tropez+8t tc +VIA-chipset0u ucVIBRA164} }22c5)Wavefront. ||b # es1370. b # es1371,+ +c  mwave,k kc- solo16l l[ [b #sonicvibes6s sb #ultrasound,w w7,,7c- vwsnd"f ;"zzf ;. W Wc & README.  c & fs.txt6 c &kernel.txt6 c &sunrpc.txt. c & vm.txt"f ;"zzf ;0 D99Dd ixj.txt"f ;"zzf ;2 rDDrc API.html6 c-README.buz*f ;bttv> b radiotrack.txt"f ;"f ;, b 5  CARDS: cCONTRIBUTORS( b ICs0 c  INSTALL2 p pc PROBLEMS. b  README: c.README.FIRSTB b  README.Hauppauge8 zzb README.MIRO6 b README.PCI: ++c README.RADIO> c README.WINVIEW. BBc  THANKS"f 77"mmf 86f 2.2.14-5.0"f "f 77,f 4 block,d cdrom(f 4fc4&f 5fs*f 5ipv4*f 5misc8 PPf modules.dep(f 5net*f 6scsi,d video"f 4"f : pQQpdide-floppy.o6 dide-tape.o2 88dlinear.o. xDDxd loop.o, 44d nbd.o0 P Pdraid0.o0 MMdraid1.o0 @@draid5.o"d"f "f 4"f , |YY|d fc4.o, **d soc.o0$ $11dsocal.o"f 5"f 2+ +LYYLdautofs.o<7 7dbinfmt_java.o<: :H))Hdbinfmt_misc.o.@ @TTd coda.o,   d fat.o. TTd hpfs.o0 dminix.o0 ^??^dmsdos.o0 dncpfs.o. d nfsd.o8, ,dnls_cp437.o80 0dnls_cp737.o84 4dnls_cp775.o88 8PPdnls_cp850.o8< Q Q dip_masq_user.oDV V@@d"ip_masq_vdolive.o6Y Yhhdip_vs_lc.o6[ [((dip_vs_rr.o8] ]dip_vs_wlc.o8_ _88dip_vs_wrr.o. 88d ipip.o.b b8$$8d rarp.o"f 5"f 8g g))dappletalk.o0~ ~wwdaudio.o2 dcs4231.o4 !!denvctrl.o0 88dflash.o, d ipx.o* ??dlp.o6 00dopenprom.o4 ʳ__dparport.o: ֠00dparport_ax.o4 PPdsoftdog.o"f 5"f 0 ((d3c59x.o. 44d 8390.o2 հdacenic.o4w w((dbonding.o6z z8 8dbsd_comp.o0 `''`dde4x5.o0 XXddummy.o6 wwdeepro100.o8 dmyri_sbus.o6 H,,Hdne2k-pci.o, XXd ppp.o<  dppp_deflate.o4((eedrtl8139.o455dsk98lin.o.&&d slhc.o.`UU`d slip.o4]]dsunbmac.o2 tt dsunhme.o0xLLxdsunqe.o"f 6"f 4XXdaic7xxx.o.LL##d fcal.o0QQ))dpluto.o8WWdqlogicisp.o8qqXXdqlogicpti.o*iidsg.o*dst.o8vvdsym53c8xx.o"d"f "f  94"llf  )*f  cd.b*f  fd.b0f  first.b4f5 generic.b2f  ieee32.b2f kernel.h,f   old.bB4##4f  9 rootrh62-s32.imgBII##f  9 rootrh62-s64.img2f  second.b6ɒْf  silotftp.b0f  ultra.b:\w w\f :vmlinux32.gz:uu  f  %vmlinux64.gz"e 5""llf  )(ZZ` :(fd0(ZZPram*ZZe 5"ram0"f  :)"llf  )8ZZ^^f message.txt4[[f  :)silo.conf"f  %"llf  )@\\f 8install-modules<]]f  %install-utils"f  2"llf  ),f  ;* sparc0f  ;*sparc64"f  ;*"f  2(f2bin(f  lib*f )6root*f +sbin(d usr"f2"f  ;**^^``f 9find(}}++f 9ftp*llf 9more&f 90ps(f 9:sed* xx f :sort*11f :uniq(00f  vim"f  "f  ;*@f  ;libnsl-2.1.3.so8f  ;libnsl.so.1"f )6"f  ;*4f  (HOWTO.iso"f +"f  ;*.GGf + insmod2f +modprobe0f +portmap"d "f  ;*(f /6lib"f /6"d <f /#libncurses.so@f /#libncurses.so.4D''f /#"libncurses.so.4.0>f -)libreadline.soBf -) libreadline.so.3Fhhf -)$libreadline.so.3.0"f  ;*"f  2(f2bin(f  '2lib*f  root*f  )!sbin(d usr"f2"f  ;**``f  find(99++f  $ftp*__llf  *more&mmf  0ps(f  8sed* xx f  sort*11f  uniq(00f  'vim"f  '2"f  ;*@s sHHf  '2libnsl-2.1.3.so8s sf  '2libnsl.so.1"f  "f  ;*4 f  HOWTO.iso"f  )!"f  ;*. GGf  )! insmod2 f  )!modprobe0 Дf  )'portmap"d "f  ;*(f  *3lib"f  *3"d <z!!zf  *3libncurses.so@z!!zf  *3libncurses.so.4D f  *3"libncurses.so.4.0>z!!zf  *3libreadline.soBz!!zf  *3 libreadline.so.3Fz!!zTTf  *3$libreadline.so.3.0ER TRRIP_1991ATHE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICSPLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE. SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.#!/bin/bash - RCSID='$Id: MAKEDEV 2.3 1997/09/29 19:03:13 johnsonm Exp $' #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# # Customisation: # The devices fall into various classes. This section contains the mapping # from a class name into a group name and permission. # You will almost certainly need to edit the group name to match your # system, and you may change the permissions to suit your preference. These # lines _must_ be of the format "user group perm". public=" root sys 666" private=" root sys 600" system=" root sys 660" kmem=" root kmem 660" tty=" root tty 666" cons=" root tty 622" # 622 for console? vcs=" root sys 600" dialout=" root uucp 660" mouse=" root sys 666" printer=" root daemon 660" floppy=" root floppy 660" disk=" root disk 660" scsi=" root sys 600" cdrom=" root disk 660" tape=" root disk 660" audio=" root sys 666" ibcs2=" root sys 666" scanner=" root sys 666" MAXVT=8 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# procfs=/proc opt_v= opt_d= opt_n= while [ $# -ge 1 ] do case $1 in --) shift; break ;; -v) shift; opt_v=1 ;; -d) shift; opt_d=1 ;; -n) shift; opt_n=1; opt_v=1 ;; -V) shift; opt_V=1 ;; -*) echo "$0: unknown flag \"$1\"" >&2; exit 1 ;; *) break ;; esac done if [ "$opt_V" ] then echo "$RCSID" exit 0 fi opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}" #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# makedev () { # usage: makedev name [bcu] major minor owner group mode if [ "$opt_v" ] then if [ "$opt_d" ] then echo "delete $1" else echo "create $1 $2 $3 $4 $5:$6 $7" fi fi if [ ! "$opt_n" ] then if [ "$opt_d" ] then rm -f $1 else rm -f $1- mknod $1- $2 $3 $4 && chown $5:$6 $1- && chmod $7 $1- && mv $1- $1 fi fi } symlink () { # usage: symlink name target if [ "$opt_v" ] then if [ "$opt_d" ] then echo "delete $1" else echo "create $1 -> $2" fi fi [ ! "$opt_n" ] && rm -f $1 && [ ! "$opt_d" ] && ln -s $2 $1 } #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# # For bash and ksh, we can use faster builtin routines to do manipulation, # otherwise (ash) fall back to slower method using `expr'. # The extra level of indirection using `eval' is necessary a) for ksh, and # b) to get past ash. if [ "$RANDOM" != "$RANDOM" ] then math () { eval echo "\$(($*))" } index () { # index string c eval "I=\${1%$2*}" eval echo "\${#I}" } suffix () { eval echo "\${1#$2}" } strip () { eval echo "\${1% $2 *} \${1#* $2 }" } first () { eval echo "\${1:0:1}" } second () { eval echo "\${1:1:1}" } else math () { expr "$@" } index () { # index string c expr $1 : ".*$2" - 1 } suffix () { expr "$1" : "$2\(.*\)" } strip () { echo "[$1][$2]" >&2 echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`" } first () { expr "$1" : "\(.\)" } second () { expr "$1" : ".\(.\)" } fi #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# devices= if [ ! -f $procfs/devices ] then echo "$0: warning: can't read $procfs/devices" >&2 else exec 3<$procfs/devices while read major device <&3 do case "$major" in Character|Block|'') ;; *) eval "major_$device=$major" devices="$devices $device" ;; esac done exec 3<&- fi Major () { device=$2 if [ "$opt_d" ] then echo -1 # don't care else eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}} fi } cvt () { while [ $# -ne 0 ] do case "$1" in mem|tty|ttyp|cua|cub) ;; hd) (for d in a b c d e f g h ; do echo -n hd$d " " done) ; echo ;; ide0) echo hda hdb ;; ide1) echo hdc hdd ;; ide2) echo hde hdf ;; ide3) echo hdg hdh ;; sd) echo sda sdb sdc sdd ;; sr) echo scd0 ;; st) echo st0 ;; xd) echo xda xdb ;; fd) echo fd0 fd1 ;; lp) echo lp ;; mt) echo ftape ;; loop) echo loop ;; md) echo md ;; ibcs2) echo ibcs2 ;; tpqic02) echo qic ;; sound) echo audio ;; logiscan) echo logiscan ;; ac4096) echo ac4096 ;; hw) echo helloworld ;; sbpcd | sbpcd[123]) echo $1 ;; joystick) echo js ;; apm_bios) echo apm ;; dcf) echo dcf ;; aztcd) echo aztcd ;; pcmcia) ;; # taken care of by its own driver ttyC) echo cyclades ;; isdn) echo isdnmodem isdnbri dcbri ;; vcs) ;; *) echo "$0: don't know what \"$1\" is" >&2 ;; esac shift done } for arg do case $arg in generic) $0 $opts std $0 $opts fd $0 $opts fd0 fd1 $0 $opts hda hdb $0 $opts xda xdb $0 $opts sda sdb sdc sdd $0 $opts pty $0 $opts console $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 $0 $opts busmice $0 $opts lp $0 $opts par ;; local) $0.local $opts ;; std) makedev mem c 1 1 $kmem makedev kmem c 1 2 $kmem makedev null c 1 3 $public makedev port c 1 4 $kmem makedev zero c 1 5 $public symlink core $procfs/kcore makedev full c 1 7 $public makedev random c 1 8 $public makedev urandom c 1 9 $public $0 ram makedev tty c 5 0 $tty ;; ram) for i in 0 1 2 3 4 5 6 7 ; do makedev ram$i b 1 $i $disk done ln -sf ram0 ram makedev initrd b 1 250 $disk ;; console) major=`Major vcs` # not fatal # console makedev tty0 c 4 0 $cons makedev console c 5 1 $cons [ "$major" ] && makedev vcs0 c $major 0 $vcs [ "$major" ] && makedev vcsa c $major 128 $vcs # individual vts line=1 while [ $line -le $MAXVT -a $line -le 63 ] do makedev tty$line c 4 $line $tty [ "$major" ] && makedev vcs$line c $major $line $vcs [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs line=`math $line + 1` done ;; tty[1-9]|tty[1-5][0-9]|tty[6][0-3]) line=`suffix $arg tty` makedev tty$line c 4 $line $tty ;; ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3]) line=`suffix $arg ttyS` minor=`math 64 + $line` makedev ttyS$line c 4 $minor $dialout makedev cua$line c 5 $minor $dialout ;; pty[a-ep-z]) bank=`suffix $arg pty` base=`index pqrstuvwxyzabcde $bank` base=`math $base \* 16` for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f do j=`index 0123456789abcdef $i` makedev pty$bank$i c 2 `math $base + $j` $tty makedev tty$bank$i c 3 `math $base + $j` $tty done ;; pty) ptysufs="" for i in p q r s t u v w x y z a b c d e do ptysufs="$ptysufs pty$i" done $0 $opts $ptysufs ;; cyclades|ttyC) major1=`Major ttyC 19` || continue #major2=`Major cub 20` || continue for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 do makedev ttyC$i c $major1 $i $dialout #makedev cub$i c $major2 $i $dialout done ;; stallion|ttyE) major1=`Major ttyE 24` || continue #major2=`Major cue 25` || continue majorc=28 minor=0 until [ $minor -gt 256 ] do makedev ttyE$minor c $major1 $minor $dialout #makedev cue$minor c $major2 $minor $dialout minor=`math minor + 1` done for i in 0 1 2 3 do makedev staliomem$i c $majorc $i $private done ;; chase|ttyH) major1=`Major ttyH 17` || continue #major2=`Major cuh 18` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyH$minor c $major1 $minor $dialout #makedev cuh$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; rocketport|ttyR) major1=`Major ttyR 46` || continue #major2=`Major cur 47` || continue minor=0 until [ $minor -gt 64 ] # tell me if 64 is wrong do makedev ttyR$minor c $major1 $minor $dialout #makedev cur$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; ttyV) major1=`Major ttyV 105` || continue #major2=`Major cuv 106` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyV$minor c $major1 $minor $dialout #makedev cuv$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; digi|ttyD) major1=`Major ttyD 22` || continue #major2=`Major cud 23` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyD$minor c $major1 $minor $dialout #makedev cud$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; specialix|ttyX) major1=`Major ttyX 32` || continue #major2=`Major cux 33` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyX$minor c $major1 $minor $dialout #makedev cux$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; specialixIO8|ttyW) major1=`Major ttyW 75` || continue #major2=`Major cuw 76` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyW$minor c $major1 $minor $dialout #makedev cuw$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; PAM|ttyM) major1=`Major ttyM 79` || continue #major2=`Major cum 80` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyM$minor c $major1 $minor $dialout #makedev cum$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; riscom|ttyL) major=`Major ttyL 48` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyL$minor c $major $minor $dialout minor=`math minor + 1` done ;; computone|ttyF) major=`Major ttyF 71` || continue #major2=`Major cuf 72` || continue minor=0 until [ $minor -gt 255 ] do makedev ttyF$minor c $major $minor $dialout #makedev cuf$minor c $major2 $minor $dialout minor=`math minor + 1` done major=73 for i in 0 4 8 12 do makedev ip2ipl$i c $major $i $private makedev ip2stat$i c $major `math $i + 1` $private done ;; ESP|ttyP) major=`Major ttyP 57` || continue #major2=`Major cup 58` || continue minor=0 until [ $minor -gt 4 ] # tell me if 4 is wrong do makedev ttyP$minor c $major $minor $dialout #makedev cup$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; COMX|comx) major=`Major comx 88` || continue minor=0 until [ $minor -gt 4 ] # tell me if 4 is wrong do makedev comx$minor c $major $minor $private minor=`math minor + 1` done ;; isdnmodem|ttyI) major1=`Major ttyI 43` || continue #major2=`Major cui 44` || continue minor=0 until [ $minor -gt 63 ] do makedev ttyI$minor c $major1 $minor $dialout #makedev cui$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; isdnbri) major=45 minor=0 until [ $minor -gt 63 ] do makedev isdn$minor c $major $minor $private makedev isdnctrl$minor c $major `math $minor + 64` $private makedev ippp$minor c $major `math $minor + 128` $private minor=`math minor + 1` done makedev isdninfo c $major 255 $private ;; dcbri) major=52 for i in 0 1 2 3 do makedev dcbri$i c $major $i $private done ;; capi) major=68 makedev capi20 c $major 0 $private for i in 0 1 2 3 4 5 6 7 8 9 do makedev capi20.0$i c $major `math $i + 1` $private done for i in 10 11 12 13 14 15 16 17 18 19 do makedev capi20.$i c $major `math $i + 1` $private done ;; scc) major1=`Major scc 34` || continue for i in 0 1 2 3 # more? do makedev scc$i c $major $i $private done ;; lp) major=`Major lp 6` || continue makedev ${arg}0 c $major 0 $printer makedev ${arg}1 c $major 1 $printer makedev ${arg}2 c $major 2 $printer ;; par) major=`Major lp 6` || continue makedev ${arg}0 c $major 0 $printer makedev ${arg}1 c $major 1 $printer makedev ${arg}2 c $major 2 $printer ;; parport) major=`Major parport 99` || continue makedev ${arg}0 c $major 0 $printer makedev ${arg}1 c $major 1 $printer makedev ${arg}2 c $major 2 $printer ;; slm) major=`Major slm 28` || continue for i in 0 1 2 3 do makedev slm c $major $i $printer done ;; busmice) major=`Major mouse 10` || continue makedev logimouse c $major 0 $mouse makedev psmouse c $major 1 $mouse makedev msmouse c $major 2 $mouse makedev atimouse c $major 3 $mouse makedev jmouse c $major 4 $mouse ;; js) major=`Major Joystick` || continue makedev js0 c $major 0 $mouse makedev js1 c $major 1 $mouse ;; fd[0-7]) major=`Major fd 2` || continue base=`suffix $arg fd` if [ $base -ge 4 ] then base=`math $base + 124` fi makedev ${arg} b $major $base $floppy makedev ${arg}d360 b $major `math $base + 4` $floppy makedev ${arg}h1200 b $major `math $base + 8` $floppy makedev ${arg}D360 b $major `math $base + 12` $floppy makedev ${arg}D720 b $major `math $base + 16` $floppy makedev ${arg}h360 b $major `math $base + 20` $floppy makedev ${arg}h720 b $major `math $base + 24` $floppy makedev ${arg}H1440 b $major `math $base + 28` $floppy makedev ${arg}E2880 b $major `math $base + 32` $floppy makedev ${arg}CompaQ b $major `math $base + 36` $floppy symlink ${arg}H360 ${arg}D360 symlink ${arg}H720 ${arg}D720 makedev ${arg}h1440 b $major `math $base + 40` $floppy makedev ${arg}H1680 b $major `math $base + 44` $floppy makedev ${arg}h410 b $major `math $base + 48` $floppy makedev ${arg}H820 b $major `math $base + 52` $floppy makedev ${arg}h1476 b $major `math $base + 56` $floppy makedev ${arg}H1722 b $major `math $base + 60` $floppy makedev ${arg}h420 b $major `math $base + 64` $floppy makedev ${arg}H830 b $major `math $base + 68` $floppy makedev ${arg}h1494 b $major `math $base + 72` $floppy makedev ${arg}H1743 b $major `math $base + 76` $floppy makedev ${arg}h880 b $major `math $base + 80` $floppy makedev ${arg}D1040 b $major `math $base + 84` $floppy makedev ${arg}D1120 b $major `math $base + 88` $floppy makedev ${arg}h1600 b $major `math $base + 92` $floppy makedev ${arg}H1760 b $major `math $base + 96` $floppy makedev ${arg}H1920 b $major `math $base + 100` $floppy makedev ${arg}E3200 b $major `math $base + 104` $floppy makedev ${arg}E3520 b $major `math $base + 108` $floppy makedev ${arg}E3840 b $major `math $base + 112` $floppy makedev ${arg}H1840 b $major `math $base + 116` $floppy makedev ${arg}D800 b $major `math $base + 120` $floppy makedev ${arg}H1600 b $major `math $base + 124` $floppy ;; hd[a-b]) major=`Major ide0` || major=`Major hd 3` || continue unit=`suffix $arg hd` base=`index ab $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `math $base + $part` $disk done ;; hd[c-d]) major=`Major ide1 22` || continue unit=`suffix $arg hd` base=`index cd $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `expr $base + $part` $disk done ;; hd[e-f]) major=`Major ide2 33` || continue unit=`suffix $arg hd` base=`index ef $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `expr $base + $part` $disk done ;; hd[g-h]) major=`Major ide3 34` || continue unit=`suffix $arg hd` base=`index gh $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `expr $base + $part` $disk done ;; ht) major=`Major ht0 37` || continue # Only one IDE tape drive is currently supported; ht0. makedev ht0 c $major 0 $tape makedev ht0 c $major 0 $tape makedev nht0 c $major 128 $tape ;; pt) major=`Major pt 96` || continue for i in 0 1 2 3 do makedev pt$i c $major $i $tape makedev npt$i c $major `math $i + 128` $tape done ;; xd[a-d]) major=`Major xd 13` || continue unit=`suffix $arg xd` base=`index abcd $unit` base=`math $base \* 64` makedev xd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev xd$unit$part b $major `expr $base + $part` $disk done ;; sd[a-z]) unit=`suffix $arg sd` base=`index abcdefghijklmnopqrstuvwxyz $unit` base=`math $base \* 16` if [ $base -lt 256 ]; then major=8 else major=65 base=`math $base \- 256` fi makedev sd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 do minor=`expr $base + $part` makedev sd$unit$part b $major $minor $disk done ;; sd[a-d][a-z]) unit=`suffix $arg sd` unitmaj=`first $unit` unitmin=`second $unit` basemaj=`index Xabcd $unitmaj` basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin` basemaj=`math $basemaj \* 416` basemin=`math $basemin \* 16` base=`math $basemaj + $basemin` basemaj=`math $base / 256` base=`math $base % 256` major=`math basemaj \+ 64` if [ $major -gt 71 ]; then echo "$0: don't know how to make device \"$arg\"" >&2 exit 0 fi makedev sd$unit b $major $base $disk for part in 1 2 3 # 4 5 6 7 8 9 10 11 12 13 14 15 do minor=`expr $base + $part` makedev sd$unit$part b $major $minor $disk done ;; dac960) [ -d rd ] || { mkdir rd chown root.root rd chmod 755 rd } for ctr in 0 1 2 3 4 5 6 7 do major=`math 48 + $ctr` minor=0 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \ 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 do makedev rd/c${ctr}d${ld} b $major $minor $disk minor=`math minor + 1` for part in 1 2 3 4 5 6 7 do makedev rd/c${ctr}d${ld}p$part b $major $minor $disk minor=`math minor + 1` done done done ;; ida) [ -d ida ] || { mkdir ida chown root.root ida chmod 755 ida } for ctr in 0 1 2 # 3 4 5 6 7 do major=`math 72 + $ctr` minor=0 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev ida/c${ctr}d${ld} b $major $minor $disk minor=`math minor + 1` for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev ida/c${ctr}d${ld}p$part b $major $minor $disk minor=`math minor + 1` done done done ;; rom) major=`Major rom 31` for i in 0 1 2 3 4 5 6 7 do makedev rom$i b $major $i $disk makedev rrom$i b $major `math $i +8` $disk makedev flash$i b $major `math $i +16` $disk makedev rflash$i b $major `math $i +24` $disk done ;; ndb|nb) major=`Major ndb 43` || continue minor=0 while [ $minor -lt 128 ] ; do makedev nb$minor b $major $minor $disk minor=`math $minor + 1` done ;; loop) major=`Major loop` || continue for part in 0 1 2 3 4 5 6 7 do makedev loop$part b $major $part $disk done ;; md) major=`Major md` || continue for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev md$part b $major $part $disk done ;; st[0-7]) major=`Major st 9` unit=`suffix $arg st` makedev st$unit c $major $unit $tape makedev nst$unit c $major `math 128 + $unit` $tape ;; qic) major=`Major tpqic02 12` makedev ntpqic11 c $major 2 $tape makedev tpqic11 c $major 3 $tape makedev ntpqic24 c $major 4 $tape makedev tpqic24 c $major 5 $tape makedev ntpqic120 c $major 6 $tape makedev tpqic120 c $major 7 $tape makedev ntpqic150 c $major 8 $tape makedev tpqic150 c $major 9 $tape makedev rmt8 c $major 6 $tape makedev rmt16 c $major 8 $tape makedev tape-d c $major 136 $tape makedev tape-reset c $major 255 $tape major=`Major qft 27` for i in 0 1 2 3 do makedev qft$i c $major $i $tape makedev nqft$i c $major `math $i + 4` $tape makedev zqft$i c $major `math $i + 16` $tape makedev nzqft$i c $major `math $i + 20` $tape makedev rawqft$i c $major `math $i + 32` $tape makedev nrawqft$i c $major `math $i + 36` $tape done ;; ftape) major=`Major mt 27` || continue for unit in 0 1 2 3 do makedev rft$unit c $major $unit $tape makedev nrft$unit c $major `math $unit + 4` $tape done symlink ftape rft0 symlink nftape nrft0 ;; scd[0-7]) major=`Major sr 11` || continue unit=`suffix $arg scd` makedev scd$unit b $major $unit $cdrom ;; sonycd) major=`Major cdu31a` || continue makedev $arg b $major 0 $cdrom ;; mcd) major=`Major mcd 23` || continue makedev $arg b $major 0 $cdrom ;; mcdx) major=`Major mcdx 20` || continue makedev $arg b $major 0 $cdrom ;; cdu535) makedev $arg b 24 0 $cdrom ;; lmscd) makedev $arg b 24 0 $cdrom ;; sbpcd|sbpcd[123]) major=`Major $arg` || continue base=`suffix ${arg}0 sbpcd` # base=`expr ${arg}0 : "sbpcd\(.\)"` for minor in 0 1 2 3 do # XXX unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1` makedev sbpcd$unit b $major $minor $cdrom done [ $arg = sbpcd ] && symlink $arg ${arg}0 ;; aztcd) major=`Major $arg` || continue makedev ${arg}0 b $major 0 $cdrom ;; bpcd) makedev $arg b 41 0 $cdrom ;; optcd) makedev $arg b 17 0 $cdrom ;; sjcd) makedev $arg b 18 0 $cdrom ;; cfs|coda) makedev cfs0 c 67 0 $private ;; xfs|arla) makedev xfs0 c 103 0 $private ;; logiscan) major=`Major logiscan` || continue makedev $arg c $major 0 $scanner ;; m105scan) major=`Major m105` || continue makedev $arg c $major 0 $scanner ;; ac4096) major=`Major ac4096` || continue makedev $arg c $major 0 $scanner ;; audio) major=`Major sound 14` makedev mixer c $major 0 $audio makedev sequencer c $major 1 $audio makedev midi00 c $major 2 $audio makedev dsp c $major 3 $audio makedev audio c $major 4 $audio makedev sndstat c $major 6 $audio makedev audioctl c $major 7 $audio # makedev sequencer2 c $major 8 $audio makedev mixer1 c $major 16 $audio # makedev patmgr0 c $major 17 $audio makedev midi01 c $major 18 $audio makedev dsp1 c $major 19 $audio makedev audio1 c $major 20 $audio # makedev patmgr1 c $major 33 $audio makedev midi02 c $major 34 $audio makedev midi03 c $major 50 $audio major=31 makedev mpu401data c $major 0 $audio makedev mpu401stat c $major 1 $audio major=35 for i in 0 1 2 3 do makedev midi$i c $major $i $audio makedev rmidi$i c $major `math $i + 64` $audio makedev smtpe$i c $major `math $i + 128` $audio done ;; pcaudio) major=`Major pcsp` || continue makedev pcmixer c $major 0 $audio makedev pcsp c $major 3 $audio makedev pcaudio c $major 4 $audio ;; video|video4linux|v4l|radio|vtx|vttuner) # video4linux api includes radio, teletext, etc. major=`Major video 81` || continue minor=0 until [ $minor -gt 63 ] do makedev video$minor c $major $minor $private makedev radio$minor c $major `math $minor + 64` $private minor=`math $minor + 1` done minor=0 until [ $minor -gt 31 ] do makedev vtx$minor c $major `math $minor + 192` $private makedev vbi$minor c $major `math $minor + 224` $private minor=`math $minor + 1` done symlink video video0 symlink vbi vbi0 symlink vtx vtx0 major=82 minor=0 until [ $minor -gt 1 ] do makedev winradio$minor c $major $minor $private minor=`math $minor + 1` done symlink winradio winradio0 major=83 #makedev vtx c $major 0 $private makedev vttuner c $major 16 $private ;; i2c) major=`Major i2c 89` || continue minor=0 until [ $minor -gt 1 ] # tell me if 1 is wrong... do makedev i2c$minor c $major $minor $private minor=`math $minor + 1` done ;; tlk) major=102 minor=0 until [ $minor -gt 3 ] # tell me if 3 is wrong... do makedev tlk$minor c $major $minor $private minor=`math $minor + 1` done ;; srnd) makedev srnd0 c 110 0 $private makedev srnd1 c 110 1 $private ;; fgrab) makedev mmetfgrab c 40 0 $system makedev wvisfgrab c 26 0 $system for i in 0 1 # more? do makedev iscc$i c 93 $i $system makedev isccctl$i c 93 `math $i + 128` $system done for i in 0 1 # more? do makedev dcxx$i c 94 $i $system done ;; sg) major=`Major sg 21` for unit in a b c d e f g h do minor=`index abcdefgh $unit` # minor=`expr abcdefgh : ".*$unit" - 1` makedev $arg$unit c $major $minor $scsi # we symlink to keep the permissions the same # it would be bad to have to change permissions # twice; devices would be left open when people # changed configuration. symlink $arg$minor $arg$unit done ;; pg) major=`Major pg 97` for unit in 0 1 2 3 do makedev pg$unit c $major $unit $scsi done ;; fd) # not really devices, we use the /proc filesystem symlink fd $procfs/self/fd symlink stdin fd/0 symlink stdout fd/1 symlink stderr fd/2 ;; ibcs2) major=`Major ibcs2` || continue makedev socksys c $major 0 $ibcs2 symlink nfsd socksys makedev spx c $major 1 $ibcs2 symlink X0R null ;; netlink) major=36 makedev route c $major 0 $private makedev skip c $major 1 $private ;; enskip) major=64 makedev enskip c $major 0 $private ;; ipfilt*) major=95 makedev ipl c $major 0 $private makedev ipnat c $major 1 $private makedev ipstate c $major 2 $private makedev ipauth c $major 3 $private ;; qng) makedev qng c 77 0 $private ;; apm) major=`Major apm_bios` || continue makedev $arg c $major 0 $system ;; dcf) major=`Major dcf` || continue makedev $arg c $major 0 $system ;; helloworld) major=`Major hw` || continue makedev helloworld c $major 0 $public ;; update) if [ ! "$devices" ] then echo "$0: don't appear to have any devices" >&2 continue fi if [ "$opt_d" ] then echo "$0: can't delete an update" >&2 continue fi create= delete= devs="$devices" if [ -f DEVICES ] then exec 3 DEVICES ;; *) echo "$0: don't know how to make device \"$arg\"" >&2 ;; esac done exit 0 Linux version 2.2.14-5.0 (root@lisa.devel.redhat.com) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Tue Mar 7 20:54:26 EST 2000 /lib/modules/2.2.14-5.0/fs/autofs.o: /lib/modules/2.2.14-5.0/fs/binfmt_java.o: /lib/modules/2.2.14-5.0/fs/binfmt_misc.o: /lib/modules/2.2.14-5.0/fs/coda.o: /lib/modules/2.2.14-5.0/fs/fat.o: /lib/modules/2.2.14-5.0/fs/hpfs.o: /lib/modules/2.2.14-5.0/fs/minix.o: /lib/modules/2.2.14-5.0/fs/msdos.o: /lib/modules/2.2.14-5.0/fs/fat.o /lib/modules/2.2.14-5.0/fs/ncpfs.o: /lib/modules/2.2.14-5.0/fs/nfsd.o: /lib/modules/2.2.14-5.0/fs/nls_cp437.o: /lib/modules/2.2.14-5.0/fs/nls_cp737.o: /lib/modules/2.2.14-5.0/fs/nls_cp775.o: /lib/modules/2.2.14-5.0/fs/nls_cp850.o: /lib/modules/2.2.14-5.0/fs/nls_cp852.o: /lib/modules/2.2.14-5.0/fs/nls_cp855.o: /lib/modules/2.2.14-5.0/fs/nls_cp857.o: /lib/modules/2.2.14-5.0/fs/nls_cp860.o: /lib/modules/2.2.14-5.0/fs/nls_cp861.o: /lib/modules/2.2.14-5.0/fs/nls_cp862.o: /lib/modules/2.2.14-5.0/fs/nls_cp863.o: /lib/modules/2.2.14-5.0/fs/nls_cp864.o: /lib/modules/2.2.14-5.0/fs/nls_cp865.o: /lib/modules/2.2.14-5.0/fs/nls_cp866.o: /lib/modules/2.2.14-5.0/fs/nls_cp869.o: /lib/modules/2.2.14-5.0/fs/nls_cp874.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-1.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-14.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-15.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-2.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-3.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-4.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-5.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-6.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-7.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-8.o: /lib/modules/2.2.14-5.0/fs/nls_iso8859-9.o: /lib/modules/2.2.14-5.0/fs/nls_koi8-r.o: /lib/modules/2.2.14-5.0/fs/openpromfs.o: /lib/modules/2.2.14-5.0/fs/romfs.o: /lib/modules/2.2.14-5.0/fs/smbfs.o: /lib/modules/2.2.14-5.0/fs/sysv.o: /lib/modules/2.2.14-5.0/fs/ufs.o: /lib/modules/2.2.14-5.0/fs/vfat.o: /lib/modules/2.2.14-5.0/fs/fat.o /lib/modules/2.2.14-5.0/net/bonding.o: /lib/modules/2.2.14-5.0/net/bsd_comp.o: /lib/modules/2.2.14-5.0/net/ppp.o /lib/modules/2.2.14-5.0/net/dummy.o: /lib/modules/2.2.14-5.0/net/myri_sbus.o: /lib/modules/2.2.14-5.0/net/ppp.o: /lib/modules/2.2.14-5.0/net/slhc.o /lib/modules/2.2.14-5.0/net/ppp_deflate.o: /lib/modules/2.2.14-5.0/net/ppp.o /lib/modules/2.2.14-5.0/net/slhc.o: /lib/modules/2.2.14-5.0/net/slip.o: /lib/modules/2.2.14-5.0/net/slhc.o /lib/modules/2.2.14-5.0/net/sunbmac.o: /lib/modules/2.2.14-5.0/net/sunhme.o: /lib/modules/2.2.14-5.0/net/sunqe.o: /lib/modules/2.2.14-5.0/scsi/fcal.o: /lib/modules/2.2.14-5.0/fc4/fc4.o /lib/modules/2.2.14-5.0/scsi/pluto.o: /lib/modules/2.2.14-5.0/fc4/fc4.o /lib/modules/2.2.14-5.0/scsi/qlogicpti.o: /lib/modules/2.2.14-5.0/scsi/sg.o: /lib/modules/2.2.14-5.0/scsi/st.o: /lib/modules/2.2.14-5.0/block/linear.o: /lib/modules/2.2.14-5.0/block/loop.o: /lib/modules/2.2.14-5.0/block/nbd.o: /lib/modules/2.2.14-5.0/block/raid0.o: /lib/modules/2.2.14-5.0/block/raid1.o: /lib/modules/2.2.14-5.0/block/raid5.o: /lib/modules/2.2.14-5.0/ipv4/ip_gre.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_autofw.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_cuseeme.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_ftp.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_irc.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_mfw.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_portfw.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_quake.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_raudio.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_user.o: /lib/modules/2.2.14-5.0/ipv4/ip_masq_vdolive.o: /lib/modules/2.2.14-5.0/ipv4/ip_vs_lc.o: /lib/modules/2.2.14-5.0/ipv4/ip_vs_rr.o: /lib/modules/2.2.14-5.0/ipv4/ip_vs_wlc.o: /lib/modules/2.2.14-5.0/ipv4/ip_vs_wrr.o: /lib/modules/2.2.14-5.0/ipv4/ipip.o: /lib/modules/2.2.14-5.0/ipv4/rarp.o: /lib/modules/2.2.14-5.0/fc4/fc4.o: /lib/modules/2.2.14-5.0/fc4/soc.o: /lib/modules/2.2.14-5.0/fc4/fc4.o /lib/modules/2.2.14-5.0/fc4/socal.o: /lib/modules/2.2.14-5.0/fc4/fc4.o /lib/modules/2.2.14-5.0/misc/amd7930.o: /lib/modules/2.2.14-5.0/misc/audio.o /lib/modules/2.2.14-5.0/misc/appletalk.o: /lib/modules/2.2.14-5.0/misc/audio.o: /lib/modules/2.2.14-5.0/misc/cs4231.o: /lib/modules/2.2.14-5.0/misc/audio.o /lib/modules/2.2.14-5.0/misc/dbri.o: /lib/modules/2.2.14-5.0/misc/audio.o /lib/modules/2.2.14-5.0/misc/dmy.o: /lib/modules/2.2.14-5.0/misc/audio.o /lib/modules/2.2.14-5.0/misc/ipx.o: /lib/modules/2.2.14-5.0/misc/openprom.o: /lib/modules/2.2.14-5.0/misc/softdog.o: ELF`4( 㿘- @`  `@  l&@ @ ]$   4@$% @  @6 $  `  @    *` @@@, $@  %$    6@"@"  "` "  `  " @ @`   `㿘@@` @`  ` 㿘 2 @* @  `  @?``  : @!@@ ``@@ 6`$* &㿘`$ @: 㿘`@ 㿘@ 01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... pers_to_level()linear: disks are not ordered, aborting! linear_map : hash->dev1==NULL for block %ld Block %ld out of bounds on dev %s size %d offset %d %dk roundinglinearGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!   ,42`<  =BH2QPoY=bhP    $H0`;<0I4\ bz -=K^pl|linear.cgcc2_compiled.linear_runlinear_stoplinear_maplinear_statuslinear_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.rem__this_module___atomic_addkmalloc_R93d4cfe6md_check_ordering_R20cde2a4printk_Rdd132261find_rdev_nr_R8447cb3dmd_size_Rd79fc116kfree_R037a0cba___atomic_subkdevname_R160820f5sprintf_R3c2c5af5init_moduleregister_md_personality_Rf4bcabf6cleanup_moduleunregister_md_personality_R4c95198d  0@ HX \`    4   (0 4 @x      @ XH X\ p t x"$h`<ELF4(㿘 bX@  0@$bX㿘` @ 㿘`  @ da@` @ .   ` ?< " 2  ,,8 2`( ` (#:  ( 㿐5"X`,`2  "`(@    2bX@ bX 0"bX ` *` *  * `   2`* @`$ * @ "$!  "@ @    = @@* @@@@ %@ ` * ` @  H*/ %  @ `  @  @ @`c @ p'` 2!`$  ` 6`$  @`  @ ` 2`$`Y@ 0U     @ D@  @   @  @  (@ @ "%@%@ uH/ X  !@ @H/ X & 0j"X5㿐/  @ O  @ F @  :      > & (` "`& T  `2<@ '  !<   L@Z    @R`!< @  㿘% @`  ` `?l?` `.@   $ |`  ?@ 0o"< @   @*6 6& @5`d 8`2 @ 0T 6 @& ?逢"&  2  ;  $ #`$  <"< @"@ D"D  #   "   X@# X @ & `)h  2 @   .``& 2  @.`2  @ `"& @ "@& & & @`  @`  `㿘 `  *` "&  ` @ " &  `"& @& 㿘`  .`  €  $` `@㿘  2 <? $ 7?<" @@ 2 @  & @& @& & 6 & & &  d@  $@ @`*"@ .`2 @ ` @`   `  "  @X   !! `2 P?  2<J?`@ h@   9?  |` .`@`+?B [h x $& @ @@ & @`& & & &   d@6    `N?hJ?@   $'h @` 3  * 7l  3` *  ` 'p7t'x@'   '|X   !! ` d  '@<`@ h@   ? 㿘 "i? *. 2 2   @ ]? . W?*  *  "    8` "`"`-`  0 , ' d" ?<`   `*@ * &0  ? ?㿘 2 *6?6   @ -? . '?*  `*   ` *` "   `" @  & ` @`   `㿘 "@  **`2 2   @ 4 ` 40 @ . @*`@ *` @4 @ `* @ " `@ ` @`  `( " ? 㿘 ? l@+. ``2 ` @$ $`̀@  ̐`" 㿘`@   @  ? "` @ $@  `#`@ @! @ @""  㿘`@  @ @@@@01.01kernel_version=2.2.14-5.0using_checksums=1looploop: request list destroyedloop: block not locked<3>unknown loop device command (%d)?!?<3>loop: device %s: getblk(-, %d, %d) returned NULL<3>loop: transfer error block %d <4>loop: cannot create block - no backing file <4>loop: cannot create block - no file ops <4>loop: cannot create block - file not writeable <4>loop: cannot create block - FS write failed: code %d <3>loop_set_fd: NULL inode?!? <3>loop: device has no block access/not implemented <4>lo_ioctl: pseudo-major != %d <4>lo_open: pseudo-major != %d <4>lo_release: pseudo-major != %d <3>lo_release: refcount(%d) <= 0 <4>Unable to get major number %d for loop device <4>loop: cannot unregister blkdev ?loop_register_transfer_R5d4a0776loop_unregister_transfer_Rbfee3ad5GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.kstrtab__ksymtab.rela__ksymtab.comment4!*x  ,D24 = @BH 2QXYD`4   lLw4  XK40 =@$ $sD#D41xd>JUf @q pl t| p `  lTl   <  @(.F _djp8P$;L[m~)<Sar2JYr. <O\r! (# ".H0Wloop.cgcc2_compiled.end_requesttransfer_nonetransfer_xornone_statusxor_statusfigure_loop_sizeloop_sizesdo_lo_requestloop_devcreate_missing_blockloop_set_fdloop_release_xferloop_init_xferloop_clr_fdloop_set_statusloop_get_statuslo_ioctllo_openlo_releaselo_fopsloop_blksizes*ABS*__module_kernel_version__module_using_checksums.div.urem.udivblk_dev_R529da5edend_that_request_first_Rb8ccce88end_that_request_last_R09823044__memcpy_Rbfaaaa73.remnone_funcsxor_funcsxfer_funcsblk_size_Ra2e0a082.umulpanic_R01075bf0blksize_size_R2f30b4b6printk_Rdd132261bmap_R86b77f05__bzero_Rdd42e263getblk_Re811155cll_rw_block_Rdc206727__wait_on_buffer_Ra773ade4__brelse_R01c3a101mark_buffer_uptodate_Rd0ee0e0a___set_bitset_writetime_R8e167c19refile_buffer_Re499ba50___clear_bitkdevname_R160820f5global_event_Rcaf51008___atomic_sub__down_R4663c8e5___atomic_add__up_R450143b0__this_moduleblkdev_open_R0cf606b7get_empty_filp_R0a448cd7get_write_access_R68f84640put_filp_Ra669ca1fis_read_only_R740274cainvalidate_inode_pages_Re4224f04set_device_ro_Rdc036ebbfput_R0743d661blkdev_release_Ra4c92a90dput_Rb697b4be__invalidate_buffers_R98f51538cap_bset_R59ab4080stack_top_Ra6cab6a7__copy_user_R9c5239ebstrncpy_R328a05f1fsync_dev_R8ea128e2block_read_R0d1ed412block_write_R117412a1loop_register_transfer_R5d4a0776loop_unregister_transfer_Rbfee3ad5__kstrtab_loop_register_transfer_R5d4a0776__ksymtab_loop_register_transfer_R5d4a0776__kstrtab_loop_unregister_transfer_Rbfee3ad5__ksymtab_loop_unregister_transfer_Rbfee3ad5init_moduleregister_blkdev_R5215d400cleanup_moduleunregister_blkdev_Reac1c4af) )   *4+h,-D1 L1   ) )  3 )  (3 (0 8 L) \4 h4 &2('& -D @H5L @T) d) 676489:;  5;4<P=h>?@;)  hA  h5H) d)  5  5 2B B B , (054 (\CE `5 `G G Ep t5x H 5 I pJ K L M N 8O HG  TC 0 0 0 0 P O Q 7 7   0R 8G  <G  HC S S T T U H0 L0 V ,D7VS S ,$T (T @U  5  T T   D  H  L5  0 0 G G E8 @< @@5`W|   h h50 0 G G G C,0 00 h t 0 0 0     a   5  $ () L, 0) L4 @7\ ` h7p t |71 4 1 4   c 5 DFD x$8.</XYl Z\[ ^ELF4(㿘` "`  `?@ @㿘 2 +&?ꀦ . !?( 1( &`  ## #$#(` @`  `h<! !% @, 㿘`@ +   @@@@@@@@;@@F@01.01kernel_version=2.2.14-5.0using_checksums=1nbd<3>NBD: %s - sock=%ld at buf=%ld, size=%d returned %d. sendreceive<3>NBD: Sendmsg failed for control.(result %d) <3>NBD: Send data failed.(result %d) <3>NBD: Recv control failed.(result %d) <3>NBD: Unexpected handle received. (result %d) <3>NBD: Not enough magic.(result %d) <3>NBD: Other side returned error.(result %d) <3>NBD: Recv data failed.(result %d) <1>NBD: I have problem... <1>NBD: request corrupted! <1>NBD: nbd_dev[] corrupted: Not enough magic <3>NBD: I did not expect this <1>NBD: request corrupted when clearing! <3>NBD: nbd_dev[] corrupted: Not enough magic when clearing! <3>NBD: I did not assume this <3>NBD, minor %d: Minor too big. <3>NBD, minor %d: Request when not-ready. <3>NBD, minor %d: Write on read-only <3>NBD, minor %d: nbd[] is not magical! <3>nbd: Some requests are in progress -> can not turn off. <6>NBD device %d: head = %lx, tail = %lx. Global: in %d, out %d <1>nbd_release: refcount(%d) <= 0 <2>Sizeof nbd_request needs to be 28 in order to work! Unable to get major number %d for NBD nbd: registered device at major %d nbd: cleanup_module failed nbd: module cleaned up. ?GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4!d ,L<2(< = BH2QY`(X   lw(d  =4 $>L&3L< DM\hr  h<  &FTby@ %/BQey 8@"nbd.cgcc2_compiled.nbd_end_requestrequests_outnbd_opennbd_devnbd_xmitdo_nbd_requestrequests_innbd_ioctlnbd_blksizesnbd_blksize_bitsnbd_bytesizesnbd_sizesnbd_releasenbd_fops*ABS*__module_kernel_version__module_using_checksums.div.urem.udivend_that_request_first_Rb8ccce88end_that_request_last_R09823044__this_module___atomic_addsock_sendmsg_Rcb1714c8sock_recvmsg_Ra3bb27afprintk_Rdd132261nbd_send_reqmemcpynbd_read_statnbd_do_it___atomic_sub__down_R4663c8e5__up_R450143b0nbd_clear_queblk_dev_R529da5ed__lshrdi3__ashldi3cap_bset_R59ab4080fput_R0743d661stack_top_Ra6cab6a7fsync_dev_R8ea128e2__invalidate_buffers_R98f51538block_read_R0d1ed412block_write_R117412a1init_moduleregister_blkdev_R5215d400blksize_size_R2f30b4b6blk_size_Ra2e0a082cleanup_moduleunregister_blkdev_Reac1c4af      ( <!  " " #$%    @$ @( H, H@&(8 P@ Pp t x&  (      8$ 8(&l hp ht&)+  &    $&( @ D&H X# & #     P0&4  L&P P & / /       8 @ X 0\ 0`&p t  +'#2 2     .  `  ` &  ` 3                   0 4  8  T  X  \  d  x            1 * .           & 4 4 0  4  5 6       &   "  "  + $ ( , 0 4: D H H H L& \ p ` p d& l  p  x  |        ; <   /      ; <     / < @ D>T \ ` d h&,--,-78L$ h X PELF 4( 㿘 %@7@ /`@ * @ @ 53@@@@@` @  `2 @   @%@  Ŧ@ @*  %e  %  Z ;975-@  @$  " @ @  @-`" `` `@6 `@@ @  ۠$ `@"$@` "%   6$% $``@ @ &@  㿘)   @` `@ ` } &@ @ 0o* k# `*@ @  @   *@ @  *@ @@ @,  $@@ >$ 6` +"  @ &"  @ @ @"  " `" #@& @$@&  @`   `㿘@ @$@$ &` @`  ` 㿘 $ : <` 2    6 @* <  @@ ,`@ *"0@. &  &  $@,<@*  @,  6, &  @ ?   @?㿘`$ @: 㿘`@ 㿘@ 01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... pers_to_level()raid0: looking at %s raid0: comparing %s(%d) with %s(%d) raid0: END raid0: EQUAL raid0: NOT EQUAL raid0: ==> UNIQUE raid0: %d zones raid0: FINAL %d zones zone %d checking %s ... contained as device %d (%d) is smallest!. nope. zone->nb_dev: %d, size: %d current zone offset: %d done. raid0: disks are not ordered, aborting! raid0 : md_size is %d blocks. raid0 : conf->smallest->size is %d blocks. raid0 : nb_zone is %d. raid0 : Allocating %d bytes for hash. <7>raid0_map: invalid block %ul raid0_map bug: can't convert block across chunks or bigger than %dk %ld %ld raid0_map bug: hash==NULL for block %ld raid0_map bug: hash->zone0==NULL for block %ld raid0_map bug: hash->zone1==NULL for block %ld %dk chunksraid0GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!Lp  ,42<  =BH2Q8Y F= bp  ` +\5L\@|J$0W4i o  +GYiwTpraid0.cgcc2_compiled.create_strip_zonesraid0_runraid0_stopraid0_mapraid0_statusraid0_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulprintk_Rdd132261partition_name_Re4b298b5find_rdev_nr_R8447cb3dvmalloc_Rd6ee688f.rem__this_module___atomic_addmd_check_ordering_R20cde2a4md_size_Rd79fc116vfree_R2fd1d81c___atomic_subsprintf_R3c2c5af5init_moduleregister_md_personality_Rf4bcabf6cleanup_moduleunregister_md_personality_R4c95198d  (, <HL T \  `p      8 8 P P, h48 h@x |        ( ,0 <`p x|   ( (   0 8H 0LP 0h p | ` `         (!T ` l t | !    < hL    h    ( 0 D"X \ `$t&L$ELF#4( 㿘!@ !@  @㿘    @   6@$ `$@ ? 㿘 D ""@!́㿘  @€@㿘 DHH/ `` @ ` @`  `#! @  @0 @`,   @ , ` `㿘`*`2 2   `` 2 `@``` @2`@hY   `  `" `2 @" ( 2@ 2 %` %``F%`a*` *  @2` @6aĀ 2  aȐ$a & @ $aaԀ 2`D$a `+  * $a@` ` * $a@` `D@ H$ @$ D}0U  `   Ȑ``a.$ܐ H#@" @  2 `@2@"@" @` "`@" @"$@"$@" (@"`@@" D@   $$   %@ ȑ. `" ,  .  㿘@a`a@a   `+) `  @a  `$@`*`  (    $㿘*` ,   $ *`"* "  " *`@b` ?"```` $`$`$`& @!$@ @㿘 .` 6` ` $` $@ 00 6` 2` `$` $ 㿘     @ `$`& &` `$  $@ 㿐@ 2!@ 0#! !@   $   - @@#` @ $`$$#\@$ $ `$  ????H'tHo` . €!   $  @ 2 "   2  $$`$ & ! `["! ?* *   @ " @@@ " `$  $?D `8"%    $ "@@@ 2  $`$  $" `"9! * *  $@ "  `$ `"I.  €, *   &&, *  &&, * - @*``* "*`@b `Ĕ"q @ `"w@ `"} `@ `"@ `"x@ @ @ 'x`'|`'` '`'`'`'`'` '&$`$` $` $`$`$`$` $` x&|&&& &&&&&   $ $ `&$`%%&&'@ "& $`$`Y!E&!,`*  `" " !@6"  `."2!?-&!@,* @   `"&`  # `` * @# 3 # # # !  &! ? `"@ @t%㿘' I -+HH/  `D%  ` *  `@ $ @``2 `ܔ`, `4  @` `@  @` `@`= 㿘!Ԁ`` L @Z@ "&!Ԃ @U㿘      3 `@@"5 @, 5 @&`:`@ % `$@  `  @ "@`$`5 @5 @@  $ Ī`$@ ` ` @, 4 @@ 㿘  㿈7 ' @`  `@ m7!ܬ &@ b7' "  ; 2  2 7`#@7@? * 7`#@@e"` ,`*   %$`$` 4`$`$`$`M$`:2 @!@ A 8(( `@!@ 2  @! @'@! @%$`$` 4`$`$`$`$` %@!@ %$`$` 4`$`$`$`$` 2{ 2(@ 0 %$ %%,*  ` 6` 2 @% $`$` 4`$`$`$``   2  `$@ ? %(* @ ""@ (@@  '  @  % @ %   @ %@ 0>@  @%Ԅ  ? ( (   @  # ( $ ߆%@ ( @0@&7 @`?  `㿘!Ѐ" !Ԁ   &!@ @   㿘!Ԁ " !Ѐ   ` @$@ 0@&!԰ 㿘@!!Ѐ @@&` @`  ` 㿘`@ 㿘@㿘@ @@@@01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... pers_to_level()raid1: out of memory, retrying... <3>raid1_map(): huh, no more operational devices? <3>raid1: %s: rescheduling block %lu [%d/%d] [%sU_]<1>raid1: Disk failure on %s, disabling device. Operation continuing on %d devices <1>raid1: only one disk left and IO error. raid1: bug: no read-operational devices RAID1 conf printout: (conf==NULL) --- wd:%d rd:%d nd:%d disk %d, s:%d, o:%d, n:%d rd:%d us:%d dev:%s md: bug in file %s, line %d raid1.c<6>dirty sb detected, updating. <1>raid1: %s: unrecoverable I/O read error for block %lu <3>raid1: %s: redirecting sector %lu to another mirror (checking disk %d) (really checking disk %d) <4>raid1: md%d: raid level not set to mirroring (%d) <3>raid1: couldn't allocate memory for md%d <3>raid1: disabled mirror %s (errors detected) <3>raid1: disabled mirror %s (not in sync) <3>raid1: disabled mirror %s (inconsistent descriptor) <3>raid1: disabled mirror %s (mirror %d already operational) <6>raid1: device %s operational as mirror %d <6>raid1: spare disk %s <3>raid1: no operational mirrors for md%d <1>raid1: md%d, not all disks are operational -- trying to recover array <3>raid1: detected mirror differences -- running resync raid1d<3>raid1: couldn't allocate thread for md%d raid1syncd<4>raid1: raid set md%d not clean; reconstructing mirrors <6>raid1: raid set md%d active with %d out of %d mirrors <6>raid1: mirror resync was not fully finished, restarting next time. raid1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment48!0  ,l82=<  =BH2QY"=#;b%@ " *1 @&@`2<0S$c,hxDHx8h \<X|t Hd8(T:`OPdZ4l r %07JUn|*ARgu ,AOl raid1.cgcc2_compiled.raid1_kmalloc__raid1_mapraid1_mapraid1_reschedule_retryraid1_end_bh_iomap_and_make_requestraid1_make_requestraid1_statusunlink_diskmark_disk_badraid1_errorlink_diskprint_raid1_confraid1_diskopraid1draid1syncd__check_consistencycheck_consistencyraid1_runraid1_stop_resyncraid1_restart_resyncraid1_stopraid1_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udivraid1_retry_listprintk_Rdd132261kmalloc_R93d4cfe6__bzero_Rdd42e263md_wakeup_thread_Rbb58cfdfkfree_R037a0cbaraid1_end_requestmd_error_R06ab6840___set_bitpartition_name_Re4b298b5___atomic_submd_map_Rad14c7c4___clear_bitmake_request_Rad093e20.umulrefile_buffer_Re499ba50__memcpy_Rbfaaaa73sprintf_R3c2c5af5memcpymd_print_devices_Ra8d36306mddev_map_Rdd287621md_update_sb_R8cab1a67__down_R4663c8e5md_do_sync_R646963e7___atomic_add__up_R450143b0set_blocksize_Ra842722abread_R68bfe922memcmp__get_free_pages_R19d9ac40__copy_1page_R5ac7370e__bforget_Rbe345d8cfsync_dev_R8ea128e2__invalidate_buffers_R98f51538free_pages_Rb5136506__this_modulemd_register_thread_R04ad5c33md_recover_arrays_R93090167md_interrupt_thread_R600bb8c0md_unregister_thread_R3170f6acraid1_initregister_md_personality_Rf4bcabf6init_modulecleanup_moduleunregister_md_personality_R4c95198d  ( )0* ( ' ' ' +,<.T/  0  (1,\2t3436`557$- (- - -  H H8 X X ` h ` h 8, p488 p<+H xX0\ xh( (  (  8( 8 P( P ` `( x 0 8( < x         l  p  t  x                               T  0 $ t ( ,L                       4  8  <  @  T  X  \  t9 9 9  $ ( , p t x |     (: ' $' 0; 8; < @ 8l' x'  ( <0( ' 0,(0 8@' 1>? p p(   $(<AXBxCDEFGHIF,G8HlJ xJ ? ( J  ( J  < @ D P0T \(` t x | (: 0 @( @H0L pT(X pp0t | (0  (0 ( L 8T(X 8 h( h   (     K0 04 X8 X< 0@KT \(` h @p(t @+4L< D P(\,hJ lJ x1M (     $ ((0:<+XNpNx,J J 1  POS=$@ -dP(x, \04ELFM4( 㿐''!T &!TH`!` "!\'&!` !!L`@ H/`  ` 2"` !T?&!T!H` "" H`` "`H` "@" H` "@" 㿘HH/  2   ?" "`@    !H !T @ HH!"` !"!"!㿘 a?   $@ @㿘 e @㿘@  @ H@ $ $@  $ W2 H 㿘@   @ HS2 H 㿘HH+ 㿘HH( 㿘* `!<@ 0&㿘* |@` !<@ 0  ܒ @$$@㿘 !\ !t!L 2!L!T   !L!T !<@ 02@6  L | /,`@ 2!< "`!<@`@ `  ""@"   "@& !?%!㿘  a #@* @`" a\ 2`aL 2`aT 2 `  a # $a`2a\ #(a㿘!d!͐$!d@> #* @ " !<2  2  !@ k 2!< 㿘"4 !d@ , @!d,!t*` !t*`0 !tؔ  !t*`!t@  o!&! 㿘* !to*`!t@!&!㿘#`&`:`N   @`@@ c  %!L0@, '  @!d &!<&!@& & &!\&!P&  $!@!<@:`  #*   &   "`" &  $@ 㿘$  !L  @0㿘Q @ 㿘^ @ 㿘 D`!tH/``  @aH @aH @ `@ ! @`2!| @ !| - )  aL```|  2* "   " @ 2  @2 @   㿘 ` !@), !<4 @:` `$@ H@.#@+`&`$@ ` 6`!< &`&`!@&`(&`㿘@` $t @ .`2 @@ `` 2F`@ `` q@+ 2 @2l! @ @` 2 $` `@"@?0]$`$``?*`"`* "  " `*`@b` ?"` $$<$$`* "  `" `?* "`* "  "  $$$#`x|$x@$|! @x@0  `@"@ 㿘 !h!<=` @@!t!p```!D4 !D &" @ !h@@!@@:` =` @@@@!l/!p`"``0"`0@%@: @%@ @@ @!<  !D@  㿀 .` `!t!@0$ $ @!@!'/-" , `,`%@`!<@`2  €  瀤``€ `@㿀 !D!t  @ |"9 ,  L "3 `!@ِ$O 2  ` ` @ `@" `( 2@ $$@!@ Ŧ-`!@%!D `` ` @`7``$ @!@ | ]'-!D" ,  L `   "   "  2   €`  &!D6 2;  $$@!@ &'-!D" ,  L `  `   "" $   €`  &!D  `€ `@㿘. L   !< @@ ` @ x`$$ $!\ 2$!P 2$&!\  &!P $ @$ " "@!  "``     @㿘  !t:  L3!P 2 @!D2@>@`,! `2 !P  .@%$`@€   " !P 2`@ͪ` 2&!\ !L @!`!$!@  &!\&!P!!!$!$!@    L*"" ""  *H   ';ct   ' ''''!H  !<@ 09!\ !<@ 00 @!L' @"!P!<@ &!\!P``!\ ` !\ ?!\` HH/  @6|!DȔ  @ "@ 2"@``@|` ; @  L) "`$/$ @€ @  @ `@  @!`!$!@  &!\&!P!!!$!$!@ 0@? ! Ț  L@,`!D@ 2  '' 2$`  ' 2 " "``  "  " @ " "` @ʚ`  !P @ D` @@`!D@"8`,` L`22`Ē`*!@@2 "$` 2 `  "` 2` ! $ `  `2``@&!D` %@ ;`;% "';c @ @ `  @a "aw!H @ &!\   @$Ȕ L,` 2 !D` 2!D "`!D@ "``'`@,` @&!H5,`@  `  | "_` |!D@  L`? `@ 0  @ @!D@   @ <   $   @``  `` 4 `@2 !`"!D@  2 @ ` @!  ( @W $`@0>  @a "a!H @3   @\&!X!D@"%`,` L`2`  2`!@ $` ` ` @`'`@&!D0  @+&!X  ",` L `2!@!D@2`!@ސ$T` ` ` @`'`@ڠ  &!\ @&!H ,`"`   @ @2 `@ 0$  @a "a)!H @  62 @' L,`   2<`" ` ` @$$@!@`@ߤ @0Y8%@ &!\ @Q&!H  %,` `"!`!@@$`" ` ` @ @ @2 `@֠ 0! &!\ @&!H,` L   `" $`$@!@`@ 2 @ `@ 㿘`!t `" !h: @@@@!l/!p`"``0"`0@$@@:`@$@`@@ @`!P "  `2!\!P 2!\ !L @2!Ha "a!H 26$!D ,` L !!< @ @ !L @a "a@ !L`"@A @ 㿘 `   @"` ,@ "/ 2' !\ "# !H 2 !<!@2  !@!: @`&! `"!@Ґ &!!@!<: @ &! 2 Α, HHo`!   ` @㿘!`( `% L @@   @  &! @ @ !x!t@ ' @ @ 'm @@ 0!t   @`&`:`@,`Ȁ "@ !t`@!t,  'h@ h3,`*$ ` € `@,`` €h$@ 2 !t @Ȥ @ @&@, 4 @@ !t`@ `@ 㿘z  㿘9 `   @  $ ``@  @ ? $ !@  &@@!$ @ w$@`$`"i( ;* "` ,`"`*  @9@ L$ $ 4$ $ $ ?$ -"1(@(  @9@ /  @9@ #@`@$ $ 4$ $ x $x@9@ $ $ 4$ $ $ $ 2( ( ,`"* @ ` @ : 2 $ $ 4 $ $ $ $ (`  x$t"$|$ $h`$l$$p` ` @ ɀ` @ `@ (`@    @  % @ i$t* @*`"@*`"@ᘓ*`ad@2 W    @z` @  ? (@ (   `@  # (@  ߆x( %l ` l `@p  @ $ `@ *`@   @$@ɐ@@3 !@ @ `& `%@@" `@ @ @` @&@9  @`?  `㿘 " !   &!@ @   㿘!   ` @&@ 0 @   @&! @  㿘!%!@  "@@ @&` @`  ` 㿘` a@`a`@2 atax@`at @   `+) `  @at`@  @`㿐@ 2!t@ 0#!x !|@   (   - $@@#` @ `#\@  `  ????H'tHo` . €!t   ( $ @ 2 "   2  ` & !t `b'+!t ?*" *  $ @ " @@@ " `  ?D `?'@    ( "@@@ 2 & `  " `'T!t *" *  (@ "  ` `'d.  €!`  `'q, "*   &&&!`, "*  &&!`"&!`t!` 2,  `͔'"* - "@*``* `"*`@b `'  @ `'@ `' ` @ `'@ `'x@ @ @ 'x`'|`'` '`'`'`'&$`$` $` $`$`$`x&|&&& &&&  $ $  ` & $` &&`&$`'@ "&$`$`!|&!`!x &!|?&!x,`"*  `" "!t@6" `('*2@,"* @    `'# `  # `` * @6 # # #  #  ? `(@ @t㿘`@   㿘@㿘@ @@@ @@@01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... pers_to_level()raid5: bug: free_sh_list != NULL, nr_free_sh == 0 get_free_stripe(): bug raid5_kfree_old_bh: bug: sector %lu, index %d not present raid5_update_old_bh: bug: sector %lu, index %d not present raid5: kfree_stripe(), sector %lu, phase %d, locked %d, count %d raid5: bug: sector %lu, new %p, copy %p raid5: bug: nr_free_sh == 0, nr_pending_stripes == 0 raid5: bug: kmalloc_stripe() == NULL raid5: bug: raid5_kmalloc_buffer() == NULL raid5: bug: raid5_kmalloc_bh() == NULL <1>raid5: %s: unrecoverable I/O error for block %lu <1>raid5: Disk failure on %s, disabling device. Operation continuing on %d devices <1>raid5: Disk failure on spare %s md: bug in file %s, line %d raid5.craid5: unsupported algorithm %d compute_blocknr: map not correct compute_block() %d, stripe %lu, %d not present raid5: bug: stripe->bh_new[%d], sector %lu exists forcing oops. raid5: bug, completed STRIPE_WRITE with new == %d handle_stripe(), stripe %lu, io still pending handle_stripe(), stripe %lu, already complete raid5: restarting stripe %lu raid5: bug, nr_write ==`%d, nr_read == %d, sh->cmd == %d raid5: bug: method1 == method2 == INT_MAX raid5: bug: bh == %p, bh_new[%d] == %p raid5: bug: bh == NULL, i == pd_idx == %d raid5: bh %p, bh_new %p raid5: resync aborted! raid5: resync finished. raid5: md%d: raid level not set to 4/5 (%d) <3>raid5: disabled device %s (errors detected) <3>raid5: disabled device %s (not in sync) <3>raid5: disabled device %s (inconsistent descriptor) <3>raid5: disabled device %s (device %d already operational) <6>raid5: device %s operational as raid disk %d <6>raid5: spare disk %s <3>raid5: invalid chunk size %d for md%d <3>raid5: unsupported parity algorithm %d for md%d <3>raid5: not enough operational devices for md%d (%d/%d failed) <1>raid5: md%d, not all disks are operational -- trying to recover array <3>raid5: detected raid-5 superblock xor inconsistency -- running resync raid5d<3>raid5: couldn't allocate thread for md%d <3>raid5: couldn't allocate %dkB for buffers <6>raid5: allocated %dkB for md%d raid5: raid level %d set md%d active with %d out of %d devices, algorithm %d <1>raid5: raid level %d set md%d active with %d out of %d devices, algorithm %d raid5syncdraid5: raid set md%d not clean; reconstructing parity <1>raid5: failed to run raid set md%d <6>raid5: parity resync was not fully finished, restarting next time. raid5: waking up raid5resync. raid5: no restart-resync needed. level %d, %dk chunk, algorithm %d [%d/%d] [%sU_]RAID5 conf printout: (conf==NULL) --- rd:%d wd:%d fd:%d disk %d, s:%d, o:%d, n:%d rd:%d us:%d dev:%s raid5GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4@X!]  ,@42t  =@B@H@2QA YM=MCbO ; V \(dX4HDHPL` XpxL<XT0TL`0$T! h0 l? dXJ ,_ (p   HT< h`,xx| T'(*x7*p>+I,].o.y8 5T6467<84  $*0ATez+>Tm*;P_u2Po?,??raid5.cgcc2_compiled.get_free_bufferget_free_bhput_free_bufferput_free_bhget_free_stripeput_free_stripeshrink_buffersshrink_bhgrow_buffersgrow_bhraid5_kfree_bufferraid5_kfree_bhraid5_kfree_old_bhraid5_update_old_bhkfree_stripeshrink_stripe_cachefind_stripegrow_stripesshrink_stripeskmalloc_stripeget_striperaid5_kmalloc_bufferraid5_kmalloc_bhraid5_end_requestraid5_mapraid5_build_blockraid5_errorcompute_blocknrcompute_blockcompute_parityadd_stripe_bhcomplete_stripeis_stripe_lowpriohandle_striperaid5_make_requestunplug_devicesraid5draid5syncd__check_consistencycheck_consistencyraid5_runprint_raid5_confraid5_stop_resyncraid5_restart_resyncraid5_stopraid5_statusraid5_diskopraid5_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__wait_on_stripeschedule_R01000e51printk_Rdd132261free_pages_Rb5136506kfree_R037a0cbakmalloc_R93d4cfe6__bzero_Rdd42e263__get_free_pages_R19d9ac40md_wakeup_thread_Rbb58cfdfsleep_on_R2de891df___set_bit___clear_bit___atomic_sub___atomic_addmd_error_R06ab6840init_buffer_R7295af0bpartition_name_Re4b298b5md_print_devices_Ra8d36306.rem.umulxor_block_R0de1c811refile_buffer_Re499ba50__memcpy_Rbfaaaa73__wake_up_Rdecddc1efind_buffer_R5550c425make_request_Rad093e20md_update_sb_R8cab1a67__down_R4663c8e5md_do_sync_R646963e7__up_R450143b0bzero_1page_R84f9fba4set_blocksize_Ra842722abread_R68bfe922memcmp__bforget_Rbe345d8cfsync_dev_R8ea128e2__invalidate_buffers_R98f51538__this_modulemd_register_thread_R04ad5c33md_recover_arrays_R93090167md_interrupt_thread_R600bb8c0md_unregister_thread_R3170f6acsprintf_R3c2c5af5memcpyraid5_initregister_md_personality_Rf4bcabf6init_modulecleanup_moduleunregister_md_personality_R4c95198dA B     B CDD E(F4GHDEF B  PB Pl t |B  B0?EF PD D   HB L  PH XI @  @ F ? TB X @ @  h B  h   B   XJ pK L H M N lJ ? F     O x P PPB x  x  BQHHP T XPhBt xx | x BQ?> 0 4B8 DSPSh?|=R?>   >>@>T>h>xB| S  B (F@T H | BT T T JJKUVpJFT (T xVT T 0T 4T PJ|    B XB XJ,M|J hl hpBKWW B  B L0KD LBP X PB KWW4  <  DBX `B ` J @M! ! !B! ! !B!K"8Y"lY"K"U"J#M#J$J$K% Y%<J%|M&J&0V&TL'J'K'(Y'V'Y(=(R((?(8>(x ( (>(>(>(>(>)B) )S)tJ)  )  )B) ) )B*J*(H*@@*hH*Z+K,L,0\,LM,` ,h ,xM,  ,  ,B,G,^-^- F-0_-L`-T -T -T .T .a.\b.pc.|d.C.e .e .M/ @/$B/( @/8L/XE/lF/|G/^/ H/P/ p0B0 p0 x0lP0p 0xB0| 0P0 0B0 0P0 H0B1P1 1 B1 20 28 2<B2P 2X 2\B2t 2|B2 2 P2B2 P2 2 *2 2B2 2 2 *2 *2 3f3<S3` X3d (3h (3lB3 X3B4D 4X 4\ 4d 4lB4 (4 +4 +4 (4f4 4B4 4 84B4 84H4g5 5P5 5$B5, x50 54 x58 5D 5H x5L 5TB5\Q5C5D5 p5 p5B5e 5e 5L6 h6 6B6 6H 6X 6\ x6` 6d 6h x6lB6tQ6B6 6H6B6 6i6i6C7D7e 7e 7L7L (7T (7dj7p P7j7 P7 `7 `7 h7 p7 h7 p7j7 x7j8 x8 8B8 8( 8,B80 88 8@ 8HB8d 8lP8B8 9( 9@9, 9@9@99D99H9T9L:|9P;9 x9 9 x9 :d x:h :l x:p : x: : x: ;T x;X ;\ x;` ;t ;;x ;;;;;;<;>;>; x; ; x; <, x<0 <4 x<8 < x< < x< < x< < x< < < x< = x= = x=  =  =$ x=( =@k=Pk=`k> x> > x> ? x? ?  x? ?\ x?` ?d x?h ?pB?xQ? ? ?m?l?p@[@$]@D]  '  .67<$H(8,5064ELF(4( 2""` "@ "` "@@@ 2  " @2`" @` `@ 㿘 @㿘 @ W  "   HC & .` P* .`@`$, `0@ $` 8@ ` 0@  H`@  L`$@ 0`@ 4`   $` $` P@  $`4$`0 ,€ i @ 0d b& ^   \&@ 5S .`* .`"@ P*`0  @  D`   B 2 `t`p @@  `t@  B`r@  `p  @@  &   & .`@*`  P 0@ @  @  @0@ 㿘  "|.`.`@*`  P 0@.`"* ? A       @ E& @  & @  9&  @` &  `     " ``@ &  `@  , ` `"   @     `*@  ` &   @ @K @Y0B*  P@ `0@`.`$, @ $`H@?$$$$$ "@ P @ T T  $`4$`0$`<$`@4` $`8$` ,€   @ 0 &   @㿘V X`*` Y: 2C p \@` @``? ,`  & l& h& `& d & t < @ @& p p @ tV X  X 2 (` +@  2 *`:`,`& x@ @&  6 Z@. @    @@0@ 0    @ 㿘`" ``"^ 0Z`. @` \@ d``   "   8  @` "< `~` P@` <  P`T@<  <    `B `@ @ . &a`6&`$` p(` @(@ x`& x`€0`    @F!s@`&@*` * @`H `0@E0<`:8 `4.@`0`L`,BF` !@' `" F !@.* @`H&  @   @㿘`   ` & 2  @ 㿘`4@  3 @.` @F!s`"*$ $0$$$$$,$@ .`*$@  $` "@ @@ @?0@@  6 $`$`@``     $`$``P P@@4 $ 0$ H4 @``   `n   j`? (_@@```2`,4 @ 2  *@`@$` `P0@  @"]`,€`@` ?2-` ( `P@ 0$  H@?"`"`"`"`"` "`P @ T T 4 $ 4$ <$ @$ 0$ 8$  @`@`P`" `@$( @   y`  ` $` 6 @ `P0@ @ P`@@ @@h@ 0.` F*!`''''''''@   '@ @ M?@ (  )# $`ܐȒ@$``$` "`"`@2` "`H2`@``,€`@` "@ @`@P`ޤ`!'@ @m@   6$`@`@ 㿘   "$`@  ` "` 2"㿘 `` `@ 0"2""㿘 `@㿘  p t    2"2?* @` 2`` 2  * *@ @@6 `*@ |   p@@`&a€0m x?& x *`" ` P@#`B@ `@  * `0 "@@  `# @`T 2 `E`~ 2`E$ -& *" ` `$ ``$ `~` `T$  P``l@`T&` @ `~ P@ &$ `C @`E`C @" @   ,€  㿘 ` x  "& &  2 x` @      1㿘  € e 2 ,㿘@  㿘  xZX*`*: :` 2Z@ 1   &! @@ 1 㿘3x` & @㿈 x'''21 @  $m1 4`| B +`B @  E+ @*A*C"$ 4 $@ C C @" @  @?1"""`d! "`` "h@ X@?"#"`"  @"`@ X  1"  1" 㿘@ 1 㿘`x @ T`X `X `, @ *!  *&!€`"@`X*:  &``(@4`Z@  211  㿘 p  t    2`2  ?*@` 2```2`(` ` (@6` x& x` *#    @  @$ P?H@" " " " " .@  $4$0$<$@4 $8$$H@ (BF '''''''  @$L@ 5`"!@   @ !'@ @@"` (00 p(`*@@ x P& x0@㿘 @ ,?@ $ 8 @  0 @  H @  L $@ 0`k T  T@2 ? h@  p@ @㿘 (@ ?@ ( "$$ $ `A     @@2?@ @p@@ @@@@@@@@@@@@b@@=@mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... FC: Cannot enque PLOGI packet on %s FLOGI failed for %s with status %d %s: mismatch in wwns. Got %08x%08x, expected %08x%08x %s: ONLINE %s: FC is offline PLOGI failed for %s with status %d FC: Bad magic from REPORT_AL_MAP on %s - %08x FC: Not enough memory, offlining channel FC: Cannot enque FLOGI packet on %s FCP SCSI cmd & rsp queuesFC: Reset in progress. Now?!FC: %segistering unknown type %02x UnrR%s: (%d,%d) Received rsp_status 0x%x <4>%s: state change to ONLINE <3>%s: state change to OFFLINE FC: Cannot allocate memory for initialization FC: Cannot allocate DMA memory for initialization FC: Cannot enque FLOGI/REPORT_MAP packet on %s FC: Cannot allocate memory for forcing offline FC: Cannot enque OFFLINE packet on %s FC: nothing to release %s: SG for use_sg > 1 not handled yet fcp_scsi_queue_command: queue full, losing cmd, bad FC: Abort not implemented FC: soft abort FC: hard abort refused FC: bus reset! FC: host reset fcp_init_R1cec8342fcp_release_Rdc48a20afcp_queue_empty_R70ffd106fcp_receive_solicited_Rf9a35a34fc_channels_Rfac845fdfcp_state_change_R3eb7f6b8fc_do_plogi_Rda138acbfc_do_prli_R804a85a3fcp_scsi_queuecommand_R60230385fcp_old_abort_Rcaa29114fcp_scsi_abort_R15d01087fcp_scsi_dev_reset_R7abaed9afcp_scsi_bus_reset_Rb6d678dbfcp_scsi_host_reset_R5176c4cbGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata__ksymtab.rela__ksymtab.kstrtab.data.bss.comment.note.modinfo4 !+T  , 8p4%p>7P  M&V'\'a'zj(&(p(P2(y8P >@Z   P"l2|22hV ` ` @( L T "2   @  D"L P T@h1Z@   "P 8T 8X@l) h@ hNx | @1Z"NPV  @ @b ` X)hN|)N[ [4 8[D@H P \ ` (h (l 0p 0t@b   (h XM p"  8  8 @ ( `1 |Z      `  `   @ )     N ( 0 `) |) [ [ [     @ N N tV H <"P1x  "VH L@x | #1"8:D[L[T[lN  )[ 8@ 8N hDH`t hx@  #1: [4R 8R P&`C dC xC  @ C C C 4( b  \Vt x |@_hN  T X@\  @ ( 8,@0 8T (X@\ (Z)thN  0 0 #L1p: P@ P `@ `&LNVN( , \Hp| H #1:0(P"l)N222h2 2([@)\N[O O,OLOl]]O]]IJU D'QS% C$G(F,.0-4c8?<$@BDPHLL\P*T9X!\d`4d7h3lT       L5LHK,]l((DX2L`P  |D H,  Ed[pL  P@]0@8d& F\| Pp|"hJb| 0p@Vl 84QPtz0(`-fc_syms.cgcc2_compiled.fc.cfcp_scsi_insert_queuefcp_scsi_remove_queuefcp_login_timeoutfcp_login_donefcp_report_map_donefcp_scsi_donefcp_scsi_queue_itfcp_els_queue_itfc_do_els*ABS*__ksymtab_fcp_scsi_dev_reset_R7abaed9a___f_enable_irq___set_bitjiffies_R0da02d67fcp_scsi_dev_reset_R7abaed9a___f_mmu_release_scsi_oneadd_timer_Rbea990b2__kstrtab_fc_do_prli_R804a85a3__kstrtab_fcp_receive_solicited_Rf9a35a34fcp_initializefcp_queue_empty_R70ffd106___clear_bitkmalloc_R93d4cfe6fcp_scsi_abort_R15d01087__ksymtab_fcp_old_abort_Rcaa29114__module_using_checksumsfc_do_plogi_Rda138acb__kstrtab_fcp_state_change_R3eb7f6b8cleanup_modulefcp_scsi_reset_done___atomic_submemcpyfcp_scsi_host_reset_R5176c4cbfcp_scsi_bus_reset_Rb6d678db__ksymtab_fc_channels_Rfac845fd.udiv__kstrtab_fcp_scsi_bus_reset_Rb6d678db__ksymtab_fcp_init_R1cec8342__kstrtab_fcp_scsi_abort_R15d01087del_timer_R5811f067.divinit_module__ksymtab_fc_do_plogi_Rda138acb__ksymtab_fcp_scsi_queuecommand_R60230385fc_do_prli_R804a85a3printk_Rdd132261fcp_forceofflinefcp_scsi_queuecommand_R60230385fc_channels_Rfac845fd__kstrtab_fcp_release_Rdc48a20a__ksymtab_fcp_receive_solicited_Rf9a35a34fcp_state_change_R3eb7f6b8__kstrtab_fc_channels_Rfac845fd___f_disable_irqfcp_init_R1cec8342__kstrtab_fcp_init_R1cec8342__ksymtab_fcp_scsi_host_reset_R5176c4cbfcp_old_abort_Rcaa29114___f_mmu_release_scsi_sgl__bzero_Rdd42e263__up_R450143b0__kstrtab_fcp_scsi_queuecommand_R60230385__kstrtab_fcp_queue_empty_R70ffd106fcp_registerfcp_receive_solicited_Rf9a35a34__kstrtab_fcp_scsi_host_reset_R5176c4cbfcp_release_Rdc48a20a___f_mmu_get_scsi_one__module_kernel_version.urem__ksymtab_fc_do_prli_R804a85a3___atomic_addkfree_R037a0cba__kstrtab_fcp_old_abort_Rcaa29114__down_R4663c8e5__ksymtab_fcp_queue_empty_R70ffd106___f_mmu_get_scsi_sgl_sparc_dvma_malloc_Rac4503aa__ksymtab_fcp_scsi_abort_R15d01087.umul__kstrtab_fc_do_plogi_Rda138acb__kstrtab_fcp_scsi_dev_reset_R7abaed9a__ksymtab_fcp_state_change_R3eb7f6b8__ksymtab_fcp_release_Rdc48a20a__ksymtab_fcp_scsi_bus_reset_Rb6d678db__memcpy_Rbfaaaa73ELF4(   " "`((k(w((h(t(((i(u((" "@"  XH`a @a   a a2`*` $ a "  2  ,  * @``  `<`<2 *` * " * 7@   @   @ @6 *a@@"a " 2   @ ,   @ @@ `@  !2``   @ Y @ T O`"`$ `$2  >`` *  ```< 78 <`:  *  # @@ @   J "( `@ *J (   O   @   @ , ,  , `"   @ , ,  ,    "  2  @, a@*`@"a " 2  ,    `@"nax   ax a2`*` $ ax "  2  ,  *@8 `*` * " * @0   $ ?*  #@` 0 @   @ , ,  , 2  "  2  @, a*`@"a " 2   , 5aa:` &a" b`* * " * `  @@atav`au @ @  b"@ *` * " * @@b " * @*`"@*` "a&ba<  oa 2I㿘`    !a*@-?* !`@  ` @ @2 @ 2  2 @ - a!*@ a %a" ? *  ` `i $``"Ld`2b`  `@  $`  h* $ $ `@ \ l$  \$ `` , ` `* @`$ `$ $ ` `* @`   , =  , , =$ $ $   $@ @?$`$`$`$`$`   4 {, @ @ `  $ , =  $ $ ?@$`$`$`$`  c4 }?*  2    $,  4 `@ `8$ `<$ `C, =`@?`H *` €`0 $ `8, =$ 0`8`4 $ `< $ , =,, `0 $ `4 $ `8$ `<, =$ `8, $ `0$ `4$ `8$ `<$ `@   , =`   $ `D$ `D, $  , $  , <, > , ?    @ -  -  - !* *a"a ` ` "Y#  `@ 2J"@  "C@"&!# " 3!+7-;@``&!& T` &!&&`& P&!& &!X  @ <  !  bx&!&!!!@  `@ <   8* !?@!#@  & 8& 6 & 6 : & < 8@  @  0@  @    & & & (& & & 0@ 2@48 0@ @ &!&!D <@ &!LP H@ &!` @   @ @ `` `?  &! ? ` &! 2&! &!!" !`"` @@  !@  @!v&`& `&  @` @ (6 6!^& 6!\& ,x@ @!@`'x!!bb(bb &!`&!d&!p&!l&!x&!a  ?'/x /''/~/ *? ! ?.!.!v".!j.!.!k.!w.!.! 2`22 !!"  *  # !!& & L& & H"`!!"!" !&!"` 2?` a 2"` 2a@ 㿘 ``@@@ `P a 8@ D Pa@a`2`01.01soc.c:v1.3 9/Feb/99 Jakub Jelinek (jj@ultra.linux.cz), Jirka Hanika (geo@ff.cuni.cz) mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout%s: Too many continuations entries %d %s: Unknown STATUS no %d %s: Invalid R_CTL %02x continuation entries %s message: %s %s: Unknown LS_CMD %02x %s: Unsolicited R_CTL %02x not handled %s: Unexpected flags %08x burst-sizessoc-wwnport-wwnssoc_xramsoc_regsSOCsoc%d: Cannot order irq %d to go soc%d port Asoc%d port BSOC request queuesSUNW,sockernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4!h4  , 2#  =BHP2Yc='l  (,1|> R Xp  $ ,0EVhv-@O`ssoc.cgcc2_compiled.versionsoc_resetsoc_intrsoc_hw_enqueversion_printed.560*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsocsfcp_state_change_R3eb7f6b8printk_Rdd132261fcp_receive_solicited_Rf9a35a34fcp_queue_empty_R70ffd106.umul__bzero_Rdd42e263memcpyinit_moduleSBus_chain_R359591d7strcmp_Re2d5255akmalloc_R93d4cfe6__this_moduleprom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getintdefault_R858c90dcrequest_irq_Rb9ba6802sprintf_R3c2c5af5_sparc_dvma_malloc_Rac4503aafcp_init_R1cec8342cleanup_module___f_disable_irqfree_irq_Rf20dabd8fcp_release_Rdc48a20asparc_free_io_Rf8afdb8dp t P h @p @x  ` `` p     ,  h        D  D 0 4 d  h  l  !      "          0      "     # d p  x#   $ X$t 0% 0% @ @% &&` l x P| P'  X X ` `  (  (  ( 0)4      *  ,,8-D.h/x/ELF4( @"`   " "`((k(w((h(t(((i(u((" ܔ"@"  XH`a=  oaؐ S?#a`  aaȒ @ $`a  ` ` ,` `*@  *` *  <" * 0@ } ` @   ` @ @6 ` *a "a   `  ` @ ,` `  @ @ ` @ @` !2L "  @ D ` @ @ `  : $ 2/   < +8 <  :@ @   J "* `@*J *     @ ` `   @ ,` ` ,`  ,` " ` ` `   @ ,` ` ,`  ,` ` `2 ` a   ,`*a # a  ,` ` ` = @a` 2 aaaȒ @ $`a `  @ ,`` *@  *` *  <" * 0@ } ` @   ` @ @6 ` *a@ "a   `  ` @ ,` `  @ @@ ` @ @` !2L "  @ D ` @ @ `  : $ 2/   < +8 <  ^@ @   J "* `@*J *     @ ` `   @ ,` ` ,`  ,` " ` ` `   @ ,` ` ,`  ,` ` `2 ` a   ,`*a@ # a  ,` ` ` = @U/a 2 aaaȒ @ $a , * < `*` *  " * @ '<    $ܔ  '< @   @ , ,  , 2 a  ,aĕ* # a   ,/"6aaؒ:` aĒ &a" b4`* * " * `  @@atav`au @ @  b4"@ *` * " * @@b4 " * @*`"@*` "aĐ&b4a = /aؔ 㿘`    !aؙ*@ -%?* !`@  ` @ 2 aĐ    - aؐ aĒ %a"  ? *  ` `m $``"P{`2y`  `@  $`  h* $ $ `@ \ l$  \$ `` , ` `* @`$ `$ $ ` `* @`   , =  , , =$ $ $ ` $@ @?$`$`$`$`$`  4  `  , @ @ `  $ , =` $ $ ?@$`$`$`$`  z4 @ @  `  $ , =   4 , $ `0$ f$ *  2   $ `  ,  4 `@ `8$ `<$ `C, =`@?`H *` €`0 $ `8, =$ 0`8`4 $ `< $ , =,, `0 $ `4 $ `8$ `<, =$ `8, $ `0$ `4$ `8$ `<$ `@   , =`   $ `D$ `D, $  , $  , <, > , ?    @ -  -  - !* *aĔ"aİ ` `} `"v@  `@ 2i"8@  "b@"8&!# " 9%7@``&!& T  &"0&' & P&!& &!X @ < !<* * H &!А"4x6!&!!Ш!А@  8@  < & <@  & @ ) 0/+@  `@?  `@  , *"* 8@ @ ߐ 0@  @ `   & & & (& & & 0@ 2@48 0@ &!8@(&!@&!!@ D <@ &!LP H@ &!` @   @ @ `` `?   ? `    !&!" !"`` @@  !@  @"0t' & & ` @` @ (6 6!^& 6!\& ,x@ @!@`'x!Ȇ!bbb0b b(&!&!`&!l&!d&!&!&!&!&!&!pa@  '' '//'/~//% *?!Ȓ  .!v.!".!j.!.!.!k.!w.!.!.!xԔ @!Ƞ!bΔ P!Đ"& & L& & H#`!!Ĕ"!" !&!"` @`2`?` b0 2"` 2b0@ 㿘 ``@@@ `P 2a 8a@ D Pa@b0`2`01.01socal.c: SOC+ driver v1.1 9/Feb/99 Jakub Jelinek (jj@ultra.linux.cz) mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout%s: Too many continuations entries %d %s: Unknown STATUS no %d %s: Invalid R_CTL %02x continuation entries %s message: %s %s: Unknown LS_CMD %08x %s: Unsolicited R_CTL %02x not handled %s: Unexpected flags %08x burst-sizeswwnsfport#port-wwnsocal_xramsocal_regsSOCALsocal%d: Cannot order irq %d to go socal%d port Asocal%d port BSOCAL request queuesSUNW,socalkernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4!"x  ,L 2)8  =XBXHpP@2Yrcr=lLP  "  ,-,9 D `S g m "4;4XG\m/Pi socal.cgcc2_compiled.versionsocal_memcpysocal_resetsocal_intrsocal_hw_enqueversion_printed.550*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsocalsfcp_state_change_R3eb7f6b8printk_Rdd132261fcp_receive_solicited_Rf9a35a34fcp_queue_empty_R70ffd106.umul__bzero_Rdd42e263memcpyinit_moduleSBus_chain_R359591d7strcmp_Re2d5255akmalloc_R93d4cfe6__this_moduleprom_getproperty_R156810c5prom_getchild_R5ee0a984prom_searchsiblings_Rdc0ba024prom_getintdefault_R858c90dcprom_getproplen_Rff8b6749prom_getsibling_R3b3fe8cbprom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169erequest_irq_Rb9ba6802sprintf_R3c2c5af5_sparc_dvma_malloc_Rac4503aafcp_init_R1cec8342cleanup_module___f_disable_irqfree_irq_Rf20dabd8fcp_release_Rdc48a20asparc_free_io_Rf8afdb8d  p  0 0  P P0 D t         0 , 0H d Ph P           |  p      L L8 < d h l!"  #     0  #     $x%  &  '     (H$P)l| , ,* 0+( 08+D @L @\+h l x''   P P ,   X(, X0 h4 h8H T \-d h p- ` ` . $ @ L X x |/  12344ELF(4(㿘  ` `   ` ƀ &  `B > `  ƀ  6  `B >  㿘@@  ! "` !0"`$!0 "!0"` $ "`  $  $㿘㿘`a,a(>`` 2; 3` " *4 '%@ + 2  < "   @ 0 @  @` " Ԑ 㿘@! ! &!,&!0㿘`@ C*  `@2 ` 2  @@    2`㿘v``"@@ "@@@ C* &`&`&```"`㿘  "@ ` "`^  @@ @ ?8    `B      ` `B*``(#㿘 ,` "` ` @$   2 ``B,`㿘 ,` "`  ` @@ @2 ``B,`㿘@ 㿘@ " ,㿘 D` `@`aP@mP  < *  2@ `" @@  ` @ D` @`  `㿐 6 6` \'$'@?z&@#@` 1@ = '*@ '@ `"| J@ [ @ Q&@`@ `"h J@ G @ =6`@ `"T J@ 3 @ )6`@ `"@ J@  @ '`@ `", J@   @ '@J`  @` 2@`" J@  @ $@` w@6 㿀' @`  ` `" ,@ , `q. -p@  R& D!m$$ $ ` @$ $ -P@ !$  $ !& & . & $& ,.  0@ @ @  ,`Ne#\`&`(  @ S 쀢 4l@ F` `*@`" ,`  &`  , `2` @ - "$   $ ?& ,.  0@ @@@ @"`@ @6 @6 0@ @6 @6 .  0@ 6  @`   `X!$ ?'''''̀'<`@ @ ? 㿘 hD!m` 6 "6 $& d& , $ & 4& <& 8& 0` & @!`6 "& d6 &-6 (,` &6 &,`("6 (; * P 2@ `+  @ 0 * !P(`& d6 "&   & 4& 8 6 $& ,㿐    `h'`D "`5`` ƀ 2 :> '``ƀ  # :> '`" ` "  ƀ   :> @ 2  㿘@@  +  ?  ?`@@J + @@ 耦 ` $L @ 1 $`"< 2 2 @`?`#p $$L  `  2@  ?$㿘  `h   D  2  " L#p"@ 2`?<  2  2   `@ 2  n   `@ 2   L` @ 㿘`D 88? h D` ` `&`P&`@@  L @D  @A` "`  =` ``@ ? 㿘h  D `@ 2`D{? x?@`@ r?P!  ??` 2  ?*  2 @ 6 Q?*   @*@ @. * !P@ %@  $ (@  2`D  @  $ @@@?@ %$ `H $`D$  @`@$ @h@ @㿘 h  D `@  X   !! ` 1?@`@ 2 *?? > $?* P 2@` @&`L6 (` (@. @*`P @ ```" "&`&`?㿘 h  D` ```   "?@`@ 2 ?!8 ?쀢`@@ @&`L $`6 $ `""&`&` 㿘h  D  ` @ 2`D;? 8?@`@ 2? a@ *?`$  (@  ! `D@  $ `H $`D$ `@@$ @$ $h@4$@0@?㾈 h6 `D? ( ?瀢  ` @ $X   !! `$?#b* $#`$#a?0C$#e"Q h$#c?0s0$#d?0m ?@c@_ <` W &0T<  ? E :? @ d& 8א (.$ * * $ @!   ''  @ 2`?'@`* < @@!  !  ?@@@@㿘  4  <`@ @㿘  @㿘  & `& ?`$`@`$`@  2`@ @ 㿘|2 <  !<   ?ദ@?"!<  Ho`|*@#|儔+ *@ @ "`4  㾈@!` `'`' ''@ * ! @㿐 2?` ( ?  `@2  `2    " @@    2 2.  @  2`~?@  $ @u??$  "$`?$ `$ $ ` @@  $ & $   $   ? `$ @ $   "B Ho`'~'?# #|儔+ *@ @ "`@Ho`!!%%|%%* *@ @ # `  ? $ @㿘         2  2 ?&@  $ `$ $ @ @  ???...autofs: dentry == NULL but inode range is directory, entry %s autofs: negative dentry on expiry queue: %s autofs,fduidgidpgrpminprotomaxprotoautofs: called with bogus options autofs: kernel does not match daemon version autofs: could not open pipe file descriptor autofs: pipe file descriptor does not contain proper ops autofs: get root dentry failed autofs: Looking for bad symlink inode %u ...autofs warning: lookup failure on positive dentry, status = %d, name = %s autofs_rmdir: odentry != dentry for entry %s autofs: Out of inode numbers -- what the heck did you do?? GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo4 !+< ( , 36d$ ?!G#R6H b#h6 s%x%'?'2(7D ?  0 4 d l nsE E `E dE |  P{ Wi P](E Tkxphpiuuiiuu8 <e@ P TGX \FuuI I SX `gd p xzc  T c (T< @cP xT c T c TDcH |Tg I I rd N @H Pk \ d a ` |  ]   ( ,] 0  ( ]  (  X  X a I  t i I  j I  S 4] 8 X @t Li X  \] `  hj pu a I  S O O L Tq Xq p[ t[ Y Y     ] 0} <}       fJ  ]$_4J\`_E E {lE xE D{ T TnsrSJdD|xNNNuuM [ $[ P`wl`xsl l Jh^Mu$J\ Hd]h Hp^ J, x0]4 xLNdNw`suTl Xl 8ZH\\O `O O O O U(kPRtO O Lmv8O @O XL|Kuat~k P\hN N4uD H X uxb u hu u a| t  <Dy @ tdlt  | XL T<h     ) ;<QWa,sQ4Qddlt, @4 t |Q( |/<F |0ZlXPL<<<TQT"h$Q5=TatQvlL$p|*7I]  vL44P )d?PX`c`o~ %4CUhw <P l->Pa ulPh`dir.cgcc2_compiled.autofs_dir_readdirautofs_dir_lookupautofs_dir_operations*ABS*dirhash.cautofs_init_usageautofs_delete_usageinit.cautofs_fs_typeinode.cautofs_put_inodeautofs_delete_inodeautofs_put_superautofs_sopsautofs_read_inodeautofs_write_inodeautofs_statfsparse_optionsroot.cautofs_root_operationsautofs_root_readdirautofs_root_ioctlautofs_root_lookupautofs_root_unlinkautofs_root_symlinkautofs_root_mkdirautofs_root_rmdirtry_to_fill_dentryautofs_revalidateautofs_dentry_operationssymlink.cautofs_readlinkautofs_follow_linkwaitq.cautofs_next_wait_queueautofs_writeautofs_notify_daemon___set_bitjiffies_R0da02d67autofs_hash_nukeunregister_filesystem_R85f46c0eautofs_initialize_hash__this_moduleautofs_hash_lookuplookup_dentry_Re3d4e95e__copy_user_R9c5239eb___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7__module_using_checksumscleanup_moduleautofs_expire___atomic_subsimple_strtoul_R20000329.udiv.divis_root_busy_Ra36544d0init_moduleautofs_root_inode_operationsautofs_wait_releasextime_Rf31ddf83autofs_catatonic_modeprintk_Rdd132261autofs_hash_deleteautofs_waitiget_Rf2d3b9b8__wake_up_Rdecddc1einterruptible_sleep_on_Rd492943bstrcmp_Re2d5255a__wait_on_super_R60631b72register_filesystem_R5b7afd0fautofs_hash_enumstrtok_Ree9c1bd4memcmpdput_Rb697b4beiput_R2551b96f__bzero_Rdd42e263cap_bset_R59ab4080__up_R450143b0d_rehash_R6db84970__module_kernel_version.uremautofs_dir_inode_operations___atomic_addd_instantiate_R5a458775fput_R0743d661kfree_R037a0cba__down_R4663c8e5autofs_hash_insertstrlen_R97255bdfautofs_read_superstrchr_R349cba85autofs_update_usaged_alloc_root_R38df921fautofs_symlink_inode_operationsautofs_hash_dputall__memcpy_Rbfaaaa73ELF4( 㿐 2c?  2_?  2[?  2W?!  Q?! @&!&! @@!,  !,?@` !,*?!,@ / '`!,' ! @ !$``&!&!$' @ !$ `&!$&!?&!, @ <8 &! @ &@㿐NJ`` N J@ ` N J@ ` @  8?@! &! @!, '! @ !$``&!&!$' @ !$ `&!$&!?&!, @ <8 &! @ &@㿘#` @ 1$  @ `$ 㿘#` @ $  @ `$ 㿘@ @ 㿘@㿘@ @ /usr/bin/java/usr/bin/appletviewer01.01kernel_version=2.2.14-5.0using_checksums=1.class C_O_READ added --> C_O_READ | C_O_WRITE added --> C_O_WRITE added --> C_O_TRUNC added --> C_O_CREAT added --> C_O_EXCL added C_VNONC_VREGC_VDIRC_VBLKC_VCHRC_VLNKC_VSCKC_VFFOC_VBAD????attr: type %s (%o) mode %o uid %d gid %d rdev %d fileid %d nlink %d size %d blocksize %d bytes %d gen %ld flags %ld atime sec %d nsec %d mtime sec %d nsec %d ctime sec %d nsec %d clstats called with bad opcode %d Process %d entered %s coda_readlink(%s,l. %d): kmalloced: %lx at %p. vmalloced: %lx at %p . kernel malloc returns 0 at %s:%d symlink.cresult %s kfreed: %lx at %p. vfreed: %lx at %p. coda_follow_link(%x/%ld) clstats called with bad opcode %d Process %d entered %s coda_ioctl_permissioncoda_ioctl_open(%s,l. %d): File inode number: %ld Process %d leaving %s coda_pioctlnamei, data.follow = %d error: lookup fails. target ino: 0x%ld, dev: 0x%d ioctl on inode %ld dput on ino: %ld, icount %d, dcount %d clstats called with bad opcode %d cache_inv_statspermission_statsupcall_statsvfs_statshardtimeoutaccesscacheprintentrydebugcodastatfs reintegrate resolve open_by_pathpurgefid noop2 zapdir zapfile purgeuser flush replace signal vget inactive fsync readlink symlink readdir rmdir mkdir rename link remove create lookup access setattr getattr ioctl close open sync root noop totals (%s,l. %d): do_time_statstime: %ld Nasty opcode %d passed to coda_upcall_stats Coda VFS statistics =================== File Operations: file_read %9d file_write %9d file_mmap %9d open %9d relase %9d fsync %9d Dir Operations: readdir %9d Inode Operations create %9d lookup %9d link %9d unlink %9d symlink %9d mkdir %9d rmdir %9d rename %9d permission %9d readpage %9d Process %d entered %s coda_upcall_stats_get_info%-79s Coda upcall statistics======================upcall count avg time(us) std deviation(us)------ ----- ------------ -----------------%s %9d %10ld %10ldProcess %d leaving %s Coda permission statistics ========================== count %9d hit count %9d Coda cache invalidation statistics ================================== flush %9d purge user %9d zap_dir %9d zap_file %9d zap_vnode %9d purge_fid %9d replace %9d  m`Ama $b $c$d$GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1author=Peter J. Braam .symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo4!| ,3rh ?0-G(Rr0 b8hr sxoPaͱxh0f Ig g 0Xg \g {          $ 0(, 04 @ D H L PX X\` Xl pt px~              $ @{dkt 0x| 0      X X      p p$ ( , X d h lx|      {H T X \ ` dl t g g     P  P ` `, p0 p4D L d{   P  P     P  P X X ( , P0 4 P8@ XD XL  g g          r r $H p t      8 8  `  `   g g   x   x$ (, 8r @r Ld h x | x  x 8 8   x  x      x  X $ , 8 < x @ L X P \ d p t x x  X      x   x           $ x ( , x 0 8  < @  D P ` T x \ ` ` d x x  |     8  8    `   `               g g     ( <  @ D  H X 8 \ 8 ` l | `   `          t m t           o   h    h $ (  <  P  T X   h    h          h    h    0  D H  X \ h h l @ t h x | @  P   P  h  p  h   p ~      p  p  $ ,@ D H L P\p tx w     0        0|   h H h H    H  H ` `   H  ( 4 8 H<H L|          , 04 T X \ l         0 , 0 < @ DPT 0l p |        8 P    8$ P0h        4 8 D hH P hTX n          $ ( , 0 4< 0DH 0L \h    y y   x x 0 @8 @<T X l pp x p|               0 0       h h   $ 0 4 8 < @L T \px        <p t  p  p     0 0      P P D H L XP T d h lt X       $ 8          H Ld h l p t|    8 < P PT h\ P`d hhr lr |  g g  x x   h  h LXv `v           0   0 , @ H T X h ` d h h x   h    h r   ! ! ! `! P!$ P!(!, `!4!@ !D p!H !L!P p!X!`r !dr !p! ! ! `! !! `! ! ! P! ! P!! ! ! " P" "  P"" " " "( ", "0 "4 "8"@ "H "L"p "t " P" " P"" " " " " " " "" " ""i#0 #< #@ #D #H #L#T #\ #`#l#t#| # # # # ## (# (##i# # # # ## # # $ P$ H$ P$$ H$ $0$< $@ $L $P H$T $X H$\$d `$l$p `$|j$ $$$ $ $ H$ $ H$$ x$ x$$ $ $ H$ $$ H%% %p %t %{%t %%t % % % % % %% & & &&&, &0 &< &@ &D &H &L&X (&\ (&`&x&&&& & & & & && P& P&& ''@ 'L 'P 'T 'X '\'d 'h 'l'x'' ' ' ' ' ' '' ' ''( ( (  ( (( (  ($(@(H (L (\(h( ( ( ( (( ( ( ( ( ( () ) ) ) ) ) )0 )< )@ )L )T)x )| ) ) ) ) )) ) ))) ) ) ) ) ))  )  )* * *4 *8 *T *X H*` *d*h H*l *p * * * * H* * H** X* X***++$ +0 +4 H+8 +< H+@+H x+L x+P+`+++ + , , ,( ,, ,8 ,< ,@ ,D ,H,P ,T ,d,l,,, , , , , ,, , ,- -<-`- - - - - -- - - --. . . .$ .( ., .0 .4.< .@ .D.\.. . . . . .. . ... / / / / / 8/ 8//(/8/l/ / / / X/ // X/ / //0  0 0  0$ X0( 0, X0008 h0< h0@0L0T 0d 0h X0l 0p X0t0| x0 x00001 1 1 X1 1  X1$1, 10 141< 1H 1L X1T 1X1\ X1p 1t 1 1 1 11 1 1 1111 2 2 2 2 2  2$2, 20 282p2 2 2 2 2 2 22 2 22 2 2 2 22 2 2 3 3 3 3 3$ 3( 3, 3< 3@ 3L 3P 3T 3X 3\3d 3h 3l333 3 3 3 3 33 3 334 4 4( 4,  44 484<  4@ 4D 4x}4 4 4 4  4 4  44 4 44 4 5 5  05( 5,50 054 58 5L 5P 5` 5d 05h 5l 05p5x55 @5 @55 5 66 6 6  06$ 6( 06,64 68 6<6L6X6d6l 6x 6| 06 6 066 6 66 6 6 6 06 66 06 6 6 6 7 77 7 7 74 78 7D 7H 7L 7P 7T7\ 7`7d 7|788$8, 88 8< 8D 8H8L 8p8| 8 8 8 8 88 8 8 8 8 8 8 8 8 88 8 899( 94 98 9< 9@ 9D9L @9T @9\9p 9t 9x 9| 99 p9 p99 9 9 9 999~9 : :  : : ::  :$ :,:@ :D :H :L :P:\:dw:: : : : : :: : :: : : : : :; H;  H;; ;( ;, ;4 ;8;< ;\;h ;l ;x ;| p; ;; p; ; ; ; ; ; p; ; p;; ; < H>> H>, >0 >4 >8 ><>D x>H x>T>l >p > >> > ? ? ? ? ? ?H? p? p??? @ @  @ @ @@  @$ @,@@ @D @T @X @` @d@h @|@@n@@ @ @ @ @ A AA A AA,AtA A A A A A AA A AB B B B B$ B(B, B0 B4 B@ BD BH BL BPB\  Bd  BpBBBB 8B 8CCC(CHC|CC C C C C CC C C D DD D4D< D@ DL DP DT DX D\Dh Dp DxDD D (D D (DD D D D D D D @D DD @EE E0 (E4 @E< (E@ED @E\ E` Ep Et PE| EE PE E E E `E `EE E E EF F F$ F( PF, F0 PF4F< FD FPFdF F F F F FF F F F F FG  G  G  G G8GxGG G G G XG GG XG G HL HPHT HtHHHHHItpI hII hII I II I I I I I II J JJ$JDJdJJ J J 8J PJ 8JJ PJ~J J J `J PJ `J PJK pK pK K  K$ K( K, K0K<KdwK K KK K `K PK `K PKK K KLL L$ `L( PL, `L0 PL4L< LD LHLP L\ `L` PLd `Lh PLlLt 0Lx 0LL L HL PL HLL PL L L 8L `L 8LL `L~L L M `M `M  `M `MM pM  pM(M< M@ MD MH MLMXMwN0N8 ND `NH `NL `NP `NTN\ N` NhNp N| HN `N HNN `N~N N N `N pN `N pNN pN pNN O O O O OOHwO O `O pO `O pPP P  PPP$ P0 `P4 pP8 `P< pP@PH PL PTP~P P P `P P `P PP pP pPP P P `P P `Q QQ  Q QQ, Q0 Q4 Q8 Q<QHQpwQRR  R `R R  `R$ R(R0 R8 R<RD RP `RT RX `R\ R`Rh 0Rl 0RtR~R R R `R R `R RR pR pRR R R R RSS,wSHS` SdSh SS S `S S `S SS S SS T `T T `T  TT 0T 0T$T@~TL TP T\ `T` Td `Th TlTt pTx pTT T T T TTTwUTU\ Uh `Ul Up `Ut UxU U UU U `U U `U UU 0U 0UV~V V V$ `V( V, `V0 V4V< pVD pVHVT VX Vd `Vh Vl `Vp VtV| V VV V V V VVVwWxX X( X4 `X8 X< `X@ XDXL XT XXX` Xl `Xp Xt `Xx X|X 0X 0XX~X X X `X X `Y YY  pY pYY$ Y( Y4 `Y8 Y< `Y@ YDYL YP YXYl Yp Yt Yx Y|YYwZZ Z, Z8 `Z< Z@ `ZD ZHZT ZX Z\ZZ Z `Z Z `Z ZZ Z ZZ Z `Z Z `Z ZZ 0Z 0Z[D~[P [T [` `[d  [h `[l  [p[x p[ p[[ [ [ `[  [ `[  [[ [ [[ [ [ [ [[\w\l]] ]( `],  ]0 `]4  ]8]@ ]H ]L]T ]` `]d  ]h `]l  ]p]x 0]| 0]]~] ] ] `] 0] `] 0]] p^ p^^ ^ ^$ `^( 0^, `^0 0^4^< ^@ ^H^\ ^` ^d ^h ^l^x^w^__ _ `_  0_$ `_( 0_,_4 _< _@_H _T `_X 0_\ `_` 0_d_l 0_p 0_x_~_ _ _ `_ @_ `_ @__ p_ p_` `  ` `` @`  ``$ @`(`0 `4 `<`P `T `X `\ ```l`w``a a `a @a `a @a a( a0 a4a< aH `aL @aP `aT @aXa` 0ad 0ala~a a a `a Pa `a Paa pa paa b b  `b Pb `b Pbb$ b( b0bD bH bL bP bTb`bwbcc c$ `c( Pc, `c0 Pc4c< cD cHcP c\ `c` Pcd `ch Pclct 0cx 0cc c `c Pc `c Pcc c cc c c Hc Pc Hcc Pd ~d, d0 d< `d@ `dD `dH `dLdT pd\ pd`dl dp d| `d `d `d `dd d dd d d d dddweHexe e `e `e `e `ee e ee e `e `e `e `ee 0e 0ee e `f `f `f `f f f ff$ f( f4 Hf8 `f@ HfDfH `f~f f f `f pf `f pff pf pff f f `f pf `f pfg g g g  g$ g( g, g0g<gdwgggg h `h ph `h  phh h  h$h, h8 `h< ph@ `hD phHhP 0hT 0h\hd hp `ht phx `h| phh h hh h h Hh ph Hhh ph~h h h `h h `h ii pi  pii( i, i0 i4 i8iDitwii i `i i `i ii i ij~j j j$ `j( j, `j0 j4j< pj@ pjHj\ j` jd jh jljxjwjj k `k k `k  kk k k$k, k0 k< Hk@ kH HkLkP khkt kx k `k k `k kk k kk k k k kklwl l l{l l llm m$ `m( m, `m0 m4m< mD mHm\ md m m{mm n `n n `n  nn n  n$n, n8 `n< n@ `nD nHnP 0nT 0n\nx~n n n `n n `n nn pn pnn n n n nnowo8 op otoo o `o o `o oo o oo o `o o `o oo 0o 0pp p `p p `p  p$p, p0 p4p< p@ pL HpP pX Hp\p` pp pt p 8p pp 8pp ppg pg p p pp~p p p `p pp `p ppq pq pq q  q$ q( q, q0q<q q `q pq `q pqq q qqql ql r r r$r r r rl rr s s s ss s `s 0t `t 0tt Ht Ht$tTt\ th ptl `tp `tt ptxtl t t tt t `t pt `t ptt t tt xt u `u pu `u  pu$u, u4 u@ul ux `u| pu `u puu u uu Xu u `u pu `u puu v v v,~v4 vD `vH pvL `vP pvTv\ pv` pvhv| v v v vvv~v v `v pv `v pvv pv pvv v v w wwwP w\ `w` pwd `wh pwlwt (w| (www Xww Xw xwww w `w px `x pxx x xx, x0 xd xx x|x x xx xx|xxxyHx{xyx}x{x x x x x x x `y y `y y y yy y y(y<yH yL y\ `y` yd `yh ylyt yxy| y y !y !y y y yy y y `y y `y yy ! y ! zz z z z z, z<zL zX `z\ z` `zd zhzp !8zxz| !8zz z `z z `z zz !`z !`zzz `z z `z zz !{ !{ { { { {( {, {< `{@ {D `{H {L{T !{X !{\{h{t{ { `{ { `{ {{ !{ !{ `{ { `{ {{ !{ !{ { { `{ | `| || !| !||$|, |0 |4 |D |T|d |p `|t |x `|| || "|| "||| `| | `| | | | | | } } `} } `} } }( "0},}0 "0}8}H }T `}X }\ `}` }d}l "@}t}x "@}q} `} } `} }} "} "}} } "} } "}|~ ~ ~ @~  "~( @~0 "~4|~< @~@ @~\ "~` "~d "~, 0 < "@ "D "H "LT "X\ "t x  " " " " " "   " " " " # #   " " " "$ #((, #(@ D P "T "X "\ "`h #@lp #@   " " " " #X #X< T@ TTxX\`dhlptx #p #p #x #x # # # # # # # # # # # # # # # # # # # #(0 $08 $0<D $PL $PPX $p` $pdl $t $x  $ $ $ $ ~   % $ %  $$, %8 %<@ H T %X $\ %` $dl %(t %(x %@ %h %@ %h  % $ % $ %x %x$ , D{T X   % $ % $ % %  % $ % $ % % 0 $4 %< $@D %H L X %\ %` %d %hp %x %| ~ $u0H L X &\ & d &hl & |  & &8 & &8   &H &8 &H &8 &X &X  &p &8 &p &8 0 &4 &< &@D &L P h{   &H & &H & & &  &H &  &H & & $ &8 &H< &@ &HD &HP &X &\  & &H &H & & &  &H & &H & ' '$< @ DX \ `t x |     * *  * *  *0 *0 @ *@DH *@X \ ht  H\l  4 8 <| \ h *px|| *p  + + + + + + + +| + ,$ +(|, ,@ +D ,(L +P|T ,(d h +l ,pt +x|| ,p  , +f f | , +|X \ h ,l +t ,x| +  ,| ,   -P -P |Tr Xr d|r       H H     $ ( 04 8 |< |H XL XPX |h |l |x | |       | t  T$,D!L!P"lT#X!`%px4@<A\*0%/21l-4 +4h6 ,\ClhxEPFtDTDxx' ''(',<T'Xh'''h'X\'l*)))))))))p)`)P)@)0) ))((((( ((((p(` (P$(@((0,( 0(4(8'<'D'T'''h $T'Xdhz      T(TL9I\Yl<|   || \ T` | @| 4!8'!6"lH#[!j%v4| %@< A\*0% /21l-4 +46+<`|> CEC SEP$bFtLrD| Jpl| }< @< | ,| DD4 x|& 8/:XXCLH`_| |o (\NxH"d4HYg{pD,DPp$:L]Xj}<s;Lh48) ~L l  %# l2R`g0TyP<,\8chk\*/B 8XNJ\k@DxPX~$At$x,<@TfTtb ,vL4T  1 C Z8l lP D T   0 IT _   D VGD aIP w   D ( ,P [  p ! ? cU oT4 zl@ P nl    a|p Pd   . tX 8|< M h     @   R  3 N ai` nXh {@8  l0  D  P H ~<-;Sc~\L<h):K`tpPDIh8Xd<6psdev.cgcc2_compiled.coda_psdev_pollcoda_psdev_writecoda_psdev_readcoda_psdev_opencoda_psdev_releasecoda_psdev_fops*ABS*cache.ccoda_ccinsertcoda_cninsertcoda_ccremovecoda_cnremovecoda_cache_createcoda_cache_findcoda_flag_childrencnode.ccoda_fill_inodeinode.ccoda_read_inodecoda_put_inodecoda_delete_inodecoda_notify_changecoda_put_supercoda_statfscoda_read_superdir.ccoda_dentry_revalidatecoda_dentry_deletecoda_createcoda_lookupcoda_linkcoda_unlinkcoda_symlinkcoda_mkdircoda_rmdircoda_mknodcoda_renamecoda_readdircoda_venus_readdirfile.ccoda_readpagecoda_file_readcoda_file_writecoda_file_mmapupcall.ccoda_upcallcoda_linux.cs.484s.487symlink.ccoda_readlinkcoda_follow_linkpioctl.ccoda_ioctl_permissioncoda_pioctlcoda_ioctl_opencoda_ioctl_releasesysctl.ccoda_tablefs_tablesqr_rootcoda_proc_modcountfs_table_headercoda_upcall_namescoda_upc_commcoda_permissionclear_inode_R5a5bfea1venus_setattrcoda_downcalljiffies_R0da02d67unregister_filesystem_R85f46c0eshrink_dcache_parent_R9f4de3e6coda_sysctl_cleanget_super_R20168d42coda_replace_fid__this_moduleread_exec_R1caed9e3coda_fs_typelookup_dentry_Re3d4e95ecoda_super_operationscoda_load_credsblkdev_inode_operations_Rb9db2edccoda_symlink_inode_operationscoda_cache_inv_stats_get_info__copy_user_R9c5239ebsprintf_R3c2c5af5venus_rmdirkmalloc_R93d4cfe6coda_f2sstack_top_Ra6cab6a7kfree_s_R06d9dd5dcoda_releasevenus_fsync__module_authorcoda_iscontrolinit_coda_psdevgeneric_file_mmap_R5a6dc27f__module_using_checksumsinit_coda_fscleanup_moduleregister_sysctl_table_R8e67bc79___atomic_submemcpycoda_upcall_statscoda_permission_stats_get_info.udivcoda_iattr_to_vattrcoda_upcall_timestampingprint_vattrreset_coda_vfs_statsvenus_linkcoda_upcall_stat__pollwait_R0019e686venus_pioctl.divschedule_R01000e51init_modulevenus_rootfidcoda_callstatsproc_fs_codacoda_hasmknodproc_root_fs_Re244973ais_bad_inode_R25a409eacoda_hardcoda_cnode_makecoda_purge_dentriescoda_isrootcoda_revalidate_inodeget_time_averagecoda_cache_clear_inodevfree_R2fd1d81cdo_reset_coda_vfs_statsvenus_symlinkcoda_fid_is_volrootchrdev_inode_operations_R3f3ee2e9venus_getattrprintk_Rdd132261coda_permission_statget_time_std_deviationgeneric_readpage_Ra30f6c08unregister_sysctl_table_Rf62b892acoda_cache_checkcoda_access_cachecoda_dentry_operationscoda_fid_is_weirdcoda_dir_inode_operationsproc_coda_vfsreset_coda_upcall_statsiget_Rf2d3b9b8__wake_up_Rdecddc1ecoda_flag_inode_childrencoda_restore_codafilevenus_removecoda_crossvol_renameproc_net_inode_operations_Ra76a554evmalloc_Rd6ee688fcoda_fsynccoda_prepare_openfilecoda_print_entrycoda_timeoutcoda_flags_to_cflagsproc_coda_upcallcoda_super_infocoda_file_inode_operationsvenus_create__wait_on_super_R60631b72coda_vattr_to_iattrregister_filesystem_R5b7afd0fproc_dir_inode_operations_R28b66bbdvenus_mkdirvenus_opendo_reset_coda_permission_statscoda_ioctl_inode_operationsvenus_statfsregister_chrdev_Rcc8411c6dput_Rb697b4beiput_R2551b96fvenus_readlinkvenus_lookupcoda_vfs_stats_get_infoinit_codacoda_file_operationsshrink_dcache_sb_R1b94c34eproc_register_Rf7ecbcfd__strncmp_R8c5ff0fd__bzero_Rdd42e263proc_unregister_Rc5c75fc4coda_cred_eqdo_reset_coda_cache_inv_stats__up_R450143b0__namei_R6460d268venus_releasemake_bad_inode_Rd04e4f12do_reset_coda_upcall_statsd_rehash_R6db84970venus_accessvenus_renamecoda_cache_enterunregister_chrdev_Rc192d491coda_fid_to_inodeproc_coda_permission__module_kernel_versioncoda_cnode_makectlcoda_fideq.uremcoda_f2s2proc_dointvec_Rec91eea2___atomic_addd_instantiate_R5a458775kfree_R037a0cbareset_coda_cache_inv_stats__down_R4663c8e5init_fifo_R4328a40fcoda_cache_clear_creddo_time_statscoda_flag_inodecoda_vfs_statcoda_dir_operationscoda_cache_clear_allcoda_upcall_stats_get_infocoda_sysctl_initstrlen_R97255bdffile_fsync_Rbb5b5fe7coda_cache_inv_statreset_coda_permission_statsd_delete_R4a8b07d1coda_debugproc_coda_cache_inv.umulcoda_inode_grabcoda_cred_okd_alloc_root_R38df921fcoda_opencoda_ioctl_operationsdo_gettimeofday_R72270e35__memcpy_Rbfaaaa73ELFL4(㿘@ 㿘`    €1` "$`@"'`>`$>`(@  H@  @ H $& $` (``* @b& $&@㿘   " €0  " @"0@㿘` `"  ` " €0"2@` @0 @@㿘 ` `$" 0 "2@` @   @`(@ @㿘 ("  "2@ @ 㿘  ," € "2@`  ` `0 0 "   x+  @#@@㿘 "  \ 4 \ * G  .` .`.`2  : ` H<` @@ 2<  @ @ 2  G@ @ 0 G   a$ !@ ?# ?*  *@2@ 2@ <, # ) ` a$ !@ ?#  *2 ?c   $ ! $ a@ `@ @ @ *`2  @ @ * @ o4?k  ?#?*  .@2@ 6@ !'#@  `?#* *`2 @ !3@ .  *> (@?*>  (@ @  F @ , H L@@ "`$@$@   @ ϔ" $@ $@@ F`@ & H@@   2  `  " `!  2   2   4  $   "  "  2 㿘 ` & @2 ` 2 `2 `  @`@0"`#` ` 2@2@"`"`"` " "`` @ 2`` "2@``2@ * 0"02㿐 '! `'@ h?@?'  '@㿘 h DL "  @€0  "   < "  2 2 2 @6  @@@@  @? 㿘 ^   h@?? 2` h `G  /?## @@0@ 3? h@`, h@ & `& @@ h?" h h@  ht?  "t h G` 2D@  hD? @" & @ h@ ?㿘@.@!. `@2/ ?.`  :3/`?@( 0/ ?@0/ @/ / (@ `2Ӻ``2Ϻ`'/  @    @ @ `   2  H'D h''Ȯ'H: '''L''T2 2    '''  ؀e܀@(cDԒؔԚЀ Ѐ"D $":    ̒` B ?'' D@ ?BDд J ` ʀ` ŀ  ` А @ )' @    / ,* * /@  @  @  @`@-* ԒؔԚЀ Ѐ"D $":    ̒` B ?'' D@ ̀   ?` J@?L @ `  G C @= `  ` ` @ *`2 @   ` 2     *  * : 2+@ ?9@+@ :   А .*@  А  *  * ( :   ``Ѐ퀕LH@ 1HL "*؀ր@!LOL ĀH@  Hy ظ/  TB = b?@D%@@ D䀢 "%  : ?԰?@ȁ@'D h'L''P''T2  2 ` ?`''  7 (Ā "   L`P  & ``B ?B  >`2 `  Ā 2  '? ` "'?  "D $":    ` B ?? D@ ?ahKU ` 2O`I  DK ? ` ; :h" 2  @  ?>`@03 @    ? ,* * @  @  @  @`@-*  "D $":    ` B ?? D@ ?ހ`  ? ? K? `   `2    ` ` @*`2 @   ` 2  2  ..     *` ` * : 2.?9@.:     ..    *` ` * .:   ]Đ`* "'`@ D`@ ` `@ "@ `@ `T `*LP耠В@!M`ѐ `@@ `LPП  >`>``@@  㿘`  㿘<%  !  *` *` ?N@ .  N@ .N` .@<H  `   @< @   ,@ `  @ 4` @ `$@` :$`  @ `@<`   .   :2 6 . `   ,` `   4`    @<   .   : 6  㿘" ""<5`h< ? 6  6  `  6 ?   1   ? X  㿀   ?'#I! FJA = ;L``JJ`  JJ` `@  "JL   JJ`  JJ` `@  "?쀢 耢" $":    䒂` B ?'' @?쀢`@h㿐`h  ?  & J@  @ ``2 2X  "`" $"@:   ` & B  ? '@4`  G +?@ $ "`" $"@:   ` & B`?'@ &  h@" @@ @&@@ ``*`"`&`@ `,x" @&@ @x```,```"@  @``h@ ?`"<   ( @ ?`,: 42װ 2 ϰ @*2  a@: 'h` aa:  ( 2` `Ѐ  ` 2 `* @ "  4 'oh'`,"@z쀦@vl* @ "q"@  ' @ @'hN '  @@ " ! $"@  `Ѐ $ 4  <`@   @> B>%@`, : >@ @+ `B :>`  <  `*耦@@`,"@  l. @ .2`h? "   $`0 & (&@㿘  `h   D "`П0`Ѐ  "0@㿘  h@ ? " " H "<   ( @ ?"" $? , :>2  B4    #  Ӱ? @@ "* 2` @ :  @  " !"@ 8  2",< @ : C   @ ?@$  <`@  @$9@"$ a"`  * `  $  <  ` *` *`:   +@`? 2+@ `?  ‣ $@ $ a @<`@ B >,: @   `$,@@ @ @2Q`2N ` $4$Ȁ$8@&@㿘 " h` "`D@ 0 ,*` ?@ @   & @    "  h@00*`@  "" ܄@ "@ " Ԅ  "@" ܁" 㿘@2`@2` `*   ?`8h2 `42@ ?ā㿘&@ @? &&& h 6 @ & @ΐ@@㿘& ,@@㿘@  "`"㿘 "  G@ @ G @@  @$ " @& 6 ~ " @&  " @&  `@` @`  `㿐 n b/ / 7 -? 7 h*@  *  *@' ;7 ' 7 ' 'H#@ &3@` Ѩ @ ='  - '`@ 3 0`J`"J  2 @  / @`  r/ @`  n/ @` 2  s|/ `@ 3 0`J`"J  2 @  a/ @`  bW/ @`  tN/ @` 2H  aE/ `@  `@ #`@  `@  @`  @` 2   ' `@ `" J@  @ 7JY``@ `" J@ ΐ @ 7 JC``@ `"ٰ J@  @ 7 J-``@   2ð  &`@ `" J@  @ H#@J@ 2   `@   2  , `@ `" J@ f @ &J@ 2y vt0Ғ`@   2i   d' `@  @ 7 J@ 2Q * @2`K`@ (`$L@  J ,'J` .@   ' @, @  `@ ` `@  `\  d@ ,, 2-  @` 4㿘 h & А & & & &  x6 & z6 (& `"& D |: ! 6 " & d G 2&  ` & " D D ,* & ,@? 2 D  D @  D T* & , D ,*  ? @& <@ D& @& & & 8& 0& 4& @ 6 $㾘//0"/'( & &  @`  ` 2& & `* & @` * @b'(@  0 h 7 '#\,($y -("$(&` x@ @  (@( .   & $ & $@@ .  0@  @ 2$@"` @ "+?c  2 *` < @6 D`. F`  * 2@ 6 H` ]c`$Y!? * * 2` 2 @& L`, *  *@4 2@@ & ``0  * 2  @!& d d   @ @$c `? *`*  2 2P\ "r@?@ `` @ @*`* @ 2 2` & t *` 2`*  @?& L& t & ``c@ L`  2`*  @& P `@   4 *2 P  6 T?@ $@& X`@ c * 2`  ?` **` 2 2 @`   X" ` `8 `" @@ & \, 2/o(   . G L  G@*  F T 2  \    2  ` " ` 2 @ @(("& $2   . `@ ?@ .`@ 0`$ <` D쀊 G#\  X 2  #`@`c P2 `(#h T#\ X#`#d`  D #l F#p H L ` t#t@#x(@  ` \ ?& \`e!D& $& h& l& p!`@@  &  [@6 ~&  (& $  @  &  0@& @ ( $ h 4 $ z@@ & ,A.  & `@  7"@ @ @ @@ ! @ @@ `@ @ 6 @&  @`   `X   8B@ t? \   @? "` \   & t@ D' *`  $' \'''''! '<`@ @ ? 㿘 h DL "   <€!  2   " @@@  @? HJJ J J@ `J J  J 㿘 h & А & & & &  x6 & z6 ( "& D` "P |N@ K@ ` G "F |&  |` : ` ! !m@ h6 " #?& d`c * 2` & G 2  ` * 2` * &  @&  6 $`y& ,"w`  h D ,*  & ,@? <2 hg`  |:  h "   a  a 2   ae` `  a a2 am @6 " "    "  $(  @ +`  & d`#?c * 2` & G 2  ` * 2` * &   & 6 $`? **` 2 2 & ,`  ` 2 "L  "& L @c& ` `.&  D ,*  ? @& <@ D& @``  @ `* 2*`2 @@ & 0& 4 ( ``  @ `* 2*`2 @@ & 8& 8` & ́㿘 h   Ԁ`@<` 2  !@ @@`0p@@  "<  `$*`  , $ ?,  ,?# ? **` 2 2 $  "     ,  Ƣ#  2`*  4 V Ē  *  2 *4  4@      2`** 2  4 4 h 8 @       ϗ*2`* 2  4 , 4 @ @㿘  T@ " @`2  % Q``x@2?``z@2 ??`"@ ?  `2   -@ h "  2 " "  " "<  <!  " I4 " "<`| *@ a:`*` *  * 4 " 㿘@㿘  ` &  !@ @`@ 㿘. >  b"3  t a0)() J `# N@ K@```N`J ``N`J"@` K   @  㿘!   #@` ` $ 㿘"` @ 㿘 l  @ h l` & l㿘 h& l@ 㿘 d@< 2`$@ 0. !?c ?* *2 @ @2P\@ "r@? @ t @ @*`* @ 3 2`  @ @㿐 h `G `D  "ް `t "ڰ @`\ `p@ @? "`p &`p`p@ $`p@$`t `G  /?##@`t??$`t `G @@ '` 'c@ '@?['  `@ ? & & @?@`X`@\ € @@@%6# @3@ 2 $@`@"@ @ @ @@   @  @@`$ @ @< "  & @ , @` ,  & ,-  `& ,@㿘@ "? h@ 㿘.`0. 000?+5()  &( . .(`@(`((8@` $  E(5(&. &@. .`(1㿘``*" `* &.@ <4  < @ <@ <* @.@ * T6@@a1@!m   + @ *  *  :`@@ ? +  `& @ *  *  :`@$ ;   ; `;4 *@  **`@ `*#@ +  6㿘 h'``@&@<` ? 2@? B>@@ &@ a$,  :`& ' 㿐 @' ?$     % LN@ ` L N@ ` L N@ ` @' J` C L ? ` ; :` 6` 2&$ L + ` ' %? `G  @ * 2` *   * 2`  L  `  ` `# ?.`' `G* 2`   @ * 2` * `\ @0'@  `   l  @?㿐 T #\@I & T 2 * P?㿐\'"(? D 6@ X #\$ & D  @? ހ@?㿐\`     0#\㿈 "<  " @ `G 2 h@ h #\ ̚  '`1@-2 h "'#\  `@`2 h h `G "`` h#\  쀦``@㿈 ' h `G      > 􀢠"  2    #\ h E 㿐 #\ hg 4 8 0 `@ 2 / p ,&@`, "  # " : 0?''<"!<@@!< @`p&@㿘   h    L€%` !?` `,?@< "  " ?    # 0@  &`( 㿘 ``h "  P €@ ?㿘 `  *  *` @@@`?*# " @ 0 ݖ@ ?㿘 ` `*@  @ `@$    @ ?㿘  *@ " 2  @ ?  "@ "@ @0*@ 㿘 `?`@ `@  ` `N@ `@`N@   .  "   @ (  .  @?  . @ "   @ "    .  ?@ ????????????????bread in fat_access failed 2nd bread in fat_access failed FAT cache corruption inode=%ld fat_free: skipped EOF fat_free: deleting beyond EOF... .. fat_file_read: inode = NULL fat_file_read: mode = %07o fat_file_write: inode = NULL fat_file_write: mode = %07o FAT: fat_truncate called though fs is read-only, uhh... ,checkrnsrelaxednormalstrictconvbtabinarytextautodotsnodotsshowexecdotsOKyesnouidgidumaskdebugfatquietblocksizesys_immutablecodepageMSDOS FS: Using codepage %d iocharsetMSDOS FS: IO charset %s cvf_formatcvf_optionsDirectory %ld: bad FAT MSDOS: Hardware sector size is %d fat_read_super: Bad fsinfo_offset fat_read_super: Did not find valid FSINFO signature. Found 0x%x none[MS-DOS FS Rel. 12,FAT %d,check=%c,conv=%c,uid=%d,gid=%d,umask=%03o%s] ,bmap[me=0x%x,cs=%d,#f=%d,fs=%d,fl=%ld,ds=%ld,de=%d,data=%ld,se=%d,ts=%ld,ls=%d,rc=%ld,fc=%u] Transaction block size = %d cp%diso8859-1get root inode failed VFS: Can't find a valid MSDOS filesystem on dev %s. FAT bread failed VFS: freeing iocharset=%s EXECOMBATdev = %s, ino = %d msdos_write_inode: unable to read i-node blockFilesystem panic (dev %s). %s File system has been set read-only Invalid conversion mode - defaulting to binary. FAT bread failed in fat_clusters_flush fat_clusters_flush: Did not find valid FSINFO signature. Found 0x%x. offset=0x%x File without EOFgetblk failed file_cluster badly computed!!! %d <> %ld Odd directory sizeDirectory sread (sector 0x%x) failed FAT errorNon-directory fed to m_p_i.. MSDOS: Error while reading an mmap file %d <> %d fat_readpage called with no handler (shouldn't happen) register_cvf_format: version %d already registered CVF format %s (version id %d) successfully registered. register_cvf_format: too many formats unregister_cvf_format: format %d in use, cannot remove! CVF format %s (version id %d) successfully unregistered. unregister_cvf_format: format %d is not registered <0>FAT FS/CVF: This is a bug in cvf_version_use_count dec_cvf_format_use_count_by_version: version %d not found ??? autoloadcvf_autoloadCVF format %s unknown (module not loaded?) CVF detection ambiguous, please use cvf_format=xxx option fat_add_cluster_R0d009818fat_add_cluster1_R3a91f53cfat_bmap_Rb006ff7dfat_brelse_R3ec91dcefat_cache_inval_inode_R9811f9f6fat_clear_inode_Rc13fbb87fat_date_unix2dos_R83fb36a1fat_delete_inode_R04cd6908fat_dir_operations_R2def0832fat_esc2uni_Rdf8b5a1efat_file_read_Rd5f698f9fat_file_write_Ra19f72dafat_fs_panic_Rc1b7485bfat__get_entry_R29d9211cfat_lock_creation_R4d85e995fat_mark_buffer_dirty_R360d4447fat_mmap_Rb280ecd7fat_notify_change_R83c01590fat_parent_ino_R6329f453fat_put_super_R7eb37e11fat_attach_Rd32f4da7fat_detach_R2d670d32fat_build_inode_R9c12c563fat_read_super_R8a588397fat_search_long_R93a3370afat_readdir_Rea74ddf3fat_scan_Rda44ce5bfat_smap_R5fd51af3fat_statfs_R95635c7dfat_truncate_Rb19f7a3afat_uni2esc_R7afa41a4fat_unlock_creation_R9e32cc5bfat_write_inode_Rbbd8505fregister_cvf_format_Rdb6e2d5aunregister_cvf_format_Raaefafcafat_get_cluster_R991482c9lock_fat_R0c7e275eunlock_fat_R72f60785fat_dir_ioctl_Rce06a82ffat_readpage_Rd52cf34bfat_add_entries_R5935688ffat_dir_empty_R7aaa8b13TXTME HTM1STLOG C H CPPLISPASFORF MAKINCBASBATSH INIPBMPGMDXFTEX;Zx0N0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+->?  !"#$%&'()*+,-./0123456789:;<=GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table__ksymtab.rela__ksymtab.kstrtab.data.rela.data.bss.comment.note.modinfo4e!l  ,f3$ ?f GpxRh bqPl@ {rhw00  {8{8b}~h2~N dqT`HW`fx)oQ      0H0Xl0      L d h    @ ` d @ h   p y +      ,y y   `   ` {  x  x V y $ x T |k  % % ",<L@d  < "0Hd p t  H0@s Hs s  l s ls s dlts s s s @ 8 L 8 Xs \s  8  8!$ !, !d !p !! ! "0""#$$$$%(|%lt% %% % % &&X&[ &[ 'l0''|( s (s (,l(ps (s ()$)\ )p )t **, *0*4 *  *  *+X+h+,4,X,s ,s ,l,s -s -.x..$.0.X .` .x. @.. @../x/ / /T /t / / 0$0X0l\00000S01(1P1X.1d1|111g 1g 1g 12 22 2!2 2 23 3 3( 38 3< 3@!3D 3` 3h3l 3x 33 3 33 3 33 3 4 4 4 4!4  4< 4D4H 4T 4h4l 4x 44 4 44 4 44 4 44 5  55  50 5458 5D 5X5\ 5 5 55 55 55  664  686H (6p6 (66 06 066 867H 87L7\ @7| @77 P77 P78 `80 `848D 8X8 p8 p88 8 88 9q9 09( 90 949L 9P9` 9| 99 99 :( :< :H :y: :: ;; ;<;dg ;xg ;; ; ; ; ; ;; 4 >X  >\>`  >h> H>> H?$ ?H ?p ?e??e@@ @@@ATA`A A AAAz Az A B BH BL BT BX B\ BhB B BB PBB PCP pCT pCXmC`CvC xC xCCvC\D D,*DHz DPz DX D` Dt DxD| DDDD DD DDD D DD DEE g E,EVEyEkFLs FPs FhlFG GG4 GP GT G` H H H$ IILyJ J J J J( J< JD JH JPJT J` K4KdKl KKL<LT  LXL\  LhLp 8Lx{L| 8LMMN,N8NXOO^P hP P hPP, P0P4 Ph Pt P P P QQ Q( dQ, dQ< `Q@QD `QH dQX dQh dQl `Qp dQt `QxQQQQ RR R\ R` RdRRSVS(S<ySlSkSySSkT(pTDyTyTxT TTU UU0U4 U@UPU`U|UU U UU pU{U pU+V V${V( VXxVpVV hV hW` Wl Wx W W W WWXXX X<XLX hY hY hY@ hY| YYYYY Z@Z\\]T ]x ]y]{] ^x ^|T^ ^^ 8^ ^ 8^ ^_D_`"a(Xa@ HaD HaHa`b b b b$xb, b0 b` bp bb bz b b bz b bz bz b cc c( c0cL (cPcT (chz cl ct cxz c Pc c Pcc c c cdz dz d d d< dXd\ dp @dtdx @d d dd dd ddz ez ez e(eL eP eTedz e ee d <Xp$,4<$DDLT\ <d |l(x-0\4  Ph $$(,,0448<<@<DDHLLPTTX 4\\` tddh(llp-(tt N $#(,048<@DH'LPXTX`\`{d hlbptx|& Y-]h cwOa_ u V$(k,04/8i<@DHL w,DXH`X~h| @X` 8D\X``p~ Xi `     #,4 D J T Z g s{t8$@< < X< $% / %G442 B:TP, YGPaOhF y` d h@ Z0\d]H^T ``bbX & F0l Q8) =Zo/$  * x " h<H\p0HbDXHQ&N[Xl~L  ,3>  JOXaXq cdO'<?(c`H8vP   Q$@<Xz@ ^T`P    D gO s@     b ` "` -1 E/LL Z@ }   F    ! P Ax e  P 8 @ x h 4X EEP@ Z|P t   ap X    G k | .   V $  5?Qd$]|/<   ( $<WX0$rp dX0 :Ma8@Vl,NH82L0LQ_   9Q Z( |P R("  LZ  yh  X"(L`mpH  ;T ` t"0DPf  0IP@Wc{h _/8 Yt'Bp  l   )7]0  @8 fatfs_syms.cgcc2_compiled.*ABS*buffer.ccache.cinitialized.216cachefat_cachedir.cfat_dir_readuni16_to_x8memicmpfat_readdirxvfat_ioctl_fillfile.cfat_file_operationsfat_file_operations_1024fat_file_operations_readpagefat_prefetchfat_file_read_textinode.cfat_inode_hashtablefat_fill_inodeparse_optionsfat_read_rootfat_sopsis_execmisc.cascii_extensionscreation_waitcreation_lockday_nraw_scan_sectorraw_scan_rootraw_scan_nonrootraw_scanzero.334mmap.cfat_file_mmap_nopagetables.ccvf.c__kstrtab_fat_brelse_R3ec91dce__kstrtab_fat_readdir_Rea74ddf3__ksymtab_fat_date_unix2dos_R83fb36a1mark_buffer_uptodate_Rd0ee0e0a__ksymtab_fat_write_inode_Rbbd8505fclear_inode_R5a5bfea1panic_R01075bf0fat_inode_locklock_fat_R0c7e275e___set_bitfat_file_read_Rd5f698f9__kstrtab_fat_parent_ino_R6329f453__ksymtab_fat_scan_Rda44ce5bread_ahead_R0abb7b07get_empty_inode_Rce23dbfffat_detach_R2d670d32init_fat_fs__kstrtab_fat_statfs_R95635c7dfat_file_write_Ra19f72da__kstrtab_fat_scan_Rda44ce5b__kstrtab_fat__get_entry_R29d9211cfat_search_long_R93a3370a__ksymtab_fat_esc2uni_Rdf8b5a1e__memmove_R60e2f255set_writetime_R8e167c19__this_modulefat_build_inode_R9c12c563fat_readpage_Rd52cf34b__ksymtab_fat_dir_empty_R7aaa8b13unlock_fat_R72f60785__copy_user_R9c5239ebsprintf_R3c2c5af5__ksymtab_fat_unlock_creation_R9e32cc5b___clear_bitfat_cache_lookupkmalloc_R93d4cfe6__ksymtab_fat_attach_Rd32f4da7stack_top_Ra6cab6a7fat_ll_rw_block__kstrtab_fat_get_cluster_R991482c9load_nls_default_R97fa0c04fat_readdir_Rea74ddf3__mark_inode_dirty_R19c75706fat_accesscvf_formatsfat_fs_panic_Rc1b7485bfat_is_uptodate__ksymtab_unregister_cvf_format_Raaefafcageneric_file_mmap_R5a6dc27f__module_using_checksumsfree_pages_Rb5136506unregister_cvf_format_Raaefafcacleanup_moduleload_nls_R0bc8f3b3fat_dir_ioctl_Rce06a82f__ksymtab_fat_clear_inode_Rc13fbb87fat_scan_Rda44ce5b___atomic_submemcpy__wait_on_buffer_Ra773ade4__ksymtab_fat_mmap_Rb280ecd7fat_file_inode_operations_1024__kstrtab_fat_delete_inode_R04cd6908simple_strtoul_R20000329fat_lock_creation_R4d85e995insert_inode_hash_R6aecc9f5__ksymtab_fat_put_super_R7eb37e11.udivset_blocksize_Ra842722a__kstrtab_fat_bmap_Rb006ff7dfat_parent_ino_R6329f453__brelse_R01c3a101fat_file_inode_operations_readpage.divglobal_event_Rcaf51008__kstrtab_fat_search_long_R93a3370a__ksymtab_fat_parent_ino_R6329f453init_modulefat_uni2esc_R7afa41a4fat_smap_R5fd51af3unload_nls_R88dfd7c2__kstrtab_fat_add_cluster_R0d009818xtime_Rf31ddf83register_cvf_format_Rdb6e2d5a__kstrtab_fat_detach_R2d670d32fat_getblkfat_put_super_R7eb37e11fat_attach_Rd32f4da7__kstrtab_fat_file_write_Ra19f72daprintk_Rdd132261ll_rw_block_Rdc206727generic_readpage_Ra30f6c08fat_bmap_Rb006ff7dfat_dir_empty_R7aaa8b13__ksymtab_fat_smap_R5fd51af3inode_change_ok_R7b6d21fffat_cache_inval_inode_R9811f9f6__kstrtab_fat_build_inode_R9c12c563__ksymtab_lock_fat_R0c7e275e__kstrtab_fat_uni2esc_R7afa41a4__kstrtab_fat_truncate_Rb19f7a3a__ksymtab_fat_add_entries_R5935688f__ksymtab_fat_mark_buffer_dirty_R360d4447__ksymtab_fat__get_entry_R29d9211cfat_set_uptodatefat_statfs_R95635c7dfat_file_inode_operations__kstrtab_fat_write_inode_Rbbd8505f__wake_up_Rdecddc1e__kstrtab_fat_read_super_R8a588397fat_mmap_Rb280ecd7__ksymtab_fat_file_write_Ra19f72dautf8_wcstombs_Rd9716c9b__kstrtab_unregister_cvf_format_Raaefafca__kstrtab_fat_clear_inode_Rc13fbb87sys_tz_Rbafebf71__kstrtab_fat_date_unix2dos_R83fb36a1fat_truncate_Rb19f7a3astrcmp_Re2d5255a__ksymtab_fat_build_inode_R9c12c563date_dos2unixcvf_format_use_count__ksymtab_fat_add_cluster_R0d009818fat_breadfat_unlock_creation_R9e32cc5b__ksymtab_fat_detach_R2d670d32__wait_on_super_R60631b72fat_iget__ksymtab_fat_read_super_R8a588397fat_dir_operations_R2def0832iunique_R96b7f017__kstrtab_fat_add_cluster1_R3a91f53cfat_file_mmaphardsect_size_Rc5f560d8fat_date_unix2dos_R83fb36a1fat_clear_inode_Rc13fbb87strtok_Ree9c1bd4memcmpiput_R2551b96f__ksymtab_fat_lock_creation_R4d85e995igrab_Rc8fa42b1__kstrtab_register_cvf_format_Rdb6e2d5adetect_cvf__ksymtab_fat_bmap_Rb006ff7dfat_delete_inode_R04cd6908kdevname_R160820f5__strncmp_R8c5ff0fd__ksymtab_fat_delete_inode_R04cd6908__ksymtab_fat_dir_operations_R2def0832fat_add_cluster_R0d009818__bzero_Rdd42e263fat_notify_change_R83c01590generic_file_read_R8848747b__ksymtab_fat_readpage_Rd52cf34bfat_write_inode_Rbbd8505ffat_clusters_flush__kstrtab_fat_dir_empty_R7aaa8b13__kstrtab_lock_fat_R0c7e275e__ksymtab_fat_statfs_R95635c7dgetblk_Re811155c__ksymtab_fat_add_cluster1_R3a91f53c__ksymtab_fat_brelse_R3ec91dce__kstrtab_fat_dir_operations_R2def0832inode_setattr_R5381174afat_free__kstrtab_fat_file_read_Rd5f698f9__kstrtab_fat_readpage_Rd52cf34b__module_kernel_version__ksymtab_register_cvf_format_Rdb6e2d5a.uremfat_add_cluster1_R3a91f53c.rem__ksymtab_unlock_fat_R72f60785__kstrtab_fat_mark_buffer_dirty_R360d4447___atomic_add__kstrtab_unlock_fat_R72f60785__kstrtab_fat_unlock_creation_R9e32cc5bkfree_R037a0cbafat_get_cluster_R991482c9fat_add_entries_R5935688fsleep_on_R2de891dfbread_R68bfe922fat_mark_buffer_dirty_R360d4447__ksymtab_fat_search_long_R93a3370a__ksymtab_fat_fs_panic_Rc1b7485bfat_brelse_R3ec91dce__kstrtab_fat_attach_Rd32f4da7__kstrtab_fat_notify_change_R83c01590fat_read_super_R8a588397strncpy_R328a05f1__kstrtab_fat_fs_panic_Rc1b7485bfat_cache_init__ksymtab_fat_dir_ioctl_Rce06a82f__ksymtab_fat_file_read_Rd5f698f9update_vm_cache_R4077408d__ksymtab_fat_readdir_Rea74ddf3__kstrtab_fat_esc2uni_Rdf8b5a1e__ksymtab_fat_get_cluster_R991482c9strlen_R97255bdf__kstrtab_fat_lock_creation_R4d85e995file_fsync_Rbb5b5fe7request_module_R27e4dc04fat_is_binarydec_cvf_format_use_count_by_version__kstrtab_fat_add_entries_R5935688ffat_subdirsfat_hash_init__ksymtab_fat_truncate_Rb19f7a3a__kstrtab_fat_smap_R5fd51af3fat__get_entry_R29d9211c.umulstrchr_R349cba85__get_free_pages_R19d9ac40__kstrtab_fat_cache_inval_inode_R9811f9f6__ksymtab_fat_uni2esc_R7afa41a4_ctype_R8d3894f2__kstrtab_fat_mmap_Rb280ecd7fat_esc2uni_Rdf8b5a1e__ksymtab_fat_cache_inval_inode_R9811f9f6refile_buffer_Re499ba50d_alloc_root_R38df921ffat_cache_add__ksymtab_fat_notify_change_R83c01590__kstrtab_fat_put_super_R7eb37e11fat_cache_inval_dev__kstrtab_fat_dir_ioctl_Rce06a82f__memcpy_Rbfaaaa73ELF%4(X9   @̒`%#\ޔܖژ@Ѐ 2  " @  . @" @Ƞ B @Ĥ 6 @{ **!"U@>ez I@>dF I@ & (` 6@   @ `2 `@`` @ `@@̀ `` `@ @!# `@ @ `@$@ @ `@,@ @ `@ߖ@@@ `?`@Ԗ@d@ے!`?`@ɖ@@   ` & & $& . &   * & D& H0?2 & P<& T:` a6 d& L d Ж* *  `*` * @ & d& \6 `6 b& d`& X@ Ā "@Ȁ " D@ D@@ & ,.  0@  ,2 D @6  @  d%@!   ,` @ߘ `@ C6   *`" `* `` , "`0 *" `* `` , "`4 *" `* `` ,@"`80! "@Ā "@Ȁ " 0@ 06 . @   @`   `㿘 @ 㿘 @   @ `?㿐6@ 6h  6'\'@ $#@` "  '@ = '*@ '@ `"~ J@ 3 @ )6@`@ `"j J@  @ 6`@ `"V J@   @ 6J`C G `@ 2@` 1'@` 2 )'`@ 2@` '@@` '@@`    '@@`   $ @` t 㿈 & d h6 " H2 * `@ 0]06 & b6 ( d6 " d 2 *@ * & & & & & & & @6 " ?@ # @6 " "<  & 0& 4& 8 & ,  "& <& d,6 $ @  2`@  6 "* & `H & @ ''@T * ` "* 6 $& d& <& @& ,㿘` @` `X X?2  \@f& X @ T& \ \" X  $' H' P''''''<`@ @ ? @ ?㿀 @ -   @ $&# @2`  @@ @` @ 2`  &@2`  @ @@*@@㿀H#@2`@L   ), @`@  @   , @ΐ㿀. 2 @o  #  :*  2   @㿐  <"  ",_?"@ 8 V# a*2 ""@@:  @@ ">?༑2`  @8༑*   $༑2` ` <`@ @@E," " 8  "@ B>@&@     `    ( ~82    @  `" @ " <  (2 @" 㿐  &@ @   @$    `8@  @㿘@ 2`` 7``  @& @   ` (& & & #  ``  @@ @  @` @  㿀`@J`D .  *`  *`:  .2 J .2 2   @  @[ࠒ 2 @@ O  * *  @ h A?`0 7*`"  *  `$`0*`"  *  `$`4*`"  *  @q$`8  `"?#m @4`"  a:  $`@$`,@@ @㿘 @ >``@7 8` @ @@ `    2  @͒2   * @ѐ 㿘`@.@. `㿀   @  2`hV? d 2`  H: B<6 `` ƀ 8??>  ``ƀ  +  >     * *  @rƀ ʒ @ࠒ 2 ??> @  㿘`4`@*  `? @L 2     >@2 ,` ` >@$@@-`㿀`#  @`? 6`  @  2 2  @$ $ 㿘. 2 @r    @2    `@ ?㿐. 2 @  ` H@ 㿘`. @  2 6`@W ="@ @   @㿘`. @  2 @8  "@  @   @㿘`. @  2 @& "@ @ @m 㿘. 2 @" &@   $㿘`N (@  F&, 2`@" :& $"@`@" )& $"@"`@" & $"@$`@" &  $"@&0 "@ "@ "@@( @ 㿘 " @  " @  "@ " @ @(㿘@ 㿘@㿘@ ? ??  ???  ?? ??@  ? ?HPFS: syntax error in mount options. Not mounted. HPFS HPFS: hpfs_read_super: Not HPFS `Improperly stopped'flag is setrun CHKDSKSpare blocksmay be in useSpare dnodes#1unknown word nonzeroinvestigate#3#4#5#6HPFS: Proceeding, but operation may be unreliable HPFS: hpfs_read_super: inode get failed HPFS: hpfs_read_super: root dir isn't in the root dir HPFS: %s %s. Please %s ,uidgidumaskcaselowerasisconvbinarytextautonocheckHPFS: read_inode: bad ino HPFS: read_inode: no fnode HPFS: bit map pointer missing HPFS: bplus_lookup: sector not found ...HPFS: missing fnode HPFS: map_fnode: bad fnode pointer HPFS: missing anode HPFS: map_anode: bad anode pointer HPFS: missing dnode HPFS: map_dnode: bad dnode pointer HPFS: map_sector: read error HPFS: map_4sectors: unaligned read HPFS: map_4sectors: read error hpfsןѪÄȞϕ̋յݯGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata.rela.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4!( 4 ,$33  ?0G3 T$_4 o$u4  $ $ z$($2$$4> ;`S? ?  `d Hl H|VK  ( 8 < @ HYX h lOp |            ( @ ( @(  0  L PT Pp Xx X ` ` h h pO p  LLLQhR0 4 8OPH|  S  O S S S 4S LLLR? H O HY 0X 0 8fT 8 @$I8 @<TL HtI HT PI PT h X T X `,T0 `H hLT\ ` phTl px xT x T T X 0 8  <O @   h  h ,  0O 4  \L   ?  ?  H lB pB @   O  B B @$L B B L\ L O 4 <   \aQS S S DS pS \alZ|UPg`]e  ,  4  F(LH (LOP ( @O @L hO h  O 0LP TOX   O b O   $AHbditbibibiLL4L@CH 0L 0POtLLLLC W [  > $ X( X X X X X`    0 DDTch,Pxc XPd      ,$ 4 4C O _,<m |hPx<P `D,(8H `x8|% 2 ? 8pP@Z\g\s|0Th  X&4J\p  38DUpD`08EXkD)@hpfs_fs.cgcc2_compiled.hpfs_sopshpfs_read_inodehpfs_put_superhpfs_statfshpfs_remount_fshpfs_file_opshpfs_file_readhpfs_file_iopshpfs_bmaphpfs_dir_opshpfs_dir_readhpfs_readdirhpfs_dir_iopshpfs_lookupparse_optsmap_sectorcheck_warnzeropfnode_dnomap_direntbrelse4map_fnodecount_dnodescount_bitmapcount_one_bitmapmap_dnodemap_4sectorschoose_convconvcpy_tofsbplus_lookupmap_anodetranslate_hpfs_namemap_pos_direntdir_subdnomap_nth_direnthpfs_fs_type*ABS*hpfs_caps.ctb_cp850_to_latin1unregister_filesystem_R85f46c0e__this_module__copy_user_R9c5239ebkmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5dgeneric_file_mmap_R5a6dc27f__module_using_checksumsfree_pages_Rb5136506cleanup_module___atomic_subsimple_strtoul_R20000329.udivset_blocksize_Ra842722a__brelse_R01c3a101.divinit_moduleprintk_Rdd132261generic_readpage_Ra30f6c08iget_Rf2d3b9b8__wake_up_Rdecddc1esys_tz_Rbafebf71strcmp_Re2d5255ahpfs_char_to_upper_linux__wait_on_super_R60631b72register_filesystem_R5b7afd0fstrtok_Ree9c1bd4memcmplinux_char_to_upper_linuxinit_hpfs_fsd_rehash_R6db84970hpfs_char_to_linux__module_kernel_version.urem___atomic_addd_instantiate_R5a458775bread_R68bfe922file_fsync_Rbb5b5fe7hpfs_read_super__get_free_pages_R19d9ac40strchr_R349cba85hpfs_char_to_lower_linuxd_alloc_root_R38df921f__memcpy_Rbfaaaa73ELFjL4(㿘 @ / ` `$ 0(. @@@  / `*``+ 1 "0( `$0(.  @?`$(@ 7 7. <7 7 `<<@@㿘 2 T@ 0W@  H@ @ 0M @$ ` @`" T@ T?&@ *  P2 * p@ 0/* @2`$(`  (@2 ` !@ @` @  @ `(@ @㿘 2Ps  1 + p# ?,`@  $  ??` 2  ( 2`@ `@ ,` D#4c  $6 (`  @(@@ P  @  @  (@ @T,` ?@ *3 H @$ 2 $ @# @$@   @  @  (@ @ @㿘 T H"  p P X*㿘 `"  hD@( P !@ @/ L`  4  @$ 2 $@  * *`  2 @  @  (@ @㿘 `"  hD@( P !@ @/ L`  4  @$ 2 $@  * 2` 2 @  @  (@ @㿘 h ~`t  @㿘 ` 2 @ 0W`@ 0QV $`@ 0J h2 @ 0B D@ 08L4 @ @ 00l*` @`$4 c  @(@2` @` @  @ `(@ @㿘 " @ k  h$`h$``L! + `l# ?,@ $ ?? 2  (@` 2``` ,5#14 $(`  @(@@ 0! @  @ (@ @, `h D  @ 4`$`4` 4`& "d" (4`($``$`4$`8$`0$`d$`<@$`@``@㿘 D L l㿘 , c: L, `"C @$ ,c:  c@ ,"  @ % @"4  @   @  (  @ " h@ h@㿘   @$  @2 ,6|  ,#: "a4Y$` , #: "@,`$"F` @$ ,c:` "@@   " ,@ , "   & @#`5 @  @ (@ @ " h@ h@`a`$ @ ``a$@a  " 6 h@@㿘  m  @$ `b @x`2 ,6Z  ,#: ": !40`$  , #: ": , `$, @ 9` @  @ `(@ @ !ր `$ @ ` !$@!`` "  6 2 h@ h@`@㿘 "<  @ @(@   "r@!0  & 4`& 8@㿘 , c: L, `"C @$ ,c:  c@ ,"  @ % @"$  @   @  (  @ " h@ h@㿘   @$  @2 ,&|  ,#: "`4Y$` , #: "@,`$"F` @$ ,c:` "@@   " ,@ , "   & @#`% @  @ (@ @ " h@ h@```$ @ ```$@`  " & h@@㿘  m  @$ `b @x`2 ,&Z  ,#: ":  40`$  , #: ": , `$, @ 9` @  @ `(@ @  ր `$ @ `  $@ `` "  & 2 h@ h@`@㿘  m  @$ `b @x`2 ,&Z  ,#: ":  40`$  , #: ": , `$, @ [` @  @ `(@ @  ր `$ @ `  $@ `` "  & 2 h@ h@`@㿘 "<  @ @(@%   )@ k!!k@!0  & 4`& 8@㿘 h ~`ɐ0Đ㿘& h D 4 ,  7 2  $@ "' $@   J@  @`? " & @ , " @  ,  , ΀ " @  h`d"`@  0 ("` 㿐 &`P`@`D   @@ h@ ?@@ 㿘&' h D 4 ?  2  $@  "w? $@  @@  , (4 @ `& ,@  J@  @`? > J?@F?  & 4`& 8@  @6@6*@ * `@`  & D"` @  @  (@ @' @ " @  & 㿐@ B?  $ d`4 "@`@`D[   $ ?`4 $@@0%  2@ @  @  (@ @ "@@ 㿐@ 2j?<  4 &@ 4 "$ d $ d@ $ d@ $ d@<@< 2 4 * 2`@@`@`D   $ ?`4 $@@0%  2@ @  @  (@ @ "@@ 㿐h DT$$@?@ ? $`d*$`, @  2 $`$`?`4`$@@?'``2 @  $` 2 ' @   4`$ @  @  (@ @ "h@h`: ! 4`""d$4`"` 2`@@`@`DC @4`$0. `2@@  @ (@ @$ `4$@ "@@ 㿘 h  D  , V* S @ "S  $ H@` C  $ < @` 6  ,@+ 2  $@ " $` @ + @'  @ , " @  ,  , ـ  @  " @ !@ @ 㿐`@`D O?` F?  B```@<?T $`@ 2`` "`$D @  @ `(@ @ 4 $@`$4$8$ 8$4$@@ `@㿐``@`D? K` FT`$ 22!` @ `@T`$ 4`$2` "`$D @  @ (@ @ $8`$4@`$?4`$8`$`8@@ @㿐'@ (?!`4`"$`d @   `$`?`4`$@@i?N  $* #$N $ * @  @  (@ @ "`@` $`,@`@`D  `$`?`4`$@@0% `2@ @  @  (@ @ "@@ 㿐 < " @@ 2 hH?T $ h@ C?@DG  7@  2@ @  @  (@ @ " $@ $ 4 $ $ 8@ $ @ 㿈 h' D``D `@z?  ڀ`@Dm '쀤 2"@'"<  $쀤 ΐ ? @ ?`$`  `  ?ဦV$`$@`쀢 2 D@ `3%2@2% 8% 4` &` `% D@&8&4``&` &D@   $?4 $ $ 8@ @  @ (@ @ `@  @ `(@ @`7```$ 2@ @  @ `(@ @ $ ?`5 $@ " $ $ ?` 4 $ `6$@ `@@쀢 @㿘& ,@@㿘 t  @  @  (@ @. 㿘 2 .  x`?# @2א. 㿘 2 L x  |2` t @  @  (@ @ L : P l, @  @ L * l P : t p, @  @ P * p t @@ l` @`  `㿘@ ` @V x`"' O | K 2 t`@  @ `(@ @ . O0-?6 |c 2 t `@  @ `(@ @ | `.  ` @ 㿘`"<  19  @ 2  $1/ $d$`&  ` $@` .`  .`c # $`@` ސ.`c$ $ @㿘+ ` @`  ` `" @ , 5 . @$ @$ ($$& x& t & 6 |. & D& H& L& P& T & X & \@ & $    #@2      6 ~& `& d& h h@2   6 ~?c    x@ڀ 6 ~?c  & H& `& d& h P  L*@ @ L *@& l& p  5 @$ l,  "  L  ` P : l5 @$ p,  m"  P  ` l @ $@ p @ $@`& @  K >@ <& , "`P `2!. ?# @4 @  @ (@ @ . .  0@  |  @ 0gf@ 0b@ @  L2  L  @ L : P l, @  @ L * l P  p, @  @ P * p@ l@   ! @@  0@ 0@  06 . @ ` @`   `X T H"@ X *@  $'''@ D'''@ d''<`@ @ ? 㿘 2 $ .`@@ 㿘`6 h@ 2 `\2 @ @ ) `4.`" a4   `"  @$`~ @$ʓ>` "   @$a 㿘 2 $ .`@@ 㿘`6 h@ K `\2 @ @ B `4.`; ` ? `"4  @$*#@4   `"&  @$>`?`@ @$>` "  @$>` ` "   @$` 㿘 h`~ 0]㿘.``@`  @$@@ ( # @ h 2  @$@  h@ "@@@4@  $ 8@㿘`'Hq ` 2`$  @HH`  @ H` 2 `$`Z @ V .@` H @$@ B! H @ @@ h HH 5 @Ē @$  h@ "@6H `@  @ `(@ @H @㿘`6 h `\2 @  @ 0$`4:a~ 1>`  ca $W㿘.``@`  @$@@ ( # @ h 2  @$@  h@ "@@@$@  $ 8@㿘`'Hq ` 2`$  @HH`  @ H` 2 `$`Z @ V .@` H @$@ B! H @ @@ h HH 5 @Ē @$  h@ "@&H `@  @ `(@ @H @㿘`6 h `\2 @  @ 07`4:/` ? 1!#@?@  #>` U >` I`D㿘 h ~`0ǒ㿐@ '    @   @   " @ 㿘 & d`6 " h`D@( `P !@ @0q`L @4  @ @$ 2 `$ !@ @0] * @@6 " <6 & 6 ( 6 $  & , & <& 4& 8& 0& @2   :` `*   6 *  *2`" "@  "<  @  #& d@( & d@ & d@ & d@ & d@@㿘 & d`6 " h`D@( `P !@ @0o`L @4  @ @$ 2 `$ !@ @0[ * @@6 " <6 &  6 ( 6 $  & , & 4 & 0 & <& 8& @2   6 *  * "`" "@  "<  @  #& d@( & d@ & d@ & d@ & d@@㿘 h ~`0s㿘 `"  h`D@( `P !@ @S `L @4` @ @$ 2 $@ B ` "* 2 &3` )<+`  %+`  ,#` 4#` " @ @ @ ` *2`*  `  3`  *2  @  @  (@ @㿘 `"  h`D@( `P !@ @W `L @4` @ @$ 2 $@ F ` "* 2 &3` (<3` $3` ,#` 4#` 0#`  8#` " @ @ @ ` *2`*  `  #`  * "  @  @  (@ @㿘 h ~`0%㿘 @㿐  `!'`   @`  @ `  `!` @ `@􀢠`?`@ 㿘@ 㿘@㿘@ 㿐   2 "@ ?<   @ ? $ " , : ,: @  ' "z?y ,, $$"@&@8d    @  @    @ "Q?P , <$$`@<`@ @@@   @ "-?, ,@@   @2  @ (@ @ @@ { ,4% ,<% 4% 8> @?㿘   h`D`?  ;  @ "P ,]?* 2` @ :   @ 2$$"  @ C 7>  ,:  4 $* &$@ @ ` @@ ƀ 6 `% @! ` : @ C > " ,@ ,:  4  8 @ 㿘  @ @ ?@ $@@㿘4#  @     $J  < @  `*@&J @ 㿐@ + @$`$'@@ &  `  @ ?   2   @    @  ?" 㿘&@  " @$&@ `"&@ & ? 㿘   2`` 㿐Ė    .`$@ | 4 2`a$ @㿐    .`$@ ǔ 4 2`a$ @㿘 "<  @   @(@ ?   @@  @@@ ?㿐@ + @$`$'@@ &  `  @ ?   2   @    @  ?" 㿘&@  " @$&@ `"&@ & ? 㿘   2`` 㿐Ė    .`$@ | 4 2``$ @㿐    .`$@ ǔ 4 2``$ @㿐x    .`$@ ǔ 4 2``$ @㿘 "<  @   @(@ "?    Ēds``@ ?㿘`h ~`Ɛ 0 ?trying to free block on nonexistent device trying to free block not in datazone minix_free_block: nonexistent bitmap buffer free_block (%s:%d): bit already cleared trying to get new block from nonexistent device new_block: bit already setnew_block: cannot get blockBad inode number on dev %s: %d is out of range unable to read i-node block free_inode: inode has no device free_inode: inode has count=%d free_inode: inode has nlink=%d free_inode: inode on nonexistent device free_inode: inode 0 or nonexistent inode free_inode: nonexistent imap in superblock free_inode: bit %lu already cleared. new_inode: bit already set...Bad directory on device %s empty directory has nlink!=2 (%d) Deleting nonexistent file (%s:%lu), %d MINIX-fs warning: remounting unchecked fs, running fsck is recommended. MINIX-fs warning: remounting fs with errors, running fsck is recommended. root directory is not a directoryunable to read root directorybad root directory '.' entry.bad root directory '..' entry..bad V1 i-node sizebad V2 i-node sizeMINIX-fs: mounting unchecked file system, running fsck is recommended. MINIX-fs: mounting file system with errors, running fsck is recommended. MINIX-fs: %s MINIX-fs: get root inode failed MINIX-fs: bad superblock or unable to read bitmaps MINIX-fs: can't allocate map VFS: Can't find a Minix or Minix V2 filesystem on device %s. MINIX-fs: unable to read superblock minix_bmap: block<0minix_bmap: block>bigminix_getblk: block<0minix_getblk: block>bigBad inode number on dev %s: %d is out of range Major problem: unable to read inode from dev %s unable to read i-node block IO error syncing minix inode [%s:%08lx] minixminix_file_write: inode = NULL minix_file_write: mode = %07o GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4]!m!x ,]L3  ?]XGdR bdh sfxfhi2iiD 0k t $( D   ( ,    0 0 0{$ X(, X\{t x| ou{   o  8oPuh|{  lo u8L{` 0 0   `$( `Xopu{ 0 0, `04 `do|u{$ (, < @D X \` x |     H Hm {  x $ x ( @o Xu p { s o      o u  ({ T   @ l   {  $ 0 t Hou{ou{DPd  h{8LX@pou{0<ou{lxou{<H\  ,T  8DXd4H p     (o@uXl{x x 8@hou{ $x (x D H `y dy | !!!0o!Hu!`!t{!!!! ! ""4"<"L "X "d"p "x ""o"u""{##T##o#u##{$$($4$$ $$ $ $$ %%T%%%% %% %&| && & & & &o&u&&{'' ' 'D'L'd' '' '' ( ( ( o(8u(P(d{(l (p ((((()p )p )$)P)X)o)u)){***`*h*o*u**{**+|+o+u++{,, , ,,,D,-,- - - - - .. . . .0.P .d.|o.u..{.o.u/ / {/Po/hu//{/000,0D0\0d0o0u00{1`o1xu11{122D2L2Tv 2Xv 2d2o2u33({3po3u33{3 @3 @3 3 34 4$ 404D 4L 4` (4h (4x H44 H4 P4 P4 p44 p45v 5v 5$5L5h5x6|67 7X7o7o7 X7 X778 8 8Po8hu88{88 88 8 88 8 @88 @89 P9 P9  x9$ x9(9\999 99 9 9 9:::$ :(:, :<:Dv :P:::} :} :z;8;X 8;\;` 8;| P;; P;;<  >8t>X>t>> > >>??@?p??t??@@@<o@Tu@l@{@@ h@ h@ @ @AAtAB B B4 B8 BLBBBCC@CHtClC|CCCoCuDD{D0DP hDX hDl Dp DtEEEFFT FXF\ FhFF FF FG|Gx Gx G G Gp Gp G G Hy Hy H,Hl HpHt HHH HH HIIx Ix I I Ip Ip J J J y J$y J<J JJ JJK KK KoKuKL{LH LLLP L\LL LL MpoMuMM{NN`N|N  NN  NNN NO OO$ O(rO, OP XOTOX XOx xO| xOOP<PXPP} P} PzQQ4Q@lQ\oQtuQQ{QQ Q R RSSHSSSTTT$wT0TXTx} T|} TTU UPUUVV,W,WXhXXXY8YLYYZ[l\\TTDXJL\Md0Tl1,p0t:tx2P5 O8n $R,R$H\ `qdkhlpt~x|T@S      @#t. C XLjp { P PXx(PxX pj p$p05d@xDP$HjZ 0Tb0T u0tp0H1,XX,JL4M(:t2x35 h;,";H0<4,><`PL=\>l@|A|B\D@ F$H<JLM4j! O8(<>O8jO RURd <yR$j ST@Sdj TTUVTPVW< WX*Yp9YPHZLYZk[|}\jt=4P(4N|^vP#!/Lh  O @ 06G_pO <4E 2MN$^mp0    *t ;N I \ n L ~  + L &t      'tl &\P A Q e u \8 ,X    (, E`<  bitmap.cgcc2_compiled.nibblemapcount_freeV1_minix_clear_inodeV2_minix_clear_inodeminix_clear_inode*ABS*truncate.cV1_trunc_directV1_trunc_indirectV1_trunc_dindirectV1_minix_truncateV2_trunc_directV2_trunc_indirectV2_trunc_dindirectV2_trunc_tindirectV2_minix_truncatenamei.cminix_find_entryminix_hashminix_add_entryempty_dirinode.cminix_delete_inodeminix_commit_superminix_write_superminix_put_superminix_sopsminix_read_inodeminix_write_inodeminix_statfsminix_remountminix_checkrootminix_read_superV1_block_bmapV1_minix_bmapV2_block_bmapV2_minix_bmapV1_inode_getblkV1_block_getblkV1_minix_getblkV2_inode_getblkV2_block_getblkV2_minix_getblkV1_minix_read_inodeV2_minix_read_inodeV1_minix_update_inodeV2_minix_update_inodeminix_update_inodeminix_fs_typefile.cminix_file_operationsminix_file_writedir.cminix_dir_readminix_dir_operationsminix_readdirsymlink.cminix_readlinkminix_follow_linkfsync.cV1_sync_blockV1_sync_iblockV1_sync_directV1_sync_indirectV1_sync_dindirectV1_minix_sync_fileV2_sync_blockV2_sync_iblockV2_sync_directV2_sync_indirectV2_sync_dindirectV2_sync_tindirectV2_minix_sync_fileminix_lookupmark_buffer_uptodate_Rd0ee0e0aclear_inode_R5a5bfea1minix_bmap___set_bitminix_symlink_inode_operationsminix_createunregister_filesystem_R85f46c0eget_empty_inode_Rce23dbffminix_new_blockset_writetime_R8e167c19__this_modulelookup_dentry_Re3d4e95eminix_file_inode_operationsblkdev_inode_operations_Rb9db2edc__copy_user_R9c5239eb___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7minix_mkdir__mark_inode_dirty_R19c75706generic_file_mmap_R5a6dc27f__module_using_checksumsget_hash_table_R3b41a211cleanup_module___atomic_sub__wait_on_buffer_Ra773ade4minix_dentry_operationsinsert_inode_hash_R6aecc9f5strnlen_Rd9ce8f0cminix_count_free_inodes.udivminix_free_inodeset_blocksize_Ra842722astrcpy_Re914e41e__brelse_R01c3a101.divschedule_R01000e51global_event_Rcaf51008init_moduleminix_truncatextime_Rf31ddf83minix_breadchrdev_inode_operations_R3f3ee2e9printk_Rdd132261ll_rw_block_Rdc206727generic_readpage_Ra30f6c08minix_sync_inodeiget_Rf2d3b9b8__wake_up_Rdecddc1eminix_mknodstrcmp_Re2d5255aupdate_atime_R20016f2b__wait_on_super_R60631b72register_filesystem_R5b7afd0fminix_count_free_blocksmemcmpdput_Rb697b4beiput_R2551b96fminix_free_blockinit_minix_fskdevname_R160820f5__bzero_Rdd42e263minix_new_inodegeneric_file_read_R8848747bd_rehash_R6db84970minix_linkminix_rmdirgetblk_Re811155c__module_kernel_version.urem___atomic_addd_instantiate_R5a458775minix_unlinkminix_dir_inode_operationskfree_R037a0cbainit_fifo_R4328a40fbread_R68bfe922update_vm_cache_R4077408dminix_sync_fileminix_renamefile_fsync_Rbb5b5fe7d_delete_R4a8b07d1.umulminix_symlinkminix_getblkrefile_buffer_Re499ba50d_alloc_root_R38df921fELFX4( 㿘@ 㿘@㿘N@ . /  J`  A)%$@ ;. @: ` r @ 2ذ?ꀧ s?@ )?  s"ɰ?  : \ .  .   . ?`? ``?,@Ţ`. ?>  s  .@ .`0 .@ ` .2 .W$@   ,@`$@ $,@@> +)$@ 8r@``@ 2l?ꀤs  @ 2c?ꀧ (`?ꀧ : \ .?sT? s"N?  `?  `*@2=?>  s$@6?$@   ,@`$@ $,@ `% NJ@  NJ`  NJ` `@  a  2 㿈 h2` J ` @ `N@ . ` ? `?㿈 T`x` J` 3 @ `Ӗ   2` *`@?@ ?&` x T x 3 N @` 2` ؙ3 N  2 ` @  @㿈 h&`P`@'`D  '耢`@耣 @@'`@㿘 h @ 6,  $ 8`$ 4@@ `  *` \  `  *`  2`2  4`@`"@ ph`3 M` `@%`D A'`@ @ . O .@ ܐ@ @(?#\ 'h@ܰ@   & 4& 8& 0@@ 㿈`h'``@`DΚ찒 +``@'?@ #?*@ @4 $ $`4$`8$ 8`$?4`$ `2`@` @@@p h`3 M` `@`D '`@ @ . O .@ ܐ@ #\  ' h@ܦ !@ $4`$8$0@ $  5 $4$'@ ?m'@ $$8 $4@`@  , !?#  2`*  4TĒ *  2 *44@$   2`2**   44 `@ ,  ƒ  2*  4U Ĕ *  2 *4@ 4$   * 4 2`* 44@ @@/'@ 4$ % 4% 8$8 $?5 $`2 @ @?*@ @@@@?'ذ?㿈 h'``@`D쀢 !?*@ @@4 $ & 4& 8 $ 8@ @@ x'' "<  `h`?``h@쀢 ``@ `@ఒ   @ @@ 1#\ۘ찒 t1 ` &D& @?-@\@ @@   ?$   @ ! & $`D `$`8`$`4@` `$?7`$ `'`8@耢 3?ƒc 2*  3 VĖ *` 2`* 2@ `$` 4`$@`" $`$`?` 7`$ `6$@ @@0 ?ꀤ   ?$  @` "`$`D`$`8`$`4@ Xh 3 L `@`D 3 3 L @D (@ @ . Oؐ .@ `@ `.Ԗ@̰ #h#\#`#d@㿘` @` `㿘  @` &`  7$ @  4  @`  &`  ,$ `"P㿘@㿘@ msdosCOM4 COM3 COM2 COM1 LPT4 LPT3 LPT2 LPT1 AUX NUL PRN CON . .. msdos_mkdir: error=%d, attempting cleanup <4>MSDOS: %s/%s, get dotdot failed, ret=%d msdos_create_R2b6c600bmsdos_lookup_R2a0329b9msdos_mkdir_Rc66ae2eamsdos_rename_R40daa859msdos_rmdir_R30d4598dmsdos_unlink_Rfce01462msdos_read_super_R108fc95amsdos_put_super_R202db746*?<>|"+=,; GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata__ksymtab.rela__ksymtab.kstrtab.data.rela.data.bss.comment.note.modinfo4!  ,D4$@>! MhV8\" glzur({2#! )? B ? 7h Hl P H] P]  H$ PH HL]l Pp]D d h t FX*D X X4$LHXPtSQ6 6 ',HC`R*SH$XSh6 t6 'P: $R ," 86 <6 h' ' Z S * l$ |6 S 6 ' N S 6 '  $ (, C   , (C tR S P  9  6 ' ' R S $" ,E <S R " S 6 6 ' 'Zd* :  *  91 01 41 H1 L"dRl"x81 '1 6 1 6 '6 '|R''SSD1 H'P1 T1 X6 `1 h6 '<*S# # +# # OI I  T0 D+` h Xp XJ? !? K4/ @52`< %$Y(=,U0\4_8&<^\ x$h(X,H084(8<\`,pAtKx/=5%`     %-4<HFPT,fqt|,X4 4Jd   *0JVw 0H9 XPp~  ATpPo}p@  -B[x|(8`6Qbmsdosfs_syms.cgcc2_compiled.*ABS*namei.creserved_namesbad_charsbad_if_strictmsdos_format_namemsdos_findmsdos_hashmsdos_cmpmsdos_dentry_operationsmsdos_add_entrydo_msdos_renamemsdos_put_super_callbackunregister_filesystem_R85f46c0efat_detach_R2d670d32__this_modulefat_build_inode_R9c12c563msdos_rmdir_R30d4598dmsdos_put_super_R202db746__mark_inode_dirty_R19c75706__module_using_checksumscleanup_modulefat_scan_Rda44ce5b___atomic_submemcpy__ksymtab_msdos_rmdir_R30d4598d.udivmsdos_lookup_R2a0329b9.divglobal_event_Rcaf51008__kstrtab_msdos_mkdir_Rc66ae2eainit_module__kstrtab_msdos_create_R2b6c600bmsdos_mkdir_Rc66ae2eaxtime_Rf31ddf83fat_put_super_R7eb37e11fat_attach_Rd32f4da7printk_Rdd132261fat_dir_empty_R7aaa8b13__ksymtab_msdos_read_super_R108fc95a__kstrtab_msdos_rename_R40daa859msdos_unlink_Rfce01462__ksymtab_msdos_mkdir_Rc66ae2eamsdos_fs_type__kstrtab_msdos_lookup_R2a0329b9fat_dir_operations_R2def0832register_filesystem_R5b7afd0ffat_date_unix2dos_R83fb36a1memcmpiput_R2551b96f__strncmp_R8c5ff0fd__ksymtab_msdos_create_R2b6c600bd_rehash_R6db84970msdos_dir_inode_operationsinit_msdos_fsmsdos_create_R2b6c600b__module_kernel_version.uremfat_add_cluster1_R3a91f53c___atomic_addd_instantiate_R5a458775fat_add_entries_R5935688ffat_mark_buffer_dirty_R360d4447fat_brelse_R3ec91dcefat_read_super_R8a588397__kstrtab_msdos_unlink_Rfce01462__ksymtab_msdos_unlink_Rfce01462__ksymtab_msdos_rename_R40daa859__ksymtab_msdos_put_super_R202db746__kstrtab_msdos_rmdir_R30d4598dd_delete_R4a8b07d1__ksymtab_msdos_lookup_R2a0329b9msdos_read_super_R108fc95astrchr_R349cba85__kstrtab_msdos_put_super_R202db746__kstrtab_msdos_read_super_R108fc95amsdos_rename_R40daa859ELF44(? hD8 ` @ @  2* "` 㿘`@22  h`D 8 ` @ @#   @ @   ``    @   @    *@  㿘  @    "`"& &   @*`     p@ &`? ! @' hD @  h@D  ' hD @p`@ &?! 'hD @`?       h @'D@`?`2h  hD@ ` ` 'hD @Ѐ` h'D@Ё( D  * 2  2  *  #`բ`2h0`D  ː @@,@hD   ,``?`. @ #  ` ` z?* *` / / `* @` @2+  2 @> ਐ8      @`? %  ` ` z?* *` / / `* @` @2+  2@ K   @ " h D਒`8 @ ܀`       `?ဢ % *`  / / * @` ` @"  + @ Z +  2  @ @㿀 h `D `  =?;` @! ?@#  $ @ ` " R    @`  `  >   5 2   `   `  > 5 @*  @ $        aX @  "a\\   ``  h  D `  ,``?  @ @ @ٖ @ 6"  ^ ?$  "  6-  "" @ %K  h D਒`8 @ H bb`     @ M `?`% *`  / / * @` @"  * @ Z * `2 a\ ;`-@7 !X L M' @'@ @  @  @ @    ` ``B > a\@ \Ѩ!\` @oh` @   @Ȁ @ "` @@ 2`&X\ ``?&㿘`@  %"`" `" $"`@ 216,) !X!U@ 2! !\. . . . . . . . .@a\$@a\ $&0 "    `2"` 㿘! @$ 㿐  e ""? ` ` z? `*  / / `* @` @2+  ` `@ ̀ :!!" &" `( @ @ / `/ * @` ` @  @ @+ Z +  2 "0     !" "!" (Dh * `D2  2  `* # ``` ?@@1,   @D  @ *  @ $  %@  , @*`"@*`"@*`@ M @@!M   @ 2'hD   ,``?`. b #b  ` ` z?* *` / / `* @` @2+  2 @> ਐ8      `?b %b  ` ` z?* *` / / `* @` @2+  2@ 2Lh D਒`8 @ ܀`       `?bဢ %b *`  / / * @` ` @"  + @ Z +  2 '@ 'h@  ?`&P@@ 㿘@@ & h@ ?@  ha@D `D`h* 2 `D 2  * # `h`Y?`@ @`D`h, `D`8      `?✘ %`  ` ` z?* *` / / * @` @2+  2``h`D#\ @#  ? ' "?㿘@  `D`h* 2 `D 2  * # `h`T?`@ @`D`h, `D`8      `?✘ %`  ` ` z?* *` / / * @` @2+  2``h`D?#\c @ ?㿐`D`h* 2 `D 2  * # ```m?``@h?`@ @`D`h, `D`8      `?✘ %`  ` ` z?* *` / / * @` @2+  2``hD@  ? ? 0?  ?0  ?0 @ ???㿘 h?D `  @``" D` "D@  hD@   h D`,  6 ? "? ?"? ? ??0 @@0??㿐`DD *  h2  *`2 2`D* `#2` `*`# `?`@@ h,D 8      `? %`  ` ` z?* *` / / * @` @2+  2`@@h,@D8      @`? %`  ` ` z?* *` / / * @` @2+  2` hD@ ?  h D`,  "?  ??0@@0?*` ("*` (㿘.`2 . 2 2`? 2` `?(*`"+"  *  . * * `@ (* * :` @ @ $  " .E* @*`" *" * 㿘@ <4  < @ <@ <* @.@ * T6@@a1@!m   + @ *  *  :`@@ ? +  `& @ *  *  :`@$ ;   ; `;4 *@  **`@ `*#@ +  6@c@@@@@@@ ( ?@ 0< h  ?@ ,  `2%    ' h ''D #\  @#   h'D #\  @! 2  h@  2 h  h 0@*㿈   _?hD `  X?"<  Q?M @ " h @B@=?  D?`@ 3! @%@&8h, `D2#\#`@ @@ @<`>h "  $0㿐  hD `  h?"<  d?] @   @W $ ,h  D@ 1G?/?-?@%&8  <`@ @ , h`D2@ @@ א@<`$4$0>,@  $, @` 㿘`4& `0 & `8a]& `H & `& aP& aT& aX@& 㿘 h k`D``*`* `*`@  & `"66 "P& ,4!?6 "` #` *` * ` *  @ @ ?+  @ *` 2 2` & ,, `"4```*`*`@ * ` 6(` " @ ` `! o?  " ` "!$3` I@6 "` ? "#m @6 " ,& @  !? <`"`@? & @`#`*`*` @  * 2*`2 @ * *`2 @2`& 4``*`*` @  * 2*`2 @ * *`2 @2`& 8`$ `%*@ *`2@ *`@2`& 0`4`5*`6*`7 *`@  & `0`1*`2* `3*`@  & `8`9*`:*`; *  @& 㿘 h`` D6"6 "& ,P!?4!?6 "` #` *` * ` *  @ @ ?+  @ *` 2 2` & ,, `"4```*`*`@ * ` 6(` " @ ` `! o?  " ` "!$3` I@6 "` ? "#m @6 " 6 $0"6 &2 ,6 (& <6 *`& @@" & @`#`*`*` @  * 2*`2 @ * *`2 @2`& 4``*`*` @  * 2*`2 @ * *`2 @2`& 8`$ `%*@ *`2@ *`@2`& 0@㿘 `@ 0D "<   & d( & d2& d & d㿘`!@     @`#$`@@$` @ @  "2 $㿘 "<  2 @  @ @ @㿘 ̘ !    A*`*` *`;*`*`*`*`*` *` *` *`0*`1*`2*`3*`4*`5*`6*`7*`H*`I*`J*`K*`8*`9*`:*`*`*`*`*`$*`%*`*`*`*`L*`M &"&@`@!d()   @``  `@ l`` `*@  $ <`0"   @"L` $ & $& . & . 6 "@  "@"& D $`|$`$`$`$`,`$b0$b4$b8$b<$bX$b\$b`$bd$bh$bl@$@`$``$`` $` `$``$``$``$`` $` `$$`$`(` $`(`,$`,`0$`0`4$`4 $`$@ `4 `6 a !@  4`44`6,bp@,b@$b/$b$`/@  c$`@@@ Q`$ @  @$ 1 2 $b8 @$ 2% ̐`8* @ "@ & ,$b0 ,   "`P.  0@ 0F@ @0@ @@@` @`@`0@ @b@b D@"0@ @.  0@ 6 @   @ 6  @6   @`   `㿘 D@@@" ""@$"" @$"@ |  @ "l ""`@"h"` " @"\ @  D@"` @`  `X?"L" ?'''''Ȁ'<`@ @ ? hh D ?  ܐ@ @?` 0@` 2@ƀ?`"@@ &@D "< @  hD``6 #?! @/'@"@)'Ѐ@" ,?# ` 4  ?! @@"@'А I ! 4*!$  '@ @@ `@?֐# @  2  `**`2@ @77Ԁ @ `@?ސ# @  2  `**`2@ @77܀ @ `@?#  *2 7쀤`hD@а @? 2@@$@ @  6h?`D `  @@ @`㿘@ 㿘 "" "@" @㿘@@ @ @@@`h "`D @  "<  2˰?<` ?&  ?""9 ""?0"*"˰?0 "  " . "а?00 " "?0~0 " i?0x@  "< @o?<5 @   _?耢 Z쀢/W< ? N/@  G?􀢠 <   @ @3?@$ $  @@/怢 6 ?@  <   @ 2?@0@  ""4 @?"4 ? $"4@@  "< @?<5 ?  @ ( 2Ӱ? 7 ' `'`''< @ ( @  "< @?< ?    60@  "  @?    8!' ' '?'''<` @   @  ""4 @m?"4 i?<` @   Y?  ? A$!, $  $!M?@ E?"0 `=$"4`< !" "!5"@  ""< @+?"< '?"8  <` @    ?"@@ "H@  $"<@  "< @?<` 9?"8&5 @  "< @?<` ?"<  ``ٰ װ?ꀠ@ $"8@  "< @Ȱ?<` @    ? ?  ! 6   0 ?0   ' '@    ?`"<  ?` ?! `h`D@ 4 w    `h`D@ 4r?d@  ""4 @Y?"4 U?<` P@ *  * E?P  @P e:?@e  @e 2 "@*?@""p"$"$"P@ * @ @ <` "p@ *J G * ?㿐 0 `@ 2 ; p % ,&@@@  " hD @   @$$@4 h.``D2@@ 2'@*/"@@@ hD?`?ꀢ<" "  ?󀈠"0"`( 㿐a$"@  &  & 7@   & *@   a  & @ " @`@ !@4& ` @ @' x@  $  $ 7@   , $ *@     $ $ * `$   @ D `@ &  @` &  @`&  @`&   @`&  @`ܐ&  @`$۲.@  ڒ`%@ ڀ? @`& @㿘 h&  D @  $ $ *    $ @     B @$ @㿐  *  '  & @  &     *    &    *  `@& `4   *     @&  &   *@   & 㿐``@ M?@  & &  *  &  8& *    &  *  7  @&  ?  ' & @   &    @ W   @ L TM.L T@ U T,@ @㿈@  & &  *  `&  8& *    &  *  7  @&    ' & @   & 6   @ W   `<@ '@㿈\@`  & &  *   `& *     & * `  7& @  ? ' & @   &    @ W  @ `8@ $` `<@ $@@ 㿀@  & &  *  7  & @   & *  `&   W@ " @#  `@    ,  , " *`   @#\#` ` Y 2  8*@ X. &!& &!.  㿈@  & &  *@  & *    & +    & +  & +    & + '  @&     & *@     & * `@&  4   *    @&   &  @ W @@!M ` @ 222+( (@  2`2`2`.4.5.6.7.0.1.2.3  @`.8 .9.:.;@@ & &  *@ 7  & @   & *@   W  & @ " @$  `@    ,  , " *`   @ 8*@@.L@M !  ...........$.%.. 㿐`@`  & & *@  8& & *     & + 7 & @  '  &  @   &  @ &  && F   @ W@㿐``2` `@&` &`&` * ``&`* `  `&`+`7` @&``  &` ` ``@ W@0 㿐```8 @ 1' V@` $`$` * `&``$`* ` `$`*`7` $`@ `$` & @` $`$` * `&``$`* ` `$`*`7` $`@ `$` ``@ W@x\& ;`0``2&@  & &  *   8&   +    & + 7  @&  ?  ' & @  '  & @  7  & @   & K   @ W 8 $P `@ $X  @` 〦`,\  @ L ZM,L Z@ [ Z,@ X]'ܐ_@  ?#  *2`  *  *2 4]@㿘`@`  & &  *  `&  8   (   & (  ` &   @ W  `@ @㿐@  & &  *   8& @&   +    & + 7  @&  ?  ' & @    & @   & @ `2  *@  *   ` & *   * & *@   &   @ W  `@   @ L ^M.L ^@ _ ^,@ @㿈`?ꀦ `@  & &  *   8& `   +    & + 7  @&   & `  *   & ` '@  & *     & + &   +   &   '@  & *@   & *  `@&  4   *     @&  @&  4   *    @&    W @& @㿐@  & & *    & @  '  & @  7  & @    &  @ H  `@ '@ `  @@㿐`@\  & & *    & @  '  & @  7  & @  &  H@@ !`@ .2 ? @'@ <`  @  2?㿐@  & & *    & @  '  & @  7  & @  . 6 & @  &  @ I "'@@㿈@  & & *    & @  '  & @  '  & @  7  & @    &  @  @ @㿐@  & & *    & @  '  & @  '  & @    &  @  @ @㿐@  &  & 7@    &  @ ! " @`@ @4@& 㿘@  & & *   &  @     & @ B@㿘@ 㿘&@  &b@ "@ 2 ?@X@   '''''''`@П@X ?ؠ''''''@ ' '\䀢' @  `<П@Ā @` 'L  |'P/ / / / / / /  @ 6?@ L $  ( Ho`@' ,a  'x "`4 "`:`?"`"@|儔+ *@ @ "`< !<'' ! 耊 2@쀤bX`"X@ "X@ܠ`?H/`  ` 2"` @!` .&{ ,  ,`@ m  ܙH/`  ` 2"` @!  B  ??>M H  &!@  ז @ "Xu " #3@!@ʀ@ˀ@̀@ @ L  @Mؤ,` D @LP @   @0  @ @ ?Ho`И!!%%|%%* *@ @ # `!<㿘 'H@ ?  ""<? @HH 6   .  㿘   3  "+ + ? , +  +    2 + + +    ?, $ , $ 㿘` , ,,`  , , , , , ``   ,`  *` 4`㿘  U** ?`* * #*   @ 2`***  z 㿘  @ @  & 㿘  @ 0 &  @ @݋@@@㿈 <"( @@ @b?@   @X?(@ "@   hD "@쀢 쀢 [@!l@`!>@" ,@ @@0?@,?h` D `b b *`  / / * @` ` @" +  2 @@㿈 < "( @@ e?@ "^?@  2 hW? D "@쀢 2K?쀢 [!l@2?? ː!>@", 7? h  D b b *`  / / * @` ` @" +  2 찂? <`@ @ 2?@㿈 h D,`@Z?@ R?@  K? @ =[`ː!l>$@$``@`hD `b b `*`  / / * @` @2,  2 `h`D, `2 @쀢 쀢@?@ H  ```@(`.`.  (`"` ` ''   (( . -  @ `  *` *  `.  /` @  +. / .`     /@(`0(/ @0(@.@ 0( *@0 (`` `מ   0  (`0( @0(@ 0( @ @@ 0( `` `Ϟz㡞  (`@.0((@0( @(@ 0(  . 0(``Ҷ - (@(06`0+ + ++    .  @ (.`+ 0.0.0+    `.  `@ (.`+ 0.0.0+   .  @ (.`@0+ .0.0+ X@ @"@@ @222////€ 4 48 4 @`"H @ @@&@???<4>ncp_readdir: no MEMORY for cache ...<3>OOPS, we expect fpos >= 2<3>ncp_make_open: got NULL inode <3>ncp_file_read: open failed, error=%d <3>ncp_file_write: open failed, error=%d <3>ncp_read_inode: invalid call <3>ncp_iget: info is NULL <3>ncp_iget: iget failed! <3>ncp_delete_inode: could not close <6>You need to recompile your ncpfs utils.. <3>ncp_read_super: get root inode failed <3>ncp_read_super: could not get bufsize <3>ncp_read_super: Failed connection, error=%d <3>ncp_read_super: could not alloc packet <3>ncp_read_super: could not alloc ncp_server <3>ncp_read_super: invalid ncp socket <6>ncp_read_super: kernel requires mount version %d <3>ncp_read_super: missing data argument ncpfs<3>ncp_obtain_info: invalid call <3>ncp_rpc_call: socki_lookup failed <3>ncp_rpc_call: send error = %d <4>NCP max timeout <4>NCP server not responding <3>ncp_rpc_call: recv error = %d <5>NCP server OK <4>NCP: notice message: result=%d <3>NCP: just caught a too small read memory size..., email to NET channel <3>NCP: result=%d <3>ncpfs: Server not locked! <4>ncp_lock_server: was locked! <4>ncp_unlock_server: was not locked! ;Zx0NGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4z!" ,z3$ ?zG R` b(`ht s x%  h2  ph d |    Pl<xs`D8d|x          ( HP (X (t   0 0          (  ,  \              <  @  H  L T  X  `  d  h  p                (  ,  \ t     8   8 o  ( t 8 x | 8              , 0 <                    ,4 DL X dx |           ( 4, 0 4DX \ dp0Dpk@HsX`x |         !!! ! ! "  "L"l""" X"" X"#T##j#$D$X $\ $`$p$v$$%,%L %` %d %% & &&8v&d&w &w &u&'' ' 'L')* t*dt*t,-Pt-t-t-j. . . .. .D .H .` .d .| . . . .. . .. . .. //  (/$/( (/l// H// H/i0l0q 0q 00 181D 1L 1xv1 `12X p2`2d p2y2y2v2223343D 3d3t 33 33 3 3 333 344 4 444, 40 444@x4L 04P4T 04X4`4lx4x4| `4444 4 4 44 4 44q 4555$5<5X5d5t5x5x5x5x5q 5q 564w 68w 6Pu67$8`89(9lz99  9  99: :  :$:( :8 :< :D :H :P :T:\:p:x :|l: :::; w ;$w >(>h>x>w >w >w >u?(w ?@u?T?w ?w ?w ?@4w @8w @Pu@l@w @w @uA AtAw Aw AuBBB(BTw BXw BBw Bw CC,w C0w CHuCDPDDDw Dw EuED~E`yE|~EEyEEEFw Fw FuF\FFG GPG G G G G HH(nH\HpHnHnHHInI\IxnInInInInJnJ nJ8JLnJlJxJJJJK8nKKL$ 0L(L, 0L8LnLnMM,MHMXMpMnNnNHNlnN|NOnO,nOdOxOnOnOOP nPXPlPnPQtRnRXRRRRRnS`nSSSnSTT(nTTTUUnUnUVVVDVnVVWTWnWXPnXXXYLnYtnYnYnYZnZ4nZXZtZZZ[[[[\,n\Tn\t\]](]D]T]^n^Dn^n^_$_8_t____` n`0n`P`ln````ana,naLaXapnaw aw auab(bLnbpnbbbbcc8nc\ncnccccdd4ndXndxddddnde e$ne@eXeeeefhf4hfTkf|hfggXgh Xhh Xh$ h(h, i` idih ipij0 j4j8 jj j k kk l l l lH  lL  lPl` Hldlh Hll ltlx m mm mLo4oT oXo\ o oo ooop p4pHp`plvppppqrqqrvr0s,w s4w sLushssvspttttw Pw Pyz zTz;@?Bx;8? BpB$,TX\d@hlpDxhh#%("<-/4/L5 5(mFH(q,o     "* 0<CP,\ gr@(}Dhhp L % , 7 L dT[ h x  \@x""#%<'p,-/4 /Ld15 ?5JV _+0l/z:FHFHGK Ml NTff\ fgP#l2o<qIoYujPsuz]dL'p\W0| H-<Jbee$  7'dI:l Xkyn<|Jb:G%a6ZLQd_t:48U"+<(J`zTPy@4 6TopLf~.V$@ Qp  * = J6x \: | fL\ vd          O +<P Em R deTt s XH sx c  P   -nl <, O[ m `L o$L Gd dir.cgcc2_compiled.c_devc_inoc_entryc_semncp_dir_operationsncp_dir_readncp_readdirncp_createncp_lookupncp_unlinkncp_mkdirncp_rmdirncp_renamencp_lookup_validatencp_hash_dentryncp_compare_dentryncp_delete_dentryino.588ncp_force_unlinkncp_force_renamec_last_returned_indexc_sizec_seen_eofncp_read_volume_listncp_do_readdirlast_dir.609total_count.610seq.611ncp_instantiateday_nutc2locallocal2utc*ABS*file.cncp_fsyncncp_file_readncp_file_writencp_file_operationsinode.cncp_sopsncp_read_inodencp_put_inodencp_delete_inodencp_put_superncp_statfsread_nwinforead_semncp_set_attrncp_init_rootncp_fs_typeioctl.cmmap.cncp_file_mmap_nopagencplib_kernel.cncp_add_handle_pathncp_obtain_DOS_dir_basencp_ObtainSpecificDirBasesock.c_recv_senddo_ncp_rpc_callncp_do_requestsymlink.cncp_readlinkncp_follow_linkncpsign_kernel.crbit.412nwsignncp_RenameNSEntryclear_inode_R5a5bfea1ncp_update_inodencp_del_file_or_subdirunregister_filesystem_R85f46c0encp_read_super__memmove_R60e2f255ncp_get_volume_info_with_numberncp_create_new__this_modulelookup_dentry_Re3d4e95encp_ren_or_mov_file_or_subdirncp_date_dos2unix__copy_user_R9c5239ebkmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5dload_nls_default_R97fa0c04ncp_modify_file_or_subdir_dos_info__module_using_checksumsncp_update_inode2cleanup_moduleload_nls_R0bc8f3b3___atomic_submemcpyfind_inode_number_R5da89c9fncp_connectncp_make_closed.udiv__scm_send_R1db74495strcpy_Re914e41encp_LogPhysicalRecordinit_ncp_fsncp_negotiate_size_and_optionsncp_write_kernelncp_initialize_search.divschedule_R01000e51ncp_read_kernelinit_modulencp_modify_file_or_subdir_dos_info_pathis_bad_inode_R25a409eaunload_nls_R88dfd7c2xtime_Rf31ddf83vfree_R2fd1d81ckill_proc_R932da67encp_make_openpermission_R9cb6f2e7printk_Rdd132261ncp_file_mmapncp_dentry_operationsinode_change_ok_R7b6d21ffncp_dir_inode_operationssign_packetncp_invalid_dir_cacheiget_Rf2d3b9b8__wake_up_Rdecddc1evmalloc_Rd6ee688fncp_invent_inossys_tz_Rbafebf71strcmp_Re2d5255a__wait_on_super_R60631b72register_filesystem_R5b7afd0fncp_unlock_server__scm_destroy_Rc4a7e861dput_Rb697b4beiput_R2551b96fncp_igetncp_del_file_or_subdir2ncp_conn_logged_inncp_init_dir_cache__strncmp_R8c5ff0fd__bzero_Rdd42e263ncp_lookup_volume__up_R450143b0d_rehash_R6db84970__ret_efaultncp_notify_changencp_ioctlncp_obtain_infoncp_negotiate_buffersize__module_kernel_version.uremncp_date_unix2dos.rem___atomic_addd_instantiate_R5a458775fput_R0743d661kfree_R037a0cba__down_R4663c8e5ncp_mount_subdirncp_file_inode_operationsncp_request2strncpy_R328a05f1ncp_close_filestrlen_R97255bdfncp_open_create_file_or_subdirncp_symlinkncp_ClearPhysicalRecordd_delete_R4a8b07d1ncp_symlink_inode_operationsschedule_timeout_Rd62c833f__get_free_pages_R19d9ac40ncp_disconnectncp_free_dir_cachencp_search_for_file_or_subdird_alloc_root_R38df921fncp_read_bouncencp_lock_serverncp_mmap__memcpy_Rbfaaaa73ELF|4( 㿘 `@ `0?ꀦ`4 !@$  &?@    @ ,`2@   #`@ `@㿘-   @`` `@ !`!h!H &!H`@h) "`    %   `"`"  -?@@ &!THo`>""%%|%%* *  @ # H*o`@@Ho`>""%%|%%* *  @ # H*o` !` @@@`!#@`   | `2`*`@ 2 " @ 2 @  @ ?  % @ @@@@h"` @`  `㿘#` !@@  $@  "W   "R    2 J   !L 2` "@  @ *!L!P!@` !"! `&!&! !!P 2 ` @  @  &@ @` 㿘@`@"6  ' @&@㿘 @  & ?$?"㿘 @   @ "0  a@   `","0"4㿘@@@@@ "`㿘)    @`  ``2XX  ? !! `'<@ ?򀦠  (@  ?􀦠 @   <@ ?@("@ u ?#@jX , € @ G@ C@ ?@ ;@ 7    ? 8.?@@   ;  *` @    ?$? 8?@@  ?  @@ ?ꀦ   < @ `@` @  @`  `㿘` ` @` ` @` `㿘@ `"  㿘` G `D` @    `@ 0@" @@ @  @  @ @@ *"@   "㿘 ``  @``8?@`    @@@@ < @ 㿘 ``  ``<@`H`8?@`    @@@@ <@`<㿘 `" `<`  `@`<`<`@@@㿐 `" ` @   $&@@㿐 ``  ``@@`< q `@+     @  &`@&<`8?@`    @@@@ <`< @`<㿐 ``  ``L@`@`8?@`    @@@@ <`@`L `H@#\㿐`D '  `  `@`<@  ͔ `$` @-   `<`@@  9` @ 0 @   `"  2@< @ o  ` `" @ o `g @"e`9@  $@ 74  @  @ @ , , 4   2 @>  ` `"< @24`9,`*2 @2,`9 ?$` ,2 #\`<#``@@ @2`9 `< @   $@`9 2`8@ `8 ` `4` `D&`4`L.`8 @@㿘 `"`<`  @`<`<`@@?@㿐 `" ``  `<`d@```D#\`<`@`@@@㿘 ` `<`  `\@`x`<`x`|@@@P ``  `<@`D@ <`<#\`@`D@`H  `L &`L@`L@@㿐 ``  @`<9 "`D@ `D#` ?&`D`<`@#\`D@@㿘 `"`<`  @`<`<`@@@㿈 ``  ``@@`<  `@3  ? '? ''`< #\ @&@㿘 `"` @ @@㿘    2  ? @ @@ !* 0 2 22 " "@` ""#` 2 㿘.`2 Ҕ  # @  # # 3 # ``" ## "` "㿘 "`@"?"㿘   /``D`@@` @$ @/ @`@/  /?/.*? 㿘  `` `D@    @  "$`  $``$` 4`  ``" $@$`"`  "@@ Ҡ 㿘``@ ). 2   %`2@` 2@@``"`""$@$` ` `$`  @$`@0@ 2`  " 㿘  @  "`@"?"㿘`  @  $` $` "@, $`?(M?"<  Fd B? > @  8` .?'''' 'L @P`  @I    @?&@`$€㾐 @ _?, @2  J?`," $ - @L /"@ 2   $@ /?@ "('q@  $?@ /,@@2Ų@ 0  @0@?@ `? )`   "`  8(: @2   " 8( ` 㿘&   &@  ` "`@`a@` "`㿘 ?  ` :  * @   ` @   㿘   %  : * @:!'   " ` : * @  ! ! #`" +( !  a4! ! `` U  a4`㿐   ' @  @@ 0'  2"q  "`  "  2`  8( *  0  ```  #8(   㿘`. 2`@ ,! @@`,`!@  T"@ @@,2` "  B >& 9   @ )`"``   @  @@\    &` "`0 @ 0 @ 㾐' 2 @ <8     @ 㿘  v  2  㿘!# `@  !cp  $`㿘 6 "`  - W 㿘  ``  "` @  2   !@ @0@  2` `z@ w`2 ` ;@ 8 `+?" ` "`  2 `@`"6?2찄?Ȁ!{    @ˬ @ ` @  @ <8   "   @2  `` %"``@$?0@ @ @@   $ @ ``  "`@㿘) !`@ `@```@`9 22` `T`@` <H      @0ː@$ € @ .`9&` &`$` "`` +`  `@    @`` "` ?&` &`&@``  "` `$ "<  6`  "<  2 ` ?p n `@ !`@ @`@` G"@D  @1  "$  & "("`@2 ( "`2 `2  "  ```$` @  @2@`"  `@@@0  @   @ @@6 㿘 ` d d `@@  @ 8?@ `@ @@@ <  & ?&  b& &`  & ` & d& d. 9& & & $ "㿘 9   ?& b& & @ 0 @ @@㿘 9 /  8 ". 9 4  `D& 4`L. 8 @. 9 "   ̒ @` "`@ @ @㿘  +-`  : * :?%. @ `4 `` 2`@$@`$` : *  `??㿘@ ``     ! @ ``       @@ 㿘! 6#`  : @* `$ :* @  !$ `@ $` `:`@*` ``:` @*` "" ""`` `:`@*`㿘#` `:`*`@ `@!@ $ $`@@@@@@㿘 9  @ `  8  ` @ @`@` ` `L@ L ,  `4& , . 8`  2 @``@"@(`@ `@ @ 9` @  8 "  4` `D& 4. 8`L @ 㿘 ` `  @@  \%`  T `$   $!i@'#@ G#  `d@ `;  $@ <' T T@ "@ & T T@ @ @ @0@    @ @`㿘 `8  `2 @ Ȓ` @ "@ က!#`@,   &_< "  @   ,@6  h`$@   h €?@ "  ~ h z  v @0q# d`$ ,`<`" @ @@ `" h "   " @ ? &`&  " / 6   &@ &6   (@ 6&@&`&  X!X@!X  `$$`  @ @ 㿘  @ W` `!Q`"=` ! Id E A@ 5@ `d@  ' ' $'  7 7  ' h"  €?   €  " @ ?' @ 㿘  ` 2@  2   @ @ @ "   $€  @`` `h     @㿘 ( 8  @ y r`%` `  2    " 2 `   $@4 $ " &$$  $ `" ?`'`'`'`'` '?<!<@`!< `   @&`&`&``&`А?&`&` '@ @ @\`   @  ```$$2 " `9$ 2`9 '`9 ` @ ?`8  ` @ @`@?` `L@s`,  `4&`, .`8?<!<1 @1 !<" ,  'x" s7|  X!X@x2!X`9 2`8@ `8  ` `4` `D&`4.`8`L @0 CB$ "$ 4!#`@2!  @2! \@ @  ` \@ # ! ` "\@ @@l@ $` 4  `  @  @ @㿘)`^  @  `  d` `  9 2`8 &@ <`$@ %   @ @@% `8 2 @  @ @@0v@  @) @@"  d0@ `0@`0  d X   !! `2 dF? d `A "7  h -`€?-` 2@   h      @ `$$`@@ ` '@@ x @   ` `@ ~`9 ` @  h`8  ` @ @`@ h` `L@`,  `4&`, .`8 h  H€? H''`X!X@!X @ d  <`@@ `"`9 h " `9  "`9 @`9 2`8@ `8  ` `4` `D&`4.`8`L @ @ 㿘(@  ` ``d` `( @<!<`d( !<& @ 㿘 `@  2`    `$$@ v d "q  g  "@ <]@ 2R`$`1  h"  d€? d`   h      @  `$$`2 `9@`9@ `9 2`8@ `8 "`$` `4` `D&`4`L.`8 @`$@\@ 㿘@   @ %`  &@ <|@ s``T    ``$$@ 2E`9  @2@`9#; d`"8`9` "4`9 h" ` €? d`    h      @  `$$`2 `9@@`9@ `9 2`8@ `8 ` `4` `D&`4.`8`L @C@0@ 㿘\@  ڐ@  `  `` N . ŀN .O@ . ``O` .`@ "@@ < ?`@ &@@ <`L L  @ @ `@#?@`   ``@@ 2` $$`2`@@ ` ` @ ` " `h "    "  @  h      @ @@  @  `  ` `@` 0 @@@ @ 㿘   N .  "ѰN .ǐ@  ư` ``@ "@@ <  @`@ :@ 2@   h " `9  "`9 @`9 2`8@ `8 ` `4` `D&`4`L.`8 @@@b  L  `L$    @  @`,   4&`, .`8 ` ?@@?& `"`4 h " `4  "`4 @`4 2.`8 D&`4.`8 L @@  @@  `$$`2 @@  \a  @ Y M`?@ @'''` L  @`  @ *@ O  O`?`"@" " "$@`   ?@ @0@ 㿘 @ `  `h `  @ 0:@  6?`  @@ $$$$ $$`$$$$4$ 4$ 4$" P*`" d""d@`2d*`* $P $$@ @0㿘$  $P*`" d2@$"d@`2d*$ 2 $!$@ @@$$ $ @$ @ @@㿘 ` @$P  & `` 㿘@c$ ?0( "" @ @K ?( * $P@@ 2 (@" 2@X$  @ 2` @o?`!  `   @,2`%$! .` 2 @.`2`@ $  "` @ 8? 2 ` .@ 0* ,@ 0# 2 @  @    @@ <@@ @ @?㿘!  @  ` `` "`㿘! 2 ! 2! "A 1   &  `@ `   ` ?& Ho`|儔+ *@ @ "H* ?` 㿘!   `2`@ ` ?$ "  @ # 222 ?(   2 @"  @""@  2  㿘 "  @ 2   㿘`   #` @`?`*   J`" ` `   @   2㿈'H'L'P'T`@@@`' P'/ "y LP@'@`@@`@@@@@@` @ C  -` 4`4`4` ?* ` ".7 2$3@@ @@`@` @ `  @@ 2 `@  /@ L '쀢  2| T  @L H@ P&4X@$ ?$ @ #`"?@ ? $@  o@$  @@$$ 0  @ ,  " ??  , @ @??,  D@0@$ &    $,  "$&,  $@`$    ,  @3 3 3 " @ ?" *@ "@ $`  `$`$@㿘@}$  ?@  ?ꀤ  @     @$@ @㿘@ Ր@@X    ,   2 2  ,``"`4  # "  ?, $@@ 2  ,  @ , 㿘 @ 㿘  J@ 2  &J@ *@ @  㿘 `@     ? "@ ""`㿘' @  `(@ 6     " `@Z`@2@? @"`  @aHY`(d?d 2d"22"2d 2`0d"2  (d"2(?#1d 1#"d"11? (  0 !"`X!XX!XaH#aHX@ <`@''`'`'` ''``'`''В @    #@㿘@@ 㿘@㿘 b@  "`  &  ``?  d?" * * " "" `c " # " "` "㿘'  %?#  2 @ 0  2  "`$   "`" `" "  "`  2` "? ( ""   㿘&!X#`!T !4!@` 0``  "` ?* `  @ *` "!@`2@`2@dd  `   "@ @  @ 2`  `" ` `   $g`` `2``2&!X@ `  "`@  $` .`&`&` |&```2.`@`0&`0.`E ` # S&` `` 8!H5 @2`` @2, ` ` " `$     !"@!` &!&!@U`$    @ `.`@ $` 㿘!X`=  `8&: "@@4/,``` ,0 @$`$@ `$ $ ,`$ @!H `2` `**` $` ,`,` $` 㿘 `    @   *` @ ` *@ $ `  $ 㿈`9 ' E5 &' `  `     / + ' #     9 ?1 F! %%`$$`#`""`#' &    "@:`@$  㿘@ <@ `     &@ :`@ $  0 㿘@ <@ ` C<&<@ `?#@ &<2@`2 "@`2 "@`"  "@`@ `?"@" "@`@ `?`"! "`     &@ :`@ $  㿘@ <@ ` <@@  @  fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: creating service nfsd<4>nfsd: terminating on error %d <4>nfsd: terminating on signal %d nfsd: last server exiting nfsd_dispatch: proc %d nfsd: failed to decode arguments! nfsd: failed to encode result! <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! %ld fs/nfsfs/nfs/exportsfs/nfs/time-diff-margin<4>nfsd: incompatible version in syscall. <6>Installing knfsd (copyright (C) 1996 okir@monad.swb.de). nfsd: nfsd busy, remove delayed <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: GETATTR %d/%d nfsd: SETATTR %d/%d, valid=%x, size=%ld nfsd: LOOKUP %d/%d %s nfsd: READLINK %p nfsd: READ %d/%d %d bytes at %d <5>oversized read request from %08x:%d (%d bytes) nfsd: WRITE %d/%d %d bytes at %d nfsd: CREATE %d/%d %s <4>nfsd_proc_create: file handle not verified nfsd: existing %s, valid=%x, size=%ld nfsd: REMOVE %p %s nfsd: RENAME %p %s -> %p %s nfsd: LINK %p -> %p %s nfsd: SYMLINK %p %s -> %s nfsd: MKDIR %p %s <4>nfsd_proc_mkdir: response already verified?? nfsd: RMDIR %p %s nfsd: READDIR %d/%d %d bytes at %d nfsd: STATFS %p <6>nfsd: non-standard errno: %d <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! <7>add_to_path_cache: path length changed, retrying get_path_entry: found %s for %s/%ld <7>free_path_entry: %s in use, users=%d <7>lookup_inode: looping?? (ino=%ld, path=%s) add_to_fhcache: %s/%s rejected, no inode! find_dentry_by_ino: getting root dentry for %s find_dentry_by_ino: %s has no root?? find_dentry_by_ino: found %s/%s, ino=%ld find_dentry_by_ino: %s lookup failed find_fh_dentry: No SuperBlock for device %s.find_fh_dentry: No inode found. find_fh_dentry: Found a useless inode %lu find_fh_dentry: retry with %lu find_fh_dentry: dirino not found %lu find_fh_dentry: %s/%s lookup mismatch! nfsd: fh_verify(exp %s/%u file (%s/%u dir %u) <4>nfsd: request from insecure port (%08x:%d)! fh_verify: Bad version %lu %u %u: 0x%x, 0x%x fh_verify: Security: export on other device (%s, %s). fh_verify: no root_squashed access. nfsd Security: %s/%s bad export. fh_verify: %s/%s permission failure, acc=%x, error=%d nfsd: fh_compose(exp %x/%ld %s/%s, ino=%ld) <3>fh_compose: fh %s/%s not initialized! <3>fh_update: fh not verified! <3>fh_update: %s/%s still negative! <3>fh_put: %s/%s has d_count 0! <7>nfsd_fh_free: %d fixups freed <7>nfsd_fh_free: %d paths freed <7>nfsd_fh_free: verified %d, put %d <4>nfsd_fh_init : Could not allocate fhcache <7>nfsd_fh_init : initialized fhcache, entries=%lu <6>NFSD: ino_t is %d bytes, using lower 4 bytes <7>nfsd_fh_shutdown : freeing %ld fhcache entries. <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! <4>fh_lock_parent: %s/%s parent changed <4>fh_lock_parent: %s/%s unhashed nfsd: nfsd_lookup(fh %p, %s) nfsd_lookup: %s/%s crossed mount point! nfsd_setattr: size change?? <4>nfsd: inode count == 0! <4>nfsd: wheee, %s/%s d_count == 0! nfsd: raparms %ld %ld %ld %ld %ld nfsd: write defer %d nfsd: write resume %d nfsd: write sync %d nfsd: write complete <3>nfsd_create: parent %s/%s not locked! <4>nfsd_create: dentry %s/%s not negative! nfsd: Caught race in nfsd_rename: no inode in rename or err: %d. nfsd: readdir result %d bytes, eof %d offset %d nfsd: freeing %d readahead buffers. nfsd: allocating %d readahead buffers. <4>nfsd: Could not allocate memory read-ahead cache. <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: exp_parent submount over mount. nfsd: exp_parent found. nfsd: exp_child mount under submount. exp_export called for %s:%s (%x/%ld fl %x). <7>exp_export: i_dev = %x, dev = %x exp_export: export not valid (Rule 3). exp_export: sub-export not valid (Rule 2). nfsd: created export entry %p for client %p exp_do_unexport: %s last use, flushing cache <4>nfsd: bad dentry in unexport! unexporting all fs's for clnt %p nfsd: exp_rootfh path not found %snfsd: exp_rootfh(%s [%p] %s:%x/%ld) nfsd: exp_rootfh(%s:%x/%ld) exp_rootfh: Aieee, NULL dentry nfsd: exp_rootfh export not found. exp_rootfh: Aieee, NULL d_inode exp_rootfh: Aieee, ino/dev mismatch exp_rootfh: arg[dev(%x):ino(%ld)] inode[dev(%x):ino(%ld)] <4>exp_unlock: not locked! crossmntsunsecurekerberosuidmapwdelayasyncall_squashno_root_squashroot_squashinsecurerwro%s%s,# Version 1.0 # Path Client(Flags) # IPs %s %s() # %d.%d.%d.%d)created client %s (%p) <4>nfsd: bad address count in freeclient! <5>nfsd: couldn't validate string %s nfsd: initializing export module. nfsd: shutting down export module. <4>Weird: hashtable locked in exp_shutdownnfsd: export shutdown complete. <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! unknown<3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: initializing lockd <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: loop in repcache LRU list <4>nfsd: all repcache entries locked! <4>nfsd: disabling repcache. <4>nfsd: bad repcache type %d nfsd: RC_REPLSTAT/reply len %d! <4>nfsd: cached reply too large (%d). <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: ressize_check p %p base %p len %d <3>fh_copy: copying %s/%s, already verified! <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! rc %d %d %d %d %d %d %d %d %d nfsd X<<\<D<<H@P<d<Dld<DD<@ ??BBEEFFc @GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1author=Olaf Kirch .symtab.strtab.shstrtab.text.rela.text.rodata.data.rela.data.bss.comment.note.modinfo__ksymtab4d!K`  ,4:   E0J0SY^blP  B     < @D H X(` l p x"  > $   $H L P\ l |       HP//@ D        #  0 4 @ (HL (X  @ @   p | h h        0t (x ( 0 0* *  @ @    L    L '(+8 D@ DP ` l D D    8P l X X     0 @  P    07 @ t |    / 8 T h x  |             $ ( , < @ L \  p  x |              @  @   0  0   (  (   . ( 0 8 < H  P  T l  x    3            ( < @ P  X  ` x:            (X 0` 0d      h h ( 0@`-    3  : ) $) 0C @C D HL X        @ L T \ h h    ( ,DPd h x ( (   H H=(0D H X h` hht       LXl p       @ T Xl       0 0 ( , DX L\ L` Lx   L L,< LP LT Ld \h \l Lt \ \ \ \   T T  T `  `$ T0 `4< @D \ T` Td T (  T T  (< P@ PD\d `h `p `D<,t | |85X;,XD   < 8 8    <  H T `  @ @ @   D  D  D 4 8 < 8 @ < D < H L  <  8  8  < ! \! ! ! !, !< !\ \!` \!l L!p L!t !| ! `! \! `! `! T! T! `" " " "l "p " " " <" <" " " " #T#h #l #p#|# # ##$ $4 h$d 8$t 8$|$ @$ @$ @$$ h$%(%`% % H% % H% % H&\ &` &t& && &&& & & && & & & &' ' 'P'T ' ' ' ' ''' ' 8' 8''($ (( (D(P `(X `(\(d( (( ( (( ( ( (( ))$)< )@ )L)\ )p ) ) )))) )) )) @) @) @) * *$ *0 *8 *@*H *L *t * * * * +< +< + +$ +,+0 +8+H+P +T +\ + + , , , P,,  P,L ,P ,X x,h x,l ,t,, , ,, , , , --, -< -D -H-T- @- @- @- 8.. 8.( X.0 X.4... D. D. D. / // 8/ 8/$ /( </, /L D/ // D/ D/ / <// L/ L/ L0 L0 00  0$ T0( T0, T0L T0\ 0` 0d0l @0p @0t D0x 0| D00 0 80 80 0 00 0 800 80 <0 <0 0 11 1 11$ 10 <141< T1@ T1D T1L L1P L1T L1\ P1` 1d P1p1 81 81 1 1 11 1 811 <11 <1 <1 8122$2P (2T2X (2p H2| H223 3 3 3 3 3() 38) 3< p3@3D p33 3 3 3 3333) 4) 4<C 4PC 444 5 5525,) 585H5PC 5355 5 5 5 6, 86064 86T66 7$7,7 84 88 8\88838 9 9P9d::8:h X:l:p X: x: x::;T;h ;x ;| l; l; l; l<< l<, l<0 l< < < < <=0=<B=p= = = (== (> H>  H>$>D??( p?,?0 p?p? ? ? p? p? t? t? ? ? @@ @0@ @ @$@( @0 p@< t@@ @D @T @\@` @h@p@|@ p@ t@ @ @ @@ @@B@ A A3A$< A<< AA2A A (A (AA A A B B  XB( XB,BD B B CC CDD$3D@Dd (DhDl (D HD HDDE8E`EE pEE pF,FLFp3F F FFG) G) G(3G@ GD GG G G HHH pHH pI I(2I8Id3I3I I II I J JC JC Jd K(K0K@K\ pK`Kd pKKKK3L 3L L8 LM MTMtM M MNNN N$ N0 N4N8 NNO O O$8O0 O4O<ODOXOpC O|C O3OPP$) P,) P0PH P`%P pPP pPQQQ`QQ&R`RRRRSS(< S8< SDSxST, T0 T@ TL T\ThBTtT3T T U4 UT U\ U U U U VVDVtV lV lV V V V V V VV hVV hV V V hV lV lV lV W WW hW( hW, W0 W< 8W@ WD 8WHWP W\ hW`Wh W hW hW W hW lW `WW `W WXX(XHXhXXXXYY(YHYhYYYYZZ(Z xZ x[t [x 0[| X[ [[ 0[[ X[\ \ x\ \\ x]< ]@ ]L ]T ]d]]]^4 ^8 ^@^ ^ ^^ ^ ^  ^^  ^_ _ P_ P_ _,_/_`\ `d`h `p`x` ` `` ``` ` ` ` `apa/bb0 b4 b8bL bP b` (bd (bxb b b Pb Pbbc pcc pc0 c< c@cD cX c\c` cx c cc c c ccc2cccd d  dd d  d, d0 d4 d@ dD dH dP d` dd dt dx d d d d d dd d d d d d d d el e| e e e e e e e Hee He e e e e e ef  |f |f< fD f xf xfg g g  gX g` gp gx g| g gg g gg (gg (g xg xh8 Hh@ HhDhP PhX Ph\hh Xhpht Xh `hh `h h h hh i pi  Pi( hi,i0 PiD XiLiP Xi\ pilii i Hjj xj xjjk k k k$ k( k0k<k`kkl8 l< l xl xl/lm xm xm xmm`/m!mm m nL nPnT n` n|n xn xn!o oo o( o, o8 o<o@ oD |oH |oT oX ot xo| |o xo o o  oo  o |o |oo o Ho Ho p p0 xp4/p8 xp< pH xpL xpPqr@rprBrrr r r rr r@ r@ r r r r r ,r ,s s s( s0 sd sh sl sp st s| 0s ,s s s 0s ,s ,s s s 0ss 0t 0t ,t, t0 t4 t@ tL tP tl tt t t 0t 0t t u u u, u0 u u u u u u v, v0v4 v8 4v< 4vL 4vP vTvX vd 0vv v v w8 w@ wH wP ww ww w 0w 0w 0x0  x4  x8xPxxDx x x Hx HxyDyH xyL xyd yl yx) y|) y y y y y xy xy y y yC y y y< y y y y y y z z z C z z z< z z z$ z( z, z0 z4 ztzzz|0|@|\|} }t}}~~ dt0@Xh$4Pdt   L 8T 8d h t |  8 8     |    8 8  ( 0 8   $ ( 4 < D D, 0 T ` t x9  9 , (0 4 (8 P TX 6,$ 8<@9LX (\`x 4|  8  ? $<@X\`dxp| `@ $8h< @X\A`x||4LLPLTTXTxh / q$r(|      %<*,8 F SY bDnL X PpHS  ( (  4  8\, l?N^poX`xh@hX|LS X 8< @1D=HNLYTd\s`X4|X,P|hL !' 3 8>"N#<a$x%t%t,&@S 28hlptS Z<xb|Z+[ 06\P@nTRfPf_v`hgmmp,S p`S qqrS r,0 '0t\>tpLJ4YxxSk yDt8@xS (?(Szl\LdhK*<Hkr{0z@,l.EbP]s`p88& 'a84  Mb 8qV`Ul }  5 ; LH b g z ( j`p ( 0  @0   ( f  @ #/ 1st E;  O gd\@ u   $ 5\` `   %T Ol &yD 4 ; G Z fdX s8  p t F` %L o  n8   ( =|x T k  z` GP   p`| L  d  & 5 D Y n` T|       (4-p>|(V28lew.DZ<dDL R}l $2BO`s|/,;@ r1X+?o$hPVbogr8=Lr ep,(&AX@R]]q|$3IPH|\p:L"/nfssvc.cgcc2_compiled.nfsd_activenfsdnfsd_dispatchnfsd_version2nfsd_version*ABS*nfsctl.cinitializedtime_diff_marginnfsd_proc_read_long_maxminnfsd_proc_write_long_maxminnfsd_proc_initnfsd_initnfsproc.csvcbuf_reservenfsd_proc_nullnfsd_proc_getattrnfsd_proc_setattrnfsd_proc_lookupnfsd_proc_readlinknfsd_proc_readnfsd_proc_writenfsd_proc_createnfsd_proc_removenfsd_proc_renamenfsd_proc_linknfsd_proc_symlinknfsd_proc_mkdirnfsd_proc_rmdirnfsd_proc_readdirnfsd_proc_statfsnfs_errtbl.398nfsfh.cfiletabledirstablenfsd_nr_verifiednfsd_nr_putnfsd_next_expirefixup_headpath_inusenfsd_nr_fixupsnfsd_nr_pathsfind_cached_lookupfree_fixup_entrycopy_pathadd_to_path_cacheget_path_entryput_pathfree_path_entryfilldir_oneget_parent_inofind_fheexpire_fheadd_to_fhcacheexpire_slotexpire_oldfind_fhe_by_inofind_dentry_by_inofind_dentry_in_fhcachelookup_by_inodenfsd_cached_lookupfind_fh_dentryvfs.craparmlraparm_cachelast_ino.420last_dev.421export.cclientshash_lockwant_lockhash_counthash_waitexp_device_in_useexp_parentexp_childexp_verify_stringexp_getclientbynameexp_do_unexportexp_unexport_allclnt_hashexp_flagsexp_unhashclientexp_freeclientauth.clockd.cnlm_fopennlm_fclosenfscache.ccache_initializedcache_disabledhash_listnfscachelru_headlru_taillru_put_fronthash_refilecomplaints.340nfsd_cache_appendnfsxdr.cnfs_ftypesinited.326stats.cnfssvc_decode_fhandlehandle_sys_nfsservctlput_write_access_R7303c0dfxdr_one_R43e0cbe8nfssvc_decode_renameargswrite_inode_now_R650d58fanfsd_renamejiffies_R0da02d67nfserr_fbignlmsvc_invalidate_client_R8ce97e25nfsd_cache_initnfsd_fh_initsvc_process_Rcbb7a04fget_super_R20168d42__this_modulelookup_dentry_Re3d4e95enfssvc_decode_voidexp_delclientrpc_system_err_Rc39cf57ecreate_proc_entry_R32bf8be1nfssvc_release_fhandleexp_rootfhnfserr_nodev__copy_user_R9c5239ebnfssvc_encode_readdirressprintf_R3c2c5af5nfsd_openkmalloc_R93d4cfe6iget_in_use_Rdbc3aa25stack_top_Ra6cab6a7__mark_inode_dirty_R19c75706__module_authornfssvc_encode_readresexp_unexport__module_using_checksumsfree_pages_Rb5136506cleanup_modulesvc_exit_thread_Rbfd31ffe___atomic_submemcpyremove_proc_entry_Rbd046bdfnfsd_racache_shutdownnfsd_permissionnfssvc_encode_entrynfserr_isdirnfssvc_decode_createargssimple_strtoul_R20000329.udivstrcpy_Re914e41enfsd_time_diff_margin.divnfserr_nametoolonginit_moduleexp_addclientnfsd_programlookup_inodenfserr_dquotnfsd_creatextime_Rf31ddf83nfserr_existnfssvc_decode_linkargsexp_getclientnfssvc_decode_symlinkargsnfsd_fh_flushnfsd_cache_shutdownnfsd_syncnotify_change_Rb3ed7a7fexp_writelockpermission_R9cb6f2e7svc_proc_read_R866b52d3printk_Rdd132261nfsdstatsnfsd_setattrnfsd_modcountinode_change_ok_R7b6d21ffnfssvc_encode_diropresexpire_by_dentrynfsd_unlinknfsd_xdr_initnfs_oknfssvc_bootsvc_recv_R2b138b62nfserr_nxioexp_readlocknfsd_stat_init__wake_up_Rdecddc1enfserrnonfsd_cache_lookupnfsd_readlinkexpire_allnfsd_export_shutdowninterruptible_sleep_on_Rd492943bexp_nlmdetachnfsd_svcstrcmp_Re2d5255anlmsvc_ops_Rdd64d829nfssvc_decode_readargsupdate_atime_R20016f2bsvc_proc_unregister_R12e280e3nfserr_ionfssvc_decode_sattrargsnfsd_symlinknfsd_debug_Rbf9d1b96nfserr_nospcnfsd_setusernfsd_stat_shutdownexit_mm_R9a7555d6nfsd_nserversnfserr_permdput_Rb697b4beiput_R2551b96fvmtruncate_Rce5a5a31vfs_rename_Rdd924819nfssvc_encode_voidnfsd_statfskdevname_R160820f5do_nfsservctl_Rd4ee4a87xdr_decode_string_R6755aa62__bzero_Rdd42e263lockdctl_Re0896391cap_bset_R59ab4080nfserr_stale__up_R450143b0nfserr_rofsfh_updatenfssvc_decode_diropargsfh_lock_parentrpc_garbage_args_Ra0111550nfsd_cache_updatefh_putexp_getnfsd_truncate__module_kernel_versionsvc_makesock_R0ae1ea96nfsd_readdirnfssvc_decode_writeargs.uremget_write_access_R68f84640___atomic_addkfree_R037a0cbanfserr_inval__down_R4663c8e5sleep_on_R2de891dfexpflagssvc_proc_register_R686eee59nfsd_fh_freenfssvc_encode_attrstatnfsd_readnfsd_lockd_unexportsvc_create_R73d34d67nfsd_fh_shutdownsvc_destroy_Rb91df0bcvfs_unlink_Rdc47e6d0vfs_rmdir_Ra31e2e7enfsd_export_initnfsd_racache_initnfserr_noentexp_procfs_exportsnfsd_lockd_initinit_private_file_Reb61c477nfsd_writenfsd_lockd_shutdownexp_unlockschedule_timeout_Rd62c833f.umulfh_composefh_verifynfssvc_encode_statfsres__get_free_pages_R19d9ac40nfsd_procedures2exp_exportadd_to_rename_cachenfsd_svcstatsnfsd_lookupd_alloc_root_R38df921fnfserr_notdirnfsd_linksvc_create_thread_R96927248nfssvc_encode_readlinkresnfsd_nlm_opsnfssvc_decode_readdirargsnfsd_closenfserr_acces__memcpy_Rbfaaaa73ELF4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp437GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!P  , 2  = B H2QHYN=b  G (/6=DKRY j4x44   h.nls_cp437.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp437register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt              4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%e"d"H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp737GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!$  , 2x  = B H 2Q HY N= b  9 (/6=DK\4j44x ~  h nls_cp737.cgcc2_compiled.charset2unipage00page03page20page22page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp737register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt         4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~#BVW+yM"Z[*{|z A%%%%$% c%Q%W%]%.`%%4%,%%%<%rjZ%T%i%f%`%P%l%} /ask~% %%%%%%LCD67;<FE   "%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~噞Ѐӷͺް01.01kernel_version=2.2.14-5.0using_checksums=1cp775GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!$  , 2x  = B H 2Q HY N= b  9 (/6=DK\4j44x ~  h nls_cp775.cgcc2_compiled.charset2unipage00page01page20page22page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp775register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%%%%$%c%Q%W%]%%%4%,%%%<%Z%T%i%f%`%P%l%1% %%%% %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ͼ󨷵ǎԐѥ噞ᅠƄФͺ01.01kernel_version=2.2.14-5.0using_checksums=1cp850GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2l  = B H 2Q HY N= b   2 (/6=DU4c44q w } h nls_cp850.cgcc2_compiled.charset2unipage00page01page20page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp850register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~oBPQy9:=>Z[deA }~z _%%%%$%^c%Q%W%]%{|%%4%,%%%<%Z%T%i%f%`%P%l%G% %%%bn%CDH`aTUpcqXY%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ǥޅͺ01.01kernel_version=2.2.14-5.0using_checksums=1cp852GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2l  = B H 2Q HY N= b   2 (/6=DU4c44q w } h nls_cp852.cgcc2_compiled.charset2unipage00page01page02page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp852register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RSQTUVWXY Z [ \ ^_N.J*01F&45D$3%%%%$%E%8c%Q%W%]%9%%4%,%%%<%:Z%T%i%f%`%P%l%;<=>?% %%%O%/@ A!B"C#62L,!K+7H(M-I)G'%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~쭧諶ࠢ묦窵ͺ01.01kernel_version=2.2.14-5.0using_checksums=1cp855GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2l  = B H 2Q HY N= b   2 (/6=DU4c44q w } h nls_cp855.cgcc2_compiled.charset2unipage00page04page21page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp855register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~10^_%%%%$%c%Q%W%]%%%4%,%%%<%Z%T%i%f%`%P%l%% %%%%%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ϾѮЯ󨷵ǎԐᅠƄ졌ͺ01.01kernel_version=2.2.14-5.0using_checksums=1cp857GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q HY N= b   + (/6=N4\44j p v hnls_cp857.cgcc2_compiled.charset2unipage00page01page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp857register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ %%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp860GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!8  , 2  = B H 2Q HY N= b  @ (/6=DKRc4q44   h 'nls_cp860.cgcc2_compiled.charset2unipage00page03page20page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp860register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt         4ELF4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp861GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!P  , 2  = B H2QHYN=b  G (/6=DKRY j4x44   h.nls_cp861.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp861register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt              4ELF4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp862GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!h  ,2  =BH2QHYN=b  N (/6=DKRY ` q444  h&5nls_cp862.cgcc2_compiled.charset2unipage00page01page03page05page20page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp862register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt  !            4ELF4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp863GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!P  , 2  = B H2QHYN=b  G (/6=DKRY j4x44   h.nls_cp863.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp863register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt              4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$j&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~""%%%<%$%,%%4%% %%%"H" `abcdefghi@}Q%  !"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ܡ%¢åǨ01.01kernel_version=2.2.14-5.0using_checksums=1cp864GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!8  , 2  = B H 2Q HY N= b  @ (/6=DKRc4q44   h 'nls_cp864.cgcc2_compiled.charset2unipage00page03page06page22page25pagefepage_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp864register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt          4ELF4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp865GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!P  , 2  = B H2QHYN=b  G (/6=DKRY j4x44   h.nls_cp865.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp865register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt              4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%@ABCDEFGHIJKLMNOQTW^""!%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.14-5.0using_checksums=1cp866GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!$  , 2x  = B H 2Q HY N= b  9 (/6=DK\4j44x ~  h nls_cp866.cgcc2_compiled.charset2unipage00page04page21page22page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp866register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   %%%%$%c%Q%W%]%%%4%,%%%<%Z%T%i%f%`%P%l%% %%%%%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ցͺ01.01kernel_version=2.2.14-5.0using_checksums=1cp869GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2l  = B H 2Q HY N= b   2 (/6=DU4c44q w } h nls_cp869.cgcc2_compiled.charset2unipage00page03page20page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp869register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt         4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&     "         !"#$%&'()*+,-./0123456789:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1cp874GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q HY N= b   + (/6=N4\44j p v hnls_cp874.cgcc2_compiled.charset2unipage00page0epage20page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp874register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt   8     4ELF4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  ,2pH  =BH2QH YR=b    % ,3D4R44`f l h nls_iso8859-1.cgcc2_compiled.charset2unipage00page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_1register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt     4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    x !@AVW`atjvukw  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-14GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y S= b   5!-4;BS4a44o u { h nls_iso8859-14.cgcc2_compiled.charset2unipage00page01page1epage_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_14register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt   x     4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ `a}~RSx  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-15GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y S= b   5!-4;BS4a44o u { h nls_iso8859-15.cgcc2_compiled.charset2unipage00page01page20page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_15register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~A=Z`^dy}{B>[a_ez~|T9 CGPXnpbU: DHQYoqc  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~㡱01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-2GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y R= b   3 ,3:AR4`44n t z h nls_iso8859-2.cgcc2_compiled.charset2unipage00page01page02page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_2register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&$0^4{'%1_5|  l\  !m]  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-3GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y R= b   3 ,3:AR4`44n t z h nls_iso8859-3.cgcc2_compiled.charset2unipage00page01page02page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_3register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8V(;`"f}W)<a#gJ~K. *EL6rhj/ +FM7sik  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-4GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y R= b   3 ,3:AR4`44n t z h nls_iso8859-4.cgcc2_compiled.charset2unipage00page01page02page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_4register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO!QRSTUVWXYZ[\^_  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-5GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y R= b   3 ,3:AR4`44n t z h nls_iso8859-5.cgcc2_compiled.charset2unipage00page04page21page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_5register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./`abcdefghi:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:@ABCDEFGHIJKLMNOPQR  !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~012345678901.01kernel_version=2.2.14-5.0using_checksums=1iso8859-6GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  ,2T  =BH 2Q H Y R= b    , ,3:K4Y44gm s hnls_iso8859-6.cgcc2_compiled.charset2unipage00page06page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_6register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt    4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-7GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2l  = B H 2Q H Y R= b   : ,3:AHY4g44u {  h!nls_iso8859-7.cgcc2_compiled.charset2unipage00page02page03page20page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_7register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt         4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-8GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  , 2`  = B H 2Q H Y R= b   3 ,3:AR4`44n t z h nls_iso8859-8.cgcc2_compiled.charset2unipage00page05page20page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_8register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0^1_  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1iso8859-9GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  ,2T  =BH 2Q H Y R= b    , ,3:K4Y44gm s hnls_iso8859-9.cgcc2_compiled.charset2unipage00page01page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_9register_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt    4ELF 4( 㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%% %%%%%$%,%4%<%%%%%%%%% #%""H"d"e"!#P%Q%R%QS%T%U%V%W%X%Y%Z%[%\%]%^%_%`%a%b%c%d%e%f%g%h%i%j%k%l%N01F45D3E89:;<=>?O@ABC62LK7HMIGJ.&$%/ !"#,+(-)'*  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.14-5.0using_checksums=1koi8-rGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!$  , 2x  = B H 2Q HY O= b  ;)07>EL]4k44y   h"nls_koi8-r.cgcc2_compiled.charset2unipage00page04page22page23page25page_uni2charsetinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_koi8_rregister_nls_R5baae5bfinit_modulecleanup_moduleunregister_nls_Re47a35d6  8 < Hl pt        4ELF.4(㿈  `6?`@  4. 2   ( &   @  b     " <`@   @  @ C< @`  2 X?#@(X&?ꀢ * * #@``     , @ ?L @ ?L @  `@?  ?$ @@,`@  &X% % @ % % @ 6 ` °? F$@ C$@` L*`  9   ^*`:   @ #$@  ? ?@ $@ $@ 2@*` @` ?$@ @$@  Δ @`  $@``?$`k  `2 c      L "   *L. @   `@*` 2 *` $; 8 4  '.@ @  $@"<`    @@&& '.@ & .@  8@   '?,  +L  @`,   @ *L@` <`@ @@@@t@  * @@ @ * @  @ 2@`@ <`@ @@8@5 -9@  <@ @@` "2< <@ @ @@ @ `  (   ?@ V .QN >  J`@&.@ '>  J@@@"<`  @   > J`@&.@ & .@ > >&h 4?2 X?#@?X 2 X   X`6@  2'̚ `@ "  * :  ."  `  ' *: `/ Ɛ  `f$ ``@?  Ԕ @%/@  * @* @  % @ X@@   @$ % X%X@@  * @@@ @ `@> 0@   "  <`@   @ ??2` ""$@ *@ @* %@ @ @%@ x% r% ''72(`4d`  0@ 蔧 <@  @ ?2`* $ @ @$2/<+4*< 0@  <@ @Ȕ ? "*`* $ @ @$<@ А@  @ $`  ̀`2%  :%  B=`@2`2`?@* :  '``%``B =  %% %  D 6 3` 82+ @+`@   q?@ X@@ d  3`+  +`" @  D + 3`@+`% X%X@ 4`   "<`@ @`  %L ",     $ %  ;  B= ( "L? '2 ?%   $ 8%  B=&㿘`X`2  +  * @ .`@  2r`X`@`  `* "@` "@+?` " ?  , ? : `@?`@ @K`X@ F  @` `* H/`` `` @  4+`X $` H/` ``@`  4 `X  `@`X@ ?. #2`@ d +* 4* `* @`* 2`Jx)2`. @`*` @ $4`@ x@ x9@ @ " 4`@ 4`4`&4`* @`*` `* 2`Ȣ 4* *  4* `* @`*  غ`@M@ `D .5 3J  M` ` `JK ``JK  ``JK "@`3*` `*  ?# ` @   G3?*` `*    5?* 4@7x2`,@`*` @ 4@@ @ @  $ 4@ 4* `* @`* 4 Β?*` `*   ?  I  #`*`2`@ @ @8 6L 2@ @ "Y@8' @  @ @ ";`@  @2@2 @ "22h?* `*     ˰? ̰ s h@  ?-'   4 ( "4 (!m4 "`  4 "$ d $ d 4 $ !$` 4 "$ d4 $$ / 4 (# & J  M@   M`J@ ` M`J@ ``@  2  3! !$4 "4  ) 2# "J  M@ ` `M`J``M`J ``M`J"@` " 4 " ,  $ d4 $$ ,?*` `*    ` @ % 4*`  $   4 "$ d4 $ 4 *4 (4 &@@    `)-`--?`  ƀ   `B > )-` *  ? -?  ƀ ڤ `B >  * ?   ?#  * *  *`3 @) x3 ,  * @ @  ƀ  `B >  *`3  ޡ3  *  ?  @   ` ƀ | `B >  *  ?  @ $ 'B` ,@ @ ƀ R `B > `&@8 `@ ƀ 0 `B > @8 2L @``2@`@ `ƀ   `B > @`2` 㿘 2`DM?a2#` @`D?`@  2`@<?@`D`D, ` (" $` * *  ?    @  h@@  ? ,!` 3 "# d3 $# ,`?* # @  㽘+` `@@%`D - @`@ 2`@&@@,@``@ @ 㿘. 6  #`. %* , @ @  !? ``@,  @``$  $` P`,`2 `2`Ґ -, *2@   " ?@ 2`/ 2 .  2 5`@  ,`@  2 @` 2 ,` 5`@ @ ZX!L@ T 4 @ KIL@@ ?> L@ 7' @3   , 2 @  *  2`@ ,  2  @ @  "'1?@*&$@ 2L@ @5@ -5`W,`?2`# , 0!1?#* @2` B, 2`,`2 * @*` 2@ 5`5`㿘`"#   3` @`)`& 2#&`` @`  ` @` ` 㿘 @ 1 & %  !?ސ#* 2 # *@  *` 3  `@#   @?㿘@' @#` 6$ ,  "`@` , $01.01kernel_version=2.2.14-5.0using_checksums=1%8.8x ' + '' %08x.%02xnvalias <4>/proc/openprom: Couldn't write property %s <4>/proc/openprom: Unknown property type of %s nodesecurity-passwordname....nodenvunalias optionsaliases<4>/proc/openprom: can't get free page <4>/proc/openprom: couldn't setup tree ??????????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table__ksymtab.comment4)!< ,)2O =+B+H+2Q+HY-\`Px  l-tPwP  --=.1l* 7#+5 @ HP^q~  <TP<P 0<#86lPV!TLh`z"#\#X  1E[`y /B[,ls':Rdw'P#(H/Hi)xxopenpromfs.cgcc2_compiled.nodesallocedlast_nodefirst_propoptionsaliasesaliases_nodesproc_openprom_iopsnodenum_readproperty_readalias_namesproperty_writeopenpromfs_prop_opsopenpromfs_prop_inode_opsopenpromfs_nodenum_opsopenpromfs_nodenum_inode_opsopenprom_alias_operationsopenpromfs_readdiropenprom_alias_inode_operationsopenpromfs_createopenpromfs_lookupopenpromfs_unlinklookup_childrendevicescheck_spaceget_nodesroot_fresh.348dec_first.349*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsprintf_R3c2c5af5stack_top_Ra6cab6a7__copy_user_R9c5239eb.remprom_firstprop_R807b7089prom_nextprop_R2bf482aaprom_getproplen_Rff8b6749strlen_R97255bdfkmalloc_R93d4cfe6strcpy_Re914e41eprom_getproperty_R156810c5kfree_R037a0cba__memcpy_Rbfaaaa73__bzero_Rdd42e263__memset_R1907e126simple_strtoul_R20000329property_releasememcpyprom_feval_R42f76b30prom_setprop_R4bad614bprintk_Rdd132261prom_getname_Rb0d1f9ef__strncmp_R8c5ff0fdstrchr_R349cba85proc_get_inode_R9a7e8343chrdev_inode_operations_R3f3ee2e9d_rehash_R6db84970d_instantiate_R5a458775strncpy_R328a05f1d_delete_R4a8b07d1__get_free_pages_R19d9ac40free_pages_Rb5136506strcmp_Re2d5255aprom_getchild_R5ee0a984prom_getsibling_R3b3fe8cbopenpromfs_use__this_module___atomic_add___atomic_subinit_moduleprom_root_node_R5ce875cfproc_openprom_register_R7b5d93b3cleanup_moduleproc_openprom_deregister_Red23cbed( , 0/0 0 1T \ h p     345, P6h789\0 `0 17 ,80 ` h8l x0 0 1:,2.-( 0 4/D0 L0 d10  / 0 10 10 01  / /  $0 (0 @1 x | / `2 P. p7 6 ; 6 < : , 2 - ,= `0 h0 1 > 80 \= x0 1 >= 0 81>0 1>760;86l<:0 0 1     <6 ( (@A0BT 8X 8x hB 8 8 hC:, @ x D6EFE0     x       $D86PEdFE     $ D3l6E4    6 E 4 8 `6|E G8 x |   l l         xE    T   P T` Th T  H H IJ@ P T      h | D6     < D |        6   4  <3 h6 4    !6!t !x ! !7!K! ! ! ! ! ! " " "$G"@ T"L T"p "t "J" " " " " "6" "E# #:#8# #$;#0A#8 #LL#l #p #M# # # #;# #N# # # # # $ $ $$ $, $T $X $d $l $ $ $ $9$ $ $O$ $ $ $O$ $ $ $ $ %3%( %8 %D %L4%p3% % % % % % % %O% & &6&$7&88&@ &P &\4&x & &P& ' '0Q'l 'pS 'tS 'T' ' 'S ' 'S 'T' ' ' ' ( (  (S (S ( U(8 (< (PM(X (d (h (p (tW (xW ( ( ( ( ( ( ( (R ( ( ( (R (X( ( ( (  (  )C)Z) ) )  )$ )(N), )0 )@ )D )H )\ )`:)h )|   <?T<l0p!Tt|" ( 0 < H TX x $ ( ,(0 408 <8@ DDHPLPELF@4( :`` ` 㿘+ ` @`  ` `" @ , 5 . @$ $. & @ 2$@ L 0 \@#m@ `` Y#-@  "5!  5 @4 "  ! @@"u`& $& & D`@  ?@& @@  & ,.  0@ 0 0@ 06 . @ ` @`   `㿘` @` `X@ @ D"u2 $ ?''<`@ @ ? 㿘h D@ @( $@ 6` @$ c$" @4$ @ @0? 6` @$ &$ 4 $@@  @㿘h D  6  @$ (?$" 4`$ @ @@ @6 @$ &$4 `$@@    h  `D    3 ?   (= =   Y  h,@而ƀ  Ұ   hy  G  hxl D `@ `D( @h ?31h\  * `怢 @hJ`@ h 2 hl ? h@ ?@@㿘 ` ? @` @ &@ *` *  *  *  : * @ @ @`  ,@" !4    /"@@ @  @@ @`@ @  <" ( ",?4   x    ? <`@ @㿘  ,?@`  @ ,@@0@?@㿈 & d ?6 " ?}  9褌` 6 $& ,& 8& 0& 46 (6 &, & d%   ?   ?& & `,@ `!!<  6 "@0  & , @0 ?c 6 "< * 6 *㿘@ 㿘@㿘@ romfs: unable to read superblock VFS: Can't find a romfs filesystem on dev %s. romfs: bad initial checksum on dev %s. romfs: read error for inode 0x%x romfs@` GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata.data.rela.data.bss.comment.note.modinfo__ksymtab4 !p  , 4 x:  ELJL=SY2blh0 & 4( <( HKp?6O ;  ( (H XL XTC`;47  <Q=7=( 3<( @( L3tE. . +0Od4p7O47,OhRp7OR7D <(G4L`Kx&> > B B ,,<EP&p&xP,=1 (. 0. H+ l- ) M M A , x 4 x  h  h N   ; P  T@ X  hH |  '  F/<lD@D X|<*: 8l0      0'08,B84Rl_m|DDp X<<P<P)PEhSx ` tq-A]  v x d/>Rd~) L7 OUc{inode.cgcc2_compiled.romfs_checksumromfs_read_superromfs_opsromfs_put_superromfs_statfsromfs_strnlenromfs_copyfromromfs_readdirromfs_lookupromfs_readpageromfs_readlinkromfs_follow_linkromfs_file_operationsromfs_file_inode_operationsromfs_dir_operationsromfs_dir_inode_operationsromfs_link_inode_operationsromfs_modemapromfs_inoopsromfs_read_inoderomfs_fs_type*ABS*___set_bitunregister_filesystem_R85f46c0e__this_modulelookup_dentry_Re3d4e95eblkdev_inode_operations_Rb9db2edc__copy_user_R9c5239eb___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7generic_file_mmap_R5a6dc27f__module_using_checksumsfree_pages_Rb5136506cleanup_module___atomic_substrnlen_Rd9ce8f0c.udivset_blocksize_Ra842722a__brelse_R01c3a101.divinit_modulechrdev_inode_operations_R3f3ee2e9printk_Rdd132261iget_Rf2d3b9b8__wake_up_Rdecddc1emem_map_Rfb61ea39__wait_on_super_R60631b72register_filesystem_R5b7afd0fdput_Rb697b4bepage_offset_Raa957eddkdevname_R160820f5__strncmp_R8c5ff0fd__bzero_Rdd42e263generic_file_read_R8848747bd_rehash_R6db84970init_romfs_fs__module_kernel_version.urem___atomic_addd_instantiate_R5a458775kfree_R037a0cbainit_fifo_R4328a40fbread_R68bfe922bzero_1page_R84f9fba4d_alloc_root_R38df921f__memcpy_Rbfaaaa73ELF4(  *    *  @**@  * ? @?0@* ** *  *  㿘    \ \.` , @@ D DА D ,   Œ$`  \, @@`` , $㿘˒ @&@R @("* "@R @("* @㿘.`2 .2 2` ?2` `?(*`"+"  * .* * `@ (* * :` @ @ $  " .E* *" *"@ *`’ 㿘@ <4  < @ <@ <* @.@ * T6@a1@!m   + @ *  *  :`@@ ? +  `& @ *  *  :`@$ ;   ; `;4 *@  **`@ `*#@ +  6  (( 㿐 $*``% @ 1?#  *6 㿘     S  M  B@ ڐ $* 2 *` %@ `? 㿘 @  $ " * 2 !  @?   * 2@? $ T8" 㿘 4㿘 4㿘 \ ^`ݔ ?` *` €l j h f d b ` y^ \ Z X BV K ``?` *` €@ > < : k/ )`?퀢`" *` €   u "  N 2 X  X `  @  㿘 / @ 2& @  $& @  @   P@!@  2     @   "& 㿘? 6 \6 ^Đ "@ & X @ 0 \ "  X@  ^ @ \0/㿘  j?  @ ?X   !! `U Pl?@` `*@   $ C P @` A& \@& @ & `& `& ` & $`& (`& ,`& 0`& 4` & 8`$& <`(& @ @& Б* `2 %& *: @ <6 @   P $/  P <  P @ "@ P@ @ P㿈..2 6 %T X@ @ @? .  S.  M.  B. . @ *?#  2`* 7`@ !7`@ (`  2`* 7@ 7`"@    ,` #7`@ * .2 *`@ 7@  㿐 X $?*  %&@@ *`2*`@ 7@ .` $6`*``#@@㿈`"  B @  @ X?,`c7 %@ bX7 '@  ,      "Xn 2Ԑ`B-?̀?ˀ?' @ɐ`%@   2`* 4X @`'  2`* 4X @`1 2 4$ࠁ㿘`  ?` @ @`@0= h T@*D @  h T @   t @   ` @ `@@0@    ` @ `@@?㿐  @ !?#@*``2` X.`@ 7 %@ x ? * , 2@@ 2 @ X''@    h`h T`@ - `4 &`?&`4`0 ?&`0` (``  Ȑ@@W``4`?c 6``&` &`㿘hT@ D @   @ 㿘  hT@D @      @ 㿘 T   D@ `.`J6` @ 㿈 T `D`@   @  ? #  2 *`X7 %@ *.2 7 '@ @?@.`*2 @ @6`@' )@  -7@    ? -`D`X`%@ `X  $ *` `%*3    @   2*  @@ @  @`D @ |㿈 T   D@ v*2 @  ?  @ `2*`@ 7X %@ *, 2 7X '@ @?@.`*2 @ @6`@'X )@ 7X -@  ,@`7@ `@   X`%@   *2  @ 㿈 T`D` @ `+?  @ c *2.`@ 7 X%@  ? * *2@ @ 2 @' X '@  ,@` H  7 6  X Ɛ D`%@   *2 6 D @㿐T `D`@  @ &7X%@  `,@R ,@`K    6   אDD @㿘`T `D`@` @  *  Ð  6  x  D D @q㿘ɒ 㿘Ò 㿐T `D`@_  @ &7`X%@  , ͖ z  i 6  / ސ`D`D @8㿈D @2`-?  @  @*2.`@ X7%@ X7 '@ ?, - 2 @@6@ X' )@ X7 -@  ,@``,@    6  Ґ  @㿘@ , 6`  "6`  `&`$6`㿘 @` 6` " &`6`?`#m @6``$` &`(` @? &`(㿘͒  &`6@`&`Ӓ㿘``  &@&  4    J@ 2&&     0  `X`$'H?@ +`D'  @u`'5?@   +`  @ @ `X+ 3 @ %7Β@ `X7̐ '@  , H , 7ʒ@   ,  ,a 7Ȑ@  @  :  )? 6`X`\@ @"a \ ƒ %@ Ƥ  *2 *5 `IĒ '@ ,`Ė* @"* `"*`2@  @7?`X $ *`@ @ @ y ,В/` J .``"J .`" @5 ߒS @㿈 `&a 02`` @& ;&@ !?#  2 *@ `<@ ? ,  *2` 2 8 `^ &  J?`"ؠ?&@ @ ?#  *2 @     P0 ]('H'P 'L !''''   D' @L` '9 H "'P@ ?c2 ' ' @ ?```&`b7@  7@ *7@ ,7@ 'ܐ`@  * `@2 *`@/7ڐ@  7ؒ@ ,7֐@ 'В@ *7ΐ` @ '  ȒĔ#\#`#d#h  @ 6\  @z9 @~ @2\ !@ p ^@ @g `@   2* `@   2* `@ @   2* `@   *2 2' @(Ġ  J .L `"`J .`" `LP@  `@ޒ   "  @?㿘 T D `0ÒP  ''''7e "7@ !7@ 7@ 7@ '@ #\;`#h`    @ 6\ ̐0 @ ?^ \@0 ?ܐڒ`@ ?#  *2` ! `@ ? + 2 @0k@ ֐Ԕ  2,  `@ Ԓ  *2 & `@ ҐД  2,  `@ В  *2 &`@ ΐ̔  2,  ` @ ̐  *2 ˒&` @ ? *` * 2 2 &`@ ư  *2 6㿈  @  *  /   6X 05`%@ !?#  2 *6X`'@ #?  **2 @ @2@ f&X`+@   *, 4`2 &&& X     ''''!7@ '@  "#\#`#d#h   @ 6\{ ܒ!0 @ ? @0y`  ޒ@@ #?c  2 , @@ ܒ  *2 &  @ ڔ   2 , @ @ ؒ  *2 ֐& @ ֔   2 , @ @ Ԑ  *2 &` @ ? *` * 2 2 &`@ ΰ  *4`6㿘 T `D`@1   2  &̔ D @㿀)?  @ # + X3 ,@ 7%@ X' '@ X7 +@ X7 -@ X7 /@ X7 1@ X7 3@  `,@  ,@``,@   6 i 㿘`T   D@@ @㿀)? " @ `#  2`+ X 7 %@ X7 '@ X7 )@    2+ X 7 +@   2*X 7 -@   2+ X 7 /@   *4 X7 1@  "  6  0` ''''7?!7֐@ 'А@ T ب7ΐ@ 7̐ڒ@ ʤʠ  2 + 7Ɛܒ@ Ȑޒ  2`* 7Ē@ |ʐ  2`+  7’@ Ȑ  *4 7@ '@ '@ 7@ '@ #\;`#h%  @ 6`\X !0  @ 㿘T `D`@` ( "``2 " h  T@    $ F<    h T@ ? p  h T@ `D`$ 4F`D @s㿐 D  @o  @    6 X 4D%@ #?c  2 *&`'@   2,  )@  @ `*`2@@ &`+@   *4`&`&` D @*㿘 D @& q @  q Ö  @@_@@j@@@@@@@@ @@@@@@@@@@@@ދ@@@@2@@8@@f@@l@@@@@@ċ@@ʋ@@@@@@B@@@@@@ˋ@@@@G@@I@@O@@@@@@ҋ@@֋@@@?x `@ ]@ X? 2  @ L ` `  ` ƀ 9  > `  ` ƀ  *  >  @  耢  ' @'܀ '@ '   ƀ  `B >  @㿘` T`D`    ଒"@ `(`@ ` @㿘  L"@ a (  @   @  @@ 0 @`?`  @ @  2* "` `  : @ @      * @  㿘  @  @ @ @  " "@& & @  " L   " Lh`D *?@Ȱ  ? ` @ `@@? @ '`h@Ƞ  ?`&`P@@@ h TȦ D@ @@ ' T@   22"@ ?󀦠, @4  @ @@㿐@` @ 2`  @ `@@㿘@@   㿘@```@?@@㿘@`@@ @@㿘` @  @@ @@@@ @@㿘  @  % !  @&+ % ` @@ @@  `$ @   &㿘  @    `@$ @  㿘@㿘@/ԁ㿘`&2 * @*``    D * `"+ @ "@*`*2 4`44@` @, 2 2 @$  & !&  @  ! *` & @@  ?$4?&     @ @ "@ @    ("" "    㿘` 4  @ 6  @0 2`@   $@㿘@ ?# @6 & X ?'''''@   @@ $  " Ā`Đ '耢`@0 ?c  @Ā @X ?ؠ'''''''@ ' '\䀢' @  `<П@Ā @㿐") packet! len=%d, size=%d smb_open: no inode for dentry %s/%s smb_open: %s/%s open failed, result=%d smb_open: %s/%s access denied, access=%x, wish=%x <5>smb_proc_read: returned != data_len <5>smb_proc_read: ret_c=%d, data_len=%d *.*smb_decode_long_dirent: Unknown level %d *<4>smb_proc_readdir_long: Looping in FIND_NEXT?? smb_proc_readdir_long: error=%d, retrying smb_proc_readdir_long: error=%d, breaking smb_proc_readdir_long: name=%s, entries=%d, rcls=%d, err=%d smb_proc_getattr_ff: error for %s, rcls=%d, err=%d smb_proc_getattr_ff: bad result for %s, len=%d, count=%d smb_proc_getattr_trans2: not enough data for %s, len=%d ...smb_lookup_validate: %s/%s has dud inode smb_delete_dentry: bad inode, unhashing %s/%s smb_lookup: find %s/%s failed, error=%d smb_instantiate: %s/%s failed, error=%d, closing %u smb_create: %s/%s failed, error=%d smb_get_dircache: cache %s/%s has existing block! smb_add_to_cache: new index already has block! smb_refill_dircache: readdir failed, result=%d smb_refill_dircache: cache invalidated, retrying smb_data_callback: sock dead! smb_server_sock: bad socket! smb_catch_keepalive: did not get valid server! <3>smb_catch_keepalive: already done smb_dont_catch_keepalive: did not get valid server! smb_dont_catch_keepalive: sk == NULLsmb_dont_catch_keepalive: server->data_ready == NULL smb_dont_catch_keepalive: sk->data_callback != smb_data_callback smb_close_socket: still catching keepalives! smb_get_length: recv error = %d smb_get_length: Invalid NBT packet, code=%x smb_receive_trans2: copied, parm=%u of %u, data=%u of %u smb_receive_trans2: copying data, old size=%d, new size=%u smb_receive_trans2: couldn't allocate data area smb_receive_trans2: data/param too long, data=%d, parm=%d smb_receive_trans2: data/params grew! smb_receive_trans2: invalid parms, disp=%d, cnt=%d, tot=%d smb_receive_trans2: invalid data, disp=%d, cnt=%d, tot=%d smb_request: catch keepalive failed smb_request: tree ID invalid smb_request: result %d, setting invalid smb_request: no packet! smb_request: connection %d not valid! smb_trans2_request: result=%d, setting invalid smb_read_inode called from invalid point smb_refresh_inode: %s/%s changed mode, %07o to %07o smb_delete_inode: could not close inode %ld SMBFS: Using core getattr (Win 95 speedup) SMBFS: Using dir ff getattr <3>smb_read_super: allocation failure <3>SMBFS: need mount version %d smb_read_super: missing data argument smbfssmb_readpage_sync: %s/%s open failed, error=%d smb_readpage: page already locked! smb_writepage_sync: short write, wsize=%d, result=%d smb_writepage: page already locked! smb_file_read: %s/%s validation failed, error=%d smb_file_mmap: %s/%s validation failed, error=%d smb_file_write: %s/%s validation failed, error=%d ;Zx0NGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4p !. ,pT3  ?p` G~DR  b~Lh$ sxP2@{ 8 <T ` ,HPdl@ X \  p X    (  (, XL     |              $  $ ( , 0 $4 $8 $< $@ $D $H $L $P $T $X $\ $` $d (h 0l $p $t $x $| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $  $ $ $ $ $  $$ ( $, $0 $4 $8 $< $@ D $H $L $P $T $X $\ $` $d $h $l $p $t $x $| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $  $ $ $ $ $ $ $ $ $ $ $  $  $  $  $  $  $  $  $  $ $ $ (  , $ 0 $ 4 $ 8 $ < $ @ $ D $ H $ L $ P $ T $ X $ \ $ ` $ d $ h $ l $ p $ t $ x $ | $  $  $  $  $  $  $  $  $  $  $  $  $  $  $  $  $   $ , H ` L ` ` t d | h p l p            p  p   8  8  8  8  8  8  8  (  0 8 @ L P X ` h             0   0  P ( P 0   x   x       8 <  p$ (, 4|8p(Pp <l  @\ 8h 8p| ` ` X< @ D|  @l0Xh lp t x 8h$P48X(L,Ll L \ !$!X !` !"4"T"t"""# @# @#8#t##$8$%$%`% %%&h&l &x'8'T L'\ L'' 0'' 0'(( (@(T((((()<)` h)d h)h)t L)x )| ))) )) ))*(*T*h*+H+,D,\,p,,,-- -$ -,-P- @- @---..D.p..//X/0 0D011,1|11 1 122<2|2233X334|4455505H5`5x66<6p6667 7P778D8X88899T99999::@:t;|;;<> >@>`>>>>?? ?@?`????@@ @@@`@@@@AA A@A`AAAABBBDB B B B BC$C8CC C CCD D D4DD DP DXDpEE E EEE E F F8FP 0F\ 0FdFF{F F FFFFGG G{GLGx `G `GGGG G GG G HHHHHHdHlHHHHHHHHII II I4I<I`I I IIJ0J`JJ J J J K<K KK KLL (L (LL XLL XLM8MMM}N8NtNN NN OdOO OO P$ P(P, PD NPP NP`Pp PP P (PP (P `PP `P PP PQ NQ NQ QQ QL NQT NQd QhQl QtRt 8Rx 8R|R `R `RR `RRSLSTShSSTLTtTTTUU<UdUUV$ VXVpVx V| VW W  WW WDWT WXW\ Wl HWp HWxW WW W W W W WX X xX YY 0YY 0Y xYY XYY XZ xZ xZZZ$ Z(Z, Z4 Z8 Z<ZZ[[0[H[`[x[[[[\\,\\\](]l]] _<_X _l_| X__ X_ _ ___ (_ (_ (_ (_``@ `D `\ `` `h`a a a aa aaaab@ PbLbP Pb\b|bb b b cPc\cc cc c~ccccddd d d( d, d8d\ d` dld 0dd d e ee0eHe e e e eee{ff f,f4f<fDfL fPfT f`fp 0ftf Xff Xf fffg g g,gpghh,hThlhi<ix ,i|i ,ii ,ii ,i i i i jj4j@jP jX j` jhjj jjjkk0 k4k8 kHk\kp kt kx k kk k k l l |l< lD lH lPlX ll ll mmmHmTm\ m` md m mmm @m @nnn8nH xnT xn\nlnn n nnnoo o o o opoo@L(\AdAltCXGFH|HHDHCDDExaclc cf, 4@mDnPTn,Xn`odix<lo(m     D!DD+0:I<Y@_is(H,\ | Px|6X2 K x@[ m!|@ "`%|dL &+/T04\-8LEKAQX<dAqA}ClGhFH|@H4HD8HCD`DExh+FE;ILCJLEYM`MjNpNOXQ`QdRHSSZL0E_,a clc4(c6fA(Ia\an,EziiiXklm m\n,Tnxno(o((+<<E?oPEG_P^w_4dXl$3lCP\p~]|85dL,+  DYihv}P  Ot@#IL4i@@VP|`wQ,Xitk a  %  1 E`l V f x gT   Ld b   JT  8oP B `!<@ uWh   JT    R   / J V h {xP x    3   , # ; A F T l {  P K +< Jp   <x   , = X ^t m :TD  E< `x ;d $ proc.cgcc2_compiled.str_upperstr_lowerreverse_stringsmb_build_pathsmb_encode_pathday_nutc2locallocal2utcdate_dos2unixdate_unix2dossmb_bccsmb_valid_packetsmb_verifysmb_get_xmitsizesmb_retrysmb_request_oksmb_setup_bccsmb_proc_opensmb_proc_closesmb_proc_close_inodesmb_proc_setattr_extsmb_proc_generic_commandsmb_init_direntsmb_finish_direntsmb_decode_direntmask.538smb_proc_readdir_shortsmb_decode_long_direntstar.543smb_proc_readdir_longsmb_proc_getattr_ffsmb_proc_getattr_coresmb_proc_getattr_trans2smb_proc_setattr_coresmb_proc_setattr_trans2*ABS*dir.csmb_dir_operationssmb_dir_readsmb_readdirsmb_dir_opensmb_createsmb_lookupsmb_unlinksmb_mkdirsmb_rmdirsmb_renamesmbfs_dentry_operationssmb_lookup_validatesmb_hash_dentrysmb_compare_dentrysmb_delete_dentrysmb_instantiatecache.csmb_free_cache_blockssock.c_recvfrom_sendsmb_data_callbackserver_socksmb_send_rawsmb_receive_rawsmb_get_lengthsmb_receivesmb_receive_trans2smb_send_trans2inode.csmb_sopssmb_read_inodesmb_put_inodesmb_delete_inodesmb_put_supersmb_statfsino.486smb_set_inode_attrsmb_refresh_inodesmb_fs_typefile.csmb_fsyncsmb_readpage_syncsmb_writepage_syncsmb_writepagesmb_updatepagesmb_file_readsmb_file_mmapsmb_file_writesmb_file_opensmb_file_releasesmb_file_permissionsmb_file_operationsioctl.csmb_igetsmb_get_wsizescm_detach_fds_R61cc43c0clear_inode_R5a5bfea1___set_bitjiffies_R0da02d67unregister_filesystem_R85f46c0einvalidate_inode_pages_Re4224f04smb_invent_inosget_empty_inode_Rce23dbffsmb_read_supersmb_proc_rmdirsmb_proc_createsmb_dont_catch_keepalive__memmove_R60e2f255__this_module__copy_user_R9c5239ebsmb_proc_read___clear_bitkmalloc_R93d4cfe6smb_trans2_requeststack_top_Ra6cab6a7smb_proc_setattrsmb_invalid_dir_cachegeneric_file_mmap_R5a6dc27f__module_using_checksumsfree_pages_Rb5136506cleanup_module___atomic_submemcpyfind_inode_number_R5da89c9fget_cached_page_Rb446b41einsert_inode_hash_R6aecc9f5___f____xchg32.udivsmb_catch_keepalive__scm_send_R1db74495smb_valid_socket.divsmb_get_dircacheinit_modulesmb_encode_smb_lengthsmb_closeis_bad_inode_R25a409easmb_close_socketxtime_Rf31ddf83init_smb_fsvfree_R2fd1d81ckill_proc_R932da67esmb_readpageprintk_Rdd132261smb_proc_mkdirinode_change_ok_R7b6d21ffsmb_invalidate_inodessmb_newconn__wake_up_Rdecddc1esmb_close_fileidsmb_proc_unlinkvmalloc_Rd6ee688finvalidate_inodes_Rcd4d7ce1smb_notify_changeput_cached_page_Rbcfc4207smb_refill_dircachesmb_revalidate_inodemem_map_Rfb61ea39smb_close_dentrysmb_free_dircache__wait_on_super_R60631b72smb_ioctlregister_filesystem_R5b7afd0fsmb_init_root_direntsmb_requestput_cmsg_Rf39bf4d9__scm_destroy_Rc4a7e861smb_add_to_cachetruncate_inode_pages_R32799a35generic_file_write_R7b92761biput_R2551b96fsmb_round_lengthpage_offset_Raa957eddshrink_dcache_sb_R1b94c34esmb_proc_mv__bzero_Rdd42e263cap_bset_R59ab4080smb_file_inode_operationssmb_get_rsize__up_R450143b0smb_proc_writemake_bad_inode_Rd04e4f12smb_proc_getattrgeneric_file_read_R8848747bd_rehash_R6db84970smb_open__module_kernel_version.urem.rem___atomic_addd_instantiate_R5a458775fput_R0743d661kfree_R037a0cba__down_R4663c8e5smb_dir_inode_operationssmb_find_in_cachesmb_proc_readdirsmb_init_dircachestrlen_R97255bdfsmb_proc_disconnectsmb_errnod_delete_R4a8b07d1smb_setup_headerschedule_timeout_Rd62c833f.umulsmb_proc_truncinterruptible_sleep_on_timeout_Rdf2437a0smb_proc_settimed_alloc_root_R38df921fsmb_renew_timessmb_get_inode_attrsmb_proc_dskattrsmb_len__memcpy_Rbfaaaa73ELFr4(㿘  2 @ 0 @0V $`@ 0 h 2 @ 0  쀥( l@ 0? 4 @ H@ @ 2  h! @ @@0 `$*`@ " @ ,   `2  * Ȓ!a8   2 ̄ @ 2@  @  @  (@ @    @  @  ( @  @ , @ @` @  @ `(@ @ 0, @ `@㿘 " @ "   h% % h   @  ,  ?  @*  Ȓ!a8   @ I  2Q   䀤 <  耤9   @ H ,` $ d@ !@   2`  @ **!a8   2 d``@ @ " @  Ȣ 2  @ 0, @  2 ?2 *  @ 2  * * !a8   ` @  @ `(@ @  ` @  @ `(`@` @ ,  5 $%  5 5 & "$" (5 (% `% 4% 8% 0% d% <@% @ `25 "@5 "% ,@ `2 @ ̄ @?2@ `@  @ `(@ @ ,  0, @ 㿘   @   . @ & '  @ @ H 2$@ ̑,  d  @@ "  `@" @  `@ ߠ   '*`: @  0 ̄ 2  @  @  (@ @ .  0. @ 㿘 2 @ 0@  @ @ 0   @  . @ @  0L   @ @ H 2 D@  0   $   0  0@  Т @2* @2 @  @  (@ @@  " @ G2,  @ @ H 2 $@  0 @ H @  @  (@ @@   @ @ H   @  (  @ "N \@N \ ?#@* 6`   2*  ԑ2 "N \`? c * 2   *`2 @" @ "@   @  @  (@ @    @  @  ( @  @ .  0. @ 㿘 2 @   @  . t*` Ԓ@N \?# * 4 e3 耤  􀤀  @X 0 `B   @ H 2  D@  А 0 2C.    $   0  0@   @ # 0@ 0 2 @* " @   @ H 2    @ 0.  @ 0r $ @ H @  @  (@ @@  "N \@N \ ? c * 2 ? *`2 @" @?"@   @  @  (@ @    @  @  ( @  @ .  0. @ 㿘   @  . @`m? Ԅ#N \ ?* * 2` [?# 耤    @K    @ H c D  `$   0  0``@ @ @@ ``  `" @  \*  * 4  􀢠` @ 2  N \`?# * 2 5  @ . 0N \   ?# * 4 @  ؐ"   @  @  (@ @ .  0. @ 㿘& ,@@㿘   ,@b`?h <`?<``??&`L&`l&`p&`X&`T&`h&`H&`P@&`d @&`|?+`&`t&`&`&`&`&`x@. ??&`&`@,`??*&` &`&`@&`@&`㿘`$ !D@? 8   1&`D  㿘`H  $ ՔD$. $  d ~!!n f j  ` `(`^0``0` ` ` ` ` ` ` ` `(`\(`]0` ` `? ` (@&@ ` `㿘`$?F"ab a!@(' a    `!`@ @` $` a`:`a / 1$`D 㿘 H $ $?Fa 0 a 0(  ~ d 2`Զ`ظa`` aaa 1 ) ^1 `1 ! ! ! ! ! ! ! ! ! ! ) \) ]! ! ! @! ` ! ! 㿘`$?F"b ?# @᠓*` !( ? 8  ̒ 1&`D  㿘 H`$?`$?Fa : a?#a(.   ~ d 2`ж`Ҹa``aaa 1 ! ) ^1 `1 ! ! ! ! ! ! ! ! ! ) \) ]! ! ! @#! @`( ! ! 㿘`$#`@   `@   #`@   `@     S 1$`D 㿘`$`@   `@  B `@   `@  2   # d @ ކڢ֤ 5 `- ^5 5 % % % % % % % % % - \- ]% % % ?% # @*` * 2 " % % 㿘/  @`  ` `" @ -5`. @$&  @$  ! 2c H@ @$ j 2U Hڒ 2O HD 2I H@  5`@$ "L 2  H  H$ 2 0 X T* : #& @ܠ  06 . @  ! @5`@ @`   ` HF`5`@ H5` @` X T*@  H@2@ "(6  D "  `0`0   ` y 2| 耤`"6 @6 .  0@  H `` X T* 2 @ H5` @ D     0>" . 09 H@ 3 H@ ,`  H@  ʒ  H@ $  %  H@  2 耥  @ " @ @$ 06 . @ @ D  l" *  &  H#`@5`@ DK#@ H S& $& . 6 & @ @  & ,.  0@   . @ @ 06 . @  㿘   @  . `2N \  `B 0N \ ܀` @ \?# @* 2`  D   !8" " #  \?# * 2 #@   @  @  (@ @ 0. . @ 㿘 " @  `" @  $ @$` @`  `X H $ '''@ ''̐@'Ē 'Ѐ'<`@ @ ? 㿘`.`$@?#* 6 @"   㿘`   h.`  "l  i p@L \ Ȁ`2  @`"Z  @ HG |&@@ :  ̀`2  @`"D  @ H x$6@ &@ @1` Ѐ`2  @`"/  @ H 6@  "#  @ H x t6@  "  @ H t@    @ 㿘.``h@`   @ @ H@@ ( $ @ 2   @ @ H@ @ "@@@$@ $8@㿘`'H ` 2`$  @HH`  @ H` 2 `$`r @ n . h@@N \ ?#@* 6`  H   H@@ @ #MHH L @ @ HH A @   H@@ @ @"@@@N \ ?#@* 6` $@H `@  @ `(@ @H @㿘`  h0B p@  &) |&@@    x6@  &@ @   6@ B x t6@ : t@ 4 `  @ 㿐@ '    @   @   " @ 㿘 & d h`6 " 쀤@(  l !@ @0 4@     @ H 2  h !@ @0`$ @* L ]@ @ "@26 "(!6 "6 &6 (6 $L \`?# @ 2`*  & ,4 *`2@ & 08 * 2 & 4< @ + 2`  & 8& ,4& 08& 4<& 8 "< @ & <& @@2 L \ :` `*  )6 *    @+ *     ``  @+  *@ * @ $ ` `" "@ "<  @  #& d@( & d@ & d@ & d@ & d@@㿘 @ "@  hJ ]`  `"@ #6`@ 㿘 ` h 쀤@(  l !@ @  4@     @ H 2 h@  $ @L ]*  "@< ( *  " 2`"@  #0 &0 (0 $0L \`? ,# @ 2`*   0 *`2@ 4 4 * 2 8 8 @ + 2`  < ,  0 4 4 8 8 < "< @ @2 L \ *2`*  ` %0   *2+@3  `  *+@2`*2`+  ` @  @ (@ @㿘G @㿐<  `!'`   @`  @ `  `!` @ `@􀢠`?`@ 㿘  @   `㿘@㿘  @  `㾘'D    h@ ? "<   @ ?  ,@  #84`Pٰ `L=@ @D@`(2 2@   2`*` : @ 8# ! x@ ` %` 2 .$@    @xN" > B?$ <`@ $@@"@@ @xx < @ ` *@    &%"`H "`H  @  2`H" @  x   4o   @x " D? #`( h " 2   & 0@㿐  h@ ?"<   @ ? $ ", { P< @  ' "q?p L& H "@ 8 @ "  L` 2 L  @`  @ ` 2  L` @ "H?G``$  @<`@ @@,   $,@@@   @2  @ (@ @ @<$4$8>@?㿈    ]hi?`L  @`P@ 2 `$`H"  @ C G> .- &@ h쀢  @  @@  ƀ 6  `/ @+   `B > `H`,:  4` 8`",@,:  4 2  8  㿘  @ @ ?@ $@@㿘 `h L8  @   $ J  < @  `*@&J @ 㿘 4   "@  J@  @`?㿘& hL^ 8   ,   ) 2  $@ 2 $H@ &  H ` " @   ,@ ܀ "&@& 㿐`@`D   @@ h@ ?@@ 㿘&' hM`^  y? t?   2  $@  "g? $ ,  4@ & ,@@  `J@  @`? 5 A?@=?  & 4`& 8@ `@6*@ *``   @  @  (@ @'`H " @   & 㿐@ B?  $ d`4 "@`@`Dg   $ ?`4 $@@0%  2@ @  @  (@ @ "@@ 㿐`@`Dі '@?0p@ 2j?<  4 &@ 4 "$ d $ d@ $ d@ $ d@<@< 2 4 * 2`@@`@`D   $ ?`4 $@@0%  2@ @  @  (@ @ "@@ 㿐`@`DS '@?0hT$R `@ ?@ ?  $`d$`, @  2 $`$`?`4`$@@~?'``2 @  $2' `@   4`$ @  @  (@ @ "h@h`: ! 4`""d$4`"` 2`@@`@`D< @4`$0. `2@@  @ (@ @$ `4$@ "@@ 㿘 ,   W T @ "T  $ I@` D  $ >@` 9  ,@- h 2  $@ 2 $ H@``  * @&  H*  , " @   ,@ ؀  @  " @ !@ @ 㿐``@`D6? J  D` 2`<?`@8?T $`@ `2 @  @ `(@ @4 $$?4$$4$8 $ 8@ @@ `@㿐``@`Dܰ? F` AT`$ 2!` @ `@T`$ 4`$2 @  @ (@ @ $8`$4@`$?4`$8`$`8@@ @㿐@ (?!`4 "$ d @  2 h $ ?`4 $@@? L `$N *L *N`* @  @ `(@ @`" @ $ ,@`@`D5 ' $ ?`4 $@@ <?@`@`Dx   $ ?`4 $@@0%  2@ @  @  (@ @ "@@ 㿐 < " @@ 2 hT?T $R `@ O?@DҖ '@?0B@D"  7@  2@ @  @  (@ @ " $@ $ 4 $ $ 8@ $ @ 㿈'``D `@}?  Ѐ`@Dp '쀤 2"@'"<  $쀤  ? @ ?`$   `  ?ဦ hV$R `@ `쀢 2 D@ `322@` % 8 % 4@`&8 &4@ "  $?4 $` $ 8@ @  @ (@ @ `@  @ `(@ @`6``$2` @  @ `(@ @ $ ?`5 $@ " $ $ ?` 4 $ `6$@ `@@쀢 @㿐@?# * 4  "8  h଒  @H`$'@@ &  `  @ ?   2   @    @  ?" 㿘&@?# @* 4`  " h  @H&@@ `"&@ & ? 㿘    2``  㿐 #  `hp .`$N\@ \  2p`@  @㿐 #  `hp .`$N\@   2p`@  @㿐Z #  `hp .`$N\@   2p`@  @㿘`< " @@   @(@ %?  Ȥ ̢ ВJY   ``@ ?㿘 h  , P L@2 =, `"4  @ @ H P ,,  " L@ ,"  @  @$  @ @@ ɤ㿐@''T ?# * 5 2 h   @H@ ` 0`2 ,'@T + @  L"@P@2@ p@ :[ ?#`$,`M\  * 4  "Fp  @HP,@  ,@@" ,@ ," & @#p`% @  @ `(@ @@@p`@ *`$ @ : ` `$,```@ ,`` ``@`@ '@T+@`@㿐 ?# * 4 2 h   @H  s 0c 2 ,& /j @  "@@2@ p :: ?#/ $.L\  @* 2` `"$px. @ `  @  @  (@ @p */ :   $.` . `  @  &/@ @㿐 ?# * 4 2 h   @H  s 0c 2 ,& /j @  "@@2@ p :: ?#/ $.L\  @* 2` `"$p. @ '`  @  @  (@ @p */ :   $.` . `  @  &/@ @㿐 hڐ Ȗ  ̖ ̘ V 㿘 "< (@  @ 0 @@0@!ː   & 4`& 8@??sysv_free_inode: inode has no device sysv_free_inode: inode has count=%d sysv_free_inode: inode has nlink=%d sysv_free_inode: inode on nonexistent device sysv_free_inode: inode 0,1,2 or nonexistent inode sysv_free_inode: unable to read inode block on device %s sysv_new_inode: unable to read inode table sysv_count_free_inodes: unable to read inode table sysv_count_free_inodes: free inode count was %d, correcting to %d sysv_free_block: trying to free block on nonexistent device sysv_free_block: trying to free block not in datazone sysv_free_block: flc_count > flc_size sysv_free_block: getblk() failed sysv_free_block: invalid fs type sysv_new_block: trying to get new block from nonexistent device sysv_new_block: new block %d is not in data zone sysv_new_block: cannot read free-list block sysv_new_block: invalid fs type sysv_new_block: free-list block with >flc_size entries sysv_new_block: getblk() failed sysv_new_block: block already in use sysv_count_free_blocks: new block %d is not in data zone sysv_count_free_blocks: cannot read free-list block sysv_count_free_blocks: invalid fs type sysv_count_free_blocks: free-list block with >flc_size entries sysv_count_free_blocks: free block count was %d, correcting to %d XenixSysV FS: can't handle long file names on %s, forcing read-only mode. SystemVSystemV Release 2nonamexxxxx nopackxxxxx CoherentXenix FS: bad super-block sizeSystemV FS: bad super-block sizeCoherent FS: bad super-block sizesysv fs: bad i-node sizeVFS: unable to read Xenix/SystemV/Coherent superblock on device %s SysV FS: cannot read superblock in %d byte mode SysV FS: cannot read superblock in 512 byte mode VFS: Found a %s FS (block size = %d) on device %s SysV FS: get root inode failed sysv_bmap: block<0sysv_bmap: block>bigsysv_getblk: block<0sysv_getblk: block>bigBad inode number on dev %s: %d is out of range Major problem: unable to read inode from dev %s unable to read i-node block IO error syncing sysv inode [%s:%08lx] coherentsysvxenixsysv_file_read: inode = NULL sysv_file_read: mode = %07o sysv_file_write: inode = NULL sysv_file_write: mode = %07o sysv_readdir: Bad inode number on dev %s, ino %ld, offset 0x%04lx: %d is out of range ...Bad directory on device %s empty directory has nlink!=2 (%d) Deleting nonexistent file (%s:%lu), %d sysv_truncate: truncating symbolic link GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4b!u|! ,b3  ?b AGm$R$0 bm4hT soxo%q)q2rr `T d   $( 8 (< (@X P\` Px x| x     VV4X_e$X<_The|X_ew]L    whX_eX_e\ ` |rhhX_,eDl P Pw8 < @tX_e          8 ` H d h H   p   p     W    ,X D_ \ pe |T w   p   p  X _ $ 8e DT \k xe  w hX _  e X _  e , L  P T  l        4 @8< @| p pW p  w w 4 < H L PdxX_eTwdX|_eX_e(P        `@ T lWp   w wX \ ` `X_e,DZL4hx P P\ Xdh Xp  8 D          $ 8 D L\ d h    ` ` uw,w , ,w<L` P T Xhp` |mwuw  wu < T   !w!0w!<u!P!X !\!` !h` ! 8! 8!!! ! !!" "  p"$"( p","@"h" " #PX#h_##e##w#w$` $ u$` $` $$m$`$|b$g $g $d%w%&&d&&& ' ' ' ' 'P'x''}'w' ' 'h(8(To(|w()w))@w)T)p})w)X)_**e*4w+P +X +\ +` +d+z++o+w,, ,0,4 ,@,h,  ,,  ,.w.^ .^ .f .f . . . . /c /c /0/L// // /0(0< X0@0D X2HX2`_2x2e2w33 o3D x3L3P x3\3w3 83 8333 83 83[44 484< 4` 4d 4h4\ 4\ 5<z56g 6g 68d6Pw6|g 6g 7o7@w7w7 7 7 8h8, 8084 8X 8\ 8`8z8 99$o9Lw9d 9g 9g 9d99h9T: X:$_:<:Pe:hw:x :| :h::|;8 @;Ln;l;| @;;s;w<<w<|<<<a<w= |=,g =0g =w>>||>w?w?Pw?\?p?|?|@8h@|@w@ @ @hAXA(_A@ATeA|wAA^ A^ AhB hB(BPXBh_BBeBwBBwBC8^ C<^ CX C\ Ctc Cxc CChDhDDDXD\_DtDeDwDDwE Ef E(f E@|ElhEtE E EvE E EvEXE_FF(eF<wFhFFXF_GG$eGDhG\wGhG|G GG G HH H<|HwHwHwHwI I I II II IXI_JJeJ$ J0 JLhJdhJlJwJ JJ KK,XKD_K\KpeKx K| KhKhKKwKL L L,|LXhL`LXL_LMeMwM4hMxhMMwMhMN XN$_N<NPeNhwNtNwO(wOPXOh_OOeOwO O OhOPwP|Qd Qx QhQ QhQ QhQXR_R,R@eR\XRt_RReRXR_RSeS0hS|hSwSwSwTkT@wTpwTwTUTU|wVwWXwXwXYLkYxwYwYhYwY}Zx[Dk[tw[w[X[_\\e\0w\<}\w\}\w]T^HX^`_^x^e_w_ }_4w_`X`_``eaHwad}axwb( b,b0 bTybl bp bh6=h6=` p <8@HPX`lUp8i~hZ::04Y8q<@DHLPT<<       ( <0< B,L\0X`etT,0T,$d'(</80 4%h<:8J :P:^<r: <<<d ==> ?G| SSTUTUV,Wh; XFX SZb]Dr_DDa4A(b%:TPoX 0P#7Tp  30+D?(h+1IZmr*D03+t\X 2( JX,P8Ni238P D.HfBqx$D "TdN|<-E <T lrK%D   L $ *# 9 Q h/@ {I,h ialloc.cgcc2_compiled.*ABS*balloc.cinode.csysv_delete_inodesysv_sopsdetected_bsdetect_xenixdetected_xenixdetect_sysv4detected_sysv4detect_sysv2detected_sysv2detect_coherentdetected_coherentoffsets.384block_bmapinode_getblkblock_getblksysv_update_inodesysv_fs_typefile.csysv_file_operationssysv_file_writedir.csysv_dir_readsysv_dir_operationssysv_readdirsymlink.csysv_readlinksysv_follow_linknamei.csysv_matchsysv_find_entrysysv_add_entryempty_dirfsync.csync_blocksync_iblocksync_directsync_indirectsync_dindirectsync_tindirecttruncate.ctrunc_directtrunc_indirecttrunc_dindirecttrunc_tindirecttrunc_allmark_buffer_uptodate_Rd0ee0e0asysv_file_readclear_inode_R5a5bfea1panic_R01075bf0___set_bitsysv_createsysv_truncateunregister_filesystem_R85f46c0eread_ahead_R0abb7b07get_empty_inode_Rce23dbffsysv_file_inode_operationsset_writetime_R8e167c19__this_modulelookup_dentry_Re3d4e95esysv_count_free_inodesblkdev_inode_operations_Rb9db2edc__copy_user_R9c5239eb___clear_bitsysv_dir_inode_operationsstack_top_Ra6cab6a7__mark_inode_dirty_R19c75706generic_file_mmap_R5a6dc27f__module_using_checksumsget_hash_table_R3b41a211cleanup_module___atomic_submemcpy__wait_on_buffer_Ra773ade4sysv_read_inodesysv_lookupinsert_inode_hash_R6aecc9f5strnlen_Rd9ce8f0c.udivset_blocksize_Ra842722astrcpy_Re914e41e__brelse_R01c3a101.divschedule_R01000e51sysv_getblkinit_modulesysv_file_breadsysv_free_blocksysv_sync_filextime_Rf31ddf83sysv_write_inodechrdev_inode_operations_R3f3ee2e9printk_Rdd132261sysv_unlinksysv_renamell_rw_block_Rdc206727generic_readpage_Ra30f6c08inode_change_ok_R7b6d21ffsysv_sync_inodeinit_sysv_fsiget_Rf2d3b9b8__wake_up_Rdecddc1esysv_symlink_inode_operationssysv_read_super__ashrdi3strcmp_Re2d5255asysv_mkdirupdate_atime_R20016f2b__wait_on_super_R60631b72register_filesystem_R5b7afd0fsysv_mknodmemcmpdput_Rb697b4besysv_statfsiput_R2551b96fsysv_free_inodekdevname_R160820f5__bzero_Rdd42e263sysv_write_superd_rehash_R6db84970sysv_linksysv_count_free_blocksgetblk_Re811155cinode_setattr_R5381174asysv_new_block__module_kernel_version.uremsysv_symlink___atomic_addd_instantiate_R5a458775init_fifo_R4328a40fbread_R68bfe922sysv_bmapupdate_vm_cache_R4077408dfile_fsync_Rbb5b5fe7d_delete_R4a8b07d1sysv_new_inode.umulsysv_put_superrefile_buffer_Re499ba50d_alloc_root_R38df921fsysv_notify_changesysv_rmdir__memcpy_Rbfaaaa73ELF 4( 㿘` "<  (  h   B?•" "2;? &@4 @ ( 24   )X   !! ` ` <  ?X   !! `? p'D hD'$'@ `@   @ -@@H `@0@ '  $䀠` ?# ?*  *@2@ 2@ @"U@ `@0 . ''2  К h2*  ` 4$*   T:D#@ T; Ģ  3 ?# %?!?/@  ""!` @**` @ 2 @ 2` ? *  * 2`  2 #T `@ ؑ/@  *@?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$@:$%#4 И h 2* ``$* @ : ` * +@ `@     @ 2` €D䀠` $?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@' $`䀠`?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@H `|x5* @-*` 䀠` ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@5* @-*` "  Є h2*  `  $* @ DT `T:8Ā 3 ?# ??. ""!  @**` @ 2 @  2`   *  * 2`  2 `#`T   ؑ. +@?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`%@lT0@(`73D 2? h3@* ``$+@ 1 3h 3@* `@ `*$+@  3h 3@* `@ `*$+@  * @ `?h 3* `@ `( `$+ @  `?  ` $?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@' $`T䀠` ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@ `|x5* @-*` T`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@5* @-*` "   @ 䀠` ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`' `䀠`?? @ * @ +` 2` 3`   * *@ 3 @ 2 @` `|x5* @-*` `?? @ * @ +` 2` 3`   * * @ 3 @ 2 @`5* @-*` "'@@'@@@@@@@@@@h'`ȡ, 4, `@@@@@@@@`@,`'Ԥ,`$䀠`?# @ `*`2@ ` @* 2 *`@`@@ܢ@@@@@@@@@ȑ* ؐ@2* @@@@@@@(`ԧ, $@,@2Ęh@2@* `$*@䀠` ? @ ? @ *+` 2` 3`   * *@ 3 @ 2 @`Ę2* *$"@ @ @    @@ -0-@ `'D h'H'L``D' $@ ' " `H`L@`0  @ /`H@'H@H䀡 '`@{`0L@@ 'L @!''L @'@ h'` $'쀠` ?# ?*  *@2@ 2@ @"U@ `@G`0@''܂`H'lT1(74 D 2? h3@ * `$+@ 1 4 h 3@ *` `+ $+@  4 h 3@ *` `+ $+@  * @ `?h 3 *` `( `$+ @  `?  `@T("6hC`Ȁ2>`h@3@ *  `$+@ 1* h4 @ 3 *` `*`$+   h4 @ 3 *` `*`$+   * @( 4 @ 3 *` `( `$+ @  *@ `  2`@ ` T@` 2  €DԀ  `?c @ ? @**`? 2 @ 2` ? # ?*  * ? 2`  2 ` `Ԁ`  ?# @? @**` ? 2 @ 2` ? c  ?*  *? 2`  2 `! 䀠`|x1 đ* @) *`   ?# @? @**` ? 2 @ 2` ? c  ?*  *? 2`  2 `đ1 * @) *` "'@@'@@@@@@@@@h@'`ȣ,`4@,``@@@@@@@@`@'ȣ,``$,Ԁ` ?# @ `*`2 @?`c @*2*`@ `@@ܢ@@@@@@@@@ȑ* ̐@2* @@@@@@@ا,Ȣ@ $(`,@2Ęh2* `$*Ԁ` @ ?# @? @**` ? 2 @ 2` ? c  ?*  *? 2`  2 `Ę2* *$"@ T 'ܐ@ @ `   @@耡 HL@'Hv'L /``0/`@ 㿐 h'XD'H'L`$?'@ ` @ ,H`@?# ?*  *@2@ 2@ LT @  `@ LT @ "@L @ 2 !` @ X?L@0O,K0 `   ` !!`2.@``?# ?*  , @2@ 4 @``?# ?*  *@2@ 2@ l +D@ 0@: 2 ఐ@tX@ ƀ`?#?*  . @2@ 6 @H#@X#@ @/ L !@ % @ @%!@ ' @ $@  `@  @ `( `@ ` @ h "    `  @` `@ `"`@ `@*^0X@ YX#@ @/ L !@ % @ @D%!@ ' $@ @   @  @  (@ @ h "       @` @  `@@*0,@ 01``?# ?*  *@2@ 2@ $ !`X =``?# ?*  *@2@ 2@ D@ @ Ȁ$`"$`$`T``?# ?*  *@2@ 2@ XD@@ d `@ $`X@ Ϣ @Y`@ I'` @ `( @ "`  @2  @ (@ @ h "       @` @   `@@@ ~ @*`?#?*  . @2@ 6 @H#@X#@ @/ L !@ % @ %!D@ ' $@ @   @  @  (@ @ h "       @` @  `@@*0,@ '@@@00,@  㿐'D h'HD'L & $H' @H |5@  x*`@ -@ *  @ - H T  %@  '` $ ?# ?*  *@2@ 2@ @"U@ `@X  @H L  ```І:  h3  2@ * @ @$  :   ?# ?*  *@2@ 2@ &  T" ```І:  h3  2@ * @ @$  : L L 4 ,?# ?*  *@2@ 2@  `@?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @!$$(?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`($L: Г2 h 3*   `( `$+ *  *   @2` D     ?!' $ ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@& $ | x5@* @-@*`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@5@* @-@*` "  ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@ ! @@    @@ -H㿐'D h.`̰D`$` $`?# ?*  *@2@ 2@ 2`T  ?#`4 ??+   *  *` 2  2    + `H @>?#@ @ :&@ .`@`$ ` ?*  *@2@ 2@ g?`4##??+   *  *@ 2 @ 2 @ N  + +`@ ɒ @ @?#`@: .``$ ` ?*  *@2@ 2@ $?#`4!??+   *  *@ 2 @ 2 @    + `@ ʲ` @ @'` $`?# ?*  *@2@ 2@ @"U@`@ ?# ?*  *@2@ 2@ $``T   D@?Ȱ ?# `4??,  *  *` 2  2   ,D@?" `@`T `4 Г2`h 3*  ``( `$+   * `T   "@ @ 2` €D`$?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@$`$`?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@'``|H`x6@* .@*`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@6@* .@*` " / ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`%@?"    @ 2` D     ? ' `4, Г2`h 3*  ``( `$+  *  * `$ ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@$`$`?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@'``|H`x6@* .@*`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@6@* .@*` " ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @!%$.?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`.%@ @    @@ -`@x h`Ā `D'```$ $`[`T``.@`l`T6(`72D 2? `h 3* ```$+ 1 2`h 3@* ` ``*$+@  2`h 3@* ` ``*$+@  *  `?`h 3* ` ``( `$+  `? '@?'?&``l``T'0@"5`hB`Ȁ2=``h3 *`` ``$+1*`h3 2* ` ``*`$*   `h3 2* ` ``*`$*   * +( 3 2* ` ``( `$* * + `  2`@?` `T@`  2`      ?&>?``?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$쀠`?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$``H`|`x0* (*` `?? @ * @ +` 2` 3` ? * * @ 3 @ 2 @0* (*` "`'@`@'`@@`@`'@@`@@@@`@`Ƞ`h, @4, '@@@@@@@``@,`'ܢ@,@ $?쀠`? * 2? 2` *2*   @@@@@@@@@@@@* @2* @@@@@@@@(`ܣ,`$@,@2```@`h*2* `$쀠` ?? @ * @ +` 2` 3` ? * *3 @ @ 2 @@2@* *@$" 㿐`D`@2 ``2  `Б2 `T "  `` ?`h (*@ 0`P`  $ ( $ @ @  ?   2 D@ `  ?( *@0   $ ( $ @ @  ?    2 `#``#\`@6?@ " * &``Г0`h 2*  `` `$* `T  " :    @``    *`@ ``@?&㿈 D Ā'P5h@6@( ` $.@(.h@6@( ` $.@(.. ܐ" ')'6@'@ @ *`$6 (#" ?U`# ?;?6c3?. (6`6   #` 22.;?c1?(.6 6?( 0@?1?(.6 6 0@  2`*@  4 ,?# ) 6   #@8) &$6@&@- @ 0@ `2ۈ?) & #4؟(h@0(` $(3?c5?. .06P(.`60P@0(( $ 0&@؟/ h@0(` $(P 3?c5?. .06(.`60@6(.`$ /,h@0(` $(P 3?c5?. / 07 (.`60@6(.`$ 㿘 ̥.`@  D. $ Ħ @``<`8@.@ `, % `2 %  ̀%   @@ ,  $  * "` ?# ?*  *@2@ 2@ %  `?# @2 *`@ 5  `?# @2 *`@ 5 `?# ?*  *@2@ 2@ % `(?# ?*  *@2@ 2@ % `,?# ?*  *@2@ 2@ % `0?# ?*  *@2@ 2@ % `T?# ?*  *@2@ 2@ % Ā`X?# ?*  *@2@ 2@ % Ȁ`\?# ?*  *@2@ 2@ % ̀``?# ?*  *@2@ 2@ % Ѐ`d?# ?*  *@2@ 2@ % Ԁ`h?# ?*  *@2@ 2@ % ؀`l?# ?*  *@2@ 2@ % ܀`p?# ?*  *@2@ 2@ %  ? ̑, @  @* ̖? #`@㿘.`  Ā?_ D  H  `$!@ `@0M  ?# ?*  *@2@ 2@ #`(  ?# ?*  *@2@ 2@ #`,  ?# ?*  *@2@ 2@ #`0@    ? . @  @  . ?$㿘 D H@ ` h`.` ? `@ 0X V&  O!     + @  + +   ( К    +  +`  & #& Б(2  `6!@ ! А?*      +  +`  & Вה  Ё㿘 'H  h `   ?`Ħ @`@ `@`@` 2 T  @ ` #   @ B >  D@* ` ?#$   @ 2 *`@ $      @ @ >  D& T?# $ `  2   @2 *`@      @ @ C >  @ `     B> r@n  2 *@  ,@ D`    @2 *`@     ?* +  2` 3  H@ % D2` T  2 *@   B>  ,:  4v`  8p`  @ ,:  4  8 @ 㿈`h Ȁ` ?# 2 , @` g `?# 2 , @`X `?# 2 , @  ` ?# @2 *`@  ? `0  ?`1 `?# 2 , @$ &  ``?# ?*  *@2@ 2@ D@H ;` ?# ?*  *@2@ 2@ ` ?# * 2 , @*  2 ` ?# @2 *`@ #d#h`,#\`#`@`?`     ,: `@C  ??``@  8` `( `T     ;    h 2? "<   `@$? *`*h2  `   ` !!`2  $ " * `5 "@ $`"`  ,@ ֖?@?倊@" ! 5!   4 "@8 @"  $` 2 $  @tt   @t  2  $  @ "?``<`@  @t@2  $  @ "j?i`@t&@@ t  @2  @ (@ @ $@t-`x" ` ` @`   @x x`  @ ` " `"`@ `@     @p't`] "p` x@ @6 ,`  @ ` `"`@ `@  ,8% , $@!?5! % 8% 4?@ @ 㿐  h`D  `Ā  $`@0oV $`@0e `  @  ,`  H@ `@I`0@@@ ;'`` $ ?# ?*  *@2@ 2@ @"U@`@` ?# ?*  *@2@ 2@ $  "< @@ ``?€ @5̚  h 3*  ``$+ :@   `@А* *@*  *" ` ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`$ `?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`% |`H x4* ,*` `?? @ * @ +` 2` 3`   * * @ 3 @ 2 @`4* ,*` `b"` ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$ `?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @% |` x4* ,*` ?? @ * @ +` 2` 3` ? * * @ 3 @ 2 @4* ,*`" @ @ `   @@ ,``0,`@ p'D'H 'LV $ L?2'@ DL?)' h`D` $$h'$ `  @ -`L?'D `H''@|x4@* ,@*` `?c ?*` * 2 2  [H &?#</??@ @ :$@ 4@*  @ *` `  *  *` 2  2  4+  @  ?<#'?!?`@ : 4@*  @*` `  *  *` 2  2  2   ``0@ ' ` $' ?c ?*` * 2 2  @"U@`@  . @''ܧ3'&   ,   $2* ! !   U ! " ??2c ? **` 2 2 ??# 22.?c ?*` +  2 3 ?*@   2  ` ?c ?*  + @23 @ @` 2`` @ 2ԑ, " ? ܧ,4#  '?1??  8)  `$2* # $ @  N # " 6 *  *@ 2 @ @ 2 @ `??  2`2) *`+   2 2  .   2  *`+   2 2   2 @  2 ԑ) " `@g`0 ̓4 h 2*  @ `$* @ : ` `@O`0 * +@ 쀦` ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @쀦`'  ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @`' |x4@* ,@*` ?? @ * @ +` 2` 3` ? * *3 @ @ 2 @4@* ,@H*`<  h"쀦` ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`쀦`'  ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @``' |x4@* ,@*` ?? @ * @ +` 2` 3`   * * @ 3 @ 2 @`4@* ,@*`" @ @ `   @@ -` 4$H$h4"`4 4&` D  ( "$< (H @ 4(@$$<$@`$4$8$0D& ($$$$@$d`2-`@-``0@ `€?`      $` ``€ @4$L? 'L '`0-`@ @ 㿘 h`D    @ l@ *@ @ ``@Q  * @ 6 >@ *  @?#?*  . @2@ 6 @ ! @2@ @ *&@ @61 >@ @: *  @?# ?*  *@2@ 2@ * >@    ! ` @ @` @  l6 $* @ &@@ *@6Q&@ >@ *  : *  @?# ?*  *@2@ 2@ * >@   ذ ! `@ @`   >@  @  l3@ $* @?# ?*  *@2@ 2@  @@@  !   >@ *  : *  @?# ?*  *@2@ 2@ * >@    ! `@ @`   >@  @  l3@ $* @?# ?*  *@2@ 2@  @@@ Z ! `@ @`   >@  @  l3@ $* @?# ?*  *@2@ 2@  @@@ , ! ` @ @` @   l6 $* @?# ?*  *@2@ 2@  @@ ! 㿘`h'HD l6@.`H`Ħ@ @ `a?# ?*  *@2@ 2@ 'H@$? @ @@`?# ?*  *@2@ 2@ Հ "@?倦'@p#@8 l 2@  @  l0= ` ,  @`@?# ?*  *@2@ 2@T# @ 2aav, `H` @?# ?*  *@2@ 2@ T 8@H$ ` @ ?# ?*  *@2@ 2@  #  @?* ``@?# ?*  *@2@ 2@  T T@ 2" `?# ?*  *@2@ 2@ 2"" a2 @` `h`$`8 ` "`@` @㿘h'HD`l``6Ĵ c\` 2`$  @HH`  @H` 2 `$`˰ @ǰ - H?# ?*  + @2@ 3 @ #`a ` @ @@ ?# ?*  + @2@ 3 @  Ҁ @`p :  `?@?' ``$ @??# ?*  *@2@ 2@ `T  ``T . @ H  ?# ?*  *@2@ 2@  C  @ H  @  @  (@ @h "      @HH` @  %8@H @㿐 h?D&  `    l * @ `@d ?& l *@ @   Ԙ S $@ @ 6@   6@   TÚ9  ( @ &@ 6@ (  &@ *@ 6@ @  T  6@  #\   6@ *@ @  T  6@  #\  @ #\㿐@ '    @   @   ?@?& 㿘 h  D   H@ `@0@ @<8@,@ 0 @@    @@ 2   `@0@$* @` @?# 2 *@ 6 "` ?# @2 *`@  6 $ `@ `  @`t?# ?*  *@2@ 2@`p   ?# @2 *`@ 6 &` & @`x?# ?*  *@2@ 2@`t   ?# @2 *`@  ?#6 (@ & 6 & 86 (`!?   #? *+  2  3  , (4` 4      >   & ,?& ,`?# ?*  *@2@ 2@ & 0` ?# ?*  *@2@ 2@ & 8`?# ?*  *@2@ 2@ & 4`h?# ?*  *@2@ 2@ & @& <``"& Dd?# ?*  *@2@ 2@ & 耥`l?# ?*  *@2@ 2@ & 쀥`p?# ?*  *@2@ 2@ & `|?# ?*  *@2@ 2@ & P ,  @? "<  &!2 @`(?# ?*  *@2@ 2@ 6 *  (  *# (  @ + ;( @ " "@ "<  @ & d $& d@( & d@ & d@ & d@ & d@@㿐 h D  H@ `$@ @<8@,@ 0 @@ @  ' `@?0@ * `$ " ?# 2 *@ 4  $?# @2 *`@ 4 &`<*` ?#5 ?# * 2 *@ ` 4@2O (?# ?*  *@2@ 22@0 ?# ?*  *@2@ 2-@+ *` 2 ?# 2 *@ ` 4@2 (?# * *@  $t?# * *@ $p (`;*` ?#4 ?# * 2 *@ 4@2N ,?# ?*  *@2@ 21@/ ?# ?*  *@2@ 2,@* *` 2 ?# 2 *@ 4@2 ,?# * *@  $x?# * *@ $t , :" ?   #? *+  2  3  , (4` 4       < 0?# ?*  *@2@ 2@ $$ 8?# ?*  *@2@ 2@ $ $$ 4?# ?*  *@2@ 2@ $$ @?# ?*  *@2@ 2@ $h ?# ?*  *@2@ 2@ $d ?# ?*  *@2@ 2@ @&$l ?# ?*  *@2@ 2@ $p ?# ?*  *@2@ 2@ $| "< @ @2 @ *2`*  `  ?# @* *`@ $(   ( *# V $( @ * ;( @ V $ @  `@  @ `( `@ ` @``  @` `@ ` @  㿘 㿘 㿘 2 h@ h   2  2  @& ,@@P'@`h'HȀĐ@ ؠ  `,,@  @,` $  2`- $ ``$ `,  9`   @ `ؐ` ?$@* @ 2  `@    @  "}  $ M?#`,H62 `  @2 *`@    H  @`?  @ J ؑ.`` @`.`G'@`  @2 *`@ .  " @ ``,*    @؀`` ?$@*   "@  2`,- "  `, _` ؑ.` `@`.` 㿐 h`D`-?`@ !  ?# ?*  *@2@ 2@ @ @ ?@@ 㿘?' D'@U $ @ h``;`D , 5  @ 0  $? ?'  $" D` b`@` " `@ `4  @ "k  ," 2 $?'a  " "`4  4 ,  `% ,@ $ @  ? '@4 `2   ?# @2 *`@      @`?  ? '@ -?# ?*  + @2@ 3 @ ` ?# 2 *@ 3`@*  3`?# 2 *@ `   ?# @2 *`@  ?  0  ? ?# ?*  + @2@ 3 @ [`2   ?# @2 *`@  ? ?# 2 *@ `  ?# @2 *`@  ? "?# @* 2 *`@ `3   ?# @2 *`@   ?  ! ?# @* 2 *`@ 4   `$ ?#* 2 .@4 ,  @ % 4 % 8@`  % D"` @  @  (@ @'@'?# 2 *@  @?# 2 *@ x㿘 h   Ā@ ]$?# @ P?% @2 *`@ ` @2 *`@  @* 2 *`@ 4&@+   2 *@ @b  2 *@ b  @2 *`@ "?@ ?㿈 h?'`Ȣ`Đ@   $ d`4 "@`@`DЖ ' $ ?`4 $@@􀤠 ?# ?*  *@2@ 2@ " "7< @@* (@( @$ #*@ *@ 0 @  *@2*  * * *****`  "`& D@  @ ( @  @ h "       @ @ 쀢@ @ 㿈 h?'`Đ`Ȕ@ <  4 &@ 4 "$ d $ d@ $ d@ $ d@<@< 2 4 * 2`@@`@`D '쀤` ?# ?*  *@2@ 2@ " "7< @@* (@( @$ #*@ *@ 0 @  *@2*  * * *****`  "`& D@  @ ( @  @ h "       @` @ @쀢 "'@'  $ ?`4 $@@㿈 hV $ ?`Ȁ@`#'?'@  "$ d$ , @  2`  $ ?4 $`@@2 $ @$' ?# ?*  *@2@ 2@  "C "< @@".(@"/@,/* @ ** @"0 @* @ *` *` *` *`  *` *` *`*   ! 2  *`" ,2 `@  ?# @2 *`@   '?# ?*  *@2@ 2@  "C "< @@".(@"/@,/* @ ** @"0 @* @ *` *` *` *`  *` *` *`* 4!  2 " "2  *` @` 4 $ @  @ (@ @"h@h`: # 4 " "d$4 " 2`@@`@`D '쀤 ?# ?*  *@2@ 2@  " "7< @@* (@( @$ #*@ *@ 0 @  *@2*  * * *****`  "`& D@  @ ( @  @ h "       @` " $@  $  `6 $@@쀢 "I'@E' 4 $; 㿐 h ,   Đ  @ 2 `$  h`@Ѱ  ?# @2 *`@ ?# ?*  *@2@ 2@  @2$ @?# ?*  *@2@ 2@  @ 2   @`    h`@  ?# @2 *`@  `?# 2 *@  @ ?# 2 *@  ,\@?#-/`" `$   `" @ 4  @ 2 `$ @ 5 @ 0  ?*  *@2@ 2@ `# @  2 *@ @ 2 *@  , `` @ 㿐 h`Ė`@?]`D '` h €?􀤠??# ?*  *@2@ 2@  @g a?%& D`U$ `@  @ `( `@ ` @ h "       @` "T $@ T $ h`@4 $ $ $ D`$ ,@ $?6 $& 4& 8$ 8 @@ @㿐`h`Ė`@?`D '` h €?􀤠??# ?*  *@2@ 2@ bT $   h`@  4 $ Q M`  "`$`D@  @ ( @  @`h "`  `    @` @  `$`8`$`4@ $ ?`4 $@`8$ 8@  @㿈 h?''(@  (`!$d4" @   N `@ *N   @ 2 $?`4$@@ `$N  *  ?*N`*` @  @ `(@ @`"@ $,@`@`Dߘ '쀥 ?# ?*  *@2@ 2@ " `"& D@  @ ( @  @ h "       @ @ 쀢@ @J'㿈 < h " `s?V $ @$@k?Do 'a  ?# ?*  *@2@ 2@ " `"&`D@  @ ( @  @`h "`  `    @ @ 쀢" $@  $ 6 $ & 8@ & @ 㿀 h' '`@'`D?`'쀢  j'􀤠?# ?*  *@2@ 2@ `@U @D '䀦`2`h@ '䀢" `"€?`"<  @䀦`?'U + ?'  @젒   $ ?# @2 *`@  ?# ?*  *@2@ 2@  @ ?ဦ`'V$ @ 䀢` D@z'䀢`7 &D&`?# ?*  *@2@ 2@ "`& & D`$?6`$`&`8@  & 8`& 4@ Q $ `?# @2 *`@ ?# ?*  *@2@ 2@  #  @  @  (@ @ $ ?`6 $@`" $`$`?` 6`$ `6$@ `@  @ `( `@ ` @ h "       @` "@  `@  @ `( `@ ` @h "      @` "'@ '쀤 @耢 "@䀢 @㿘 D'P'T'X  `$?*ѐ @   . & 9 @P! " "  0 "  0!@ @ !@ @ 㿘 D'P'T'X  `$?*ѐ @  .  @P 2.  !`  @& @㿘#`'P'T'X@P !@ @㿘  #@`  %@ = . @ O@ 8&@`@ @ ~&@`@ @ @t&@`@ @ j&@`@ @ `&@`@ @!V&@`@ @"L&@`@ @$B&@< `@ 24@ ?&@`@ @ +&@`@ @ !&@`@ @ &@`@  @ @` &@  @ 0 @` f 㿘 DP Đ@ @?@   :%HTLP@%@ @ w@l H4 + "@ @T  H @*  `& H :   ̓," H * ̨ Ъ  ?,""@H 3?# @<8@, ,  @ ̕, -"@  ̀` @$ ` ?*  *@2@ 2@ "U@H*  ? @ ,  % %@ 6!* " @ ̀"! H  Б, @H ̀ ,@  , @, 㿘 D P@? H@$T@LP@% @@@ @ @T@ @ @! @` В@,` @`!@ `8 H Г,` @``,`H @  ̑,`@ `@H ̀@ ,`@ @㿈7    @`  ` ` @  . &!! 2!@ w'2 ! @ !`&!! @  g& D! ' "H< " 00r @0n""W<!C0f$0b> &%`%ha0$< (%`%h b@$< (%`%h`@%P%tJ% <$ (%`%h%P%t%  2> 0 $ (%`%h%P%t%  2/ ! 8( (%`%h%P%t%  2   $(%`%h%P%t%  `!0 @ `& @ 倦 @ @ @ Ր$h: * @":  $*`@ :` d b\F $*` !T$@  @!@ ! ' !"  @ `% @ ` 0?# ?*  *@2@ 2@ %L` 4?# ?*  *@2@ 2@ %P` h?# ?*  *@2@ 2@ %t` L?# ?*  *@2@ 2@ %`` T?# ?*  *@2@ 2@ L@ %h@@ 7Pb dh@ +@t @P<t@=V"8 " H`? H`?# ?*  *@2@ 2@ ` ?# ?*  *@2@ 2@  !8" L р   ? *`  *` 4    @:` &  @ `&  4`?# ?*  *@2@ 2@ & ` T?# ?*  *@2@ 2@  . & & `\?# ?*  *@2@ 2@ & $` ?# ?*  *@2@ 2@ %(` ?# ?*  *@2@ 2@ %,` ?# ?*  *@2@ 2@ %0` ?# ?*  *@2@ 2@ %4` ?# ?*  *@2@ 2@ %8` ?# ?*  *@2@ 2@ %<` $?# ?*  *@2@ 2@ %@` (?# ?*  *@2@ 2@ %D` ,?# ?*  *@2@ 2@ %H` 8?# ?*  *@2@ 2@ %T` <?# ?*  *@2@ 2@ %X` H?# ?*  *@2@ 2@ %\` L?# ?*  *@2@ 2@ %`` P?# ?*  *@2@ 2@ %d` T?# ?*  *@2@ 2@ %h` `?# ?*  *@2@ 2@ %l` d?# ?*  *@2@ 2@ %p` l?# ?*  *@2@ 2@ %x` p?# ?*  *@2@ 2@ %|` t?# ?*  *@2@ 2@ %` x?# ?*  *@2@ 2@ %` |?# ?*  *@2@ 2@ $%`8 ` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %`aX?# ?*  *@2@ 2@ %`$?# ?*  *@2@ 2@ "%``<' @<'@8'<'`!?   #? *+  2  3  , (4` 4       "=``D' HD'H@'D'耦`!?   #? *+  2  3  , (4` 4       =Ȁ`L?# ?*  *@2@ 2@ %Ѐ`P?# ?*  *@2@ 2@ %Ԁ`T?# ?*  *@2@ 2@ %؀`X?# ?*  *@2@ 2@ d h+`P l*@ T(*@ ?*@2*?%%%%%%%%%%%%%%%& & Đ@ @  & ,@ .  0@ 0@ 0@ 06 . @  @`   `㿘 D$h:@*` `$:  $ $ @ Āq ` ?# ?*  *@2@ 2@ "# $W`?# ?*  *@2@ 2@  !8 " "!+0;$07`?# ?*  *@2@ 2@ % a8`?# ?*  *@2@ 2@ #`?# ?*  *@2@ 2@ aH@ . 㿘  D@@@ D6 ` @`  `㿐 D$`h : '* `````$:`$ ! Ȩ  ȴ ?ꐊg @ ?@'&!@ ` @`x@@ `?# ?*  *@2@ 2@  "$ $W ?# ?*  *@2@ 2@  !8b " "!+0;$07 ?# ?*  *@2@ 2@ %%!8 ?# ?*  *@2@ 2@ $ ?# ?*  *@2@ 2@ %!H@  . &  @  @ 2 @  ?&  X DF!T`$  ''D'?# ?*  , @2@ 4 @ ?# ?*  *@2@ 2@ l d+ @'X@@" 'H@'̀ ?# ?*  *@2@ 2@  'Ѐ'<`@ @ ? 㿘@ 㿘@㿘@ 㿐  `@   @ 2 $@?`@@ @㿐 `h    `@   @ 2 $ 6( 0&`  J   &J  <`@  @ 2?@ @㿐 h D  , P @?l !*@ Ā@      .@ ''  4 '7@ '^5 *  ?# ?*  , @2@ 4 @`2 `@ :*@@P  瀣 ?c ?*  *@2@ 2@ @Ӏ " @  *$ @, "@& @@@@ k`-  ?c ?*  , @2@ 4 @`OT /?c@@P     ?* * 2` 2  @ ) @ &"T@ T *$ @ " & @@`" T$@T@@T  `@@bl7@*  ?# ?*  , @2@ 4 @`2 `@ @.?#@@P     ?*  *@2@ 2@ @ H @ E" @  *% @.@ "@& @@@㿐 hĬ D @` ?# ?*  *@2@ 2@ `2  L@@`'?# ?*  *@2@ 2@ @  2 ,`'@ L @?" @ y9?h`6@ P*` 2 ?$@* @@?c ?*  *@2@ 2@ `"QT 0`#@@P `  `  ?* * 2` 2  @ + @ ("T@ T *`%@  $@T@T @ " & @@`@ *h@ @ (?Ph2 ?#?!? 6@* @$*``  *  *` 2  2  @ `@ 6@@ *, h@ `$ @?# ?*  *@2@ 2@ `'@ @ " & @@T@@' h "    " @   @@@㿐 h D L ,@? @" ?# ?*  *@2@ 2@ `2 ʰ @'?# ?*  *@2@ 2@ @  2䀤&  2?#h4 P*` 2 ?$ * @ @ ?*  *@2@ 2@ `"  , @ O@   *h (?Ph2 ?+?#? 4*  $*`  *  *` 2  2     4 *, h@ $ ?# ?*  *@2@ 2@ & @ " & @@T@@' h "    " @   @@@㿐 h D ,`L@?``` @Đ` "@"   ؀  ?# ?*  *@2@ 2@ 2 @@ '?# ?*  *@2@ 2@   2`䀥 %@ `h ?3* ``P@2` $, *`  @ `   (?`P`h2 ?'?%? 3*  $*`   *  *` 2  2     3 *, h@  $ @?# ?*  *@2@ 2@ %@ @a " & @@`T@@' h "    " @   @@@㿐 h<`D  " @ @(@i #et є `   Ԡ" , h "  2   @@!0h@):@ @ " P $"@@ @2  @ (@ @ "@ & 4& 8P ,  @? &!@㿘`6 h61 (@  ",  && .` P6`@,  $@  *P  ,   "@0  . @  @ .  㿘 `22  h6`8,  && .`  P6`@,  $@  * P  ,   "@0  . @  @ .  㿘     ,  @  @  , @㿘   @  "$@$ `@  㿘 $  @  ,`  @  @ (@ @ `@ ,`㿘     , @ @   , 㿘  ,   @ , 㿘     , @ ` @  ,    *` 8`@ *`㿘      , @  @  ,         *`` @ 0  㿘 h*@ 8   P8,` $@ P`@ 㿘` h*@ 8  ` P8,`@$@ P` ufs_free_fragmentsinternal errorfreeing blocks are outside deviceinternal error, bad magic number on cg %ubit already cleared for fragment %uufs_free_blocksinternal error, fragment %u, count %u freeing free fragmentufs_new_fragmentsinternal warning fragment %u, count %uinternal error, fragment %u, tmp %u <3>ufs_new_fragments: bread fail ufs_add_fragmentsinternal error or corrupted bitmap on cg %uufs_alloc_fragmentsufs_bitmap_searchbitmap corrupted on cg %u, start %u, length %u, count %u, freeoff %u block not in map on cg %u ufs_read_cylindercan't read cylinder group block %uufs_put_cylinderinternal errorufs_load_cylinderinternal error, high number of cginternal error, wrong number of cg in cacheufs_readdir: dir inode %lu has a hole at offset %lu ufs_readdirreclen is smaller than minimalreclen % 4 != 0reclen is too small for namlendirectory entry across blocksinode out of boundsbad entry in directory #%lu, size %lu: %s - offset=%lu, inode=%lu, reclen=%d, namlen=%dufs_file_writemode = %07oufs_free_inodeinode has count=%d inode has nlink=%d reserved inode or nonexistent inode %u ufs_free_fragmentsinternal error, bad cg magic numberbit already cleared for inode %uufs_new_inodecylinder group %u corrupted - error in inode bitmap internal errorufs_bmapblock > bigufs_getblkufs_read_inodebad inode number (%lu) unable to read inode %lu inode %lu has zero nlink ufs_find_entrydirectory #%lu contains a hole at offset %luufs_add_entryinternal error fragoff %uufs_delete_entry...empty_dirbad directory (dir #%lu) - no data blockbad directory (dir #%lu) - no `.' or `..'ufs_rmdirempty directory has nlink!=2 (%d)ufs_unlinkDeleting nonexistent file (%lu), %dUFS-fs panic (device %s): %s: %s <2>UFS-fs error (device %s): %s: %s <2>UFS-fs panic (device %s): %s: %s <4>UFS-fs warning (device %s): %s: %s ,ufstypeoldsun44bsdnextstepnextstep-cdopenstepsunx86UFS-fs: Invalid type option: %s onerrorpaniclockumountrepairUFS-fs: Unable to do repair on error, will lock lock instead UFS-fs: Invalid action onerror: %s UFS-fs: Invalid option: %s wrong mount options You didn't specify the type of your ufs filesystem mount -t ufs -o ufstype=sun|sunx86|44bsd|old|nextstep|netxstep-cd|openstep ... >>>WARNING<<< Wrong ufstype may corrupt your filesystem, default is ufstype=old <6>ufstype=old is supported read-only <6>ufstype=nextstep is supported read-only <6>ufstype=nextstep-cd is supported read-only <6>ufstype=openstep is supported read-only unknown ufstype ufs_read_super: bad magic number ufs_read_super: fs_bsize %u != {4096, 8192} ufs_read_super: fs_fsize %u != {512, 1024, 2048} ufs_read_super: fs is active ufs_read_super: fs is bad ufs_read_super: can't grok fs_clean 0x%x ufs_read_super: fs needs fsck ufstype can't be changed during remount this ufstype is read-only supported failed during remounting ufsufs_trunc_directinternal errorufs_truncate_direct        @    !     !@*&N>*>N>6^>>>^>6^>>>^*>>*>>.n>>>>*>n>6^>>>^>6^>>>^&66.66&n666>.>nN^^n^^nN^^^~n~N>6^>>>^>6^>>>^>6^>>>^>>>>>>>~>>>>>>~*>>*>>.n>>>>*>n>>>>>>>~>>>>>>~N^^n^^nN^^^~n~NΊΞΊGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata.data.rela.data.bss.comment.note.modinfo__ksymtab4!P6  , 44:T  EJSY2blU L b Q 0     q  (   ($Z8V  P  PZ    H   q   q    qP`qhxq (0q8HT\lt|qqq(|    q  (  (ZLV  P  PZH L P T Xq(8qDTdt|qqqqq(q0@HX`hqP      8$ ( 80do ho <q|qtDT`MxQX_  k 8v h   M Q!X!,!@_!|!k!v!""q##q#<t#d#_##Q#X$$_$P$lk$v$ `$$ `%H%X%dM%Q%X%%_&&k&4v&P&h&x&&q',V' ' P' ' P'Z'(@| (L| )h )l )p )t )|Z*,,,-/$08V0 0 P0 0 P0Z0| 0| 1,1124488 8<8D8X8:;;==q===q>>> >0>8>Dq>t>q>>>>>q?<?L?X?`q?h?x?????q?q???@@ @qAAP AX A\ A` B( B0 B4 B8 B B C C  CC C HC CC HJHJ\JOvO, hO0 O< hO@ ODO O O OZO PPvQ Q Q Q QL QP QX Q\ Q`ZR`S SmS$S8 @S@ @SDT xT xTUvVvVW, W4 Wh Wp X X  XT X\ XX X Y Y YZ8y ZTy Z`y Z hZ xZ hZZ x[o [o [hd\8\Tk\|v\a \a \]\v]],M]PQ]hX]]_]v]^k^8v^|^^k_v_<| _L| _td_ _ _ __ _ _ _ __ ``0`D `H `L `P `X`hq`x`V` ` a a aZa| a| aNa a 0a a 0ae@eLehepeeUf$f\qgqh@Vh Xh h Xh hZl Xl hl Xl hlm( Xm, m0 Xm4 m8Zppppq\qx| q|| qpqdqrPrrr r r rr ttuxvv$vvvwpvwxvxyLvyz({|,|4| |@| |p|d|}k},v}~ v~Dv~TtQX_ | k| | 0dHv    T|kv    $ (4qH\t|q    H L (X \` (y y y qv e e  8 < T\ X\ p    q q4L P X \ `p Q$X@X_tkvdX`0 HP X X Hkd| Hv(vXvv0h     v\dh p t v@v| | dy y y QX_   HX h |ddy y y ,QDX`x_kv(\ ` | \ \ dPy Ty dy tQX_k$<vhdpe e $d,  u u  Q$X<P_dvd y y y 0QHXd|_kdvd|    l p t        ` d Xv  X Tvvy y y QX$<_xk P ` P `y y d| | d$<v    $ (Xy \y ly |QX_| k(| ,| Ddddxv 0\ddQX_(v@dy y y QX(_dkv|y y y QX_,Hk`vl| x| dvy y y ty y | | d| | dlQX_dd4QLXh_kQX$<_x”k¬vvv$@ D PLØ Üà ðOü   ( , 8LT ` dxČ Đ ĨLĴ 8ĸļ 8 ` ` h (, h8 @ pL pP` xt xxň Ŝ ŠŰ      ( < @P l p tƄ xƌ Ƙ ƜƬ      $ P( ,0 L PP xXhl `Ǡqǰ`$@d`(ɼ`<vXxʴq(4<t˄˴v (Y 8Y Dl̜ ̠̤ ̼  ` @, @L @\ @   H P Έ ΐ    @s q$W X Xz  Xќ ѠѤ   z4 X X< (P X \ d h (l (pӈ Xӌ, 0 8@XtzY j<| H| ~ z(0Y 8Y Dj x x0~8| D|   (< @D 0w@Tta a ]$ D(, D<P DTTX D[v$a a ]v q     Z8hRdhv,RldH L P T XZhvRPd`xqPhvR4`dHPdS(@HXqqDPdS PqqP(d8@SxQX4H_X| \vd| h| qd`|vXvvvdQ|X_MDk@Rt R(<@nDlHL^PbTcX\`|YZtf_m $r,}048D L|d     p%8LJWJ<iRoR{<Y<YZt__rx8`| <p&p5CT@bjt,Dddph 0%8Wm}T TP*8BZ|LT<P8  QjLyr$| !- L5FY^qX8`ʘĈT, 8dDUkD`X_ e P+BVVpppL *=Ob8mH& l8l   %@ 78  G M [TP x   C   p  x\ (p  % ?d JLj g |$      X OT    !`X 4| >acl.cgcc2_compiled.*ABS*balloc.cufs_fragtable_8fpbufs_fragtable_othercylinder.cufs_read_cylinderdir.cufs_readdirufs_dir_operationsfile.cufs_file_operationsufs_file_lseekufs_file_writeufs_release_fileialloc.cinode.cufs_inode_getfragufs_block_getfragufs_update_inodenamei.cufs_find_entryufs_add_entryufs_delete_entryufs_empty_dirsuper.cerror_bufufs_parse_optionsufs_super_opsufs_fs_typesymlink.cufs_follow_linkufs_readlinktruncate.cufs_trunc_directufs_trunc_indirectufs_trunc_dindirectufs_trunc_tindirectutil.cvsprintf_R13d9cea7mark_buffer_uptodate_Rd0ee0e0aclear_inode_R5a5bfea1panic_R01075bf0ubh_max_bcount___set_bit__bforget_Rbe345d8cubh_bforgetunregister_filesystem_R85f46c0eget_empty_inode_Rce23dbffufs_load_cylinderubh_bread_uspiset_writetime_R8e167c19__this_moduleufs_paniclookup_dentry_Re3d4e95eblkdev_inode_operations_Rb9db2edc__copy_user_R9c5239ebufs_unlink___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7ufs_symlinkufs_mkdir__mark_inode_dirty_R19c75706ufs_dir_inode_operationsgeneric_file_mmap_R5a6dc27f__module_using_checksumsget_hash_table_R3b41a211cleanup_module___atomic_sub__wait_on_buffer_Ra773ade4ufs_lookupufs_bmapufs_createsecurebits_Rabe77484insert_inode_hash_R6aecc9f5.udivufs_delete_inodeset_blocksize_Ra842722aufs_alloc_fragmentsstrcpy_Re914e41e__brelse_R01c3a101.divschedule_R01000e51global_event_Rcaf51008ubh_brelse_uspiinit_modulextime_Rf31ddf83ufs_put_superufs_put_cylinder_structuresufs_errorufs_warningubh_mark_buffer_dirty_ubh_bread_chrdev_inode_operations_R3f3ee2e9ufs_remountprintk_Rdd132261ll_rw_block_Rdc206727generic_readpage_Ra30f6c08ufs_breadiget_Rf2d3b9b8__wake_up_Rdecddc1eubh_buffer_dirtyufs_free_inode__ashrdi3in_group_p_R9878bc79strcmp_Re2d5255aufs_new_inodeufs_file_inode_operationsupdate_atime_R20016f2bufs_check_dir_entry__wait_on_super_R60631b72ufs_write_inoderegister_filesystem_R5b7afd0fufs_permissionufs_read_inodeufs_sync_inode_ubh_ubhcpymem_strtok_Ree9c1bd4memcmpubh_mark_buffer_uptodatedput_Rb697b4beiput_R2551b96fkdevname_R160820f5__bzero_Rdd42e263cap_bset_R59ab4080ufs_renamegeneric_file_read_R8848747bd_rehash_R6db84970ubh_ll_rw_blockufs_add_fragmentsinit_ufs_fsgetblk_Re811155cufs_rmdirufs_alloccg_blockufs_link__module_kernel_versionufs_truncateufs_bitmap_searchufs_free_blocks.urem___atomic_addufs_symlink_inode_operationsd_instantiate_R5a458775kfree_R037a0cbaufs_write_superufs_clusteracctinit_fifo_R4328a40fufs_free_fragmentsbread_R68bfe922ubh_brelse_ubh_memcpyubh_send_sig_Ra981cecdupdate_vm_cache_R4077408dufs_statfsufs_read_cylinder_structuresfile_fsync_Rbb5b5fe7ufs_read_superd_delete_R4a8b07d1.umulufs_new_fragmentsstrchr_R349cba85ufs_getfragufs_put_cylinderufs_put_inoderefile_buffer_Re499ba50d_alloc_root_R38df921fubh_wait_on_bufferufs_mknod__memcpy_Rbfaaaa73ELF* 4( 㿘@ 㿘` @` `  L`D  㿘 (`@ "`@ `@ `@ `@ @`  &@ &@ 㿐`  8&` u s +@`  c -@ =  ,@   >` * # {`@   -` *  }`@  ` *  ~@&` `@ v  ` `?*`  &`  ,, 2,` @` ` " ;&`  ` @ J.?  0 ("` ` @ H.2  @   @   0( "` 㿘` @ @ .  @ .    @@   㿘` @ @ .  @ .    @@   㿘N J ` F D`@J?` "S?ꀦ`4P? `#`:" @` + `$: N  J .""J  ."   `# @@ `@ 2@ ?2  `  @@ `@ 2@ 㿘  `$)$  `2R? ` @ J F D :B . `?`$29?ꀦ` ` .   ` ., .2* `4'?ꀦ` 1 `2? ` @   . :   `?`4  ?㿈'@ h@  ?㿘 +' ` .% $ d`2m?@ Z V T :R `? ``,ڤ2O?ꀦ`A$  ` ,$ $,`-'$ ' `23? `@   . :   `?  `*@2?ꀦ`$ ?ꀢ    ,$ $, h J?` "?ꀦ '@ \ ?0  @ ` ,, `2L@ T @ L .2   :L@ #L@`  *L$   *ش _-`% "L@L@ 2,L@@ 2 @ ,,L@ " , `ܢ``?- Ц _)@& " L@L@ "L@, @  @ ,,L@ 2, ۢ`**@O؀ ؐ `   _/ؐ @ @@ h ` 2`4  ~. @0,` $ 0?#2` ` ` 1 ~,`,`'Ȑ@@ ^  㿘`\@@&J .2&* e@J?`."`I Y&  !R & :2$4u?   E  ``A >+ 2` `/@*` /@` `*  @/@``*`  /@` & &!/@`/@  &`!?0('?@ ! /@`/@ @& `@  "@ 6 ?/@`/@ ` & 㿈J?`. @ `U?#\\E @ 0E@ '  `` *`2 @  %,`* * .:   ...6@@  @  @ `   @-@ '@  㿀 h   2 2 ' `y ! ֔ E   #\#`ox`h"@  2`?  @? @ .2??! a  @ @ 4? @찒 @ؓ: & `'t @ '2ذ  "@`" $"@:   ` '@ B  ? & @`1@@ @   Բ`  `$`8$`0$`4@@`4`@`@* @2@ 2 2 @2`@2 @"`@ ? *` @ * @ +`ؒ  b>& @㿐`@  h .2   s@ @ '?&  `" $"@:   ` ' B  & ?@` ? "?    Ȁ Ȅ"Ȑ ` h' `s  , '*`@&`P`@ЖȀ  'Ġ ,  h@ h@Ā   " @ @0@*  ` &`P`D @&`L@`h'̐`@ ИȰ )'Ȑ@Ġ@   $ 4$ 8$ 0@`$ D" $$D`   D@&`L㿐 h@ 2 4\?@$`@ ` `@  , ,` ?  2`*  4 4 4`4` @ `2*`@ 4 4 4 4`4`4` ƒ  2* 4`V Ĕ  +` 3`+  4``ƚ  *3` 4`:V`Ą ( + 0@4`4@ & 0`& 4& 8@ 㿈& 4'L& 0'P " & D h`& @P?*L@ 'P``3?LPL P" $":    쒂` B ?'P' @ & P?*P* L@ LL`@h``@'-?@` (А`@TȀ 6`2`$ `"4 `"`0@``` @ ̒x $ ?4 $h'̐`@)Ȱ `2`$ `"4 `"`0@``` @ ̐O@` h'̐`@ IȰ I'Ȑ@İ $#` & 4`& 8& 0@  & D" $$ D`4 $$ 6 $ '`  D@&`L@6 $`& 4`@& 0 `@̒@ $Ē4 $(``@`h'''Ж < "  `? `@  @ `Ԁ@@ l@ 2e@ 7 W7&`&D&'@@ @! &$`D `$`8`$`4@``$?6`$ &`8*?Ēc : *2 * *` 3 2`*   2@ `$`4`$`$? 6`$$ `6$@@@@㿘  @ & h& @  6  @  &&j x 2   @ &* `& &  s.  s ,  , "`P㿘@㿘@ vfat1yestrue0nofalse,utf8uni_xlateposixnonumtailaux nul prn con lpt9 lpt8 lpt7 lpt6 lpt5 lpt4 lpt3 lpt2 lpt1 com9 com8 com7 com6 com5 com4 com3 com2 com1 %04X. .. <4>vfat_rename: fs corrupted vfat_create_R1636e30avfat_unlink_R4c0c1946vfat_mkdir_R447c348fvfat_rmdir_R0c415ff7vfat_rename_Ra597eeaevfat_read_super_R56eee855vfat_lookup_R2b13b916*?<>|":/\[];,+=.:"?<>| GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata__ksymtab.rela__ksymtab.kstrtab.data.rela.data.bss.comment.note.modinfo4$L!, 4 ,$4&8>7 M&V'D\8| g(l(zu)>({)h2):h1 Bh6 Z 6 :  : ,H  X  X  X  X ( (X 0X 0\ 8d\h 8 @yX @ H HX X4 X8XH ` `X\ 8} } t`b y l pp p| pt   t( \ `y  4 8yGp  8 <y  $ (y  y $ | y   y  @ xy |  y  (a8H4 4 4    ?I`O~ ~ DhphhxLEXMIIIDr\EH@8m@pwIo R $R @AT[oll8w  =p4uH`T^d ck=pR R ,A4N 8N HN lkg[  I  IopR R AR R N $R 0N <N XAtow@ohpWR R R 7AR R R 7Av4=DR HR dAlN pN N kpR R 7 A ,`     G! !U!  !4W!H7!TN !xN !|N !N !7!T!N !A!N !R !N !R "A" R "o"A"p"p"p#: #: #i#(J #8J #Hq#lH#H# # # $ $ @$  @$$Q$86 $<5$@6 V1{ D;Cn| z$S(j,<0L4>jH(L,0HD(HXL\(`ptx|pp`P@0 YVL{ ;nz     $,`<GHQL(a(tkt4t0pL  H* 5 \KHXmp~8(T|h0(,>^k`x:L^{  0$4 P9?|$UZq$ `&7Tr$7V nt"$x3Has  L+PAH`qvfatfs_syms.cgcc2_compiled.*ABS*namei.cvfat_dentry_opsvfat_hashivfat_cmpivfat_revalidatevfat_hashvfat_cmpvfat_put_super_callbacksimple_getboolparse_optionsreserved3_namesreserved4_namesbad_charsreplace_charsvfat_valid_longnamevfat_valid_shortnamevfat_find_formvfat_format_nameskip_charsvfat_create_shortnamexlate_to_univfat_fill_long_slotsvfat_build_slotsvfat_add_entryvfat_findfind_aliasvfat_create_dotdirsvfat_remove_entry__kstrtab_vfat_create_R1636e30a__ksymtab_vfat_lookup_R2b13b916__ksymtab_vfat_read_super_R56eee855jiffies_R0da02d67unregister_filesystem_R85f46c0evfat_fs_typefat_detach_R2d670d32fat_search_long_R93a3370a__ksymtab_vfat_mkdir_R447c348f__this_modulevfat_mkdir_R447c348f__kstrtab_vfat_read_super_R56eee855fat_build_inode_R9c12c563__kstrtab_vfat_lookup_R2b13b916sprintf_R3c2c5af5kmalloc_R93d4cfe6__mark_inode_dirty_R19c75706__module_using_checksums__kstrtab_vfat_mkdir_R447c348f__kstrtab_vfat_unlink_R4c0c1946free_pages_Rb5136506cleanup_modulefat_scan_Rda44ce5b___atomic_submemcpyvfat_dir_inode_operations.udivvfat_lookup_R2b13b916.divglobal_event_Rcaf51008utf8_mbstowcs_R1d0c9fd9init_moduleinit_vfat_fsxtime_Rf31ddf83__kstrtab_vfat_rename_Ra597eeaefat_attach_Rd32f4da7printk_Rdd132261vfat_create_R1636e30afat_dir_empty_R7aaa8b13strcmp_Re2d5255afat_dir_operations_R2def0832register_filesystem_R5b7afd0ffat_date_unix2dos_R83fb36a1strtok_Ree9c1bd4__ksymtab_vfat_create_R1636e30adput_Rb697b4be__ksymtab_vfat_unlink_R4c0c1946iput_R2551b96f__memset_R1907e126__strncmp_R8c5ff0fdd_rehash_R6db84970__ksymtab_vfat_rmdir_R0c415ff7__module_kernel_version.uremfat_add_cluster1_R3a91f53c.rem___atomic_addvfat_read_super_R56eee855d_instantiate_R5a458775kfree_R037a0cbafat_add_entries_R5935688fvfat_rmdir_R0c415ff7fat_mark_buffer_dirty_R360d4447fat_brelse_R3ec91dcefat_read_super_R8a588397strncpy_R328a05f1__ksymtab_vfat_rename_Ra597eeaestrnicmp_R4e830a3ed_invalidate_Reca676add_delete_R4a8b07d1fat__get_entry_R29d9211c__get_free_pages_R19d9ac40strchr_R349cba85vfat_rename_Ra597eeaevfat_unlink_R4c0c1946__kstrtab_vfat_rmdir_R0c415ff7_ctype_R8d3894f2fat_esc2uni_Rdf8b5a1e__memcpy_Rbfaaaa73ELF04( 22`@  (  @2  2 P8 2 *  2 P$ 2 +   @2 P 2  "  P"     2  `2`@(*@㿘2"@0@ 㿘א&"㿘0 ,` 3`@   3  ` *` * ` 2 @` 2 `'W  @`!&`@    @`  =&`@! $ \`& !d$ , $@ 4J  #`@@ `d``c$`d @ @ 0 @ @`   `㿘 " 0\ \@` @`  `㿘  - " `( &`4 ` `&` 0` `     l" +8 h "h"l㿘   "  \ & $ @"& \ & &  ,@ (6 t. i. g   " \@ " (`& ` @@& (0  @  p @@ 㿐`\  d       /$ d t(2Q`2 ``2  (`' P B$ P```"1 (  @   L $$ L` 2 ` `` @ , #$ ,?쀢C4 ( , $ ,`"`` *"` ` `6 h @ `` @` h  l"@ k$ h ( "  H "   `" @ $ h & Z ` | `"   f   @ @ `  p ", \@ 2 `` @` p $``  &``P&` `x@ p @2@  \ |  & \& @   ,& @  (`` @< & (*@  *@ # 3 + +  T# X#  `+  `+  ^3  3 `@" \` `@  $`$`  ( \` @`V d`<(` `6 t*& Ho` `?@ H*`Z  \"@  | @ & \&  @` `8  p 0@ d ( " ` H " ` `"`@` p $` @2 d@ d?$ d `+ ` @`'"  @ ` ""!?!򀦀"!󀦀/? `  `!<    @ 4  4 2?@ `!\`@ 4`< @ X  ? !! `)`<?    @ 4  4 `<  ?逢   @ ?Ѐ@耢 @7  @`? ;"!󀦀7` @1`"P`+?`  |?ꀢ`! u?!  $ \h$`$`@ `@  @$ `"!󀦀 ,`,`4``< @ `@ 4  4 ?`=?񀦀8?6?X  ? !! `% `?< @ @ @ 4  4 `@  ? @?@` @`  ` \ ?8?" T 㿘 \ ` # 4%Ȟ & 0& & @ & & 6 X6 Z& T6 P. o& 8 h`@  ``@ 㿐`\א `   @ 2 `P`` ` @`P 4`P    @ "  Z 4`Z T$`T$`8 㿘` @` ` 㿘` @` ` 㿘` & & <* @@*@ "` "" (  㿘@ ``" @# \@  㿘@ 6@ @ tunl001.01kernel_version=2.2.14-5.0using_checksums=1tunl%dIPIP<6>IPv4 over IPv4 tunneling driver <6>ipip close: can't remove protocol GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!"  ,$2+l  =BH2Q0^Y=b8 ! *t>MU`@j@@t@PP`@  `X   !(8$M4a4v   -@RdkL 2Gaw6UplH|<ipip.cgcc2_compiled.ipip_fb_tunnel_devipip_fb_tunnel_initipip_fb_tunneltunnelstunnels_wctunnels_ltunnels_rtunnels_r_lipip_tunnel_lookupipip_bucketipip_tunnel_unlinkipip_tunnel_linkipip_tunnel_initipip_tunnel_destroyipip_tunnel_xmitipip_tunnel_ioctlipip_tunnel_get_statsipip_tunnel_change_mtuipip_tunnel_init_genipip_fb_tunnel_openipip_fb_tunnel_closeipip_protocol*ABS*__module_kernel_version__module_using_checksums.div.urem.udivipip_tunnel_locate__this_module___atomic_addkmalloc_R93d4cfe6___atomic_sub__bzero_Rdd42e263__memcpy_Rbfaaaa73sprintf_R3c2c5af5dev_get_Rf0e8a136memcpyregister_netdevice_Rfb86ed23kfree_R037a0cbaipip_errjiffies_R0da02d67ipip_rcvnetif_rx_R56a7a815icmp_send_R3e662630__kfree_skb_Rcbfaf351ip_route_output_R260d0019skb_realloc_headroom_Re66e9a57sock_wfree_R2fdd6ed2skb_under_panic_R1e8f68deip_id_count_R6edc8ca8ip_send_check_R434ccab0__ip_finish_output_R185d0185ip_fragment_Ra228e306stack_top_Ra6cab6a7__copy_user_R9c5239ebcap_bset_R59ab4080local_bh_count_R8c090c95netdev_state_change_R7544d9edunregister_netdevice_R3ff5ad31dev_get_by_index_Rf0e29845init_moduleprintk_Rdd132261register_netdev_R8ca37b5einet_add_protocol_R13dcba9bcleanup_moduleinet_del_protocol_R4a79c5b2 $ 8 @ @ @      $   \ ` ' ' ()*,+< @ \,x  -./01' *$ ( 4 8 H1P' T' `*3 3 <3 +* 5 64*H788*6*3 3 9* : : 8( L* `7   ; + * T< \< l= p< > ? > / \ p d p h; * 7 '  ,'  8( x '   @ @ A & @ ,, <@ \B `B @ @ A ' `&h l   ' C C C C ,/</LC XD\C @ A' B B 4 8 D@ T@ lA' &  E' *(  , X0 8  < X@ D H L P //8$*TF' ' (' ' *        @ H P X \ p tHx |     I J  L   8H 8 E ,@42ELFp4( 22 `+  ` @2 2  2 PY 2 `+  ` 2  2 PA 2 `+`@ < @8 @"   @2 2  2 P  2 `  2 P 2     0  @  < 82`* *`㿘&"㿘ܐ2"@0@ 㿘,3`0@@  < 8 3  * @* ` 2  2 @` 2 `'W  @`!&`@    @`  =&`@! $ \`& !d$ , $@ 4J  #`@@ `d``c$`d @ @ n0 @ @`   `㿘d \` @` @`  `㿘@< *  `@ @   C  9 " `5 3`4 ` `&` 0,+` `? ~ `< @8    l" +8 h "h"l㿘 <  @   "  @ p @.`2`@ *  2`B@8   @ @"   . i  "  \ & $ "& \ & &  ,@ . i<6 t. g8    ( l`L `( &`(. g @ * 2 `- 2 `8` `  `8`` &`1&`8 @ " `@`p  @ ``@`` &`&`@`&`p` &`` \@ &` (``& ` @@& (0  @  p @@ 㿐`\`d`   >$`d`   `x` `2  (`2 t`P $`P(2'```"m (  "  t("   `@  `L e$`L` 2 ` `` @`, V$`,`x t" $  (`" ` C4"`  @6`h @ `4` @/`h `l"@ k$`h ( "  H "   `" @ $`h & Z ` | @"   f   @ @ `  p ", \@ 2 `` @ p $`  &``P&` `x@ p @2@  \" | & \& @  ,& @  (`` @< & (@*@  *@ &@ /6`.` .` T&`X&`  ` .` t( .` .``,6` t6`` %`x@ `t $`t"` `$`? `$ \@ *  2`B@8 4 ^6`6``@" \ @  $$  ( \` @`U`d`<(` 6 t*& Ho`  ?@ H*`Z  \"@  | @ & \&  @ `8  p 0@`d "  H "  `"@ p $ @2`d@`d?$`d `+ ` @`'"  @ ` ""!'?!򀦀"!󀦀/?`  `!<    @ 4  4 2?t `!\`@ 4`< @ X  ? !! `)`<?    @ 4  4 Ђ`!< @ɰ?逢 /Ƅ  @ ?Ѐ֒` 耢 7 "'ր "'ܒ  `? A"!󀦀=` @7`"`1?`8  \  2 P x?!  $ Ґh$`$`ؔ $`@$``@  @$ `"!󀦀 ,`,`4``< @ `@ 4  4 ?`=?񀦀8?6?X  ? !! `% `?< @ @ @ 4  4 `}  ? @?@` @`  ` \ `C  \x? @$" T? 㿘`\ `x \"  |@ & \&  @ `@ ` 6  2  @  @ `x  <8 `x0`x 㿐  \ @ < $  8 @ 2(    @ `` ` @ 2 4 @ ?ϐ $ & |@  㿘 \< 8 @@  | `@   `@ ` @`  ` 㿘 \ ` #  8%Ğ & 0& & @ & & 6 X6 Z& T6 P. o& 8 h`@  ``@ 㿐 \ؐ`  %܀`.  `` @ 2  P`` ` @ P< 6 P`8 @ @ ` 1?` 6 P& & &   @ TZ& 8,@  @2 @2 @2 %@& T6 Z$x 㿘` @` ` 㿘` @` ` 㿘 \_` & & `<* @* @#`#`` /*  $ x`"` 㿘@ ``" @# \@  㿘@ 6@ @ gre0/01.01kernel_version=2.2.14-5.0using_checksums=1gre%dGRE<6>GRE over IPv4 tunneling driver <6>ipgre close: can't remove protocol GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4@!+  ,t25<  =$B$H82Qp_Y= b x ! %| -<BRfnl{T t@,X|X <( ,<0h=@H0Tj44  (:M_qx8X 9Xm*=VtH5<D`ip_gre.cgcc2_compiled.ipgre_fb_tunnel_devipgre_fb_tunnel_initipgre_fb_tunnelipgre_tunnel_lookuptunnelsipgre_bucketipgre_tunnel_linkipgre_tunnel_unlinkipgre_tunnel_locateipgre_tunnel_initipgre_tunnel_destroyipgre_tunnel_xmitipgre_tunnel_ioctlipgre_tunnel_get_statsipgre_tunnel_change_mtuipgre_headeripgre_openipgre_closeipgre_tunnel_init_genipgre_fb_tunnel_openipgre_fb_tunnel_closeipgre_protocol*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_addkmalloc_R93d4cfe6___atomic_sub__bzero_Rdd42e263__memcpy_Rbfaaaa73sprintf_R3c2c5af5dev_get_Rf0e8a136memcpyregister_netdevice_Rfb86ed23kfree_R037a0cbaipgre_errjiffies_R0da02d67ipgre_rcvcsum_partial_Rb4d3fea2netif_rx_R56a7a815icmp_send_R3e662630__kfree_skb_Rcbfaf351ip_route_output_R260d0019skb_realloc_headroom_Re66e9a57sock_wfree_R2fdd6ed2skb_under_panic_R1e8f68deip_statistics_Rd3be94e8ip_id_count_R6edc8ca8ip_send_check_R434ccab0__ip_finish_output_R185d0185ip_fragment_Ra228e306stack_top_Ra6cab6a7__copy_user_R9c5239ebcap_bset_R59ab4080local_bh_count_R8c090c95netdev_state_change_R7544d9edunregister_netdevice_R3ff5ad31ip_mc_inc_group_R9aebf427dev_get_by_index_Rf0e29845ip_mc_dec_group_Rf0f6434ainit_moduleprintk_Rdd132261register_netdev_R8ca37b5einet_add_protocol_R13dcba9bcleanup_moduleinet_del_protocol_R4a79c5b2unregister_netdev_Rc734b91a $ <    x  P P P  8 @    x& & '()* X X+8 @ D,L-./0& )  0&  & )L2 \2 2 4*)5 6 ) ,7 8 H) 6 ) 2 2 9 ) 0: 4: L' `) t7   ; * ) h<  x<  44= <= L>P= ? @? .< PD PH;)7& & 'T &  A A BA +A 8C <C tA A B&     & D  D (D \.l.|D ED A B& (C ,C d h tA A B&   F& )  ;...D& H& \'8))GP& `& dHt& & I& & )  <    <    ,  ,8.H.8) h @ 0 h @  0TH& & ' & & )L P T X d h       K      L M   O    8$K( 8, 0P4 ,<31ELF 4( 㿘` A`(  0    4@  @  `& & $ @` `@ & 0& ,& (& &`"` @`  @ { w s  #` @27` @22`  @2-` @2(` @2#   @2@&``@ @ 4` @   7$  2`1 3` ) #   @2`@`&` @ @ 4` @  `$   㿘@` ` * ` `@ !`   2 2 2   @e  6 & &  2  㿐@ * @`` +`` 2 @`2 8@`  @`2` 2  #\`#``  @`  @ ` ` (@` `!  + 22@* @82 "  2 27 ` + 2 2 8 2 2 `  2  2@22 2 㿐@1` ` * @` `   + ` 2@`3`*@` 8@`2 @`    ``2`  @#\#`&  `+ 2 ` 2 @` 2@`" @`2` 2   @#\#`@x`@ 2  %     #\ #` #d #h #l #p (@ "@#t#t #x@@ & 2 &&&@㿘 @"`㿘@ 㿘@ ? 㿘@ @  ?2 " (" " $01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%dip_autofw_add: malloc said no Type Prot Low High Vis Hid Where Last CPto CPrt Timer Flags %4X %4X %04X-%04X/%04X %04X %08lX %08lX %04X %04X %6lu %4X autofw<6>ip_autofw_done(): can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 P!8,  , 2d  = B H 02Q hY ac a= l<0  l!)5 EOZ 0k}hDX<   $6DUcj,P _~$(ip_masq_autofw.cgcc2_compiled.buf.428strProt.429ip_autofw_hostsmmod_selfautofw_ctlip_autofw_expireautofw_out_updateautofw_out_createautofw_in_ruleautofw_in_createautofw_procinfoautofw_proc_entryautofw_mod*ABS*__module_kernel_version__module_using_checksums.div.urem.udivkmalloc_R93d4cfe6__this_moduleprintk_Rdd132261___atomic_addmemcpyip_masq_mod_lkp_link_Rfc8d5853___atomic_subip_masq_mod_lkp_unlink_R81f0c0e2del_timer_R5811f067kfree_s_R06d9dd5djiffies_R0da02d67mod_timer_R24685a70ip_masq_new_R4057ac78sprintf_R3c2c5af5proc_net_inode_operations_Ra76a554eip_autofw_initregister_ip_masq_mod_R433a84adip_autofw_doneunregister_ip_masq_mod_R1e03aa2finit_modulecleanup_moduleHX \ ` d p !"       !#  ( , 0 4   $%&' $8 < H L T X \ d p$ %  &' $   t( x( )  T*l  (    ,  t* @ @+    (  ( ( <+ X X .  X0 X-/      (,,` lp|hELFl4( 㿘` @` ` 㿘` @` ` ` (` `\"  *  (( @222** * * 㿘 (   ^'@ (0G``. `((`@" `8000/`/`/`/```(e,8* 8``($  @@@.`. (2 `80/@00.. . `( 㿘  ) + ,  @  &?`@ @ @    "   㿘    " `@ @$``  㿘@ ? 㿘@01.01kernel_version=2.2.14-5.0using_checksums=1parm_ports=1-12iICMPTCPUDPIP_%dcuseemeGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!   ,\2 `  =0B0HHIQ(Yc=lp   "*6 0<4P44 d j 8hd < T00BT[zdd$ip_masq_cuseeme.cgcc2_compiled.buf.462strProt.463portsmasq_cuseeme_init_1masq_cuseeme_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_ports__this_module___atomic_add___atomic_submasq_cuseeme_outmasq_cuseeme_inip_masq_cuseemeip_masq_cuseeme_initmasq_incarnationskmalloc_R93d4cfe6memcpyregister_ip_masq_app_Rb14f1109ip_masq_cuseeme_doneunregister_ip_masq_app_R3704b6fakfree_R037a0cbainit_modulecleanup_module  8 < HX \ h p    !   $#@$h"   @  LP4TXELFx4( 㿘` @` ` 㿘` @` ` p X @º@ *  ' \: J@  `'܀  0 `'ܒ *J@'aJ (^ ܐ@ ܀@TJ@ ,Q `@ ܀@HJ@ ,E `@ ܀@<J@ ,9 `@ ܀@0J@ ,- `@ ܀@$J@ ,2! `@ ܀@J@ )2 *`.` ` *   *` `  <@ 2 6 < #`#\ @  @ 6 @ 2 #\#`6 6 `  @6 @ܖ"@@ @ ' X@ '@' X@ *  '\` ? `@   ܒ`@  2 `' X@ ܀ `@   ܒ`@  ܐ 'ܠܨ`@ J`,~@ J`,u@ J`,l@ J`,c@ J`,Z@ ܚJ  O *`.` ` *   * `@ @ 2 6 #`#\ @ 0 @ 6 @ 2 #\#`6 6   @6 @ܖ"@@ @ 0@ '@@@0  e 㿈 * `'  \@ '% @  @  *&`X  '' \  ?:`X `@   `@   j' @ J`,_@ J`,V@ J`,M@ J`,D@ J`,;@ J  0 `*`-  *   *` `  @ `6#\`2?*+ `823 #`@  @@   `X @ * `' \   : J@  `'  0 `' *J@q'J (m@ @eJ@ ,a`@ @ZJ@ ,V`@ @OJ@ ,K`@ @DJ@ ,@`@ @9J@ ,5`@ @.J@ )* `*`-  *   *` `  `8@  #``8#\  @ @&`X@ 㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@ @ 01.01kernel_version=2.2.14-5.0using_checksums=1parm_ports=1-12iICMPTCPUDPIP_%d%d,%d,%d,%d,%d,%dPASV pasv <6>ip_masq_ftp OUT: got PASV PORT port ftp<6>ip_masq_ftp: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 0!L  , d\2\`  = B H IQ(Yc= lp  &2 084H44Xf t z 8hD &@Vt04< @ Q0cu| d $ (ip_masq_ftp.cgcc2_compiled.buf.628strProt.629portsmasq_ftp_init_1masq_ftp_done_1ipvs_ftp_pasvmasq_ftp_pasv*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umul__module_parm_ports__this_module___atomic_add___atomic_submasq_ftp_outsimple_strtoul_R20000329ip_masq_out_get_Rfb481b38ip_masq_new_R4057ac78ip_masq_control_add_R1ca6a3cdsprintf_R3c2c5af5strlen_R97255bdf__memcpy_Rbfaaaa73ip_masq_skb_replace_R0f09b1aememcmpprintk_Rdd132261ip_masq_listen_R2456256eip_masq_put_R4fdb1b8cmasq_ftp_inip_masq_in_get_R166f6d9eip_masq_ftpip_masq_ftp_initmasq_incarnationskmalloc_R93d4cfe6memcpyregister_ip_masq_app_Rb14f1109ip_masq_ftp_doneunregister_ip_masq_app_R3704b6fakfree_R037a0cbainit_modulecleanup_module  8 < Ht x @p0 !  ,"4#\$t% 8 8& @ @&   H ' H( h, h0&@ pH pL&8 !  ,"4#\$p%|() h   8 @ 8& @&p ht hx& p p&4X|+ ,  @! H( l  p  0 \     t  ! ) .   . , / . 0, 40 H1 . . 3 4 - 2  ' $   @ xLP4TX*ELF4( 㿘` @` ` 㿘` @` ` p @ * @`' \?䀢r  `@  ܐ b' `'ܤ `3,@ @@ 2O@ 'J    'ܔ?܀ I J ` 'ܰܐ@ ܦJ@` .'ܐ @ *  #`2 ܒ#\  @ #`@6@$@@ , @0 @&@@0 `܀  㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@ @  01.01kernel_version=2.2.14-5.0using_checksums=1parm_ports=1-12iICMPTCPUDPIP_%dSCHAT TSEND MOVE CHAT SEND DCC %lu %uirc<6>ip_masq_irc: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!   ,2  =BHIQYlcl=lH   Xx&24B44 R Xp  08<(h 1CVtd t0 d<L|$X(gip_masq_irc.cgcc2_compiled.buf.628strProt.629masq_irc_init_1masq_irc_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulports__module_parm_portsdccprotos__this_module___atomic_add___atomic_submasq_irc_outmemcmpsimple_strtoul_R20000329ip_masq_new_R4057ac78sprintf_R3c2c5af5__memcpy_Rbfaaaa73ip_masq_skb_replace_R0f09b1aeip_masq_listen_R2456256eip_masq_put_R4fdb1b8cip_masq_ircip_masq_irc_initmasq_incarnationskmalloc_R93d4cfe6memcpyregister_ip_masq_app_Rb14f1109ip_masq_irc_doneunregister_ip_masq_app_R3704b6fakfree_R037a0cbainit_modulecleanup_moduleprintk_Rdd132261  8 < H H H  Pt P !("4#<$d Hx' |  ' % (' % )*'  ' <,X-&+ `0 `   < @D 8L 0T (\  h Xtx4|ELFH4(  `(     2 㿘  `* @&"@ @ @  㿘 @  ` @` `@ & &  & &  "` 2` "@ "` 㿘 @   ` @` `@ `$ `4 @$ ` $ ` $ 㿘ܐ ? "  @ " """@ @ ?"㿘)   %   . +``  2!``  2  @   "@"` @` $2` `?% ?     `"` 2`"`  2` " ` "  2` ?㿘@ ` @`  `㿘 * ` ?ꀢ @2 "@` @ @@ 㿘     @"`# &@ & ## 㿘  Ւ 9'L'H    @`  `L ? @p`@`@ @9 -@`"4- %``#Lp+53 @     @#\@`@&`?%` L?%@`9 L%&H@'&49  @`  `X#` $`!  @@@ @`1? $`,@ "F)/ -  "    @  "@"  @ $@  `"@@   @`  `%`@@  2 㿘<`((?```6` ` ? `? *` €  #` @  "?􀦠``?   !  $  ?$  (`l$`3` @i ?!  $ ` K$ `` @02!  @  @ 2 3` &` ` P   g `?&`㿘 @ 㿐@` *  ` @   0` E  ` `    ` #\@#` @㿘 @"`㿘@ 㿘@ ? 㿘@ @ @@@D@@\@@_@@a@$01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%dFwMark > RAddr RPort PrCnt Pref%-63s 0x%x > %08lX %5u %5d %5dmfw<3>IP_MASQ:mfw_flush(): after flushing row nhosts=%d <6>can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 !  , 2!|  =TBH2QYc=lx % [&2 < ENLX@jL`tl|$<|DH@80h D 8 ( 6d< > D\ uz ?Qu  @ $L (ip_masq_mfw.cgcc2_compiled.buf.538strProt.539mmod_selfmfw_semamfw_lock__mfw_getip_masq_mfw_table__mfw_addmfw_newmfw_host_to_usermfw_host_newmfw_addhostmfw_delhost__mfw_edithostmfw_destroy__mfw_del__mfw_schedmfw_lookupmfw_procinfomfw_proc_entrymfw_flushmfw_ctlmfw_in_rulemfw_in_createmfw_mod*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv___atomic_addip_masq_mod_lkp_link_Rfc8d5853kmalloc_R93d4cfe6__this_module__bzero_Rdd42e263local_bh_count_R8c090c95___atomic_subkfree_s_R06d9dd5dip_masq_mod_lkp_unlink_R81f0c0e2sprintf_R3c2c5af5proc_net_inode_operations_Ra76a554e__memcpy_Rbfaaaa73printk_Rdd132261__down_R4663c8e5__up_R450143b0ip_masq_new_R4057ac78ip_masq_listen_R2456256eip_mfw_initregister_ip_masq_mod_R433a84adip_mfw_doneunregister_ip_masq_mod_R1e03aa2finit_modulecleanup_module   T \ h p *+,- - *.H,X- d- p*./ / / $*,/ 8/ H/ L/ X/ l- p- t- 01- 0 / 0/ 1- - 0$ 0 H h t020p- - *  3 H H3  / / / ,/ 0 P4 HP P`3l Hp3/ / / / /  -  - 0</ @/ H/ L P \5h.p/ t- / -  -  x- 01- 0468 xD1L- X0h |02 4 L 8 L L d P d T 8 X 8 \ ` p  t  0 / / / / / $  4  8  <  H0 / / / / /     *     0 * H/ L/ T/ / / l9 :  d  d  <   d >  d ; = 6  7 @7 `8 7 8   $ p448hl px |  ELF L4( @?  `@#`@+` @ %`/ ,@@"*@  #       #\ #` @#d`@ 2ܦ@ѓ,`$& ?%` & &@ @(@ ` `?(  ` @2  @ 㿈@ * @` #` `?* `  `@   2@ @2 @  " 0@   0#`#\` `@` # `@  @`  $ "`"`  `?*` "$$ "㿘`"`"  ""  @"`㿘@ 㿘@ ? 㿘@ @ 㿘`(< (-```; ?* 2 bF 8   2 `"``"0'0   `?     5  &+*`@@@ %- 2 ,`2@`3``@2@3``2 @""`` 2@"`"`@@ 2`?& @  İ ` @` `@ & 6 6 & & & &&  &`@ @ " && &@ `?&` @`  @  + )``?  `%`*      ?* 2 ` 4`  2. - 2'-2 `"@  2@  `" "@  @5@@  @ $2 ` ?%` 9 7 5  $` @"$` 5%  @2 @  "@" @ @ $ ``ٲ` ?$$01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%dProt LAddr LPort > RAddr RPort PrCnt Pref%-63s %s %08lX %5u > %08lX %5u %5d %5dportfw<6>ip_portfw_done(): can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!  , 2,  = $B H 2Q Y c = l |  |!)5 ?KX[gDyXtX<    "F\uX@$( -;Mlip_masq_portfw.cgcc2_compiled.buf.538strProt.539mmod_selfportfw_lockportfw_procinfoportfw_listportfw_proc_entryportfw_in_ruleportfw_in_createportfw_modportfw_ctl*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsprintf_R3c2c5af5local_bh_count_R8c090c95proc_net_inode_operations_Ra76a554eip_masq_new_R4057ac78ip_masq_listen_R2456256e___atomic_subip_portfw_initregister_ip_masq_mod_R433a84adip_portfw_doneunregister_ip_masq_mod_R1e03aa2finit_modulecleanup_moduleprintk_Rdd132261kmalloc_R93d4cfe6__this_module___atomic_add__bzero_Rdd42e263ip_masq_mod_lkp_link_Rfc8d5853ip_masq_mod_lkp_unlink_R81f0c0e2kfree_s_R06d9dd5d  ( X, X4@ D P T `  ` ` X     X$ 4 p       ! \ ` d l t |  X X#  X% X"$ (         )* * +,   8 < @ H X+p-       * * h t!* ./* !        $* (* ,* 0 4 D!X.t/|* !     (,` lp|XELF|4( 㿘` @`  `@  &`X@ 0* 㿘` @`  ``X @  㿐`XL/` * `% ! `  "`0`  `@  ",0    @ ?6`4, 㿈`XLF` * `< 8 `  "`00` - `@  "&,0$ "  @ `4#\`8#` `<@  67@ @@@ 㿘 @  x@ 㿘@ @ 㿘@ ? 㿘@ @ 01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%d<6>Quake: No memory for application data QUAKEQuake_26Quake_27ip_masq_quake: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4d!   ,L2x  =BH2Q8Yc=l   \- (4`F`L X ^v  0*@Yw , @($<(ip_masq_quake.cgcc2_compiled.buf.462strProt.463masq_quake_init_1masq_quake_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_addkmalloc_R93d4cfe6printk_Rdd132261___atomic_subkfree_s_R06d9dd5dmasq_quake_inmemcmpmemcpymasq_quake_outip_masq_new_R4057ac78ip_masq_listen_R2456256eip_masq_control_add_R1ca6a3cdip_masq_put_R4fdb1b8cip_masq_quakeip_masq_quakenewip_masq_quake_initregister_ip_masq_app_Rb14f1109ip_masq_quake_doneunregister_ip_masq_app_R3704b6fainit_modulecleanup_module  0D HL d h t( P, P0` P P<d !"# # &$ $ &# (# $ ( $ %@'P xTX x    X `$(0 h<@`DHELF 4( 㿘` @`  `@  &`X@ 02 2 ""  㿘` @`  ``X @  㿈`X`"T` 2 `"T`   `   *  \ @  `@   ` 4` @c`@  \ @ ` 4`` @ L @ G B@  @ `5 怢``( @   `8#``<#\ @ " @@ 6@ ` 2$`$@@  Ò h `X@     U @ @ * \@` //耦  { .  €   L*`:   a*`:  2\ 2Y   2U `@ML ="I H  А 8B / < L`- 6 `;А* #*) А *`/  :  ;2 L`; *??А  耢` `  r *   6i Ԑ@ * 2 `8 `<#\#` @ "T @@ $@ * 2 `8`<#`#\ @ @7 @@6`6@6`@ض @%@`@ '@@ " 5%2%@@㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@ @ *01.01kernel_version=2.2.14-5.0using_checksums=1parm_ports=1-12iICMPTCPUDPIP_%d<6>RealAudio: No memory for application data OPTIONSDESCRIBEPNA<6>RealAudio: version (%d) not supported <6>RealAudio: Packet too short for data transport:client_port%d-%d%dRealAudio<6>ip_masq_raudio: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!8  ,\2T  = 8B 8H PIQ 7Y c = l 0  !)5lHlL [ ay  08"\29@GNd} < T.0@_ds\$(ip_masq_raudio.cgcc2_compiled.buf.632strProt.633masq_raudio_init_1masq_raudio_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulports__module_parm_ports__this_module___atomic_addkmalloc_R93d4cfe6printk_Rdd132261___atomic_subkfree_s_R06d9dd5dmasq_raudio_outmemcmpmasq_rtsp_outmemcpyip_masq_new_R4057ac78ip_masq_listen_R2456256eip_masq_control_add_R1ca6a3cdip_masq_put_R4fdb1b8cstrlen_R97255bdfsimple_strtoul_R20000329sprintf_R3c2c5af5ip_masq_skb_replace_R0f09b1aeip_masq_raudioip_masq_raudio_initmasq_incarnationsregister_ip_masq_app_Rb14f1109ip_masq_raudio_doneunregister_ip_masq_app_R3704b6fakfree_R037a0cbainit_modulecleanup_module  0D HL p t  P P,< X@ XHX hx  h! p p  !$!l!"#$!%  (&  h8L P T&'"#$ ,'T"h%x#$  ( (&)&0%D%X, \ ` d, l* , * !-, , /80`+.     @ LPlTELF 4(  0"@ <"` 42` @"` 62` 8"`  22` h"`$㿐  2#  `"   `2 ?  @  `X`& ` @ 㿐 "   ? ? ?  ?2 6 + 2  ( & ( ",   &  6    #`    @#\ 2 $  $ h@@ 㿘 "   ? ? ?  ?#. +` $`  "   "  @ "  `"  @ `?$`   $ h@@  㿘     ? ? ?   ?! +&@  $   "   "  @   `" &@ @  ?$ &@` &@ 㿐 "@ 㿐   $$ h@ 㿘`(\ (65 @`  ``` *` €  8  Ɛ  " \ @`  `'D'H;'L'P'T  ` @`  `L`   p```@-D@ 9   ' ;.``@'l@kp0T _L4`X `-\ 2?  ? ?    ;`;`@`;* `@l@;8 d2<4#\@#`6#h#dd#l#t#p$`@" #x;`#|#@D@@P& ? ' l20 `?`'  L&D&@H&'@P4;` @`  `?     㿘@ ? 㿘@ @ 01.01kernel_version=2.2.14-5.0using_checksums=1parm_ports=1-12iparm_debug=iICMPTCPUDPIP_%dProt SrcIP SPrt DstIP DPrt MAddr MPrt State Flgs Ref Ctl Expires HRow HCol (free=%d,%d,%d)%-127s %-4s %08lX:%04X %08lX:%04X %08lX:%04X %-12s %3X %4d %3d %7lu %4d %4d<6>ip_masq_user_done(): can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 0!X8  , d2<  = B H ]Q  Y c = Al `  @'3 9DGDZ0k|$$8\D   "(.48HP \v#1N`z,($ (ip_masq_user.cgcc2_compiled.buf.638strProt.639debugmasq_user_k2uip_masq_user_maddrip_masq_user_newip_masq_user_delip_masq_user_locked_getip_masq_user_getip_masq_user_setip_masq_user_ctlip_masq_user_infoip_masq_user*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umul__module_parm_ports__module_parm_debugip_route_output_R260d0019___atomic_subip_masq_new_R4057ac78ip_masq_listen_R2456256eip_masq_put_R4fdb1b8clocal_bh_count_R8c090c95ip_masq_in_get_R166f6d9eip_masq_out_get_Rfb481b38__this_module___atomic_addip_masq_free_ports_R11238ec8sprintf_R3c2c5af5ip_masq_m_table_Rf241149dip_masq_state_name_R9be87ac7jiffies_R0da02d67ip_masq_user_initip_masq_user_hook_R9eeb9e1aip_masq_user_doneinit_modulecleanup_moduleprintk_Rdd132261!"#$%`& l& t& '(& & %x& & & '(& & H%%) ) *  $$D4 Tl) x") ) *+ + +   ,  $,4& 8& D& H- P-        ,  , 4 @.D/ /   , ,& & & $& `) d) p"1 1   1 1 1 1 0 2  5 $   ELFl4( 㿘` @`  `@  &`X2 22  㿘` @`  ``X @  㿈`X e  a` * `\` T@ ``I``$C``=`2`@  2  @  `8`<#`#\ @ @ 4@@ 64 @  @   ``4  㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@X01.01kernel_version=2.2.14-5.0using_checksums=1parm_ports=1-12iICMPTCPUDPIP_%dVDO LiveVDOliveGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!   ,\20T  = B H8IQ8Yc=l   \/"*6 0<XPXL d j 8%,3I_x< L0dT$ xip_masq_vdolive.cgcc2_compiled.buf.628strProt.629portsmasq_vdolive_init_1masq_vdolive_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umul__module_parm_ports__this_module___atomic_addkmalloc_R93d4cfe6___atomic_subkfree_s_R06d9dd5dmasq_vdolive_outmemcpymemcmpip_masq_new_R4057ac78ip_masq_put_R4fdb1b8cip_masq_listen_R2456256eip_masq_vdoliveip_masq_vdolive_initmasq_incarnationsregister_ip_masq_app_Rb14f1109ip_masq_vdolive_doneunregister_ip_masq_app_R3704b6fakfree_R037a0cbainit_modulecleanup_module  0\ ` ld h p !"! P% T X \% d# % # &% % (0)X$|'   @ 0LPXTELF4( 㿘` @` ` 㿘` @` `    @ $   $4 @    (@ `$" @``( 6@ @@ 2`$㿘@ `"`@" 㿘`"`@"  ?@  㿘@   @01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%dlc<6>IP_VS: Initializing LC scheduling <6>IP_VS: LC scheduling module loaded. <6>IP_VS: cannot remove LC scheduling module <6>IP_VS: LC scheduling module unloaded. GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4! P  ,,2 `  =(B(H@2QxYJcJ=l$  4 #/4A44Shgpy     , @L<L<[ip_vs_lc.cgcc2_compiled.buf.420strProt.421ip_vs_lc_init_svcip_vs_lc_done_svcip_vs_lc_update_svcip_vs_lc_scheduleip_vs_lc_scheduler*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_subip_vs_lc_initprintk_Rdd132261register_ip_vs_scheduler_R2d5a54b6init_modulecleanup_moduleunregister_ip_vs_scheduler_R84be424b  8 < H$ ((, (0 4 8 <P T X \p Ptx P    x x        4$h(pELF4( 㿘 & (` @` ` 㿘` @` `  " ( `(` 2 $`4"`(  㿘@ `"`@" 㿘`"`@"  ?@  㿘@   @01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%drr<6>IP_VS: Initializing RR scheduling <6>IP_VS: RR scheduling module loaded. <6>IP_VS: cannot remove RR scheduling module <6>IP_VS: RR scheduling module unloaded. GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4t! dP  ,,2 `  =BH2Q(Yc=7l   #/<A<4SpgPy    , @<L8<[ip_vs_rr.cgcc2_compiled.buf.420strProt.421ip_vs_rr_init_svcip_vs_rr_done_svcip_vs_rr_update_svcip_vs_rr_scheduleip_vs_rr_scheduler*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_subip_vs_rr_initprintk_Rdd132261register_ip_vs_scheduler_R2d5a54b6init_modulecleanup_moduleunregister_ip_vs_scheduler_R84be424b  @ D P ( (        P$( P< @ D P xX x\ ` d      <$p(ELF,4( 㿘` @` ` 㿘` @` `  㿘  @/  $ 4 @$ * @*`@ *`@@ `*` * `*`$@  $@$@@@2`㿘@ `"`@" 㿘`"`@"  ?@  㿘@   @01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%dwlc<6>IP_VS: Initializing WLC scheduling <6>IP_VS: WLC scheduling module loaded. <6>IP_VS: cannot remove WLC scheduling module <6>IP_VS: WLC scheduling module unloaded. GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4! h  ,(,2 t`  =XBXHp2QYc=l\  | $04C44Vhkp~     P,*M|<Y<hip_vs_wlc.cgcc2_compiled.buf.420strProt.421ip_vs_wlc_init_svcip_vs_wlc_done_svcip_vs_wlc_update_svcip_vs_wlc_scheduleip_vs_wlc_scheduler*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_sub.umulip_vs_wlc_initprintk_Rdd132261register_ip_vs_scheduler_R2d5a54b6init_modulecleanup_moduleunregister_ip_vs_scheduler_R84be424b  8 < H T (X\ (` d h l    P P !           4$h(pELF4( 㿘 @  & (@  @  ( "` @`   `㿘 (@ ` @`  `  (        $4 2$㿘('2@ 2  $?  $ @ $ @  $ $ @•㿘@ `"`@" 㿘`"`@"  ?@  㿘@   @01.01kernel_version=2.2.14-5.0using_checksums=1ICMPTCPUDPIP_%d<3>IP_VS: ip_vs_wrr_init_svc(): no memory <6>IP_VS: ip_vs_wrr_schedule(): no available servers wrr<6>IP_VS: Initializing WRR scheduling <6>IP_VS: WRR scheduling module loaded. <6>IP_VS: cannot remove WRR scheduling module <6>IP_VS: WRR scheduling module unloaded. GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4P! @  ,,2 `  =BH2QCYCcC=lP   l $0xCx@Vk~    +=K<`,o<<ip_vs_wrr.cgcc2_compiled.buf.420strProt.421ip_vs_wrr_init_svcip_vs_wrr_done_svcip_vs_wrr_update_svcip_vs_wrr_scheduleip_vs_wrr_scheduler*ABS*__module_kernel_version__module_using_checksums.div.urem.udivkmalloc_R93d4cfe6printk_Rdd132261__bzero_Rdd42e263__this_module___atomic_addkfree_s_R06d9dd5d___atomic_subip_vs_wrr_max_weightip_vs_wrr_initregister_ip_vs_scheduler_R2d5a54b6init_modulecleanup_moduleunregister_ip_vs_scheduler_R84be424b $ 0@ H T   PXlp P     !   !   $  , 4 8 < @     x$(ELF 4( 㿘 "``  #2 "@  # @ ` @   $ 2?"㿘% $`` '2  $@  @` $`2?$㿘` 㿘 `52 @ @  "`㿘! @ @ $ 㿈 \   `?& \ & ``oK``X@@G p`P D  A  =` 9`(`3 ` . p @ `o  @  `h ` @   2 ` `h '   `5#\#`@  p @@ H<` @ D  D y? u? q`@ i?  @ a.`L  `` @S?%  `    2   @  !<? +$ Ho`$&Ho`  . . &  @ & H*/ ` @`   `P<#` @ D  D 2.? (?      2  2 ?@  7<` @ D  D ? P"!a6"!` ?0G"!b.?0A `   ` !!`-<`@ @ D  D #? ?" 0 `   ` !!`?p ` `@4`@ +/-+   @2   #\ #` #d `@#h & 2 &&&@㿘@`" 㿘@ 㿘@ "Ho` " H*o` % @  @` $`$01.01kernel_version=2.2.14-5.0using_checksums=1<7>RARP: SETRARP: requested PA is 0.0.0.0 ! RARP disabled until entries added to cache. IP address HW type HW address %d.%d.%d.%d%-17s%-20s%02x:%02x:%02x:%02x:%02x:%02x 10Mbps EthernetrarpGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 $!$<  , Xp2`<  = B H 2Q Y = Bb  (1:GXL j |(l<8x(   4BTby,BSmT ,D 0/Ga @m T|rarp.cgcc2_compiled.rarp_packet_typerarp_rcvinitflagrarp_destroyrarp_destroy_devrarp_device_eventrarp_dev_notifierrarp_pkt_initedrarp_init_pktrarp_end_pktrarp_req_setrarp_req_get*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulrarp_tableslocal_bh_count_R8c090c95__this_modulekfree_s_R06d9dd5d___atomic_subdev_add_pack_Ra22647e1register_netdevice_notifier_R63ecad53dev_remove_pack_Raaefb398unregister_netdevice_notifier_Rfe769456memcpymemcmparp_send_R7119c1b3__kfree_skb_Rcbfaf351stack_top_Ra6cab6a7__copy_user_R9c5239ebprintk_Rdd132261ip_route_output_R260d0019kmalloc_R93d4cfe6__memcpy_Rbfaaaa73___atomic_addrarp_ioctlsecurebits_Rabe77484rarp_get_infosprintf_R3c2c5af5proc_net_rarpproc_net_inode_operations_Ra76a554erarp_initproc_net_R5882e383proc_register_Rf7ecbcfdrarp_ioctl_hook_Rddf52ebfinit_modulecleanup_moduleproc_unregister_Rc5c75fc4     $ ( , 4 P \ ` h t!             !8 @ x | "  #  ( ( ( ( $  %  (&&  '@(T!h)* * + , -D!T X .     </l p |0* * +  D/X* p+2 2 $* ,* D+2 2     0 04$ `( `,44 8 P T X l t4  4 8 8 5 9 $5 (1 ,1 0: 4: D7 X8 \8 `= h: l:           ! L0@6D3ELF4( 㿘 ``H` c(! d(  f0( e(# i(" j0(('(&0((%($0((,((-(㿘 ̚ *`@ 3 Б* @3 &ȑ* *  *  2   ? *` a3 $3 "* @`3 "3 $ @( ""`2㿘 `";   27  & & "1    *   @  +  ` & & 0    &   * `{  $    (    2 㿘 `"   " @.@ ? &  `&  & & "   €  .@`"   @* ? &  ` &  $& &   ( 㿘`` @  `, 2`X`,``X  ``X`  ^   ,@ ``  `&`ܟ@`㿘` @` ` 㿘` @` ` ,2 X ,*," A*@  C X*X" A*@ S*  D*@ * `(` A*`( `, "` `X D`(`* 㿘    "  "`  " "` * 㿘   " " ` 㿘    "  "`  "$ "`(㿘   " " ` 㿘`@ ``@ ` `@     㿘  B"`ȁ ȝ㿘  7"`́ ̝㿘  ,"`Ё Ё   `?  `?  `?  `?  ŀ  㿘`  `2 ? `Ő *` `Ő *`   Ā  㿘` `" ` ? `Đ *`Đ *`͐ #@@@? #@@@?  㿘`  ` `Đ *`㿘 !e ?㿀 @  $`?`$`@  $ ذ`$` @ @ $ ` @ $ @ `v? ؀ " H`  !* *`$   *@  *  *@  *`@  $ Ԓ` @@  ؀`2 H`  !* *` $ ؐ @ . Ő N  , , $ $ $ @     @  @  @? @ @ `@㿘 @  ؀H`  !* *`$ @  @ @ @ 㿘`@%@     # $`#$` )   @ 2``4*` * " *    2` $`    ݰ `  ?㿘`      $`01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... |QEB;632*+,%#"""-+2LCBCA;;=43422$1*{*+#+,B.#%$+$#""A"#"3J!2,b2q"4R#z5& *c  # 3   > L!|"3"B2'"R:31,#"bQB;32*,%#"!  C3@DA1U BA` Br!" SUNW,am79c30aonboard1regamd7930<3>amd7930: could not allocate registers intr<3>amd7930: unable to register <6>amd7930 at 0x%lx irq %d audioGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4x!$h  ,2(  =BH2QYn=b A 8I #*-?Rdcw$,44<d,dH\4H(|H@^r   0  < $\ ?hZptx8T l L d l  P      # 4< <8M t4[g v d  ?_q!FWj$):(Pamd7930.cgcc2_compiled.gx_coeffger_coeffamd7930_write_mapamd7930_update_mapfill_D_xmit_fifotransceive_Dchanneltransceive_Bchannelamd7930_interruptamd7930_openamd7930_releaserequest_Baudiorelease_Baudioamd7930_start_outputamd7930_stop_outputamd7930_start_inputamd7930_stop_inputamd7930_sunaudio_getdevamd7930_sunaudio_getdev_sunosamd7930_get_formatsamd7930_get_output_portsamd7930_get_input_portsamd7930_set_output_volumeamd7930_get_output_volumeamd7930_set_input_volumeamd7930_get_input_volumeamd7930_set_monitor_volumeamd7930_get_monitor_volumeamd7930_get_output_balanceamd7930_get_input_balanceamd7930_get_output_channelsamd7930_set_output_channelsamd7930_get_input_channelsamd7930_set_input_channelsamd7930_get_output_precisionamd7930_set_output_precisionamd7930_get_input_precisionamd7930_set_input_precisionamd7930_get_output_portamd7930_set_output_portamd7930_get_input_portamd7930_get_encodingamd7930_set_encodingamd7930_get_output_rateamd7930_set_output_rateamd7930_get_input_rateamd7930_set_input_rateamd7930_get_output_mutedamd7930_loopbackamd7930_ioctlamd7930_opsamd7930_attachamd7930_detachdriversnum_drivers*ABS*__module_kernel_version__module_using_checksums.div.urem.udivamd7930_xmit_idles__this_module___atomic_add___atomic_subsparcaudio_output_done_R704db455sparcaudio_input_done_R4b24e67fstrncpy_R328a05f1kmalloc_R93d4cfe6__bzero_Rdd42e263prom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprintk_Rdd132261request_irq_Rb9ba6802___f_enable_irqregister_sparcaudio_driver_R4cf55403___f_disable_irqfree_irq_Rf20dabd8sparc_free_io_Rf8afdb8dkfree_R037a0cbaunregister_sparcaudio_driver_Rbec851feinit_moduleprom_root_node_R5ce875cfprom_getchild_R5ee0a984prom_searchsiblings_Rdc0ba024SBus_chain_R359591d7strcmp_Re2d5255acleanup_module   \ `   F F F G G H G G IdJ pJ K K   L  L  L M     N     O ,P 8  @  XQ l  pR t   @  @ O , , 8 , DS LT N U  H  h R  h $R ( H 0V <W HX TY pZ V W X Y\  \ ] ^ ( , D P T X \_ `_ p t |`      , 0 @ H T d   t,4 |$(,004<8\@hHpLPxTX\`dhl px d|  l  l     4ELFO4(0  @2(     2`  2  "  ` 2 * 2  ` b 2 ` b 2` b ` `2b 㿘`@ 5  /-+"@@"@ "@ ""@ "@ " P@ @@" &` (@@ & 2"&@&&@㿘 `  %@2`` $@ &  @` $``2@㿘 @  "% &$ @6 `& 6 HH " & ` @`  `㿘```" ` ` $`4 @ 2` ``   $`4` ? `,`@`  ?`  ?$`  `4`$4``?А ?$`㿘    "  `. @   ` 4 ?6@ ? `` .`@ 䀢?2  ` 4 $6@?Ё     `2P"P"   ```   `" 2  "   "( * ``"  ```2 " 2 88߀` ` ` "``2 `"  ` 2` ``2`  㿘ؐ     ( 0㿘  H  2v?ꀦ`%  m?` 4  2 @2   `  @`2 `)  `* 3 `2 3 @*@( @2 ` @" ꀦ``2@)?̀2  @  ?ɓHo`$" 2 "2 4" `2`2  㿘  @2 "  @2  #@  2?㿘 ` @2 `` $@ `2@ @> 㿘`@@ǐ <'@ ؒ@   2e?@ؤ "^?!6""!"$X ""!ƀ :<!Ȁ 4<!U"X ""!S" X'<!"X!<   !! `!?@ ?X ##"?P`   `h ` @  X 2 ` 2? `  [ `  "`?4  `@,  V 2?4  4  4 P   r  ΰ?7 4`  ,`77,`P@ 7 * ?#@ *  4`nd 2 &@ @ ?  4`U $4`` @  o 7 7 o7g 7  7g/X   !! `g?@ c?@@L<   !! `L?@ H?X D?Հ A? =? `  7?` 6"</?   !! `2@? ?ꀤ 2?@` <@ @   ? @<`@  @ T  T " ?! "! ? 䀢  @ ?㿐`@  )     #\ @#`@ &  2&&&@㿐`@`   @ `@  &)     #\ @#`@ &  2 &&&@  ?@*     2* ?#2 㿘  @  2V !?    & @?` @` `@ , )$" 㿘   t 2 "@ , t&  @` @`   `㿘 . ې 2  ` ` . ?㿈 ?`24"07 ,"/ ," @, ) 㿘  ) "@6?ꀢ "`1?р   ")?@6`6" ` .`` 2`?6"`."` 2 ." 6.`."} 2?@ . ) 㿘` , ( $@+?@ '?`   {  @ )  ?@`   `,"` 4"`,"$@, ( ?́㿘` @` @`  `?ӝ㿈  )   U  ?ɀ & ( ""?7"/""7"/"/ 7@  㿀'D\  p @6D02 c* 3 8 ( \"\D` "` \  p @D0  3 @*  2   D `p@D0D  @D D    `2 D `g    2``X"p@ Dp @А 0̐  @D D 7 /⠒  @ 4`   ? ,@ * @ 7 / c`Z  4D`\ (6`"`\ "`6D  |" 4 f@ 'D   @ @ `'D@  p @@'DD`k@ ?eDZ 7 / /겒 ND" `@ x`4@@ B?b``@` 2 \     & \ &  +? & & `@ x@`DH`& `` "`&& "`"`t   \b€  D  p@@ 㿘 $ `28 @  p \8   @2. @*  |? & \& @  $?  * $ * 222 ^ c   2 & |h`  @K?؀`" ) " ` 6`? ?@ " `?ꀢ  {  @  ( t?ǐ 7 ",` ",`"4`  / }  @/ ``  ` 2 /` "O? "7Ш 2D?̀ " Z }  @Z @  @̒ ',"` ` " @ "Z "@ "  "  }  @ " \ "\@ @  c6`6 "6  `.  ". `. "  . }  @" \"\@ @`@ 'Ȅ `p@İ?@? z 6 @6 Ȑ  @Ȁ  Ȅ  p@?@  2+P 'P %@     ` }  @@ ?2 P p @2P@P  ?   }  @ `"& @& & h "$ ` Z  #  Z\ "@  ""\\  "@  ""\Ȑ   ( "  }  @  7 7Ȑ`@ ? Ȅ  p@ @   }  @㿐 @@'@ 2 9  $`` &`` ?$`` &`` @' `"   4@ ,` ,` 4` &`@ "?ӝ㿘" ! @) "!@"!@"!@"! @ ""! @|"!@^?0(!"!@" "!@"!6@}"!'@| "!!@u"!$@q?0"!3@p"!1@ l0f"!U@]"!8@[" !S"@"D"!@I?0] s@Y?Pl ,J I<D@" `"B<`\>?E  2<??` @    0?. X   !! `?@@ ?<` :?& 㿘@  @` "`@  2 @  2 @ @ @! @` @` @`@@@ 㿘@  㿘@! @  @  @ @@@ @ @ @ @ 㿘   @@ H` @    ?$ "`& """ۂp@ ,㿘)    Z @@\Y  Z @  `\   $$\$@   4t$$$    4`,`,` h4`4@`@ ,`!?*`2 `# 2*  @ 4`4` `,`@ ,` *``2` ` 2`*   4`4` ,`  @ &`6 &㿘%` Z @  _ Z `@  ` `\ `  $`$`\$`@   4`t$`$`$`     44 ,  h, 4  @ , @1?* 2 # ` 2*`  4 4 `,  @ ,  @ , #*` 2`  2`*   4 4 ,  @㿘'` Z @  W Z @  `\   $$\$@   4t$$ $    4@4`,`,`4` h`@ ,`@!?*`2 `# 2*  @ 4`4```,`@ ,`@*``2` ` 2`*   4`4``,` @㿘! @<(( & 2㿘!& @ (v& `( 2&㿘2(( ]& 2㿘 ` Ȑ` ` `    @ 㿘`  `` ``  㿘 ,@   " & "  HH   2  (  2 (   ( 2  㿘`@  * є 2" 㿘`@  *   x  , 4  " " Ē   2    "   &  6 . 㿘 X#" @0  @!@  `  (㿘 X#"4?] ?-? $ $ ` , @ 4  $ @` `* @$ ("@@!@   ``` (`2$  ?$  ?Ё㿘`&`  X#<"@``  2`\`"`\ `\ ?&`\ &``^ 2``\`|  &`\&`@ `* `*``* ` "&` ! `  `6`ta&`l&`@  ? 6`t&`@  HHo`  ` ` *” `* * @#   ` !&`l@m `  H`&``` "`&@&`"`"H n  =?H`&``` "`&@&`"`"# 3`!` # # (3 3 &3  $ $ u  `  ` @  㿘L .%)2A(?$(&"($`*  * @&`  `  !$ l@H``@  ` ?$`"`&`$$ $   㿈`X #  \`8   & \& ` p`?* 2   `&  `  ` " ` p @2̰ @Ȱ  @ / ` `*2`@ 7H`" `  `@2 ` ``* 2`@ 2 `$/ ``-*`2 7蠒    }$ `  -  "3 `0r"0 `0o lH/ `W Z @V` @ K` @ 0B/ ``*2 @7 /` ! @  *   `?" @`" ` @ `/ ``*2 7`` p @2 @ 㿘 @` "`@  ` #   "`"` "`@"` @ 㿘 ` XUR  `㿐 #\` `@ 3`,@ "3/-+)' @ @ @@ $` ! " ##\ %@@#`@ @  &@@@@` ( װɒ` 3`,@ "3/-+)' @ @ @@ $` ! " ##\ %@@#`@ @  &@@@@` ( װɒ` 3`,@ "3/-+)' @ @ @@ $` ! " ##\ %@@#`@ @  &@@@@` ( װɒ`㿘@ @ @ 㿘@`㿘@ 㿘 @ "㿘@`?Type local_addr remote_addr tx_queue rx_queue st uid %02X %04X:%02X:%02X %08X:%08X %02X %d <7>AppleTalk: point-to-point interface added with existing address <4>Too many routes/iface. Interface Address Networks Status %-16s %04X:%02X %04X-%04X %d Target Router Flags Dev Default %04X:%02X %-4d %s %04X:%02X %04X:%02X %-4d %s <4>%s is broken and did not set SO_BROADCAST. It will break when 2.2 is released. <7>AppleTalk: didn't forward broadcast packet received from PPP iface <6>SO_BROADCAST: Fix your netatalk as it will break before 2.2 <7>SK %p: Got address. <7>SK %p: Size needed %d, device %s <7>SK %p: Begin build. <7>SK %p: Copy user data (%d bytes). <7>SK %p: send out(copy). <7>SK %p: Loop back. <7>SK %p: send out. <7>SK %p: Done write (%d). appletalkatalk_routeatalk_iface<2>Unable to register DDP with SNAP. <6>NET4: AppleTalk 0.18 for Linux NET4.0 <2>Unable to register AARP with SNAP. %-10.10s %-10.10s%-18.18s%12.12s%12.12s xmit_count status addressdevicehw addrlast_sentexpires%6u:%-3u %-10.10s%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X%12lu %12lu %10u resolved unresolved proxy aarpaarp-resolve-timeaarp-retransmit-limitaarp-tick-timeaarp-expiry-timeappletalknetaarp_send_ddp_R239e83cbatrtr_get_dev_Rac480c69atalk_find_dev_addr_Rd76a773c  $ $ $u0    $mmGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ksymtab.rela__ksymtab.kstrtab__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo4D<!S ,Dp3p  ?DxGJQp H `J0NiJtpT  JplL  NNN<O2OBr a   D H LtT X l @p @x 8| X ht 8ttt X ht` d p tn xn |n wn uD H L dn hn tg g g g <fg g g  g H  (   H L       P ` l    u   $  (  4  |w    w 0 8 Xv \v tr  h l  x   x x      kP T   l p v r0v 4v Pr  t  , < Xt 0 0t    X Xt  , P Xt4h (l (xn n    (n ,n 8    l p tn  n   D H m(L  , b8Lx | q H H             x !L !P !T! !! !!}! ! !"4 "H"< "H"@}"P"t""""##8m#d #h #l#### (# (#$ $@ $ $ @$ @$% %D%X%x X%| X%%&@h&(v (v (r) ) )td))v )v ) )) ) ) ) )) ) * * **  * * *~* *$ *, *0~*4 *8 l*<*@ l*D*H *L *P *T*X *\ *` *d*h *l *p 0*t*x 0*|*e* ** *** * ** ** ***p* l** l+ ++ + ++ + ++ +$+H+\+w+y +y ,,b,8y ,| ,, ,,},-$-4 -l -ty --y -y --y . .$. .$.}.h../,y /</Py /Ty /h/xy / // //}00h0x 0 0y 00g 0g 1@ 1H 1 1 T1 1 1 T2 2@ 2D 2Hg 2L 2Pg 2\ 2`a 2ha 2l 2p 2x2 2 T2 2 2 T2 2u33 3 4 4 4 5{5 5,55 5 566lb7 77  77q7|77 7 7 7 8 8 84a 88a 8<g 8Hg 8X 8\ 88 T8 T9c 9g 9c 9 9g 9 : :$ :4 :8g :< :@ :D :H:l :p :x :|g : : :a : :g : ;;|a  >g > g >$a >(a >, >0 >4>`> > >>g >g ?`?t? ? ;? ?? ;?y ?y ? ?? ?g ?g ?a ?a ? ? 1? ? ? 1?j? @@ @ @ T@ @ @$ T@( @x @| @ (@ h@ p@ x@ @ (@ h@ p@ x@ @t@ @ @ @ @ @ @ @tA AtA A$ ADtA\tA` AptAt A| AtA A A TA TA A A A A AtA BtB B B4tBLtBP B`tBd Bl BttBx B TB B B B B B B BtB BtB C C$tC<tC@ CPtCT C\ CdtCh C C CC C CC C CC C C C CC C C CD 8D 8D D D D( D,D0 ) ib)(,048<@D8HlL&PT&Xz\`dh%l xso4DH2(p a4`8H`Hdt0c <L       (<hN ` q\DPH  !(. ; 0L [(g(t(D \HpL8%&$&0 Al  N ZD iD z0D +4 +4 +- 0X10d1T21F@ OT@ Z@ b m2l283, :\D;   D D X #8X 4 Gx _}  PD$4p 4IatC0<  1OWt4L *@t 3GU\6P t4H)p<CT*`|   3 S x e 3D   @d ?    0 HC  ^ p  |     (/L 8 W o5X       ' - E S m x    $   9 TD$ l 0   ddp.cgcc2_compiled.atalk_socket_listatalk_search_socketatalk_find_socketatalk_router_listatalk_iface_listatif_drop_deviceatif_add_deviceatif_probe_deviceatif_proxy_probe_deviceatalk_find_primaryatalk_find_anynetatalk_find_interfaceatrtr_findatrtr_defaultatrtr_set_defaultatrtr_createatrtr_deleteddp_device_eventaarp_mcast.584atrtr_ioctlatalk_createatalk_dgram_opsatalk_releaseatalk_pick_portatalk_autobindatalk_bindatalk_connectatalk_acceptatalk_getnameatalk_rcvltalk_rcvatalk_sendmsgatalk_recvmsgatalk_shutdownatalk_ioctlatalk_family_opsddp_notifierddp_snap_idproc_appletalkproc_atalk_routeproc_atalk_iface*ABS*aarp.cunresolved_countaarp_expireaarp_eth_multicast.476aarp_send_queryaarp_send_replyaarp_eth_multicast.481aarp_expire_timeraarp_kickaarp_expire_deviceaarp_expire_timeoutresolvedunresolvedproxiesaarp_timeraarp_device_eventaarp_allocaarp_find_entryddp_eth_multicast.508aarp_resolvedaarp_rcvaarp_notifieraarp_snap_idproc_aarp_entriessysctl_net_atalk.catalk_tableatalk_dir_tableatalk_root_tableatalk_table_headersysctl_aarp_expiry_timeatalk_find_dev_addr_Rd76a773csysctl_aarp_resolve_timeatif_ioctlatalk_register_sysctlaarp_probe_networkjiffies_R0da02d67skb_copy_datagram_iovec_Rc93add3c__kstrtab_atrtr_get_dev_Rac480c69add_timer_Rbea990b2dev_mc_add_Re64607e1datagram_poll_R663c8718skb_copy_R3cdec903__this_moduleatalk_rt_get_infoaarp_cleanup_moduleskb_under_panic_R1e8f68de__copy_user_R9c5239ebatalk_get_infosprintf_R3c2c5af5kmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5dsock_alloc_send_skb_R030c0937aarp_dlsock_no_setsockopt_R89af51b3aarp_send_probe_phase1__module_using_checksumsskb_over_panic_R255f64c2dev_add_pack_Ra22647e1cleanup_moduleaarp_get_info__ksymtab_aarp_send_ddp_R239e83cbregister_sysctl_table_R8e67bc79mod_timer_R24685a70___atomic_submemcpyaarp_send_ddp_R239e83cbdev_get_Rf0e8a136aarp_proxy_findatalk_proto_init.udivmemcpy_fromiovec_R9fb3dd30atalk_if_get_infoalloc_skb_R74d0de82del_timer_R5811f067atalk_checksum.divregister_netdevice_notifier_R63ecad53aarp_unregister_proc_fsinit_modulecall_out_firewall_R812376c4dev_queue_xmit_Rb52a9338register_snap_client_Rf7240e06sock_rfree_R18876121sysctl_aarp_retransmit_limitprintk_Rdd132261sock_unregister_R2394a062unregister_sysctl_table_Rf62b892aproc_dointvec_jiffies_Re3f354fcatrtr_device_downproc_net_inode_operations_Ra76a554eaarp_proxy_removesock_no_listen_R8c3c2cd1sock_init_data_R90762b82aarp_device_downaarp_proto_initsk_alloc_Ra6b9832ask_free_R6177c809sock_no_socketpair_Rf8d4fbd4proc_register_Rf7ecbcfdaarp_register_proc_fs__bzero_Rdd42e263proc_unregister_Rc5c75fc4sklist_insert_socket_R431fac28sysctl_aarp_tick_timecap_bset_R59ab4080sk_run_filter_Rd3fb963dsock_no_dup_R60f7e8c8__ksymtab_atalk_find_dev_addr_Rd76a773caarp_send_probeskb_realloc_headroom_Re66e9a57sock_register_R64c8ebc7aarp_proxy_probe_network__kfree_skb_Rcbfaf351sock_no_fcntl_R754b1ee6call_in_firewall_Rdd4fef54skb_free_datagram_R01886d6b__module_kernel_version__kstrtab_aarp_send_ddp_R239e83cb.uremproc_dointvec_Rec91eea2___atomic_adddev_remove_pack_Raaefb398dev_ioctl_R387c78a5ltalk_packet_typeskb_recv_datagram_Rc5078a9funregister_snap_client_R9abefc50sock_no_getsockopt_R4e36752fatrtr_get_dev_Rac480c69ppptalk_packet_typesklist_destroy_socket_R8f257529schedule_timeout_Rd62c833fatalk_unregister_sysctlunregister_netdevice_notifier_Rfe769456__kstrtab_atalk_find_dev_addr_Rd76a773ccall_fw_firewall_Rbaf844f8__ksymtab_atrtr_get_dev_Rac480c69ddp_dlproc_net_R5882e383ELFK4(㿘+` ,`,,, " ?`"?` "ݰ?` "ٰ?` "հ?`  ϰ?& P& L& h& \& l& T& X& `& d @  P& @*@ & D P@  @`& x D ` L@ P@ & < P   @ L@, <$@ D" x*@ P& @ & & & & & & & & &  @  & |*@  |`Y& V`` @ @ J& 8  5 | @, 8$@ & |&2  P  <  L& 8& &  @,@  |"  & @   |,"   & |& `&  @``  `& "@$ @  " |@ | @@ < @`" D@  D " x@ x ?@㿘 `* @&?@ <@ @@ D@ x`@ 8@ @ | @` @` ` ` * $@㿘`%` h ?& h ` T? D& `+   H"  x& HJ `2  T l  & l*  @  T P@ & T`! ` h? T D& `& h+`  H x" & HJ `2  T l  & l*  @r  T P@ & T `   h $& d   p ` h P  p@  ` h   @L & d p@  t@ 0 T D+   @@  @  & d& d㿘   6`  @61 `-& @ ?&@  `     & @ & & $      @& &     2    @  @ &   |*  `  @ 㿘`` + 2 * @` `@` p`@  @8 A ` h P & ??㿘` + 2 * @^?$@V RS?@ O? 2 $@@ `A?  " @ < @ ? /` @    |* @@    " $ $ @ &  @  $ $ $    p@ 2 㿘H/` d  `   T D+   @@  @  & d 㿘` + 2 * @ l  $ l@  h P 2 `$@~?@ p`" ` $t?0r h P h  2 \ " \ X @2 \  $@X?@ p`ݰ \ L " <@ ? ?` X @*  @  @ X \ @& D* "  D*"@ x X*@ X D+  L 2  \ P@  `$ X$ `$ \$ \ H$ H2| `A +2 `* e@  +  ?Ȑ€h@ \h@ `x@ '<`  @ \  \  ߰?!"#! !z!"" !*ư?!!"! "d?!!!"V !?0! "<!a?0! ?<)    ? ?`T`@)6@ e6  @ e, "@ `( €`,`. @. * * @ * T @ e@ e, "@ Ȱ .@ `(€`,`"`@@`@€`D`"@@* *  #* @c@ d @", @ * *  * @c@ d<  :?$ <)    ? ?`L`@)6@ e6  @ e, "@ `  €`$`. @. * * @ * T @ e@ e, "@ Ȱ .@ ` €`$`"`8@`8€`<`"@@* *  #* @c@ d @", @ * *  * @c@ d<  :Z?$V  t` @@ @2" 2! 2 @ 2 <`  <?$08p 2!<    ? %?b2 @a2 `@2 `2 p€< 0$   ` @ 2 2@ 2 @2<`  ?$0<`  ? $0``!@ 2 2@ 2 @2`` @   2 2@2@!_<`  ?$0`L`@`$`. @. * * @ * 0 `"`<@`<`"@@* *  #* @c@ d @", @ * *  * @c@ d<`  :\?$X `T`@`,`. @. * * @ * 0 `"`D@`D`"@@* *  #* @c@ d @", @ * *  * @c@ d<`  :?$ ?㽨 +< `*  @  * € ͖ U '# "` "`\`  #_## Y`# "!"D`d!"`\F`#ؠ?` "< `3  "2`+`!!p/ "䀎 "` "`P`!h`  # "<`#"``` !"7`` "`< ":`  "`` "? "`` g0!!"R<`@ \<`*  : &`π.\`@ .# 2ư?` "$`0\:@А` "`?$`  `<` &0'd```@ " '`` @'h'l< ! !'d```h`\``P" " '``L @'h`\`L"@  'l<  ? p l`@ 0g'P'X'T'P< ? Y UP@ 0P"`` `"` " `@ `  @  ` "`` `"` " `@  ` 0@ ` 0` @`@ `"<@ 2 <` &0<` `&0   "?<5    `` @< Ġ&0  @ &0 ܀`"?@< @ &05  `23``|@`\@ h    "  i " <"  <2 <  j" < < k&0g`` `  `X `x 2`R `"?@L?`7 *` €   j         i??x``  `Xx ` `x| < &0H  P "?t=H< MSk %38Ym"% Q(' P!  8x  b@\4@audio.cgcc2_compiled.driverslis_free_elistkill_procssparcaudio_pollsparcaudio_lseeksparcaudio_readsparcaudio_sync_outputsparcaudio_writesparcaudio_mixer_ioctlsparcaudio_ioctllis_get_elist_entlis_del_from_elistlis_add_to_elistsparcaudioctl_releasesparcaudioctl_fopssparcaudio_opensparcaudio_releasesparcaudio_fops*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulregister_sparcaudio_driver_R4cf55403kmalloc_R93d4cfe6__this_module___atomic_addkfree_R037a0cbaunregister_sparcaudio_driver_Rbec851fe___atomic_sub.remsparcaudio_output_done_R704db455__wake_up_Rdecddc1esparcaudio_input_done_R4b24e67f__pollwait_R0019e686printk_Rdd132261interruptible_sleep_on_Rd492943bstack_top_Ra6cab6a7__copy_user_R9c5239eb__bzero_Rdd42e263strncpy_R328a05f1__kstrtab_register_sparcaudio_driver_R4cf55403__ksymtab_register_sparcaudio_driver_R4cf55403__kstrtab_unregister_sparcaudio_driver_Rbec851fe__ksymtab_unregister_sparcaudio_driver_Rbec851fe__kstrtab_sparcaudio_output_done_R704db455__ksymtab_sparcaudio_output_done_R704db455__kstrtab_sparcaudio_input_done_R4b24e67f__ksymtab_sparcaudio_input_done_R4b24e67finit_moduleregister_chrdev_Rcc8411c6cleanup_moduleunregister_chrdev_Rc192d491kill_proc_R932da67e  (((,&4(h&((&(@) P&|) ) )  ) ) $*4 P+h++++++  + +++0+8+@+P) \) `) l-(..0D0P00.0  22x  3  4 $5 D5 l5 6 . 0   <4 4 5 5 P5 h6 . < D 7 8 8 5 5 6H5 L5 $$%8%P$`$x%%&<%D$`&%$5 5 5 ,$D$X%%$$%%&%$&%$5 5 5 5 5 <5 5 5 5 5 5 5 4%&%$&%$5 5 %&%$ &@%H$X5 \5     X) > > >) >) >*> > ?T.?4@ ) @$) @0-@L0@` h@d H@h h@l H@pB@ h@ h@DA(A8(AL+A(B+B+CE 0h  ,(4<XDLT\$dxlt|  !!`!!!"$$%H%%`  $ $((,00P4<8<D@DLHLTPT\Xp\d`dlhltp t|x | !X!!!"$$%@%%'9, ;/=1?ELF$\4( @.4 ""@"$ 6  "& "@` `i``?0 `j`h ?0  ?0  `  @㿘``ے  H  d  *  `@*  @@ѐ@#$ ? 㿘``  \  d  *  `@*  @@@#$ P? P㿘``'HaH  H  d  *  @*  @@@#H$ ?  㿘``'H8H  \  d  *  @*  @@Y@#H$ D? D㿘  \`* `` ? ?*`0*`@ d@8@#$ H  H㿘  H`* `` ? ?*`0*`@ d@@#$    L    L      (  "U@    (   "U@   `  (  * ( * * (   * ( * *   ?   C G   (  @*  ( @*  `*`  ( *   ( *  " " ( * "      `` (  /@* ( /@* ` (  /* ( $/``@(  /* ( / ( @ /* ( /* "X  X ` :  ?  *@ >$(* ( ?"| ("|  | = u㿘  4@y 4(&㿘  D$@l l(& < t㿘  w@+  T㿘  ?@d  㿘 `T@*w  w㿘 `@L*?  ?     (,    (, ,8@(@  :* @(@  * `   (2 #`T (,8#`T 㿘    (@,   (@,   ?, 8   ?,8   (  `. ( . `@ @  2!   (!  㿘 ` 2@@ "`@ "@` "@@ ?"@ d !`@*@@#@ L*@ @*" o#@ ֒  #@: Β @ *@ ` ` ` ?$`@ P*@ *@ Q*``@  *`@ Z*@@*  В ~ْ 1  | @ *@ I*@@  `*@* $`$`$`$`$`$`$`$`$`$` 2  h2 "2 㿘   D$,0  4<ې (֐$"& (㿘`   `C  *`B*`="`4`    `{  *`z"`l*`u%@ d!@#` @`  ` 㿘` ! ̀  , z    @$ $  Ѐ "`    @$ $ ` "" B , B  , C    @$ $  " B    @$ $ B  z  `  $ ` @`  `㿘`  C   " 8 "`<M    $       @$ $  ܐ?$  "   $  $ $ $  "! " < 2  `` @$  " 8 "<<$ $  $  $ " 8"`<@㿘      0  @ ?Ւ?@㿘  {  @Ð HH/  *  *` ̀   ̢   @$ $  ?$  Ѐ "   $  $ $ $  Ā`"$ Ȁ "  t 2 P`   @ $  " ( ",,$ $  $ Đ $ " ("`,@ 㿘  C$ $ @ < <Ő , C$ ` .*@"  # 8 `?d @" HH/  *  *`㿘 $   $    @$ $     ` @$ $    "U@   㿘  {$ $ Ȁ @ t <M , {$ `@ ,*@" ""@" HH/  *  *`0ߐ㿘 , { `@" $  ̀ $    @$ $  Ѐ     @$ $ 㿘``* < @  =(= u(u 4 4 l l㿘``* t 㿘 `@  ```@ ` `@     (@ * 㿘 !e  ਐ"?㿘` " @ @   4 @ $ 4В @ d b  D l$ l:b  { 2  , u, {. @* 2, C` "``HH/  *  *` , =, C  є 㿘` @  $`? $`$  $ $ $ $ $` `0 @`8$ ``4 `8`0@  $@ `@?0w` $ ` @@@  $ `` HHo`@ *@ * ` #`̐@  - G@ `` " HHo`@ *@ * ` ?#` @? @ @@`0 $ \$ $, <, C, t, { ``  a   @@㿘 #$`  ( ' @ 2``4*` * " * = 2 $`    ߠ `  ?㿘  "HHo` * *  ?$ @ @  @  @@ 㿘`    ǐ  $`@%+>IV"k%}3 D 01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... SUNW,CS4231baonboard1cs4231<3>cs4231: could not allocate registers <3>cs4231: unable to register <6>audio%d: cs4231%c at %p irq %s GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 !7  , P2<   ="B"H"(2Q"`[Y#=#b&d V - $ p+?|W(r T `  (pB \$pw   l , ?W n<  8X d|   + 4E@b 84{ l  x  $ D  $ X@ 0 $I  b $| 8  d< \$P -p@t Se,}HXhx(d $(4DDApLZfn||   /Pbu%;Kp  <Pcs4231.cgcc2_compiled.cs4231_rate_tablecs4231_rate_to_bitscs4231_encoding_to_bitscs4231_set_output_encodingcs4231_readycs4231_get_output_encodingcs4231_set_input_encodingcs4231_get_input_encodingcs4231_set_output_ratecs4231_get_output_ratecs4231_set_input_ratecs4231_get_input_ratecs4231_set_input_channelscs4231_get_input_channelscs4231_set_output_channelscs4231_get_output_channelscs4231_get_input_precisioncs4231_get_output_precisioncs4231_set_input_precisioncs4231_set_output_precisioncs4231_output_mutedcs4231_get_output_mutedcs4231_get_formatscs4231_get_output_portscs4231_get_input_portscs4231_set_output_portcs4231_get_output_portcs4231_set_input_portcs4231_get_input_portcs4231_set_monitor_volumecs4231_get_monitor_volumecs4231_get_output_errorcs4231_get_input_errorcs4231_get_output_samplescs4231_length_to_samplecountcs4231_get_input_samplescs4231_get_output_pausecs4231_get_input_pausecs4231_set_input_volumecs4231_record_gaincs4231_get_input_volumecs4231_set_output_volumecs4231_play_gaincs4231_get_output_volumecs4231_set_input_balancecs4231_get_input_balancecs4231_set_output_balancecs4231_get_output_balancecs4231_chip_resetcs4231_getsamplecountcs4231_opencs4231_releasecs4231_playintrcs4231_recclearcs4231_recintrcs4231_pollinputcs4231_start_outputcs4231_stop_outputcs4231_start_inputcs4231_stop_inputcs4231_set_output_pausecs4231_set_output_errorcs4231_set_input_errorcs4231_set_output_samplescs4231_set_input_samplescs4231_set_input_pausecs4231_audio_getdevcs4231_audio_getdev_sunoscs4231_loopbackcs4231_ioctlcs4231_opscs4231_attachnum_driversdriverscs4231_detach*ABS*__module_kernel_version__module_using_checksums.div.urem.udivudelay_Ra39b4cf2__this_module___atomic_add___f_mmu_release_scsi_one___atomic_sub___f_mmu_get_scsi_onesparcaudio_output_done_R704db455__bzero_Rdd42e263__memset_R1907e126sparcaudio_input_done_R4b24e67fstrncpy_R328a05f1cs4231_interruptkmalloc_R93d4cfe6prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprintk_Rdd132261kfree_R037a0cbarequest_irq_Rb9ba6802___f_enable_irqregister_sparcaudio_driver_R4cf55403___f_disable_irqfree_irq_Rf20dabd8sparc_free_io_Rf8afdb8d___f___irq_itoainit_moduleSBus_chain_R359591d7strcmp_Re2d5255aunregister_sparcaudio_driver_Rbec851fecleanup_module   [[([8[[[l[|[[[l[|[ [ [ [L[\[d\ h\ t]^^`^^\ \ \ \ \ _^8`abc^,`d^ ^^^8a  e    e  eg4 p8 phht | i j kf f lmtn j op q(kT 8d 8|rjt t      u  ( 0 ` vo p $q ,k @ D T \ h x ptxD|t    d  8  $< X(T` l  l$( x,h0 4x8 8<H@DXHL ELF94( 㿘`R*`  €?#* 6 @???c  2`* @<<<Ò`# 2`* @333 ̒`̐#3 2`* @*UUb!U 2`* @@  㿘 Ѐ"@'% " @   &@:  < &@`&@  `"  `   `` @㿘 `  @ `` `$@  "@    ? @   @  ?㿘ܐ @ @ @'@㿘̐`   @a  *  * a@ "    a!"@   & & ,& 0* "i"@ `"@a`㿘 @ 0D @0?.*  P 8 ?,  #  / 3`$ $Ĩ$Ȫ$$ @, @ "$ @@`% %`  @@  ̀ ?㿘  ` @ 0S.`*  P `? @0G ,`#  0 8 ,`$8 $̘$/< 4`$  @ `   @ $@* &$"@  `  @x>`>` ` ???>`.@ &@  `+   @  ` @   'ؖ     `*''??'ܐ -h&-d€-l_ S ,,  P ,`c "@R 8` " c " F ,*  8@ Lݐ T 2"㿘  *@  *"   `& & `?  &  d  *@ *㿘`    @  @  @ @ `@ ?"@ `$`( @Ho`"&`$``("`*`  P(8@ 㿘`@ 0G.`*  8@ @ 0;` "  " P?")$* $$@$Ȓ$ @$В$@$  @`%@??Ā ?2ޡ* * ?%㿘`@ 0>@ <0 .`@*` 8"  P?#  T" 㿘`.`@ 0{*  8`.* `@ 0j `", @! H 2,, @ @*  @ H  , * @`, `,`* "2&,&,*`" #@  L" @,` @@ / /`" ""`,`@  @"/ /`"@ @"ǒ 㿘 @ 0&.`*  8@ 8@0@ 0@ 0h L H"@ "@`"@`㿘 @ 0.`*  8@ 8 0 @ 0 @ 0 T" 㿐'L ?`?@ 0ū.`@*  8`2  @ 0@ S?L@6 `@F'# $ ? @ @ @   ? @Ԑ?$$ $"@ $" $"@  , +`"  ?c"@  #"  c "@ ,` $  ,` c"@  ¦ ?b`,`   ( " L,`$"@ $" $"@ $" $'# ,  @ `@, ?א  @*  P@,`  ,` ? $  -  c,` " @@*` P"   $ - c  $ 㿐'H'L'T'X?`?@ 0H 8-`* @ `@ 0@@ 0 P ? @ 0@ Q `L@G#$$$' $ @ @  ? @ٛ+  #"   c"@   #"  + c "@ % % $%@ " $?$@   c   ,",$@  à><$$'$̢$3/` ,  @ @, @?2`L,% $%@ T% HX, " &@ "@ ,#`"@`㿘  "`@ $ $ `$"@  $ $ $  &"x&,` &"&,&,&. @`4@ @ & .` $ $:` $ 㿘 ) %6 !( 2 6 2 2 *,, ` ؖ  0*`*`*`*`  *`  *`*`  *-",",",㿘,܀ -` ?-T  ?., .,,-2  ? @ &` :  @"@ @ & :  ?""?`@.,.,,o 㿘,؀ ,e T ,܀  @ },Ȁ     ""`@ @ * ,&,̐    ,Ԑ    ,Ԑ`0     a,̐ ],,Đ .,,'   "0 @ },̒ `䀢` 2?  &,&,  㿘,܀ K,؀ " ,Đ`.,, @ @  Ҕ ,Ȁ    "`,@,,Ԡ`    Y ,Ԑ   R,Ԙ  K ,Ԑ`(   C  &,&,ؐ(   "㿐    '  ' `@  ,,Ȁ "   `",,@ ,,Ȱ   @   @"`,,Ȁ  @  ?  $,,- ͐  $,Г. @ $,Ԁ " ,Ѐ   ?㿘@ 㿘 `  @M  @ 㿘 M 㿘@ 㿘 .  T  @㿘 ( 㿘  ",      㿘  n*-    㿘  `*-T  T㿘`  ``?0?0 lŐ *l lŐ *l"lv   㿘㿘    㿘`  ``?0 ` ?0 Œ     Œ    Œ  *"":   㿘ג㿘㿘` ) @   @`@ *@  lŔ +l  lƔ `+l+l  @ +l#l0? 㿘̒㿘      㿘 `@  .`` `.`@  㿘` @` ` 㿘` @` `?㿘 j f b ^ Z V    t     m     f     _     X     Q 㿘 .  * "* `@@   㿘 .  * "* `@-d@ -d㿘 . * "* `@@ $-h$-l@@ 㿘 (. * "* `@@ -d 4-h-0. " '  @"-h`@-l㿘  `@ 㿘   . @*`"@*`  㿘   . @*`"@*` C 㿘 6!?`. ?* "* ` @`[`  `S ` N 㿘 `. * "* `` 㿘  ` . *"* ` 㿘  ` . *"* `ז㿐N``d@ s?`$`-p@  $`h?@-p`@'$ $ N``0$ $ `@``8$`4`8 `0@  $ @  @'`@?0?` `@  $ ` @@  @  @ @'@`0  @  ,-,-,-H,-O,А    @ 0@ W㿘 '$``O+ `-N M`@ ` L L@ ` L L@ ` @  2" `!X@`!X@ *` * " * @ 2  % ``@` `   ?㿘`     @ @  $`@>k%}0%8 + I V"  D (3 0 801.01kernel_version=2.2.14-5.0using_checksums=1parm_dbri_debug=iparm_dbri_trace=imapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... RESRVCDMTESTCDECTENTCHISSPDTSCDPSDPREXIIQJUMPPAUSEWAITDBRI reverse_bytes: unsupported length DBRI cmd: %08x DBRI: Command buffer overflow! (bug in driver) DBRI: Chip never completed command buffer DBRI: reset 0:%x 2:%x 8:%x 9:%x DBRI: init: cmd: %x, int: %x DBRI: invalid pipe in transmission_complete_intr DBRI: invalid td on pipe %d DBRI: TD %d, status 0x%02x DBRI: xmit callback %08x(%08x) DBRI: invalid pipe in reception_complete_intr DBRI: invalid rd on pipe %d DBRI: RD %d, status 0x%02x, len %d DBRI: recv callback %08x(%08x) DBRI: INTR: Command: %-5s Value:%d DBRI: INTR: Chan:%d Code:%d Val:%#x DBRI: Multiple Error Ack on SBus DBRI: Multiple Late Error on SBus DBRI: Lost Bus Grant on SBus DBRI: Burst Error on SBus DBRI: reset_pipe called with illegal pipe number DBRI: reset_pipe called on uninitialized pipe DBRI: setup_pipe called with illegal pipe number DBRI: setup_pipe called with strange SDP value DBRI: link_time_slot called with illegal pipe number DBRI: link_time_slot called on uninitialized pipe DBRI: xmit_fixed: Illegal pipe number DBRI: xmit_fixed: Uninitialized pipe DBRI: xmit_fixed: Non-fixed pipe DBRI: xmit_fixed: Called on receive pipe DBRI: recv_fixed called with illegal pipe number DBRI: recv_fixed called on non-fixed pipe DBRI: recv_fixed called on transmit pipe DBRI: xmit_on_pipe: Illegal pipe number DBRI: xmit_on_pipe: Uninitialized pipe DBRI: xmit_on_pipe: Called on receive pipe DBRI: xmit_on_pipe: No descriptors DBRI TD %d: %08x %08x %08x %08x DBRI: recv_on_pipe: Illegal pipe number DBRI: recv_on_pipe: Uninitialized pipe DBRI: recv_on_pipe: Called on transmit pipe DBRI: recv_on_pipe: Called on active pipe DBRI recv_on_pipe: No descriptors DBRI RD %d: %08x %08x %08x %08x DBRI: illegal bits_per_frame in setup_chi DBRI: Entering data mode without control mode DBRI: Onboard CS4215 detected DBRI: Speakerbox detected DBRI: Using speakerbox / ignoring onboard mmcodec. DBRI: no mmcodec found. DBRI: start audio output buf=%x/%ld DBRI: start audio input buf=%x/%ld SUNW,DBRIonboard1dbri_get_irqnum() dbri_get_liu_state() returns %d dbri_liu_init() dbri_liu_activate() dbri_liu_deactivate() <3>DBRI: unsupported chip version %c found. DBRI DMA Cmd BlockDBRI Registers<3>DBRI: could not allocate registers intrDBRI audio/ISDN<3>DBRI: Can't get irq %d <3>DBRI: unable to register audio <6>audio%d at 0x%lx (irq %d) is DBRI(%c)+CS4215(%d) DBRI: Found %s in SBUS slot %d DBRI: Ignoring slot %d GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4+p!N<h  ,+h2a  =- `B- H- bQ- Y9H=9b; Z D <#<.@9D@>JhXheprP}@40x  H P$ t<& 1 D @dK VDcp(z||tx0@p@ h8P 3p\DTk  $,H T%\<dR hh ,4 @H 0TI bz     !!! "!(6!0L!8a!@Ds!!4!4!`'   8.PGXi| #)Jj|!#h#xh#t$T% 8 %DT%T"%-&\9&\D'@\Oas )t , A U+l ddbri.cgcc2_compiled.CS4215_FREQdbri_debugdbri_tracecmdsnum_driversreverse_bytesdbri_cmdlockdbri_cmdsenddbri_resetdbri_detachdbri_initializedbri_process_interrupt_buffertransmission_complete_intrreception_complete_intrdbri_process_one_interruptdbri_intrpipe_activereset_pipesetup_pipelink_time_slotxmit_fixedrecv_fixedxmit_on_piperecv_on_pipereset_chimmcodec_setup_pipesmmcodec_defaultmmcodec_setgainmmcodec_setctrlmmcodec_setdatammcodec_initdbri_audio_output_callbackdbri_start_outputdbri_stop_outputdbri_audio_input_callbackdbri_start_inputdbri_stop_inputdbri_set_output_volumedbri_get_output_volumedbri_set_input_volumedbri_get_input_volumedbri_set_monitor_volumedbri_get_monitor_volumedbri_set_output_balancedbri_get_output_balancedbri_set_input_balancedbri_get_input_balancedbri_set_output_muteddbri_get_output_muteddbri_set_output_channelsdbri_get_output_channelsdbri_set_input_channelsdbri_get_input_channelsdbri_set_output_precisiondbri_get_output_precisiondbri_set_input_precisiondbri_get_input_precisiondbri_set_output_encodingdbri_get_output_encodingdbri_set_input_encodingdbri_get_input_encodingdbri_set_output_ratedbri_get_output_ratedbri_set_input_ratedbri_get_input_ratedbri_set_output_portdbri_get_output_portdbri_set_input_portdbri_get_input_portdbri_get_output_portsdbri_get_input_portsdbri_audio_getdevdbri_sunaudio_getdev_sunosdbri_opendbri_releasedbri_ioctldbri_opsdriversdbri_attach*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_dbri_debug__module_parm_dbri_traceprintk_Rdd132261udelay_Ra39b4cf2free_irq_Rf20dabd8sparc_free_io_Rf8afdb8drelease_region_R43bde9b1kfree_R037a0cba___f_mmu_release_scsi_onetq_immediate_R2e2d1553___set_bitbh_active_Rfff9d0a3___f_mmu_get_scsi_one.umulsparcaudio_output_done_R704db455sparcaudio_input_done_R4b24e67fstrncpy_R328a05f1__this_module___atomic_add___atomic_subdbri_isdn_initdbri_get_irqnumdbri_get_liu_statedbri_liu_initdbri_liu_activatedbri_liu_deactivatedbri_dxmitdbri_drecvdbri_bopendbri_bclosedbri_bxmitdbri_brecvkmalloc_R93d4cfe6__bzero_Rdd42e263_sparc_dvma_malloc_Rac4503aaprom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getproperty_R156810c5request_irq_Rb9ba6802register_sparcaudio_driver_R4cf55403init_moduleSBus_chain_R359591d7__strncmp_R8c5ff0fdcleanup_moduleunregister_sparcaudio_driver_Rbec851fe ( ((`,,0T48T<T@TDHTLTPTTTXT\T`TdhTlTpTtTxT|TTTTTTTTTTT 0Xa\ 0 < X <a X < h h8 < @aT <X <d p abcde f( <, <8 @ Da    a  H  H$at <x < h hag <  aH LaP t x |ag < <, 4 <ah <l <|    a < < D D @ @a < <( h, h4a h  la p    a     a     a   h i j h h 8j <j Dj   a    X a  X Pg   a     a   d  ha l   ( a  (t `xa| ` a  a 0 4a8 h @lap @ pa p a  a  (a (k0^i < P < Pa <  xa x@ DaH X \a` x |a  0a 0ki < X <8 X<aT <\ l a   Hlllb bbP pba l < < a  < < a  a  X a$ Xm < < x xa  (m`n P P < <  a 4 8 t !H !L !To!` !l !to!p !p !q!p !p !r# # #< #@ @#H @#L #\ #`a#d #| # # # @# @# # #a# # # $ $ @$ @$ $$ ($(a$, ($8s$Dw$X $\ $x $| @$ @$ $ @$a$ @% % %  @%$ @%0 X%4a%8 X%H %L %t %| % % % % % % &$ &, & & & & & & ' '  'D 'H 't '| ' p'a' p' ' ''' ( ((,(8 (D (T(h (la(p (xe(f( ( (( H( ( H( (( (a( (d(e)f)()8 ()< )P )T P)\ P)la)xa)| () ) ) ) ) ) ) ) ) ) *,*@ <*D <*Xa*\ *` *l *ta*x * * * + +  + +  +D+L +\ D(H LPTX\`dhlptx|!!!8p!@ $,HT\,4@H!!! !(T       !$!0(!8,d0ELF 4( ` ?  ` ? D    D` ?  ` ? 8   8` `6 ? ` `6 <?  <   @      @` (t (t  t ?  @      L  L 1 i ( 0㿘  3@  㿘 `@*3  3       (@,   (@,  ? 8    ? 8  ``@   @  2#`  (#`  ` h  㿘  k@  H㿘  3*k@H k       (@,   (@,  ? 8    ? 8  ``@   @  2#`H  (#`H 㿘 !Ւ#@   F 7    #@Ɛݒ     㿘`   7  (6(1 (`   `o (n `(i` @` ` 㿘`(6(7`(o(n` @` `㿘 @  o@ 㿘  0)' ##+7##5 @H`&#   (o (7 (o㿘``* 0 @   (h  1(1 ( ( ( `㿘`@ ``@ ` `@  㿘1 @&   &   ?㿘 @  & ?`& @    $ , 0, 7 @  @  @?㿘@ @ 㿘`      $`01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... SUNW,cs4231aonboard1<3>dummy: unable to register <6>audio%d: dummy at 0x0 irq 0 GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 !   , $2  = B H 2Q PY h= b K  $0$$IH cT |`$$  ,, $ 80 S< mHXh$  !6 L a x   $x< H$l 0p H| ^w$ ( h`*4ATf x , $4DTH'@JV^k x ~  +BMasH Pdmy.cgcc2_compiled.dummy_set_output_encodingdummy_set_input_encodingdummy_get_output_encodingdummy_get_input_encodingdummy_set_output_ratedummy_set_input_ratedummy_get_output_ratedummy_get_input_ratedummy_set_output_channelsdummy_set_input_channelsdummy_get_input_channelsdummy_get_output_channelsdummy_get_output_precisiondummy_get_input_precisiondummy_set_output_precisiondummy_set_input_precisiondummy_output_muteddummy_get_output_muteddummy_get_formatsdummy_get_output_portsdummy_get_input_portsdummy_set_output_portdummy_set_input_portdummy_get_output_portdummy_get_input_portdummy_get_output_errordummy_get_input_errordummy_get_output_samplesdummy_get_output_pausedummy_set_output_volumedummy_play_gaindummy_get_output_volumedummy_set_output_balancedummy_get_output_balancedummy_get_input_samplesdummy_get_input_pausedummy_set_monitor_volumedummy_get_monitor_volumedummy_set_input_volumedummy_record_gaindummy_get_input_volumedummy_set_input_balancedummy_get_input_balancedummy_chip_resetdummy_opendummy_releasedummy_output_done_taskdummy_start_outputdummy_start_inputdummy_stop_outputdummy_stop_inputdummy_set_output_pausedummy_set_input_pausedummy_set_input_errordummy_set_output_errordummy_set_output_samplesdummy_set_input_samplesdummy_audio_getdevdummy_audio_getdev_sunosdummy_opsnum_driversdriversdummy_attachdummy_detach*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_subsparcaudio_output_done_R704db455sparcaudio_input_done_R4b24e67ftq_immediate_R2e2d1553___set_bitbh_active_Rfff9d0a3strncpy_R328a05f1init_modulekmalloc_R93d4cfe6register_sparcaudio_driver_R4cf55403printk_Rdd132261kfree_R037a0cbaunregister_sparcaudio_driver_Rbec851fecleanup_moduleP P (P <P HQP P RST  <U LV\W U U W W W SX \ dXl p xX  X       Z   ([ 8 P T\ X d\ h p] ^ ]       h T $<(,048H<l@DHL$PTXH\0`Xd<hlptx|H$T`h  |4Dp$ELF@4(㿘. J >   ` @` ` @` `*  *  ( "  㿐  //<  @    ? HH" ``  "`  2 㿘@  D @@ H` D@    ?$ "`& D"""ۂp@H  *`0 2$ $2     $ 2"b "`  "  2    *`0"$ 2"$㿘@֐  "&  R "$!@$" 4"$, ) " & `2  $"```2`$` `$ $"`$ x`""`@ (` @`  `㿘` ` ` `$ 2`  㿘 @`x 4 *"C?``@` 2`\    `&`\ &` +? &`&`  @`x@ DH`&``` "`&@&`"`" t 2 "€`\  `p @@㿘' ` / ` `* @dQ) L` " `L` "wL`# L`!w `L` w`L`'L`&*  `    "(   2"(   ` `*`   ` `* @dR dSdV   . `p @&@" @ ` @  ,`?# 㿘``| " .`\ @ `p  @& & `\ \@  @ & \&  @& & `@`\`p @ @ 㿐    ` " P "   * *`@ *   25   @  ``@&`&`   @  2  ``"&`@&`&` "i  * *`@ *   +`f  `@ @ `@ `p @@`:  ,  8 2 o`p @( @$  @  `"@@$   !76`t&` @ 㿘@@~ 㿘 'H   @H =H2O ` ` `+` `+  `*  `* ` *`* `@ `  @  @28 ``"5 `p 2 ` ` `+  `* ` * @ & # `* `*`@ *  ` `@$@@@ @ ` 2f ` ` ``H `g "] `` `@     `@ &@ 2J `" ` -`` "8"0 $ ` @  `@ $2 $222-`-`-`-` H  @H 2  $H@  " $@ $ 22 2 2 -`-`-`-`  ` `* `*`@ *  `  2 `000-`-`-`-`  ` `* `*`@ *  ` 2 `000-`-`-`-` ` `* `* *` ` @  <H  @H HHH g % p f   @ @ ` @  p @@ .'H@+ @$ `  @   @  HH>    p@ @ 㿘& $2 $2 $H" ` @` `㿘#` "+? &?  (?@   $ $, 4  4 $ $ $  @ "$`U? "     0   0 !7  㿘    2  `"?   }?@  2 v?퀢`& *` €@   `X    a7@     `P 2 `oI?΀ D?,@?Փ2`i 24 (@  2$ 2?$4 4 $ $   2, " ,  `Z$ `@    @  `o`h@$0 @   㿘   ?0D * 2  ?@   ? ?S 㿘.`6```` 04  !7@/      ! o  (@  6 6 & && & . `  Z  @&  o h?@&X"!"<"!:?0"!p"!ဦ?0`@ ؒ@   ?؀  '@ Β@  / / `akg<%@ ؒ@   W?ؠ@ N? * f2`  C?7@$ `@ <@ ?@   ", 0*<`@  @ ? * : <`@  @ ? * : ? 2㿘  @  ? " $  @ 2$?$$  @ ,  @  ,  㿘 ` `2 `` $@ `2`㿘  "? 㿘 ` @2` ` 2` ? "@  ``2@? :` * ??2 *:* 2 㿐`  ` &` `W 2ΰ?` @ '`"`@" "  "\ "\@ @ ,2 2 / / / `/ " "`" 222/ / / / "$$S'$R2" @ 222/ / / / `  @ 222/ / / / " `@ "$* 2 2 / / `222/ / / / `@ `*22/ / " \"\@ @@ ' `p@9?@5? z  `   / / #* 2 2 //   @    p@?@,   ]㿘  * *`@ *   w 2  p @@0    6 0<`@ @ T  T (? # 2 ? 2?"!  "! ?``''@ x?* 2  "     72            "㿐 #\` `@`D  3/-+@@ `` ` ` ` `#\ ` @#`@    @@``@ &`$`2@&&'@㿈 #\'H#`` `@`J 9` "B`$73/-+@"$@ ( @  "" " " "#\ "`#` "#d"@#h P @@" &` (@ 4`$ 2@`$`2`&H& @㿈` @` 2 3/-+)@`   #\ #` @#d`@ @ &  2&&'  ?<   ?  a?ր3b& 㿐'a 4?"&'/?<    ?  ?򀢠8   ?' ?򀢠   @ ? 㿘V  *?Ԑ  @  !?  &  "? €?Ԑ@ .`z`&b @`   `㿘   t  "@ , t& V ` ` @`  ` 㿘#@ ,`#`#!* 4 c 2 4㿘  ) 2N?0` 2`G?π 2 `Ӑ* `6`<?`#@X   !! `2`%?`6"$'`  "? } `@ ?А. ) "   }  `@  㿈  , ( &1?"$ 2 `7'  "`" `2 ` 2`?͐"$"``4"@ `4"&V 2  & , ( 㿘` @` @`  `?ӝ㿈  & ( ""$?ǐ'"@ " "  '"  @`"$'@ "$7 7"'/@  㿘  * @; p g 7? * @@    *  *@ 2  $ p/ J `  * *`@ *        p @2 @ x` @ b$ 2 `7'ܒ͔  '` #? "`? `( ?ǐ 7 b', b4 bb$ @ ` @L 㿀 $  @7'  H ) D?ǔ@@䶒 <   * @․$`` &`` @ #' $`$&` 4@ ` *` 4` @   * *  *`@  $` ,`'@?ӝ㿘" !@ "!@"! @ "! @S"!@0"!@m"!@Y0"!…@h"!@ LX"@" D"!〦@Y0 s@ P l , <` :?&  D@" `"<`\?<` :q?&m X   !! `/YX   !! `I?D_@X   !! `2<.?`  $3"(?!3"( ?" 2<?` ?"@    " 0?@㿘2#?H` @` `&#H( 㿘 ` @` ` 㿘@ @" a72 @ @"` 2 @ ` @ "`@  @ "`@ @ ! @` @` @`@ @ 㿘 ?  㿘`    `$ $ M"`$  ! @  @  @ @ @  `@""`@ ! @#$ @ @``@$`㿘@  㿘????????<4>IPX: Network number collision %lx %s %s and %s %s IPX frame type 802.2TR is obsolete. Use 802.2 instead. IPX frame type EtherII over token-ring is obsolete. Use SNAP instead. EtherII802.2SNAP802.3802.2TRNoneUnknownInternal%-11s%-15s%-9s%-11s%s NetworkNode_AddressPrimaryDeviceFrame_Type%08lX %02X%02X%02X%02X%02X%02X %-9sYesNo%-11s%s %-15s%-28s%-10s%-10s%-7s%s Local_AddressRemote_AddressTx_QueueRx_QueueStateUid%08lX:%04X %-28sNot_Connected%08lX:%02X%02X%02X%02X%02X%02X:%04X %08X %08X %02X %03d %-11s%-13s%s Router_NetRouter_Node%08lX %02X%02X%02X%02X%02X%02X %-13s%s DirectlyConnected<7>IPX: bind failed because port %X in use. <7>IPX: bound socket 0x%04X. ipxipx_interfaceipx_route<2>IPX: Unable to register with 802.2 <2>IPX: Unable to register with SNAP <6>NET4: Linux IPX 0.38 for NET4.0 <6>IPX Portions Copyright (c) 1995 Caldera, Inc. ipxrtr_route_skb_R52c57ea1ipx_if_offset_R08de4f2cipx_remove_socket_R64eb3d70ipx_register_spx_Raf34da5aipx_unregister_spx_Rb5e39e64$ $ $7GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.14-5.0using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ksymtab.rela__ksymtab.kstrtab__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo47!C ,7T3\` ?8JG"U$b%0r't't(d 4D )8)l*$X+|,hL, ./\!0.1H8$ Gx \ p  x  6p 7 #H[ix4L ) B[r7l&XKh7Xt D ,=W, a6H(  ! ( :4< W t      < ' ? U v        # ; ` f-t8 n | 5,     D ( P8 v 4D  af_ipx.cgcc2_compiled.ipxcfg_max_hopsipxcfg_auto_select_primaryipxcfg_auto_create_interfacesp8022_datalinkpEII_datalinkp8023_datalinkpSNAP_datalinkipx_routesipx_interfacesipx_primary_netipx_internal_netipxcfg_set_auto_createipxcfg_set_auto_selectipxcfg_get_config_dataipx_destroy_socketipxitf_clear_primary_netipxitf_find_using_physipxitf_find_using_netipxitf_insert_socketipxitf_find_socketipxitf_downipxrtr_del_routesipxitf_device_eventipxitf_def_skb_handleripxitf_demux_socketipxitf_adjust_skbuffipxitf_sendipxitf_add_local_routeipxrtr_add_routeipxitf_rcvipx_device_nameipx_frame_nameipxitf_insertipxitf_create_internalipx_map_frame_typeipxitf_createipxitf_deleteipxitf_auto_createipxitf_ioctlipxrtr_lookupipxrtr_createipxrtr_deleteipx_set_checksumipxrtr_route_packetipxrtr_ioctlipx_interface_get_infoipx_get_infoipx_rt_get_infoipx_setsockoptipx_getsockoptipx_createspx_family_opsipx_dgram_opsipx_releaseipx_first_free_socketnumipx_bindipx_connectipx_acceptipx_getnameipx_sendmsgipx_recvmsgipx_shutdownipx_ioctlipx_family_opsipx_8023_packet_typeipx_dix_packet_typeipx_dev_notifieripx_8022_typeipx_snap_idipx_proto_finito*ABS*sysctl_net_ipx.c__ksymtab_ipx_remove_socket_R64eb3d70skb_copy_datagram_iovec_Rc93add3cdatagram_poll_R663c8718__kstrtab_ipxrtr_route_skb_R52c57ea1skb_copy_R3cdec903__this_module__kstrtab_ipx_unregister_spx_Rb5e39e64__copy_user_R9c5239ebsprintf_R3c2c5af5kmalloc_R93d4cfe6stack_top_Ra6cab6a7ipx_register_spx_Raf34da5akfree_s_R06d9dd5dsock_alloc_send_skb_R030c0937__module_using_checksumsskb_over_panic_R255f64c2dev_add_pack_Ra22647e1cleanup_moduledestroy_8023_client_Rd5eead9e___atomic_submemcpydev_get_Rf0e8a136.udivmemcpy_fromiovec_R9fb3dd30alloc_skb_R74d0de82.divregister_netdevice_notifier_R63ecad53__kstrtab_ipx_register_spx_Raf34da5adestroy_EII_client_Re8928c91init_modulecall_out_firewall_R812376c4make_8023_client_R9b8a9cccdev_queue_xmit_Rb52a9338__ksymtab_ipx_unregister_spx_Rb5e39e64ipx_procinforegister_snap_client_Rf7240e06sock_rfree_R18876121printk_Rdd132261sock_unregister_R2394a062ipx_tableproc_net_inode_operations_Ra76a554eipx_if_offset_R08de4f2cmake_EII_client_Rd3b1146dsock_no_listen_R8c3c2cd1sock_init_data_R90762b82__ksymtab_ipxrtr_route_skb_R52c57ea1sk_alloc_Ra6b9832amemcmpsk_free_R6177c809ipx_unregister_spx_Rb5e39e64sock_no_socketpair_Rf8d4fbd4register_8022_client_R4f1937ff__kstrtab_ipx_if_offset_R08de4f2cproc_register_Rf7ecbcfd__bzero_Rdd42e263proc_unregister_Rc5c75fc4cap_bset_R59ab4080ipxrtr_route_skb_R52c57ea1sk_run_filter_Rd3fb963dsock_no_dup_R60f7e8c8unregister_8022_client_R7acef15dsock_register_R64c8ebc7__kfree_skb_Rcbfaf351skb_clone_Re252be3dipx_remove_socket_R64eb3d70sock_no_fcntl_R754b1ee6call_in_firewall_Rdd4fef54skb_free_datagram_R01886d6b__module_kernel_version__ksymtab_ipx_register_spx_Raf34da5a.uremipx_rcv___atomic_adddev_remove_pack_Raaefb398ipx_proto_initdev_ioctl_R387c78a5skb_recv_datagram_Rc5078a9f__ksymtab_ipx_if_offset_R08de4f2cunregister_snap_client_R9abefc50ipx_if_procinfounregister_netdevice_notifier_Rfe769456__kstrtab_ipx_remove_socket_R64eb3d70call_fw_firewall_Rbaf844f8ipx_rt_procinfoproc_net_R5882e383__memcpy_Rbfaaaa73ELFl4(㿘  `'<  +?` "?@  &@?@@   <    @ @@?㿘 `!7? @  &@/?@ @ "   <   ? *` "@  *  0@?@?@㿘 <` @ ? #c `X%? %? b w#:#x #.cS# 0# %#\5#񀦀"G?#4 #򀦀,Ho`@```@ Ho`? `@`%? @ *#Ho`? @``@ `@$  @?   * "   %?@   `    #`` "c       @Ho``@` ?ꀦ }`Ho`#  # @@`$?"`#  "  4 Ho` @ `?$c  "   "  `@@4*? @ ?  "  }  ` " @ ?  ` "  @?@ 㿘 " " @  @  㿘`      ؒ 2&`  㿘`@  `? <` @ ` ,&@?00#`X30c:5<## #"<U0#" <0#"x<I5 @    2E? >䰒 9H/`@ 쀦@`'@ @  ?`@  '@?0 H/`@ *@  <   @@0{5 @    2Ѱ? 3䰒 H/`@'  " '@ $'  < ? 7 ? .@  (@#` @    2x?ƒ q䰒 l찒 @0bH/`@ 쀦@K?@ @0D<` `    ` @    )?H/`c@'@'    ` "  @?㿘# `X# Z#"?` #8#=i #7`=  #"Q` # U#򀦀4#0#";` 0#D0# A/`0#)9 ` `` `  ` &? <`  ?   ` "  @ ???㿘 @  ""`&`X @`   `?㿘`X@ ` @`  ` 㿘`@ @ 0#Ho``@!`@$ $ `    @ @?㿘@ 01.01kernel_version=2.2.14-5.0using_checksums=1?<7>OPROMSETOPT%s %s='%s' 2<6>openprom_sunos_ioctl: unimplemented ioctl <6>openprom_sunos_ioctl: cmd 0x%X, arg 0x%lX <6>openprom_bsd_ioctl: cmd 0x%X openprom_ioctl: cmd 0x%X, arg 0x%lX openprom<3>openprom: unable to get misc minor options<3>openprom: unable to find options node GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo__ex_table.rela__ex_table.fixup.rela.fixup.rodata__ksymtab.comment4`!!  ,P2(H =BH2Q,\)0 l< s)0   HJ=<0  l " -T5 =48R _l`fho 4} @lL@<<  /4:@Tas(9Ja} );IUmHopenprom.cgcc2_compiled.copyingetstringscopyoutcnt.324openprom_sunos_ioctloptions_nodeintreegoodnodecopyin_stringcnt.333openprom_bsd_ioctlcnt.336openprom_ioctlopenprom_lseekopenprom_openopenprom_releaseopenprom_fopsopenprom_dev*ABS*__module_kernel_version__module_using_checksums.div.urem.udivstack_top_Ra6cab6a7__ret_efaultkmalloc_R93d4cfe6__bzero_Rdd42e263__copy_user_R9c5239ebkfree_R037a0cbasaved_command_line_R04f5f35fprom_getproplen_Rff8b6749prom_getproperty_R156810c5__memcpy_Rbfaaaa73prom_nextprop_R2bf482aastrlen_R97255bdfprintk_Rdd132261prom_setprop_R4bad614b__prom_getsibling_R8da618dc__prom_getchild_R8ca0e65dprom_finddevice_R98d4365estrcpy_Re914e41eprom_getchild_R5ee0a984prom_getsibling_R3b3fe8cbprom_root_node_R5ce875cf__this_module___atomic_addkfree_s_R06d9dd5d___atomic_subinit_modulemisc_register_R409265ddprom_searchsiblings_Rdc0ba024misc_deregister_R27bbaf54cleanup_module% % `'|(% )*'$(0% L% *% %  )  + , X ` | ,4-d./0$.h0p        ( (1   ,234L5+ 06   01 0( < @ `D `L1\*789 9   <' \% d% |) *   <  @% D% \) , * ) @' X* - ) % ) * % % ,) / 0 % $% L) d) t% x% ) *82h*p*% %   % % ) 304\ p t x |1              1'9 9 : :  ;T<\: `: l= < <? 1 9 9 7   @   (  ,10  4AL <PAT <$L@ D8&d lELFp4(㿘@ @ @ 㿘1 2 ?` @`! ` `@`* *  * @$ @ &  㿘@ ` @`  `"` 㿘! @`* *  * @$ @㿘 ?〦  㿘#1 # # )=< #"< =` `@ (  (  ?` ? &0 㿘@   "#  @"㿘@ 㿘@ <Software Watchdog01.01kernel_version=2.2.14-5.0using_checksums=1parm_soft_margin=i<2>SOFTDOG: Initiating system reboot. WATCHDOG: Reboot didn't ????? watchdogSoftware Watchdog Timer: 0.05, timer margin: %d sec ?GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4! 0 ,2 H =BHKQY`T   lw`  =  5 &2,@,MH] Pj\0x(  0<l  8 :HVh|pH softdog.cgcc2_compiled.soft_margintimer_alivewatchdog_firesoftdog_opensoftdog_releasesoftdog_pingsoftdog_writeident.334softdog_ioctlsoftdog_fopssoftdog_miscdev*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_soft_marginprintk_Rdd132261machine_restart_Re6e3ef70__this_module___atomic_addwatchdog_ticktockdel_timer_R5811f067jiffies_R0da02d67add_timer_Rbea990b2___atomic_substack_top_Ra6cab6a7__copy_user_R9c5239ebwatchdog_initmisc_register_R409265ddinit_modulecleanup_modulemisc_deregister_R27bbaf54   ( (0 4 D H T!d" h" t#|  $ $ % " #"  &  " " #  $ ($ <$ L%' '    (8' <' t lx*| l"   "    X"  X) l- l8\DL,Tp Ht0\TELF 84( 㿘` @` ` 㿘 \ =#P @2P"@  `& ` @`  ` 㿘 \ `@?HHo``P `A A" P`+?ꀊ(hh` ?6`P&` @  ?@ & 2 $$ "  $  $ ` 㿘@@ ?㿘`o h@`h 㿘@`"a񀦀  ""! ?Ӑ!򀦀 ?  Ւ ْ 㿘`&  (@  & \@ ( \ @   $@  \@  $ ?@ \ & ` & @& & & @ P@6 P&  㿘`\  `@P A " `& & l@` ` "@&` 㿘 \ \ @ ^ @@@ &   &   @ &    &   @ &    &   @ &    &   @ &  $ $ & $ ( (@ & ( , , & , 0 0@ & 0 4 4 & 4 8 8@ & 8 < < & < @ @@ & @ D D & D H H@ & H L L & L P P@ & P  2㿘@ 㿘 `@ @ ? 㿘!  \@@@@` @ \$ \01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout<7>%s: releasing `%s` bond%dGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4L!<@  ,2|  =hBhH2QY=b @  , 4$4/B(O \ k(vl  !/ASdwP<bonding.cgcc2_compiled.bond_openbond_closeset_multicast_listbond_enslavebond_releasebond_sethwaddrbond_ioctlbond_xmitbond_get_statsbond_probedev_bondbond_name*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_addkfree_R037a0cba___atomic_subkmalloc_R93d4cfe6__bzero_Rdd42e263printk_Rdd132261__memcpy_Rbfaaaa73dev_get_Rf0e8a136bond_initether_setup_R681499f5dev_queue_xmit_Rb52a9338init_moduledev_alloc_name_R0bd022a8register_netdev_R8ca37b5ecleanup_moduleunregister_netdev_Rc734b91a  p  x ! " #,$   ! ! 0!8 < @ D 4H L (T X 4\ ` (t&'!%    )*   ,(08,ELF4(  , ! " (" ," * " " " $㿘  ( *#  (  22 " " &  &  #   & ( * @  $@ `8& $Ȑ   <"@ 8"` D"` @"`  4"` 0"` "` "`㿘& ,6 㿘  L " H@& L H @& H@` @`  `㿘`2_  2[   2W  6  2R  `& *` €#  #)  "] " Ϡ  * P@  ' @ P.`@ & L` @`  `@, & H  & H`P&& . & . 㿘 㿘 㿘2@ @ 2< ` 28 `6` 23  ` 2. `  H `%     H *2   # L* 2  L@ 2`. &  . ) 㿘 㿘\ 㿐``*  ߀   *'?    @.`...2 . .`e`,`@ )@L* `)@`     :"*`@: $ 7`$(@@ 4`.   ,`"   *?, L *`  23 ;c2 3 3`#@H$(`,`2 `4@$(@@ 4`.   ,` ?<$ 8` $<$$84 $  !$*@ 4`.   ,`   ? * @2 .    , 2 @0 4`$4$0D`$D$@㿘  㿘` `*   @ `  ` $     @?  & 6 ... !  @* `5-!  = 8 { D 8    &  @  @?   H*  @ @$    @? L* ?*` +8 L`+?."G :C ** L+       :# + @*,  `*` `23`#2`3`2"  H)&  *@,  2  `". R ?&  D @ 8 < `& @& 8& D& < "     @㿘@ @ 㿘@ 01.01kernel_version=2.2.14-5.0using_checksums=1bsd_decomp%d: bad sequence # %d, expected %d bsd_decomp%d: bad CLEAR bsd_decomp%d: bad code 0x%x oldcode=0x%x max_ent=0x%x explen=%d seqno=%d bsd_decomp%d: ran out of mru bsd_decomp%d: peer should have cleared dictionary on %d <6>PPP BSD Compression module registered GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 H!X  , |82  = B H 2Q2Y2=ob   8%8/D>@H\Q[hj{(($ 8  "2BP^p , 0bsd_comp.cgcc2_compiled.bsd_clearbsd_checkbsd_comp_statsbsd_resetbsd_freebsd_allocbsd_comp_allocbsd_decomp_allocbsd_initbsd_comp_initbsd_decomp_initbsd_compressbsd_incompbsd_decompressppp_bsd_compress*ABS*__module_kernel_version__module_using_checksums.div.urem.udivvfree_R2fd1d81ckfree_R037a0cba__this_module___atomic_subkmalloc_R93d4cfe6__bzero_Rdd42e263vmalloc_Rd6ee688f___atomic_addprintk_Rdd132261init_moduleppp_register_compressor_R9682e733cleanup_moduleppp_unregister_compressor_Ra1b928df| ! ! "0 H4 HHhLhPhThXx\`d#$%! ! & % T \ `'  0  0 ` P h P p' x  '   '   '  )    ' $  4 8+ < h\ @ \$(@, 04ELF4( 㿘` @` ` 㿘` @` ` 㿘`&  \@  & \?@ \ & `& @& & @ P?Ē`*@6 P&  㿘 p @2`\@`\ " \ @ "   \㿘@ 㿘 `@ @ ? 㿘! @@ \$ \01.01kernel_version=2.2.14-5.0using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeoutdummy%dGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!   ,$2 p  =BH 2QXY =]b`   ( 4#44/hBXM\]dis~  p 5KxPWp(dummy.cgcc2_compiled.dummy_opendummy_closeset_multicast_listdummy_xmitdummy_get_statsdummy_probedev_dummydummy_name*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_subdummy_initkmalloc_R93d4cfe6__bzero_Rdd42e263ether_setup_R681499f5__kfree_skb_Rcbfaf351init_moduledev_alloc_name_R0bd022a8register_netdev_R8ca37b5ecleanup_moduleunregister_netdev_Rc734b91akfree_R037a0cba  8 < Ht x    \ 4 h \ 4 h,h|    !"  $%,dELF4( 㿘    " "    p@2$@$`` $$ d&      p@2$@$`` 㿘 ` `     ' @@ "/ ``? ? @ ` &`&``""  , "``\ ` &`\&`&` @@* `"* $ " H" " D  ̐ %`%@㿘 㿘 `$ $ \`Z @"$ \$  $  ``@     `P #  `h@   , g % ? c   㿐`\ `(  2@'`,'`( &` 0`"  '   '5* * `" *  *@  D*`"@ - @*` `@  &` `  %  ̐ %  ؐ %   % ` $H$$$D`  4 y%`< @@   `? ? @   $ $ # $  \  @ $ \$  @  $H$$$D`  4 %``\(7 `$`\1$`@     `$ $ "  $  \ @ $ \$ @ @`` $H$$$D`  4 %` ,`i$``4`t@ `%  4  D*'`(&`  2@'`,㿘@  \֒@ 㿘 \N 㿘`\`"`$d,   p@2$@$਒   `$$`$ ! `H" '!@@ $ `  @ &`$ f&`H`$ @@@ Y `@@8"@?@ "N H` \`d` ?@ (@* $ " *  %@@?# # # # # #     ?3 3 3 3 3   * @3  * 3  *` 3  %@ (" 2&`$ 㿘  \ |`& \& @   \? |  & \& @  .2`  *`*4 4 `o `o `h@`P  `o@6`Z, `o`@&,  `Z`o@`Z`Z 㿘     ,,  @  @@ `o @`h 㿘`` `? .` *4` o`@ h o @ 㿘`o @8?" T  \ p Z'  'Ԁ O"``"G@```@ @` 22@ @!`!А `'Ф"` #)@`@ \% $!  @" ?? d  <" ??` `!@   g 4!T` `@ 4!` `@ $!` `@ !$!#"4!"($!! 2` $!` `@   !@ ! ,! ,! ,! ` ,!  2 ,!,!! ` `@   @ !$!@P$!!A@$$ D@9 $!  !h   ,@  :@  $ @ ! $$$6!""  #4 *`# $!  $!*` @2`$!``0`@!#`4! `0@ $!  @$ $!"$!`4`0 @ $ `4@`0 @ $ `4@!`0 @ $!$!#%753/)9!#;< $!! !* @ `8 o$j$ $ $ $#`,3 2'2  2","( 22! @ $! ` 2` $! ` @ "   *2`$ ` %%%@%%`  %`-= @@  @ À @ `  `%T%%%5Z%%    J2"`,"`( 22!%!) 3*! **!" !"` ߰  @*   *   @*   *h,`,@    ,@!   2 $` $`   2"`,"`(  " ,2   2"`,"`(`0  #@  $`0#2@ `0`0 !  4" , " ( ($`4  2$@ `  4"`,  ? @ !$ " @ %4`&`$! @`@`'Ѐ`  㿘"`@ 㿘`   `a@``@ $`L*l,H<)+,H *<J :u :u :--8,(8-8w9 2Dഺh-8;dOTz .* J&w58hw98 `8`:*J'8.r zJw58hw98 `8`:z*y<"8z;d:jG  p :Lu :Lu :-8,(8-8w9 2Dt:h-8*l,(zyJ# ĄJ6rlw58hw9JƸ0 ń6:B$6:R 2 2 62rH2rP *6rQ * *a . .p & &Jvƴpvƴ0',J%h "Jvƴpvƴ0ؖJ 2 2,w58hw9BȦ:h8hu9u(80Wv0uuƴ_v &%)4hĜr.j$,p0pw9w8ƴwv((.r0v8p8Hƴp lPX),<z :z;d:jG  :JyOTw58hw98 :X28X:z2-8,(8-8w9 2D:h-8*l,<u. :zu :z;d:jG  p :.OTz4r :yyz8pƴpyy8p4pJ6ry 6-8,(8-8w9 2D8:h8-8J2rJ(y 2(yyL<"8u :u :z;d:jG  p :-8,(8-8w9 2D̳:h-8 +yJw58hw9y8 :`ô68`:# ė6JԅJ6rw58hw9Ƹ` ń6:J| 6:R 2 262r2r *6r * * . . " " %Jvƴpvƴ0 ',J%h " Jvƴpvƴ0ؖJ 2 2  w58hw9BȦ:h8hu9u(80Wv0uuƴ_v & *4hĜr.j p$,p0pw9w8ƴwv((.r 10v8p8Hƴp lPX*,<yyƴpz y8z yz 6r ,,(-88-8w9 2D h-8+ 8,L<,),*l,*,+<-8-<<". >|t :)G8oPϸ?Ümt :?`w9 \p4`` h h \ \ h hPP<< <<  @`(($$DDdd,`0LhT 2 ' : -.u.p.̆4.L 6 .p.-X::8`@ TT TT TT TT@ @, @@, TTTT@,@, TT TT TT TT@ @,  @@, 5(85Dwp>o\8o\o\t).5$8 6. :.48. *5(6 :蕖䖖d腖䆖 "6  2u6866vƴ`w58j8`8,p :5,5(oL6r4oD5(5(( 6),(-85$8-8w9 2D(h(-8 :)-8-<:J ,(w9:h *'( :-.̆4u.p..L 6.p.-Dv6p:ƴp68-<8 :D,-<,-<< :!4#8 Ơ:'8:j <-@660-@6< *'( :-.̆4u.p..L 6ٶ.p.-Dw)h8h:8<-Dv`ƴp <2 :8Ŵ 6 : 62 82 2 *ZD <.2ԗH, .4X /l? /; 2(&0&1, 1zx2臖<"Pq :Uqlqw98h:2ĆŴt2Ї2oDw9:h .28 ؆2A2qzx'8 6qv :2vv2w :1&2zx022& .2:2 62 :2 6 622Ć:( ,$2jpw18`w9880 .6rĄ. 6r * *"6rL6rT ."6rU . .e & &p vƴpvƴ8'%h "vƴpvƴ8 2 22( 02$6rw58hw9Ÿ8 26rĄ26r * *"6r6r 2"6r 2 2 & & Evƴpvƴ8'%h "vƴpvƴ8 2 226 . 26866$0:Z 2 .$44 :2ܓCh " 2v 8  Lƴ`w58j8`808z(&0 2ԃ  5 2822 p20:2p282q :,(-88-8w9 2D:h-8qq8:jqqqqq6rG 2 6%qq :%yu :%xu :%x%122oT 2` oThoX :|/l&2zp$ ."z2zp22z,8z(8$<@D68`66866oP28`22/8222 >~t 4~t % >|t :&2oX8 .! 2-8,(8-8w9 2D h-8" oXoT2.. :!8,zhC "!|. 2!L.8..!|z(vƴ`w58j8`808&0 2!x.20:2!wp>!@y8yyq :!,(-88-8w9 2D!:h-8qq8:j"qqqqq6rG 2 6%qq :%yu :%xu :%x%1z8oP22(22z,8$z 2"z*Z& 2j&!268`6686628`22822 2#E2zp8#H2zpoX .!#,(-88-8w9 2D#h-8"#oXoT2.. :$8,zhC "$x. 2$L.8..$xz(vƴ`w58j8`808&0 2$t.20:2$wp>$@y8yyq :$,(-88-8w9 2D$:h-8qq8:j%qqqqq6rG 2 6%qq :%yu :%xu :%v .!%,(-88-8w9 2D%h-8"vw%vv%zx%1.2q :&,(-88-8w9 2D&:h&-8z:j&AŴ8Z&HzŸzzz(v52p섦z,z<@Dpzz8Xz<zx022<"P2 :*q2Ć6:2'< 26 :2'< 2 2*p22Ć:( ,$2j((w18`w9880 .6r'Ą. 6r' * *'"6r(6r( ."6r( . .( & &(( (ivƴpvƴ8(Ж'%h "(vƴpvƴ8( 2 2*p2( 02$6r)w58hw9Ÿ8 26r)LĄ26r)P * *)]"6r)6r) 2"6r) 2 2) & &) )vƴpvƴ8*d'%h "*avƴpvƴ8*h 2 2+26 .* 2*6866*0:Z* 2* .*44 :+2ܓCh "+ 2+Iv 8  +Lƴ`w58j8`808z(&0 2+ԃ + , 2822 ,(20:2,(282q :,e,(-88-8w9 2D,d:h-8qq8:j,qqqqq6rG 2 63qq :31u :30u :303122oT 2- oT- oX :-4/l4D2zp$ .0~t-~t- >|t :4D2oX8 .!.H2-8,(8-8w9 2D./y@y8yyq :/,(-88-8w9 2D/:h-8qq8:j/qqqqq6rG 2 63qq :31u :30u :3031z8oP22(22z,8$z 20z*Z32j3268`6686628`22822 202zp812zpoX .!1D,(-88-8w9 2D18h-8"1HoXoT2.. :2t8,zhC "20. 21L.8..20z(vƴ`w58j8`808&0 22,.20:22twp>2u@y8yyq :2,(-88-8w9 2D2:h-8qq8:j2qqqqq6rG 2 63qq :31u :30u :3v .!3|,(-88-8w9 2D3hh-8"vw3vv3zx31.2q :4D,(-88-8w9 2D4D:h4D-8z:j3Ŵ8Z4zŸzzz(v52p섦z,z<@Dpzz8Xz<" zp .7lz2zp22z,8z(8$<@D68`66866oP28`22/8222 >~t5~t5  >|t :;p2oX8 .!5x2-8,(8-8w9 2D5lh-8"5|oXoT2.. :68zhC "6d. 26L.8..6dz(vƴ`w58j8`8H8ܖ&؅0 26`.20:J6wp>6@y8yyq :6,(-88-8w9 2D6䴺h-8qq8:j7qqqqq6rG 2 6:qq ::au ::`u ::`:1z8oP22(22z,8$z 27z*Z;2j; 268`6686628`22822 28-2zp8802zpoX .!8t,(-88-8w9 2D8hh-8"8xoXoT2.. :98zhC "9`. 28L.8..9`z(vƴ`w58j8`8H8ܖ&؅0 29\.20:J9wp>9@y8yyq :9,(-88-8w9 2D9ഺh-8qq8:j9qqqqq6rG 2 6:qq ::au ::`u ::v .!:,(-88-8w9 2D:h-8"vw:vv:zx:1.2q :;p,(-88-8w9 2D;ph;p-8z:j;)Ŵ8Z;0zŸzzz(v9h8zz=@y8yyq :=,(-88-8w9 2D=h-8qq8:j> qqqqq6rG 2 6>qq :>qu :>pu :>v .!>,(-88-8w9 2D>h-8"vw>vv>zx>1.2q :?,(-88-8w9 2D?h?-8z:j?9Ŵ8Z?@zŸzzz(v9h8zzA@y8yyq :AQ,(-88-8w9 2DAP:h-8qq8:jAlqqqqq6rG 2 6B1qq :Au :Au :B)v .!B,(-88-8w9 2DBh-8"vwB vvB0zxB41.2q :Bt,(-88-8w9 2DBt:h-8<2ԗ.2ԗ/l2ԗ/2ԗ02ԗ12ԗ12ԗ2(<:6rD <. 2C 6C4. 8. . D:bD 6D 2D<5$oD5(250HE 2J3N4 Wd4<"u :E-uEDvw98h: :E\5H3I50oT :EoTEoX :E4 I505H5,(4(262oP6 5T5T4508$<@25PD5L5@8h5@5(.8h.2 :I >~tF~tF >|t :I85XoX5T8 .!G5X-8,(8-8w9 2DFh-8"G oXoT5,6Ą:JGq65Tv5TG9ƴp5Hwp>8$Gi8`n3(5D6 :G86 86 6 G5(8Ih5D :G65<5(85<5<686vu8v:jHvvvvu6rG  2HuvHr:JG  :H,(-88-8w9 2DHh-8 *Ih5(6 :I<앖薖^ܗ셖膖 "I,6  2I6866I,vƴ`w58j8`8,p :G5,5(oL6rI\4oDI`5(5(H( 6I,(-88-8w9 2DIhI-85$5(oD26rI50wp>I@y8yyȇ<"u :J-uJ@vw98hoT :Jd5HoTJpoX :J4 N505H5,(4(262oP6 5T5T4508$<@25PD5L5@8h5@5(.8h.2 :N >~tK~tK} >|t :N85XoX5T8 .!K5X-8,(8-8w9 2DK䵺h-8"KoXoT5,6Ą:JLY65Tv5TG9ƴp5Hwp>8$LQ8`n3(5D6 :L86 86 6 L5(8NP5D :L65<5(85<5<686vu8v:jMvvvvu6rG  2MiuvHr:JG  :Mi,(-88-8w9 2DMhh-8 *NP5(6 :N$앖薖^ܗ셖膖 "N6  2M6866Nvƴ`w58j8`8,p :L5,5(oL6rND4oDNH5(5(Ml( 6N,(-88-8w9 2DNhN-85$5(oD26rN50wp>N@y8yyȇ<"5H5,(4(262oP6 5T5T4508$<@25PD5L5@8h5@5(.8h.2 :SL >~tP~tO >|t :SL85XoX5T8 .!Pd5X-8,(8-8w9 2DPXh-8"PhoXoT5,6Ą:JP65Tv5TG9ƴp5Hwp>8$P8`n3(5D6 :Q86 86 6 Q,5(8R5D :Q(65<5(85<5<686vu8v:jQxvvvvu6rG  2QuvHr:JG  :Q,(-88-8w9 2DQܴh-8 *R5(6 :R앖薖^ܗ셖膖 "R6  2Rm6866Rvƴ`w58j8`8,p :Q5,5(oL6rR4oDR5(5(Q( 6R,(-88-8w9 2DShS-85$5(oD26rSL50wp>SM@y8yyȇ<"5T5L5,8v.h<5PƬh@6D65@8`5@5(28h2. :WP >~tT~tS >|t :WP85XoX5T8 .!Th5X-8,(8-8w9 2DT\h-8"TloXoT5,6Ä::T65Tv5TG9ƴp5Hwp>8$T8`n3(5D6 :U86 86 6 U05(8V5D :U,65<5(85<5<686vu8v:jU|vvvvu6rG  2UuvHr::G  :U,(-88-8w9 2DU೺h-8 *V5(6 :V앖薖^ܗ셖膖 "V6  2Vq6866Vvƴ`w58j8`8,p :U5,5(oL6rV4oDV5(5(U( 6W,(-88-8w9 2DWhW-85$5(oD26rWP50wp>WQ@y8yyȇ<"85,5T5L'8*rZLoX .!W,(-88-8w9 2DW̵h-8"WoXoT5,6:2XA65Tv5TG9ƴp5Hwp>8$X98`n3(5D6 :X86 86 6 X5(8Z85D :X65<5(85<5<686vu8v:jXvvvvu6rG  2YQuvHr:2G  :YQ,(-88-8w9 2DYP:h-8 *Z85(6 :Z 앖薖^ܗ셖膖 "Y6  2Y6866Yvƴ`w58j8`8,p :Xx5,5(oL6rZ,4oDZ05(5(YT( 6]]w)p:(v5T5P8h0p<@Ɯh6D5@8X5@5L5(5P68X6 :^< >~tZ~tZ >|t :^<85XoX5T8 .![X5X-8,(8-8w9 2D[Lh-8"[\oXoT5,6:2[65Tv5TG9ƴp5Hwp>8$[8`n3(5D6 :\ 86 86 6 \ 5(8]5D :\65<5(85<5<686vu8v:j\lvvvvu6rG  2\uvHr:2G  :\,(-88-8w9 2D\г:h-8 *]5(6 :]앖薖^ܗ셖膖 "]|6  2]a6866]|vƴ`w58j8`8,p :[5,5(oL6r]4oD]5(5(\( 6]-8,(8-8w9 2D]:h]-85$5(oD26r^<50wp>^=@y8yyȇ<502503504 504<2 :8_,Ŵ 6_, :_- 6_H2 82 2 _P*ZD <5`B0Hf5`i5`kP5`ax5`b| 5`f5얓i5얓kP5얓ax5얓b| 5얓( :a(aw9B(@;(@;(zzzzPB0<o4 2av2v8ow9 :a6vv8ow9 :a5B0:RG  :bBBvv8ow98bh3(2 :b< 6b@ . .beBBvv8ow983(B(<BG  p :OXBxBzvv8ow983(x@w-w8ƴwv8dƴd8h/((<"BD 䗓 "BT :5$6@t%802vv0u8ow8+(2u8_w8'($402vv8ow8'($202vv8ow8'($002vv8ow8'($.02vv8ow8'($,02vv8ow8'($*02vv8ow8'(02$(v1v08gw8'(@|# LܗL#PDX4Bd@|DL@|@t @0p8&w9w8ƴwwp>G  p :<BBvv8ow983(x02vv$~%#h0u8ow8+(2u8_w8'($|02vv8ow8'($z02vv8ow8'($x02vv8ow8'($v02vv8ow8'($t02vv8ow8'($r02vv8ow8'(02$pv1v08gw8'(4ܗ4#,X,<#$$BT48BDBd@|$4ȗ "pBT'8BTBD<o4Bd6r6vv8o@|w9:j4h@tOX,bv0Ŭp&w-w8F1ƴwv0tƴt0h/(BDH@|8@t<"BX : :BXBX :#B`#f@x02vvt%t 0u1u(|8ow8% +(2|8Ww8(#02vv%P8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv1v08gw8(&&h8Gw83(.v8ow8(#d.vv8ow8(#b.vv8ow8(#`.vv8ow8(#^.vv8ow8(#\.vv8ow8(#Z.vv8ow8(.#Xuu8_w8(XBX%8$BXBdȗ "BX8BXBX :0p-8,(8-8w9 2DP:hP-8BD<"0o4Bd6r0:@|w9w80w@tƴhv1b8h8&w9w8ƴwwp>G  p :4@xƘ88h8&w9w8ƴwvƴd6ZG  p := . .uB|B|vv8ow983(xB``@xOX@t@|@| rv0Ŝ0ŨX&ttss哖(ru(F1E)8 p &s!ƴOv0Lƴ<0h/(.s̃ԃ(L87w9vv8Lƴp("vv87w98<(p#("@|8ow9ss8Lp#"wws#(BDH@|8@t<"BD 䗓 "BT :'8BT#B`$fd@x$ 02vvttt 0u18ow8'(2u(8Ww8(#02vvd8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv1v08gw8(&h8Gw83(.v8ow8+(#dd.vv8ow8($bd.vv8ow8'(%`d.vv8ow8+(#^d.vv8ow8($\d.vv8ow8'(%Zd.vv$P8ow8+(#X.duu8_w8(X#8'$'BX'Bdȗ "]BX8BX-8,(8-8w9 2D䴺h-8@xOX8;w9w8ƴwvv5.`,`vv8ow9w98@8w9w8ƴwsUd.`vv8ow9w98@#w9w8ƴwvhw8h'8:|xd.`vv8ow9w98@d;*vv8ow9w9` 8`w9w8ƴwvxwƸhd$h,<"@ :<BBvv6xBD8ow983(O\B\:8w88w9 2pH6r H6r . .6r6r .6r . . * *Yz :d H:@w9`8`w9w8ƴwv 6d `26xO\w88w98 ƴp6OXw9ƴp "BlG  ppB\-8Bl,(8-8w9 2D:h-8BD<ŠpnP 6m82 p"r]& 6@0 X"Z <xؗ@"r@nP܇:zz@@@ՠnP@;dB\,(-8:LBD8-8w9 2Dhh-85B0<"$#T d8$p8&OXw9w8ƴwvƶt- 6-w5X8Xv9v0ƴgv 61Ƹ,0ƸOXOX4*r];<(;6r@w58hw9;8H0 4*<6r .* 6r . .4"6r 6r ."6r . .%44 &@<< &;vƴpvƴ0'T;LD%hLD ";vƴpvƴ0; 2 2-'T$pT:TTpOXT< &OXJ̓|&6|:2JOX|B-t# H8|p8&OXw9w8ƴwvƶti 6iw5X8Xv9v0ƴgv 6mƸ,lƸOXOX4*rAńt<t46r  6r 2 24"6r6r$ 2"6r% 2 25 . .@t&2#&2@|@tƴh8h8&w9w8ƴwwp>G  p :$2|8p$p8&w9w8ƴwvƴ\6bG  p : 2 2# 8p8&OXw9w8ƴwvƶt 6w5X8Xv9v0ƴgv 6Ƹ,ƸOXOX4*rL`L@|@tĤ244Ŝ8ŨX&w-w8t-t ssĤ0<|ƴwĘH<&G  p :}% @,0Bu8$ .0w9w8ƴwvƴtG)6rG  :t0  :Š@@|OXŘX&w-w8bv0F10Lƴwvw)w9ƴL8h/(@t(PŬP&w-w8u-u(ƴwvƴt0h/(.vv8Ww98Lƴp(OX @OX@|@tbv08pŬp&w-w8F1ƴwv0tƴt0h/(# 8$p8&OXw9w8ƴwvƶty 6yw5X8Xv9v0ƴgv 6}Ƹ,|ƸOXOX4*r;LD@#@O\\@LD4<2rw18`w9800 *\6r@* 6rD . .Q<6r6r .6r . . " "\\ 4vƴpvƴHp'd<4LD%hLD "q4vƴpvƴ0 2BBvv8ow983(OX(rw8G9(O\L#@L<"`0`Ÿh 2d,w9w8ƴwvƴt 6G  p :a0 2L@t@|BT(ĕ# ܗ#8X4Bdȗ ":BT'8BTBDpBD6OX;pvv8ow8v9.`,`vv8ow9w98@8w9w8ƴwv.`vv僖8ow9w98@$`w9w8ƴwvhw8h'8:&8#.`vv8ow9w98@#*vv僖;p8ow9w9` 8`w9w8ƴwvw%Ƹh(h,<"p% *ø(Pp8&OXw9w8ƴwvƶt= 6=w5X8Xv9v0ƴgv 6M:ZH,OXOX:Zñ;6vv8ow8v9.`,`vv8ow9w98H8w9w8ƴwv!.`vv8ow9w98H$pw9w8ƴwvhw8h'8:&D.`vv;8ow9w980:*vv僖;8ow9w9H 8Hw9w8ƴwÕvwƸh(h0(BTB`%# @x02vv0u8ow8(2u8_w8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(02%v1v08gw8+(#PX#8'$4'BXBd' "ŕBX8BX-89BD,(8-8w9 2Dijh-8<%@tOXB`8ju0 *H0w9w8ƴwvƴtG-6rG  :L(0(0B`OX@|@tP(&t)t bv0ƸpĤh&vvw9w9F1ŬGuŬD8X+(&u0Du8ow98l0p'(&vv8_w98Dƴp(;,@|8@t<<<<B05`B05BD6xBD7BD7BD8BD8BD94BD9BD:LBD:ؗ<;.vv8ow9w98P8w9w8ƴwv7ɕ.vv8ow9w98Pw9w8ƴwvhw18h'8:ɴ$.vv8ow9w98P:.vv 2;8ow9w9`8`w9w8ƴwvw!Ƹh,h(<;p.vv8ow9w98P8w9w8ƴwv7ʽ.vv8ow9w98Pw9w8ƴwvhw18h'8:$.vv8ow9w98P:vv 2.;p8ow9w9`8`w9w8ƴw)vw!Ƹh,h(<OX( .bː0@3(ƸRv0(8dOX(8;(B(<BBw1w8uƴwvOXv8h"vv8ow83(Bu8_w8 :LBBvv8ow983(<" "̼BBBvv8ow983(+(Bw-w8(ƴwvOX((rw8/(<OXƴrw4'8 :a?@ƴt 6@<0p2R͡w1w8ƴwvh02Rx <w%w8ƴwu5 * BBvv8ow983( .p *q$%(P"vv8Pw9w8Ŭw0ov1uTu.p0l0u#($ %FĬ8%, .ΠPδPw9w8ƴwv5膦w%w8%(%ƴwvw18bw980ƴhƴp6$vv8ow8#(΄$  <2vvttt0u18ow8(2u(8Ww8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02v1v08gw8/(t 8Ow98(8Gw9%8 *н&(&`Ƥ`vvŤP08ow9Ј/h;h <2vvtt0u18ow8#(2u(8Ww8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02v1v08gw8/("v!8Ow9ƴph"v08gw98#( <" ' ;(v%v0$ƴgv(&vv8ow9*rv&v(%ŬP08ow98Rp pw9w8ƴwvƀjҐhvv0僖#uuuu(tttt s8gw8(܇s哖8_w87(#vv08Ww87(8gw87(#vv08Ow87(8gw87(#vv08Gw87(8gw87(8?w87(<OX20uu(àjsu0jv08Ww8'(( ;("u8_w8w9ƴp(<OX0*vv8ow8w9,p"b)60Zv0vv8ow8w9v(,p8,;(,<OG8o0P\FnPn|G8nT4O\d66 OX<"OT# #8O\ t::xO\t80:OXw9Ĵp|| "TB|BO\t206r֔0026r֘ . .֥26r6r .26r . . * *(BȃOTp;(8P;(l&vvl$uu8ow8(2uu(8_w8'($02vv8ow8'($02vv8ow8'($02vv8ow8'($02vv8ow8'($02vv8ow8'($02vv8ow8'(02$v1v08gw8'(8Ww98ĸl &؝BBvv8ow98۠3(l%6vvu8ow8(2u8_w8+(%402vv8ow8+(%202vv8ow8+(%002vv8ow8+(%.02vv8ow8+(%,02vv8ow8+(%*02vv8ow8+(%(02&tv1v08gw8+(Bp8h|͸l$N%P|vvuu8ow8+(2u)u(8_w8#($L02vv8ow8#($J02vv8ow8#($H02vv8ow8#($F02vv8ow8#($D02vv8ow8#($B02vv8ow8#(02$@v1v08gw8#(B`ƴWvƴt8j3(0(t t쓖O\J&<"nP *cŜ``w-w8ƴwv 6,6;(0@(O\.6rw58hw98X0 Ä6r| 6r܀ * *܍&6r6r *&6r * *   " ")vƴpvƴXݘ'p%hp "ݕvƴpvƴX.ݜ 2 2ݰB|B~DOXw90pT6Tvv8ow8w90pL "5L "8DD &YBBvLLvv8ow9 :ޅOXOX2Z%L6Tvv8ow8w9,p:2BBv&03(v1v0儖L#.duuuu(ss4d$tt唖v v87w83(&08ow83(0$:vv87w83(&08ow83(Ȅ08Ow83( |$w9w8ƴwvƴtG!6rG  :|08($,#x#&ƴp4t䄖$ԴOX"rꡔ8w!w8ƴwv܄ &H'藓à &#À:8OXp8&w9w8ƴwvƴLv0h0@r ̓tlhtlh "OX,@&r2hvv8ow9 :Q2Z,2Z%v2vv0u8ow8'(2u8_w8+(%t02vv8ow8+(%r02vv8ow8+(%p02vv8ow8+(%n02vv8ow8+(%l02vv8ow8+(%j02vv8ow8+(02%hv1v08gw8+(2&`lܗl#^\uutt ss\v1v0$tt唖t8gw8+(t唖8_w87($Z\v%v087w87(&8gw87($V\v%v08Gw87(&8gw87(#R\vv08Ow87(8gw87(87w87(6\&vv8ow9 :G  :̄:$:v1v0w9w8Ŭgƴwuv.jd6w9w8ƴwv 6 *\'(2vv%0u8ow8'(2u8_w8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(02%v1v08gw8+(2&lܗpl#uusstt ssv1v0$tt唖8gw8+(ću%8_w87(t#vv0儖u(87w87(8gw87(x#vv08Gw87(8gw87(|#vv08Ow87(8gw87(87w87(&8Ww8Ƹ44tw9w9 :a'ƴu$8($,<< 0ƴT(('42,8TƸh0rŬt8Z <"nT:'$ ͸䃖&::|&r|ń6r$6r 2 2-6rh6rp 26rq 2 2 . .BBvv8ow983(* w,ᓪ *nP , Ŵ04$:*( 60P840v& v8ow9긗<"::nP&&nP6ؖvv8ow8B7(۴ "Mՠ "M䇖<6 : : wp>  ` wp> t<"J#6J62rw18`w9JƸ0 ń6:B$6:R 2 262r2r *6r * * . . & &MJvƴpvƴ0𰖖'J%h "Jvƴpvƴ0薖J 2 2!Bvƴpv6`ƴ`v5v04u8gw8*u8_w8 $<"u :}BBvv8ow983(o0'͸ " vvuu8ow8 7(2u58_w8'($02vv8ow8'(&02vv8ow8'((02vv8ow8'(*02vv8ow8'(,02vv8ow8'(.02vv8ow8'(020v1v08gw8'( u(8Ww9 :؃ vv8ow9%ĬX$ .2XưXvv8ow9ư@wp>}7h0H;h$$ 4%ؓ4vv8ow9긗<"u :9BBvv8ow98H3(o0'(͸w)w8ƴwv6t8G,8(r͸* ؕ .vv8ow98P긗<ƴd88d4pŬj(t8Rؗ<"u : BBvv8ow98 3(o0'(͸w)w8ƴwv6tm8G,8(r͸((*ww(u);(ؕ.vv8ow98P\<"u샖 :dBo0'(͸+((;(vvv-v0tt8ow87(.u8gw87(uv8Ow87(" 8_w87(ؓ v08gw9\Bvv8ow983(<"Hu셖 :B.vv$,u1$ u(nP8ow8'(28Ww8#($02vv8ow8#($02vv8ow8#($02vv8ow8#($02vv8ow8#($02vv8ow8#($02vv8ow8#(02$v1v08gw8#('͸#6$8ssBBvv.v-v0 ot u-u(8gw8'(.nP8Ww8(#4.vv8ow8(#2.vv8ow8(#0.vv8ow8(#..vv8ow8(#,.vv8ow8(#*.vv8ow8(.#(uu8_w8(8?7(ؓw9긗Bvv8ow983(<2vv8ow9 :!BBvv8ow9843(o4<2vv8ow9 :BBvv8ow983(0w9w8ƴwv 6o4 6 B . Bvv8ow983(<6866 :}o46 : 2 2Bo4:w9:hBvv8ow983(<VersionString: mcp-l4v3 3.08c Dec 11 1996 13:06:16  >u  :t<" {{{h8jzL 6$zŴ40,poD2P 60"oXoToP-@<)Xz :zܗz;(zD 6;(odD8 6od4D( `  ؗhP_hm엓!З", <"Ű 2oDP6 :0<:: : ؖ: ܖ:: :$:<w80p2R.vv8ow83(02R <z؇< qqqq 6 dqqG,20q6rA!Lqoh{Hԕoh poh p ppX q X<q :}qqw98h: :{q {oh{H8!(L<"Hoh{{&*v)v0vvŬo8gw9wp>Euq8qqw, :qvq8qq*v8ow9'8 :w9p4|D*Ą:JH8R** :!<H8R'8(6r<wp><wp>=wp>D 2 2* :q8qq* :!H8R'8 6rwp>wp>wp> 2 2H8R'8 :8wp>8wp>9wp> 6 6wp>xwp>ywp> : :q8qqq8qq : h{6vv8ow9'8 : Pw9 p4    qq6b 84q:ZG  : q8qqq8qq PqqД{6b qqqȄ:ZG qć&p: q8q & qX 2 M' : M-.u.p.̆4.L 6 M.p.-h::(8q8qqq &8hq Q \q8qq{̗ Pq8qq{0 Pq8qq{H8j'8HX<p{X<oh{X<{oh{o{p{q <vvvu 6 ujuG,20v6r !LrvHH r r,s0ȕstH@tԕ,u`uuu<"8u :(u :=Зu :Yulvw98hv :v`vHvvvHw :tHu :u :@v`6p:!u`ôJ# ĔԅJ6r w58hw9JƸ0 ń6:B$6:R 2 262r2r *6r * * . . & &EJvƴpvƴ0',J%h "Jvƴpvƴ0ؖJ 2 2$w58hw9BȦ:h8hu9u(80Wv0uuƴ_v &84hĜr.j$,p0pw9w8ƴwv((.rY0v8p8Hƴp lPX 2v\v8v\v\ .!0,(-88-8w9 2Dh-8"vw4vvu :q,(-88-8w9 2Dp:h-8vv8:jvvvvuu6rG  :uw58`: : v`-8rvH,(8-8w9 2D:h-8rs0vH<v`vT8hvTvX8vXuvX :,(-88-8w9 2D:h-8vv8:jvvvvuv:jG  .!u-8,(8-8w9 2Dh-8"vwvvur :@vHu :UЗu :quvw98h: :v`-8,(8-8w9 2D:h-8rvH<u :@u솖{8vH{0r:jG  :AЗ <u :u{HvH{@r:jG  :З <v :vHv vvHw : t,vH@<u 2u{Hv{@ưh&lPu{8v{0Ƹh&lPXsvH<{(8{(u{( :!uu :%u@uu :AuXvw98h: :v`-8,(8-8w9 2D:h-8rrvHv .!,(-88-8w9 2DԵh-8"vwvv<"8u :4u :I@tv`6p:}pu`ôJ# ĔԅJ6rhw58hw9JƸ0 ń6:B$6:R 2 2 62rD2rL *6rM * *] . .l & &Jvƴpvƴ0',J%h "Jvƴpvƴ0ؖJ 2 2(w58hw9BȦ:h8hu9u(80Wv0uuƴ_v &(4hĜr.j$,p0pw9w8ƴwv((.r0v8p8Hƴp lPX 2lv\v8v\v\ .!,(-88-8w9 2Dxh-8"vwvvu :,(-88-8w9 2D̳:h-8vv8:jvvvvuu6rG  :u$w58`: :ev`-8rvH,(8-8w9 2Dt:ht-8prs0vH<vHrvHrvHs0vHsvHtHvHtԗvHu`<vhwHԖvh"vvvw<v :"<wvh<xxHxx4x0<xw:!u9w9:h 2ƨX0u6X6x8-60:J5x0 <.!w9:hxv0twxvƴp6 286x0<"x : -@w&w5ĸ`8t5w&b !x"`t xƴr 6 -8w`,(*-8w9 .D p:h-8** !"`vt x6b $#$ x0<:ww98h :6rD < :!]w6'8:b!Dxx< @ @xy̗H",x<oD6 :"p6:jG  :"x 2 2"2 :"@y8yy蕓y̕<y̗xy̗y<<<"  6#' .8..$4%h "$46b$!w58hw9ƸXw18`w98X66 6666& 6r#.8..w58hw9,p*: *:: <" . "%U' %h "%U 2%Ew1Ƭ8`w98X66 666 6 6r%.'8.<"Ĩ&B&*2& Jv8hw9$pw)8Pw9Ÿ0 .6r& 2.6r& 2 2&%&x :.6r&\&d 2.6r&e 2 2G&y : :& :& :C:2&&B%&&B%&%Ĩ%( <ƠMƶt'q 6' H H'8"r'8.vv8ow83(02R'A' H H'8"r' H2r' H2R'w-w8ƴwvh02R' <"m( 6(t8(Av 6(w9(D "t!w80 "(4 :(q"j(d jw:(Tv b<"()܆ 6(4'8):b(<")4) 6)148):b)<{P :){P(< LB^PǨ !,"01.01myri_sbus.c:v1.0 10/Dec/96 David S. Miller (davem@caipfs.rutgers.edu) mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout<3>myricom: Chip would not reset after firmware load. <3>myricom: Handshake with LANAI failed. <3>%s: transmit timed out, resetting %s: Transmitter access conflict. <7>%s: unable to resolve type %X addresses. myricom: AIEEE weird cpu version %04x assuming pre4.0 %s: MyriCOM MyriNET Ethernet myrinet-eeprom-infocpu_versionclock_valuesram_sizemyrinet-board-idfpga_version%2.2x%c MyriCOM RegsMyriCOM: Cannot map MyriCOM registers. MyriCOM Control RegsMyriCOM LANAI RegsMyriCOM SRAMburst-sizesinterruptsMyriCOM EthernetMyriCOM: Cannot register interrupt handler. MYRICOM,mlanaimyrikernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment4! `  ,y20  =BHP2Y=b ! < $4)@)P)O\yj{@ (0 `@ l ( - @yTy_ e} +2EXj{ d p ,Gdk|$5MLYhHhmyri_sbus.cgcc2_compiled.versionlanai4_code_offlanai4_codelanai4_data_offlanai4_dataroot_myri_devmyri_clean_ringsmyri_init_ringsmyri_initmyri_is_not_so_happymyri_type_transmyri_interruptmyri_openmyri_closemyri_start_xmitmyri_headermyri_rebuild_headermyri_change_mtumyri_get_statsmyri_set_multicastversion_printed.768called.771*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv___atomic_sub__kfree_skb_Rcbfaf351local_irq_count_R3e580ce8local_bh_count_R8c090c95alloc_skb_R74d0de82skb_over_panic_R255f64c2memcmp__memcpy_Rbfaaaa73netif_rx_R56a7a815jiffies_R0da02d67printk_Rdd132261___set_bitskb_under_panic_R1e8f68dearp_find_Rd9cd260cmyri_header_cachemyri_header_cache_updatemyri_sbus_probeSBus_chain_R359591d7strcmp_Re2d5255ainit_etherdev_Rd7facc4aprom_getproperty_R156810c5prom_getintdefault_R858c90dcmemcpyidprom_Ra3bdb69c__bzero_Rdd42e263prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169esparc_cpu_model_Rb1a8ddf9prom_getint_R51946adbrequest_irq_Rb9ba6802ether_setup_R681499f5udelay_Ra39b4cf2dev_new_index_R8fddc84cinit_modulecleanup_moduleunregister_netdev_Rc734b91akfree_R037a0cba4&H'&'( ) ( )  *  +t,,x*  +`*  +-4.( ) ) ( &$'\/ `/ t p|0 p( ) ) ( / 1 0    2   2 (- -   3 0   - L- \- |-  y  y 7 7  y     $8 4  <8 @  T9 \ y d y h (  y  H    0  0  (  H :  `  ` $; 0 p 8 p <; H  P  T; `  p    : < = = = = = $ ,:D>X    00 ` d h0?  @    @  ( 4@L 0T 0`@p @tA x P|       ` @@;PA lBp P       `C x x0D   ` 4 5 $ ( `0 44 85  y      ) )( ), )E 0  E @0 @F y yP yT yX6l yp y yI yJ yELFc4(㿘' `@@ @$ `#% ``$ $ $ $ $ $$ ($ 0$ 8$ 4$ <@  @ 0 @㿘 . E. D. F H@ ??"4& T& h& 6 & p& H& t6 |& & & <& @& l㿘   p @2 t@ t  &  p @2& t@& t㿘X   !! `2&);?@ \  @ @!   @!"?@ @ ?@k` @`  `&)$ < `" @ 㿘) C&) @@ 09  2 @@ $ <0$ @"$ @ <) @ " $ <@̐  @ @ 0@@$ <$  @ [@<` @`  `㿘退 2?%@ @!   @!?<+` ? })  @`   `,逗H` ,@    @?""`$ , @ ` ```$@?@ `?逰 @      <ɔ ,  @`` - ``\@ @ @ ? $  `<  `@  2?`p @@㿘)`@ @"`M?  @"=E?% @`@ @%%@  2 @ .  \  $ \$ @  <` @   p @ ?@?@x` ?@ @21?` 2X+?   !! `?  N"$`@ " X   T"><  PP    W  O"O<ݐ<` ѐ?`H&̀ <`   ? @`@$`H @  `   ? @`@$`h @  <` `H@   ` ؒ@   @ *?'ܐ`H@ `@q@ s \ o$`@h, `, @@ H``,@    ?$ "`$`,"""ۂp @@- HHo``,`,@" `2`\<` ?&  @Ȕ㿘i /  @) <@%   @#0 `" ,@ , ,@" `2 Aa 2 @ "   㿘!) ?߀ !&! @ @#/   @#/0  < @ @ 㿘 @ @#G   @#G[  t "& tU?`0``!`*   `  (  * #@4  &   t`& \  & ``   `@.`.` t`\`` &`&`\ t`   @ `   t\` ""\@㿘 @  < @#}   @#}d  t ^ HHo` F   . G0. FG . F "2 t)2. t0 t & \ :& tHHo` G . G!` $! t `\ l` 6   &  t  p@@. F& t 㿘 @ @#   @#  @  t`2?& t@& x㿘  <  [s @ @#   @#^  F  . GW `=i9 , . F . G "@ a` $a`l   #  @  &  & . F G 2  - t @). F  @ Ԑ  t А  . F  t `& `p @2& t@ & t  & . F㿘 @ @$   @$Ű  t"4& &  0 \`!` `+` x   |`  (  6  ~   "@ @ +` ~(``+` #@4  &  ? ` &  &  @ ` "0  H  })@  `    * ;`*` ` , ;  `4((` (ڀ2@6 |; ;`*` H  * 2 } `4( }(` (; ;`*   *@  `4( }(` ( ~( t&  p @2& t@& t & & x 㿘    @@ H` @    ?$ "`& """ۂp . F t `& `p @2& t@ & t `. F@ D@㿘)  @ @$   @$0ɀ  < @ @ @@ 0 @ @ `   $ E  @, E    @ `` ` ` ` 2   @@@ $  \`   & \& @   **@ ` `@   \`   & \& @ ,@  \@  & \& @@  \@: "  " "@  @  $"  |  "@   \@#@ % @k 2   p @@@c @`N` E ", E``` " $""  $"  @$ <*`  *    ~;$  D #? E , E E 2 E@ %c E @ @ @   p @2 E@ E    $ @c4  , D, E E    h*@ D 2 }  , D, D 2 \  @ `` ` ` ` 2  \ @@@  f, E``   ` & \& @   ** \`2    ` & \& @ ,@ \ @: "  " `"  `@$"&, E  |  "@   \@#@ ` & \& '@ ,@ *2 * 2@ 4  $ 㿘3579`  %ܐ "6 P6 Z& T& & & & @& & 6 X. o 㿘 \ "< @  ?` @`   `㿘 \ @  @&` @`  ` H \ @ @&0@ P"񀦀 "O""!?0`!򀦀1?0[ ' ' ' ' ' ' ' ' ' ' ' "/ L '' '$'0'4'(',' L ̀ "   Ԁ " P 4  P`@@ `<`@  @ ? 㿈 @ ? @&`   @&`?X   !! ` ? Q@"< Z@"T<  A@ V@"<  ?@!  @@"<   K@""<   R@  Y@":<n   M@j0 L@" <c <` @  @ ? 2]$% @@&  @N   @ @  $@ ` @  @ ? `23 * @@HH <7`# @&  @Q @  @ ` @ ? $@ 2 @@4 @  ` @  @ ? `2߰ * @@@  @HH *@&   <  @  $@ ?  d @"   '" @ d'< @ @ @     ` @  @ ? `2 ~? @@ @  @@ &  ?@ d! @ @    2U耢) +!"'    0' 0@@ @ 7? L@ ؑ* '< @ @@       +`" @   @ `"M"`@@ @=HPPP: ALERT! not INUSE! %d <4>bad magic for ppp %p at %s:%d 2.3.7#2F$We6tHZl~3"VG,ud>ɍ@ۮRdv!0g&vD4UJÎXn|1 wf.TE<ˬBُPftBSap '26L^׈hzRC q`(7&:DV`rcr@Q%"40N\թjxsbPA5$*8FTbp,ӥ>@+R:Nd_mv|ҭ$6 H;*Z^Ol}l~ .<ѵ)B8 Pof~Lt]&н49(J Xnn\M| ׅ(:JD[iVx `/r>֍ 2ZKLyh^ h?.zՕ*8kFzHTY-b<pԝ"0{jNXI\=,jxiiiiiiiiiiiiiiii!W+)-/0123456789ABCDEF01.01kernel_version=2.2.14-5.0using_checksums=1parm_flag_time=ippp_register_compressor_R9682e733ppp_unregister_compressor_Ra1b928dfppp_crc16_table_Rcacc1f6a<6>PPP: version %s (demand dialling) ppp<6>PPP line discipline registered. <3>error registering line discipline: %d ppp.c<3>ppp_alloc failed <4>ppp_tty_close: bogus <4>ppp_tty_close: not inuse <6>ppp: channel %s closing. <7>ppp: read of %lu bytes too small for %ld frame <4>ppp_tty_write: truncating user packet from %lu to mtu %d <3>ppp_tty_write: no memory <6>ppp_tty_ioctl: set xmit asyncmap %x <6>ppp_tty_ioctl: set rcv asyncmap %x <6>ppp_tty_ioctl: set xasyncmap <7>PPP: tty_receive called but couldn't find PPP struct. receive buffer<7>couldn't alloc skb for recv <7>rcv frame too long: len=%d mru=%d hroom=%d troom=%d <7>ppp: tossing frame (%x) <3>ppp: %s not active <6>ppp_ioctl: set mru to %x <6>ppp_ioctl: set flags to %x <6>ppp_ioctl: get unit: %d <6>ppp_ioctl: set dbg flags to %x <6>ppp_ioctl: set maxcid to %d <3>ppp: no memory for VJ compression <7>pppioc[gs]npmode: invalid proto %d <7>ppp: set np %d to %d <3>ppp_ioctl: invalid ioctl: %x, addr %lx ppp-compress-%d<7>%s: no compressor for [%x %x %x], %x <7>%s: comp_alloc failed <7>%s: decomp_alloc failed <7>ppp_proto_ccp rcvd=%d code=%x flags=%x <7>%s: comp running <7>%s: decomp running <7>%s: comp reset <7>%s: decomp reset <7>%s: ccp closed <7>ppp: got runt ppp frame, %d chars <7>ppp: frame with bad fcs, length = %d bad frame<3>ppp_recv_frame: no memory <6>%s: decomp err %d <6>%s: not decomp, rc_state=%p flags=%x receive frame<5>ppp: error in VJ decompression <5>ppp: error in VJ memorizing write frame<3>ppp_send_frame: no memory <3>ppp: ppp_async_send didn't accept pkt <3>ppp: no memory for vj compression <3>ppp_output_wakeup called but xmit_busy==0 <3>ppp_dev_xmit: %s not connected to a TTY! <6>%s: packet for unknown proto %x <7>%s: returning frame <7>ppp_dev_xmit: dropping (npmode = %d) on %s <3>%s: skb hdr alloc failed <7>could not reregister ppp device <3>ppp: struct ppp allocation failed ppp%d<3>ppp: dev_alloc_name failed (%d) <6>registered device %s <3>ppp_alloc - register_netdev(%s) = %d failure. <7>%s released <7>ppp: %s, count = %d <7>%s <6>PPP: ppp_init() failure %d <2>PPP: removing despite %d units in use! <3>PPP: Unable to unregister ppp line discipline (err = %d) <6>PPP: ppp line discipline successfully unregistered ???????????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.kstrtab__ksymtab.rela__ksymtab.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4Sp!wT# ,S2$` =V@BVHVIQVjZWTdH  sWp {aHp  aXP b=bMf O n )2>0"MX WPyQ` @ 8  ,h$ H"P2 AlPX|bJLPkJuLTBHTLC 0$$TT@ lO/6tA1S@^6k7tz889h<:;t< xE8!Pp!hJ< "(.1,=+xXQPha-\o6|Tz=,@|N`O8`  8."Z ($ ^P  DUg 6Jcj0B[o0J\uRD,Rpppp.cgcc2_compiled.flag_timeppp_listppp_lastppp_warningppp_magic_warnszVersionppp_register_compressor_R9682e733ppp_unregister_compressor_Ra1b928dfparitytabppp_ldisc.434ppp_first_timeppp_tty_openppp_tty_closeppp_tty_readppp_tty_writeppp_tty_ioctlppp_tty_pollppp_tty_roomppp_tty_receiveppp_tty_wakeupppp_async_initppp_async_releaseppp_findppp_allocppp_generic_initppp_tty_pushppp_output_wakeupppp_releaseppp_send_ctrlppp_tty_flush_outputppp_ioctlppp_sync_sendppp_tty_sync_pushppp_async_sendppp_async_encodeppp_print_bufferppp_receive_errorppp_receive_frameproto_listrcv_proto_iprcv_proto_ipv6rcv_proto_ipxrcv_proto_atrcv_proto_vjc_comprcv_proto_vjc_uncomprcv_proto_ccprcv_proto_unknownppp_init_devppp_dev_xmitppp_dev_openppp_dev_closeppp_dev_statsppp_dev_ioctlppp_ccp_closedppp_set_compressionfind_compressorppp_proto_ccpppp_rcv_rxppp_send_frameppp_vj_compresshex.535ppp_print_hexppp_print_charppp_compressors*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_flag_time__kstrtab_ppp_register_compressor_R9682e733__ksymtab_ppp_register_compressor_R9682e733__kstrtab_ppp_unregister_compressor_Ra1b928df__ksymtab_ppp_unregister_compressor_Ra1b928dfppp_crc16_table_Rcacc1f6a__kstrtab_ppp_crc16_table_Rcacc1f6a__ksymtab_ppp_crc16_table_Rcacc1f6aprintk_Rdd132261__bzero_Rdd42e263tty_register_ldisc_R592af152___atomic_sub__kfree_skb_Rcbfaf351cap_bset_R59ab4080__this_module___atomic_add__wake_up_Rdecddc1estack_top_Ra6cab6a7interruptible_sleep_on_Rd492943b__copy_user_R9c5239eballoc_skb_R74d0de82skb_over_panic_R255f64c2memcpyn_tty_ioctl_R41b13059__pollwait_R0019e686tty_hung_up_p_Rafd9cab9jiffies_R0da02d67__memcpy_Rbfaaaa73strcpy_Re914e41estrlen_R97255bdfslhc_free_Rb359d2c6slhc_init_R7c2b6d65bh_active_Rfff9d0a3sprintf_R3c2c5af5request_module_R27e4dc04slhc_toss_Rab9b2fdfnetif_rx_R56a7a815slhc_uncompress_Rdafbfa2aslhc_remember_Re6dfb238kill_fasync_Re3d796fbslhc_compress_Rd145256e___set_bitskb_under_panic_R1e8f68de___clear_bitunregister_netdev_Rc734b91aregister_netdev_R8ca37b5ekmalloc_R93d4cfe6dev_alloc_name_R0bd022a8kfree_R037a0cba__memset_R1907e126init_modulecleanup_module  X    X\ $]4 (8 < @ (D H  L ,P T $X \ H` Pd h  l ,p t $x | H P ^ X 0\ 0 X\]t_`_`a a D 0H L 0P X\l p t\ \ b b c4 8\< T X\\ d \ b b  _\ 0` d 0h p\  \e e b b cfb b _$ ( ,\Pe lg_`  \( @, @4\DhX \\`   ie e g_`la pa e e e e     \ (e ,e p  t  x\ e e g e e g j 8  <\ @  hk _ ` Tk e e h  l  p\ l m  0$ ( 0, 4\H L P\ 0  0 \  \`n dn p 0t x 0| \  \_$`X 0\ ` 0d l\  \  0  0  \4 8 <\_` 0  0 \   \  n n n n `Y dY _`H_\`_`t 0x | 0 \  \ \   X Xph h\ h  i` td tli  io  0\`_t` `0 `  \_ `h h\ h` td tli  i 0  8  P\ tY x | i Y  E8  !P  !  J  "(  E8  !P  !! J! "(!tb !| !\! !b !c! 0! ! 0! !\!b !b "_"D 0"H "L 0"P "X\"d]# X# X#p#q#e #e #g$D 0$H $L 0$P $X\$l $p $t\$a $a %4n %e %e &$ &( &,\&<e &He &pe &te '4 '8 '<\'`e 'de ' 8'\' 8'e 'e ( X( X( \(e (e (n (S(n (S(e (e )g)0e )4e ) ) )\)r)s) )\) )e )e *g* * *\*e *g+  +$ +,\+4t +8t +Dt +T +X +`\+e +e +g+e +g, @,u, @,v, P, P,\-T -\ - - -\. .  .\., .D.0 .D.D..H..L1.P1.T..X..\1.`1.d1.h1.l1.p1.t1.x1.|00/P /T /X\/ / /\0  0  0\0 80 80\1 P1 P1\2_2,`2X h2\ h2`\2 2 2\2 2 3Hh3| 3\3 3_3`4 4$4 4$4i4< 4@ 4H\4d_4x`4w5 5 5 \5P 85T 85d 5l 5x 5_5`6  06$ 6( 06, 64\6H 6L 6P\6lw6n 6n 6x6 06 6 06 6\7 7 7\7 07 7 07 7\7 7 7\84 088 8< 08@ 8H\8\ 8` 8d\8 08 8 08 8\9 9 9 \9 09 9 09 9\9 9 9\9y: H:\: H:T :h:\ :h:`i: 0: : 0: :\: : :\;(z;L p;P\;T p; 0; ; 0; ;\; ; ;\< 0< <  0<$ <,\<@   > ?\h?p ?t\?x ?_?`@  @ @ @ @i@,_@@`@X_@l`@ @\@ @h@ @\@ A4|AX_Al`A AA AAiB$_B8`B` 0Bd Bh 0Bl Bt\B B B\B B\B CP}Ct Ct Ct C 0C C 0C C\C C C\D}Et E$t E,t E HE\E HF4 xF8 xF| F F\F F F\F_F`F}G8hGL GP GT\Gh_G|`H}Hl HHt HHxiHoH_H`H HH HH~I}It It Jt JL JP J J J J}JKK K \K$ K<KP 0KT\KX 0Kd]K XK XKK K `K\K `KK KK L\L L  L L\L LL( L4 L< L@ LH Ln Ln Ln L]L]L 0M M 0M M\M( M, M0\MDdM\rMt_M`N_N,`Nt Nt Nt N N O O O\O OO O\P$PP PT PX\P P QQT QX Q` QQ Q R  RRX R\ R`\Rt Rx R 0R R 0R R\R 0R 0R\S^S S `S \S$ `S, S0\S4 S8 SLST67t889h:;t<PUQ WYZ   H  ,%4&h@&H'T'\(h)P ' ' @' ' %$'((&`,'40&4'<8'|<'H@'D'PH(L'\P)HT'dELF4( 㿐#\#`   @ 㿘\`  J@ J 2?` 8 ?&  ?   2t?4o?` ` 4j?``$ c? (   Y?,@ & ,@ ?$,$$ $$L$$($H$D@ $P  ( $0   ($$8   (@D !,@ $<"$  ( 0*$` $ 8 " <   *`@& ? " $ b$ ,$|@$㿘     `"F?  *" 0@?@9& 0 $>( 0$@ 0@ 0$ d$ T $ @ P *  L @$ @ 0 @@  P `*  L  <$ @ ,*  @  8*`2  @ <* 2`@( 0` 㿘 ")?  "%? "!? $  ?& ,& & &  $   $ $   " * q$  & 0$ @@B 㿘     " ` $ |)?%+`.` @**  @  @  @  |@@*$ | $ x $ $ $ t$  2` ( " *" 㿘  `8  " ``@ & `$`  "@& & `" $``$`㿘 װ?` `4Ѱ?`6@̰? 2 `   "2 `` ?$`` L &  **&  ( |?* :`(  d*`  @  q$&  d  `0`0?c  $`0  " ```2 b? 2  @4 `  b `  ?h$` 2  | l 2 |`GbF` |* @*` `"& ` 2C '?)```@0@0  @ `  D <*  2? D <*`@"```?&  `2   2 `0`0?c  ? & `?㿘 "5?  "1? `*`qb" '? `" < $€ ( <`" 8 $€ ( 8`" 0 $€ ( 0` $€ ( $€ (`q& ? 㿘` "?` 2@?#&` & `b& ` & `& `& `& `& ` & `$& $`(& (`,& ,`0& 0`4@& 4 b^?& @&@   (`$&`0   (`$&`8   (@`D&`<   (@`0` &``8 `< `2`$@-?  0@*`$ `8*@ 8`D`<*@ <` @` @*    `" @ b&@ b&@ `ijt&k(&`&k&k "   2  㿘` " `$``2@`0@@$`0@@@`$`$@㿘 $ D*` <*  & 42? D <*`@ |+  *   & x &  &  & X& t& @& d& T& l& p& `㿘 $ d> 0 t p !    8 , 0` l8 0@ (@@ (b l"_ l@  @ @  @  &~ 6'@ /'@ ('@ !'@ '@ '@  '@ "ɴ'@!  ! h l(㿘 $ l `f 4 d"  62 $2?>  - 0@ h d" T# D" <+`@& h& d& T@ "2@2@ 8+`@@ "2@2@2@   0 d l@ Ғ@  l& l 0 d  P& @@ `*  L & @ l(㿘 ??c8?> l& l  T& d @ * d" & l`& d 0   d T @#  d& T` "H  d T $" >@   0 " @  d& T` "/  l`8 dI l `"" 2 d T  0  d`" `?@ d& T` `    㿘   d 0 @@  P `*  L  <  ,& @* @ @ 8+`2  @ <*` f2 " X d $#>@8  X d& X XG d h# @ X l x"@ )& l`&& X d 0`& d @@  P *  L  <  ,& @*  @ 8*`2  @ <* f2  X? & X d & d X d& X@ 0& d  P& @@ `*  L & @ 0 @  l d`& l& d" l T  0  d" @  d& T` "/  lag` l!`"" [` T  0  d`" `?@ d& T` `    㿘͠ ( X d 0 @@  P `*  L  <  ,& @* @ @ 8+`2  @ <*` f2  X  h& p& \ && X x@:# p d $"@>@8 p & X X`8 p  `2  p d h" ( p& X p(S ` X N d l \ `@#  l p`"@?& l& p d @& d 0 @@  P `*  L  <& @ ,*  @  8*`2  @ <* f2  p? & p d  & X& dE& ` T  0  d" @  d& T&` ` ' d 0  @ " d T  0  d" @  d& T d l`& d& l 2  lB  d  l & `& d& l la3` l!`"- '` `   d 0  @ & ` T  0  d`" `?@ d& T` `    x+`         + @  (@ $  (* `@`  +  *       + @  (@ #  **@ `@  +  !:  `  + @ *?+ @ $  ?(`*@   + ؖ   2 ?   ,` `3 `7耤`a  ,` `3 `7ꀤaa  ,` `3 a7怤a  ,` `3 a7 @:!  ,`5@U ``4 %`㿘F) b& &  ` *t&+&+&+&+$&+(&+06&@!$t0逄  t0t  H0" 2""b" " 㿘H+T..6 P*`  .(`./`@/ @*  .  ...@@ *"2#@ ( "#@ .֟."㿐`+4'`  @'    2@ L +T*`@ * @2  `<; ,@,`@* @ `@$2 2@ 4#.`   @5 $@* @@@@b  & @@b & <̑, @-.` 2  .` " `?2 * ?`2  ?2 ".``",@ `* @  " @ @&@&4 `2.`x  ** 3  ؠ `" *`@ *4@ @ 2 6  㿘7 +L"=`H & +T?&  P  " 2  & * #@ ( `H +`H Pb"    *  & % % ,`4 + ?&   "@ &  怤`H&2`@ :`  ? 4 P`H L*+X &&+X , +X&*`% *?&* %  ,`@4  @  `- 2 2`&+X` Ѣ`L+X&*% -+4㿘?      *`? @ :0t`@"-`@.6 .6괄 3관` 4긄3긄3꼺        `@ ̴㿘 ?       @`%,` "P`3 ⴉ+  *t*v "@@.7   ( ' 6 .@ "' >7@@(7?'  u,*v+  "@@*t@.7 `  (  ' 0.@ "@'>'  7@@('7?* "@@$**.7 `  (  ' 0.@ "@'>'  7@('7 ?.7 . `6 (` ' 6 (`"@?( 4I** "@@$**.7 `  (  ' 0.@ "@'>'  7@('7  ?.7 . `6 (` ' 6 (`"@G?(K "@@$**.7 `  (  ' 0.@ "@'>'  7@('7  ?.7 . `6 (` ' 6 (`"@'>'  7?('7         `@,`㿘+= + 9)+(*v   * `2? 4   * `@$ 㿘b  ~+  6  +  3  *   & 2`*  " ;6 & &  ~* @6 &b  .  6  . 3  *   & 2`*  " ;6 & &  .  6 &b  +  6  +  3  *   & 2`*  " ;6 & &  * @6 & 4"b  *v` * + @ 6   *  & 2`* $ & ; 6`* *@  6&ڄ )㿘" " .  6  . 3` *   & 2`*  " ;@6 & &  .  6 &b  *  & @Җ 㿘"     *  ` & 2+  `?& & 6 "& @b   ?& 㿘#b !"  (  6    *   & 2`*  " 86 & & "  * @6 &) db  @"d (  6    *   & 2`*  @?8 6 & & d" * @6 &' ` @& b% ?" Z  "  (  6    *   & 2`*  " 86 & & "  * @ 6 & db  @"d (  6    *   & 2`*  @?8 6 & & d" * @6 & ` @&  & 㿘 |    2@Xz+w+#!b"   ` 22`@     `@{3@ 9"  !b +  6  +  3  *   & 2`*  " ;6 & &  * @6 &`@ː3b =""  #b +  6  +  3  *   & 2`*  " ;6 & &  * @6 &++ ` @)3b b   &  b@ b  & b6 㿘)" b *2 " `+@ `& . @  ,2@ !"  & ` @ *  2 `` *`6`! @*`) 6`! *`  3  | &"# d T`" * !).` `@ @``""  2 64  ""  `?㿘)"@ /+b@@+ @@ & / b@ #@$@.7@ ``(@ `'`0.@@ #@@('@7@b(@ @"@@#@.7@ ``(@ `'`0.@@ "@'@>'` 7@@@('@7@ +b@ "@@'@/7@ / `6`(@ `'`0.@@ "@'@>'`7@@/@'@7@3  (b@ "@@.7@ ``(@ `'`0.@@ "'@>'` 7@@@('@7@` +b@ "@#@+7@ +`6`(@ `'`0.@@ "'@>'`7@@+@'@7@"@ $ @"@@b$@.7@@ ``(@ `'`0.@@ "@>7@'@ '`$b@(@7@'@$'@     *```` ` *```` 2 *```2 `?*  0`* 2  b   *  # 0*# # 3    (  ` # 2 3 # "b * "0* " *"""2㿘ؐb &  6 >*@  & *  & *   & 3 +@  &   @ & 㿐 ?`2"`0"`"`   "`@ 㿐 "? `"? $2`? @  $€ (&  㿘"??N 12;?8 6?2 2?&  (   )& "  `"   "`  ( @?"  `    *@  "@ @?㿘@ 㿘 "a?` "]?@ `?`  *` €`1`@`$`$`  $   $@` "``2    "` "`` `@ $`$`  `$@  * @  $`   $`$``@`$`$`  `* "``$@" ``ג`@ $`$``   *` "`$@"@``’`@ $`$``   *` "`$@"@``@ `$`$` @  ` # `$@ $`0" $``$`" ? @``  ?` ?`@`? ` "`"*`}` @``  "@` "@`_`@`$`$`  `* "``$@" ``L`@ $`$``  *` "`$@"@``7`@ $`$``  *` "`$@"@``"`@ `$`$`  "`$@@   "``$` "` "  `  `" `$`"`?㿘    "#?  ?@ 0  ? & 06 * ?$@ @  " 㿘` ?@㿘 B?`2@0<  "@"``21?     ` `0 `   #  $$$ "@ $$ "@?㿘 4 " 8& ``$`(€ `2  $ @ @ @ $& 4& ,& & & 0   & 8&`0㿘   ( < 2    (  & $& (& 4&@ 80 ( $€ p , 0@`  "? ("` L *` €?  *`` 4  `&  `/`2  `4 $@&Υ4@@耢 & & & @&``$  &`&@& 0 ? && &  &4& &`4& & @&``$  &`&@& 0??  *`` <?#2` @ @ & &`& & @&``$  &`&@& 0ɔ?`&  l o  `& & @&``$  &`&@& 02C  ( ` , $ @ "?"`21 & 0@ , 0  " (? ("@  ` $ "?"@`2 & & @&``$  &`&@& 0n 8@ "%%@&     & ?  *``  ?, `& 4   ! & &`& & @&``$  &`&@& 0*?@ ( ` `(  & & & @&``$  &`&@& 0? &4&   2  @  ɨ?  *``   *@ *`"  & 2  4     * *`"  &  &   @  `$`(€ 2&  && & @&``$  &`&@& 0&&  0 `a    @,  v?  *`@ , @   *  `  (" $@& Y4` `   @  [?  *`@ 4$@*@ 4   !  $@ 4 `2& `@ `$`( & &`& & @&``$  &`&@& 0<?  ( ? *"@?&  0  !@ *  @  4 #\ ` &   ܐ!`''#`@`$`(€ ?"&& & @&``$  &`&@& 0@؀ 2& @@& & @&``$  &`&@& 0ה?&& & & & @&``$  &`&@& 0@  @ @ @ , 0@`  "? ("  `E&  && 0@ , 0 @& & @&``$  &`&@& 0 && & @&``$  &`&@& 0q & & @&``$  &`&@& 0c?& & @&``$  &`&@& 0U& & @&``$  &`&@& 0G& & @&``$  &`&@& 09& & @&``$  &`&@& 0+& & @&``$  &`&@& 0& & @&``$  &`&@& 0& & @&``$  &`&@& 0?@㿘@`$ `( $`(`$€㿘 $@ $& ,& 0㿘 , 0@":? "`5?  (@" "  4 8& 8@`@&` ($@& , $"& ,〤& & @&``$@&@&`& 0 2?" @'H\ 'L'P'T''''''''''''''''*`  " H2!/#  , `  , *  ,``,`8 # * ,     .,` ?"   ' "@`   ,  *`#`" H`@*(` 'H '? 'p Ȥ .'"-[H`  @`&/ "@ : ``@*`  "`/  ( '' p@`?! p"@ //'*@ &4@, "  "4H) @& /  /L  ` /'"T*  `P/L"P* '4@ ) , `@* " #   )@ )@4 @2@ )@? @ "  %*? @ J$=.`? 㿐#\#`    ?? &"@  @&?㿐`\ #\#`!v ? ,`?? :$ 8@@$ 0? #\#` S  ? 2 a?? $  ?@$  $ ?@@0  ( "#` 2\ "<x'<'`'h'd  "<" ?  *```"a a *``a"a4  *``a"` "`@#\#` `! !   t" ?` "`@#\#` ` Ȕ  $` &&@&& 㿘  ?&? 2?```$€`(` 㿘 (    * * " " "㿘 , 0 @`  "? ("`  *` €)` '& & @&``$@&@&`& 0   @  , 0@ `  "@? (": $   $ $ $ @ `  *`@ `+`@   *   $@ 4  $ $  @ $  $ $_   $$ &`& & @&``$  &`&@& 0? @ `U  *`@  +`      $ $@ $ $ $4  @ `D  *`@ `+`@   *   $@  4 $  $ 7$ @ $ 0$ $ &`& & @&``$  &`&@& 0D? @ `  *`@  +`    $ $@ $4  $    (" "@  "$26  (  , $ @ "?"2$ & 0@ , 0  " (? ("@   $ "?"@"&  ( (   $ ? $ $2C  (  , $ @ "?"21 & 0@ , 0  " (? ("@   $ "?"@2 & & @&``$  &`&@& 0 (e$& 0@ , 0 @& & @&``$  &`&@& 0r $& & @&``$  &`&@& 0b & & @&``$  &`&@& 0T?& & @&``$  &`&@& 0F& & @&``$  &`&@& 08& & @&``$  &`&@& 0*& & @&``$  &`&@& 0& @&``$  &`&@& 0& & @&``$  &`&@& 0?@㿘`(`$€㿘 0 ,@`  ("` 8 " `"@&`&` 4 8& 8&`0@ (@@ 2)&`  0  $& 0`" 8 " `"@&`&` 4 8& 8&`0@@&` & ,㿘,0@`  `" "@'@`'@"@"`"`"0 0`8"`( . .` `0(```(@ ( `(``@` .`  (` ?  @/1u 0`"``" "@'@`'@"@"`"`"0u? ` @׉1`.` @  ` 1@(``` (  ``@.`  ( ` @1`@ .`@(`@ `.` @  $'1 "'/  /  (  &/  $/  !c 0``" "@'@`'@"@"`"`"0  㿘?c6  ` [ V1?!:& ``@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ̲` @`@@#@#񀦠,`㿘!@ 0  @ 0@ 㿘@ @  !"``"@ 㿘@ g@@   g8  !&&   㿘 @ @` @`  `㿐`2S   2M   2I   ` 2D   @ 2` <  x@  4   @`&`@ x & 8& 4`& &  8#\#`  ?  @  @`  &` & 4㿘$" @  2 ` 2 ` ` 2 2`   2  ` "&  &  @& 㿘 @&㿘``*     O 4@ .`...?: .  .$  $ $ $  & @ $ $    а"@$ $ $@  " $  @  $'6  ` X \`$ X$ \  d@ $ `$ d P T@ $ T$ P P:@ X:` `:` h:` p:` 㿘 @ @` @`  `㿘`2M   2G   2C   ` 2>   : 2` 6  x@  .   @`&`@ x & 4& 8 & &  @ 8  @`  &` & 4㿘$$ @  2 ` 2 ` ` 2 2`   2 ` "&   \& &  @& 㿘 @&㿐   l  @u?``*     Z @ d?$@`.`.. $ $ $ $ $  " ?$ $  .  $?`$ $ $`2  $ $ $    @ 2?@  " $    ,   @ ? ʀ`    @ ?& P T X \@ $ \$ P$ T$ X㿘``*  c 0.,` && & `& & @  " `   ,   @ 0  d P T@ & T& `& d& P㿘@ 2@ @ 㿘` G `D` @ 2   `@ 0@ @  deflate 1.0.4 Copyright 1995-1996 Jean-loup Gailly             inflate 1.0.4 Copyright 1995-1996 Mark Adler ??01.01kernel_version=2.2.14-5.0using_checksums=11.0.4Punknown compression methodinvalid window sizeincorrect header checkneed dictionaryincorrect data checkneed more for packet flush     invalid block typeinvalid stored block lengthstoo many length or distance symbolsinvalid bit length repeat #+3;CScspp !1Aa  0@` oversubscribed dynamic bit lengths treeincomplete dynamic bit lengths treeoversubscribed literal/length treeincomplete literal/length treeoversubscribed distance treeincomplete distance treeempty distance tree with lengthsinvalid literal/length codeinvalid distance codeincompatible versionbuffer errorinsufficient memorydata errorstream errorfile errorstream end<4>zfree: header corrupted (%x %x) at %p <3>z_compress: deflate returned %d <7>z_decompress%d: short pkt (%d) <7>z_decompress%d: bad seq # %d, expected %d <7>z_decompress%d: inflate returned %d (%s) <7>z_decompress%d: ran out of mru <7>z_decompress%d: didn't get proto <7>z_incomp%d: inflateIncomp returned %d (%s) <6>PPP Deflate Compression module registered <6>Deflate Compression module busy, remove delayed GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  ,X2p  =(B(H@2QxYL=b @ P 4k8x2A$N [j prl,~  <Ht(xLx,"@7FRt^lxhr"|?$,  p#(%8'$,-@??P>9L&d|-|4\x;xB[LpMxYb$`jts||xtx\tHuxuPu\w@wwyp,yPyD{0{+{ 8}A G_ x}500T( Dr|0l&201`E0tVh 8t{ (57A8`JApYDB KtC C4'L 6[, KH`Y,wIt0Z$ImdtXbd@n T`|Da@\4e BH/To`xar m~8 8 ~<8Gppp_deflate.cgcc2_compiled.configuration_tabledeflate_storeddeflate_fastdeflate_slowmy_version.546lm_initputShortMSBflush_pendingread_buflongest_matchfill_windowextra_lbitsextra_dbitsextra_blbitsbl_orderstatic_l_descstatic_ltreestatic_d_descstatic_dtreestatic_bl_descstatic_init_done.581tr_static_initlength_codebase_lengthbase_distdist_codegen_codesbi_reverseinit_blockpqdownheapgen_bitlenbuild_treescan_treesend_treebuild_bl_treesend_all_treescopy_blockbi_windupbi_flushset_data_typecompress_blockbordercplenscplextcpdistcpdexthuft_buildfixed_builtfallocfixed_memfixed_blfixed_tlfixed_bdfixed_tdzfreezalloczalloc_initz_comp_freez_comp_allocz_comp_initz_comp_resetz_compressz_comp_statsz_decomp_freez_decomp_allocz_decomp_initz_decomp_resetz_decompressz_incomp*ABS*__module_kernel_version__module_using_checksums.div.urem.udivdeflate_copyrightdeflateInit_deflateInit2_z_errmsgdeflateEnddeflateResetdeflateSetDictionaryadler32__memcpy_Rbfaaaa73_tr_initdeflateParamsdeflate_tr_align_tr_stored_type_only_tr_stored_block__bzero_Rdd42e263deflateCopymemcpydeflateOutputPending_tr_flush_block_tr_tally.umulinflateResetinflate_blocks_resetinflateEndinflate_blocks_freeinflateInit2_inflate_blocks_newinflateInit_inflateinflate_blocksinflate_packet_flushinflateSetDictionaryinflate_set_dictionaryinflateIncompinflate_addhistoryinflateSyncinflate_codes_freeinflate_trees_freeinflate_trees_fixedinflate_codes_newinflate_flushinflate_trees_bitsinflate_maskinflate_trees_dynamicinflate_codesinflate_copyrightinflate_fastzlibVersionprintk_Rdd132261vfree_R2fd1d81ckfree_R037a0cbakmalloc_R93d4cfe6vmalloc_Rd6ee688f__this_module___atomic_sub___atomic_addppp_deflateppp_deflate_draftinit_moduleppp_register_compressor_R9682e733cleanup_moduleppp_unregister_compressor_Ra1b928df WD L \TX  X $X ,YpZ\]`^ 8 8`, 8]X X X X $SX X X 0 @@ @abc d Hf Y ] $] 8] H] 0\ D] d  8  8]hhhii hhTiDhihih @ @( , 0 4 < t  (  ( l l  , (0 (4 l< lD x     < @ p t x      @    ,0 4 8 ,!(j!Xj"Tj- -$ / / 2 2 48 5c6 6 6 6 8` 8l 8 8 8 8 8 9  (9( (9Pj9 : : : : : ; (; ; = (= l= lA]AlAnBmB\ B\ BpBkCmC$oCx CC| CCCCD\CDCE0CECECF4CFXCGCG\CGCHCHCHD D DH (DP (DSD @D @F< XF@ XF`sFtFlHd hHh hH H I\ITvIxJkKzK{K({KlLD L\LH L\L\LL`NLdNLhPLlQLpRLtVdLxWDL|WLWM|M,}M M N< NH OD~P]P  P  Q Q R$ R( RhS S TX{Tt HT| HU({UtU}V{V{VVzV{V{WP~Y~YlZ]Z]^{` P` Pa {a( xa, xaP daT aX da\ a a a{a a a \a a \a b8 b< bT{b\ b` bp (bt (b{b b b xb xb tb bb bcl tc tc tc tc dc c |c dc c |c xc xc xd \d d d \d d$ d8 xd< td@ tdD xdL xdP |dX |d\ dd eT eleX eleleepfTetghexge|heiDejekel(el`ef` f f g Pg( Pgt g g g h h$ h ph ph i i i~j~k~m~n]o@]o po po p p\ Pp` Pph qt r r tDStTSt tt tttjtu$ju<uLuYuu u uvTvd vp vvdv txv txv uv uv v vWv tww0 twZwZx`x @xy @ymyy y yz\zl zx zzdz uz txz uz txz z zoz t{{  t{k{k| h| h||L |T|X } }} }0r}P }d }h }l }p} }} ~\w~| @~ @~ ~ ~~ ~~ ~ ~ p~ p    , < P X \ ` l p tx    @LXdp| (0 X         uuw@wwypyy {0{{}yp$u(u,w@0w4w8yp<y@yD{0H{L{P}TypELF4( 㿘% @` @ `@  S@ @?`, * "@*`@  @& @. `.`* "@*`@  -&@.    . . `. /.   + : * @*`" *+@ ?L@*@ "`  *@ *`" * @#`+@@ @ @`   `㿘  " @  @@` @`  `(0  * 2`**  * "("@㿘  `& * 2 㿈  * 'L* "@*`  c` ?`@ " % %QL@ * @  2` L*  4  @ " ` L :%  % `  @ ` @  @ 2 $  %$ -  2  - # $ "  `@?   @ ې `  `@ @@Ԑ ` @ϐ   (2`2 @Ȑ 2   ?*`@ 0   2   ?*@ p   @4 @  @,`%2`  @ ?#@-`2`  @ ?#@,` 2` - : `1 *` €` \@ Z@2` "@2 `  "@2` ` "@`,`ʓ2`  @2  @ @ 耧`$ @" '' @. . - .5`,,@L@#@@%$  ,. @ @ @ * 0@` 2  * @ p  %- L@'  pL.. 㿐,' $,0  $0@` @ ' " 4  $4``' 40 , , *@ *`" *A * 2  â  6  `*`* $ 4  2  `@  *`  0`" *  : @$ 9$ `  3"  @$ "04  *@$      4  z   $  "p0  $  " `"d0`  4`" Y4`4` &@@'@ '@2`  (2`*  @ 0 @ * '@2` "    B@ @ "*`@0B@8 7` @ @ ' 2  *   p@ 2* '0`@$0㿘 8`5$ 8@  8`,$ 8`  .` $   B@ @ "*`@0B@8 *`` <` $ < @  0`$ 0@/*` * "@ *`   , ,  @ ,@ @ `@ 0 (2 *@ p (2 * &  (`$ (   ( 㿘  4  , (@ 0㿘      @  $ @ 㿘@  01.01kernel_version=2.2.14-5.0using_checksums=1 %d Cmp, %d Uncmp, %d Bad, %d Tossed %d Cmp, %d Uncmp, %d AsIs, %d NotTCP %10d Searches, %10d Misses <6>CSLIP: code copyright 1989 Regents of the University of California slhc_init_R7c2b6d65slhc_free_Rb359d2c6slhc_remember_Re6dfb238slhc_compress_Rd145256eslhc_uncompress_Rdafbfa2aslhc_toss_Rab9b2fdfGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.bss.note.modinfo.rodata.kstrtab__ksymtab.rela__ksymtab.comment4$!   ,X2X7X=p2FN`W0a  p$=ay4 k0Dt(%< , 2J chntzx$+2E_sp  0D & D0f H `  2( P\slhc.cgcc2_compiled.encodepull16decode*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulslhc_init_R7c2b6d65__this_module___atomic_addkmalloc_R93d4cfe6__bzero_Rdd42e263kfree_R037a0cba___atomic_subslhc_free_Rb359d2c6slhc_compress_Rd145256elast_retranmemcmpmemcpy__memcpy_Rbfaaaa73slhc_uncompress_Rdafbfa2a__memmove_R60e2f255slhc_toss_Rab9b2fdfslhc_remember_Re6dfb238slhc_i_statusprintk_Rdd132261slhc_o_status__kstrtab_slhc_init_R7c2b6d65__ksymtab_slhc_init_R7c2b6d65__kstrtab_slhc_free_Rb359d2c6__ksymtab_slhc_free_Rb359d2c6__kstrtab_slhc_remember_Re6dfb238__ksymtab_slhc_remember_Re6dfb238__kstrtab_slhc_compress_Rd145256e__ksymtab_slhc_compress_Rd145256e__kstrtab_slhc_uncompress_Rdafbfa2a__ksymtab_slhc_uncompress_Rdafbfa2a__kstrtab_slhc_toss_Rab9b2fdf__ksymtab_slhc_toss_Rab9b2fdfinit_modulecleanup_module   4D Htx   h l  8 , D0 DDHLPTX\`dhlptx|8!H!""!!<"`"" H$ \! " ,$ <! l" % % !!"<"  ( ( (( P P( p ( p* ,&.0 #$2(%,4ELF$|4( 㿘.`?ɨ  d $`@  :@  5@  1 @  + " `2& X?& \& & $ @ @ @ @ ?"@ @ `@`@㿘  @ @  @ @  @ @  @@㿘.`  $@ @ @    + X@J@ E?` %` `;? @ @ @ $ 4 D @  & $ & D  & 4 H @ & X&  & H ` @& X%T& \ `?%` @ @ @㿘 d ` 6   `2 \ @ 0^`P $  H W& H@ ` o`2 `  . d@    `O* @  8 0`& 0@     `$ $ 2   @  @& @ \  $  $ \$ @ @ ($ $4 t@ (`& (㿐 X @  D   `$& D@,@@ 0' d '  @  @ !` #!   l@  $  `"H & $@&  @㿘) 2#@-  `( $4 l , `$ ,! ?&! `$@2@@ `" "` @  $ #@$ $ $㿘` `\@@ O p K p`$ 1  `H"@ gH  @|@  $   @ $ $  ?" `$@ @@   `$@@@  \ 4 $ 4 1 \ p @2 @ 㿘  \"    & $. #$# " ` @` ` 㿘 \ `#`. & $` @`  `?㿘?#@ \ ? T@  㿘# \`@ \ ($` ," 0" 4"  @" D" <" 8" H", P"8 L"H T"$ ,@"84 ""H$@ "$㿘 \9X357` & & @& T& & & & 6 Z. o d 6 P6 X&  @㿘) (#@#  `"@N  ` @ ` 8 & 8@@`耦㿘#` %, @``  ` `m  `` `@`` 㿘%  ?b?`C . 2 ,`@ < m "   n/` w 6 h &`\ p@( n2@ `  n2@ ` ` ``@   ,`@ h  =$ h`@9 2  h!@   . @  @!$    & . d`@$ $ $ $ $ $ `& & $ x$ | & & |,`"@㿘X   !! `'y? @`? @ `&i #@Xa<?頒 R$ a$i4 f\$ h``"`؟@`؀`" `@ `  `ے!( 20$ @  /'$  @ m` *` *  * @$ @ l` *` *  * @$ x@ p@  $i @@ @`  `㿘) '#@" ") e $ 4 f m " l@ l @ p` @`  `  *@` ۚ ܘ "*** * *  * " 㿘` - ` ܀   `< `0 $ `6 ` `    @  @     @,& '   @2    ` `  @2  `   \6 H *  &   & H @㿘) Ҕ#@2 ?"!"v<""!$"?""!&=0!%9"!&A=0!󀢀"< "!񀢀"!򀢀=0ܐ   ѐӰ= @@ <`  @   ?<` :? d& <`  ?`2? "? 2?  , d!2`X `  ?`2? A3` &` `2 m`^?퀢  @  `S, m*` *  * @$ @  `B <` :? m& <`   ? 2C? 3>?` &` `2 l`?퀢  @ p `, l*` *  * @$ x@ p ` @` ?&`` :? l&  ? @㿘 \ !y?  $  ? m?"`f *` €` 8[? m "`@ ` `L. m*` *  * @& @  ` @0:8 m` ( l7?ꀢ "`@ p` `). l*` *  * @& x@ p ` @0 lЀ" . e h\@". e  ?`  . e e&`  ?$ 㿘! 4 $   @`@   @*  "`@ /? #*`@`@ @$` ` `$ $ $ $ ($ 4$ 8$ <$ $ $ $$ 0@   @㿘㿘+` c' !)" c&  @!   $   @ `,`@ "   " @ `@` ?$   @*  1/`,`  @  ` @  @ %  @`"@ `@` @`%` @  @㿐 0 , l ( `  `  /$` pl    p @ p@ l* *  * @& x@㿘 +  ' m`# `  ` l " @ p @ @ 0 @*` *  * @& @ 01.01kernel_version=2.2.14-5.0using_checksums=1parm_slip_maxdev=i%s: unable to grow slip buffers, MTU change cancelled. %s: trying to lock already locked device! %s: trying to unlock already unlocked device! %s: compressed packet ignored %s: header compression turned on %s: memory squeeze, dropping packet. %s: truncating oversized transmit packet! %s: xmit call when iface is down %s: transmit timed out, %s? bad line qualitydriver errorsl%d<6>SLIP: version %s (dynamic channels, max=%d). 0.8.4-NET3.019-NEWTTY-MODULAR<6>SLIP linefill/keepalive option. SLIP: Can't allocate slip_ctrls[] array! Uaargh! (-> No SLIP available) slipSLIP: can't register line discipline (err = %d) %s: tty discipline is still running SLIP: can't unregister line discipline (err = %d) %s: no packets received during keepalive timeout, hangup. ??????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4L!1 ,27=KF[N#L<UBH a#0lB  |#=#&) ,"x0x=$MU _\hz D h 0P\  H  p  d x4*5\T @4S\@\ bz 8 (<M`k(6LZhz-ARf|slip.cgcc2_compiled.slip_ctrlssl_alloc_bufssl_free_bufssl_realloc_bufssl_bumpsl_encapsslip_escslip_write_wakeupsl_xmitsl_closesl_opensl_change_mtustats.464sl_get_statssl_initsl_ioctlslip_receive_roomslip_receive_bufslip_unescsl_syncsl_allocsl_keepalivesl_outfillslip_openslip_closeslip_ioctlslip_init_ctrl_devsl_ldisc*ABS*__module_kernel_version__module_using_checksums.div.urem.udivslip_maxdev__module_parm_slip_maxdevkmalloc_R93d4cfe6slhc_init_R7c2b6d65local_bh_count_R8c090c95___f____xchg32kfree_R037a0cbaslhc_free_Rb359d2c6printk_Rdd132261__memcpy_Rbfaaaa73___set_bitslhc_uncompress_Rdafbfa2aslhc_remember_Re6dfb238alloc_skb_R74d0de82skb_over_panic_R255f64c2netif_rx_R56a7a815___clear_bitslhc_compress_Rd145256ejiffies_R0da02d67bh_active_Rfff9d0a3___atomic_sub__kfree_skb_Rcbfaf351__this_module___atomic_add__bzero_Rdd42e263dev_close_R3f1bd9b6unregister_netdevice_R3ff5ad31sprintf_R3c2c5af5cap_bset_R59ab4080rtnl_lock_Rc7a4fbedregister_netdevice_Rfb86ed23add_timer_Rbea990b2rtnl_unlock_R6e720ff2del_timer_R5811f067strlen_R97255bdfstack_top_Ra6cab6a7__copy_user_R9c5239ebn_tty_ioctl_R41b13059tty_register_ldisc_R592af152init_modulecleanup_moduleschedule_R01000e51tty_hangup_Rea01303aunregister_netdev_Rc734b91a,0@0T0h1x2 |2 2 2 33332 2 ,4@5T4h434343435H0X0h02  6 2 2 33 347t782 2 444< D6H t9 6 :;4 <6@ |  <7= 6 >$ h,60 hT?@ @ >L>\A ` hh6l hpA tA A  86 8@ @  `$ `@ P X \ ` h6> h6 h8 86 8 B 0C H2 L2 X2 2 D  2 D  B D  D  E   F  P  X \ D ` d 0 h  l p D t x  | 0   @8 . .   . . . G .    8. <. T . . . . 0. <. L X . 0HF  I H  H$ @ L X d J J D D EKL8@ @  M0@ 4@ DMLNp>xND B O D $O,D 0D <BP>d>>>>L8hPxQ Q RQ Q Q Q lQ pQ 2 2 2 2 O@ @ $M<Q @Q lQ pQ 2 2 2 2 O@ @ (M<8D2 T2 XQ \Q S2 2 2 2   4 $(@,H0TO@ @ M8O @ @  M48l2 2 2 . .  .    6  6 . 0   06 0(. , \4F8 \@FP T xX \\ ` xd h \l p t x | \   T  6  @ @ 2 $. (@ 8. D2 HWP2 \2 `. p . . X.  2 2 . D D  D  . Y 6$ (D 4EX4` h. x 4  T  6D8PO\@ p@ MO  6  X8(@ ,@ <M  `,4|" ""X" $"((t,"4ELF.4( (; (  "@"`D"` D0"``"`㿘  $b b ? ? @ b 2? 2  @ b @   &# #  ? @ # `2? @ # @ (`c0 0" 0"c0c, 4" 4"c,c( (" ("c(bH @ " @bHbL $ " $"bLbL"bH㿘 `(      &($&(&( &( @ "  p @2&@@&@  `$  "  p @2&@&    &@ "-` `? ? @   & & " `.`$ &  \ %ꀢ & \& # @% .` `" "& & $ b$ ``ϐ& .`"``"@(,  @ "("($"("(  (""f  ("@"㿐(4  *  *   '&`&`'0@ 㿐(4       '&`&`'0@  㿐(4       '&`&`'0@  㿐(4 @ 0E   &`'?&`'?2&`    (4  `?4@ ?4@ 6 ?6 } .2 < u<㿐(4  @ 1?i#   &`'?&`'?2&`U Q M I (4  `?4@ ??4@ 6 6?6(4 [ WT *?LIF,- )& *?,6 㿈    $ "$ ?"?2$  '$  '$ @    ?&(4$'0? &(4$'0 @  @ 㿘(B@46(B   6(B   ?D 6(B@ ?2 (@ 0 ?Ș* + 6(B2ؔ  ?㿘(\ (X  `>&(\ 6(@ (@`6(B(    @  &(X% (\ ?2&(\(@ @i (@ 0  (@  &(X&(\ (D`x@&(L㿘 Ŕ 6(@ 6(B j  6(B b  ? 6(B@ ?2 2(@   * 6(B2@  &(X&(\ `x&(L&(T(D@&(P㿘Ēh' ǔ %  @ ? @ ː` 0+͐Ґ ( *`@$#   * $#  *`@ $# $#@$#D$#H$#L$# @ $"   * #$"P$!$` ($` $`$`$$`  $`,`,$`($!$`$`$`$`$",$`0" `$" # $# L㿘@ ` ``@ `@   >6@ @ @ @ @@ @ @ @ @ "@ @ = 㿘` `@h "`    % `h$h () d, @, @ $@`p@2hd@ hd h  ` &hd&h$  h`.  ';`hp. h` &hp&h hx⪐ &hx@`%x%. @;&@    `? ? @   $ $ 2%@޶ #  \hĒe $ $ \$ @%  `" "$ $ "b%\@(7h$\1$@     `$ $ 2 #  ` \@hĖ @$ $ $ \$ @@ " b%h@4t@h``&h`  .   n&hh@ h$  h$h@4"@?@<"$ " ?, " "$`""`h" 㿘` `@h "`     `(h$h"&h$ *@ hd  ` &hd&h$ s h`,h(`bh, *` *  *  ࢑*  @?*  `; 1 hph hx`&hp&h6&hx @     `$ $ 2 hx #&hx ` \@hĖ @$ $ $ \$ @@ h@4 t@h``&h`" ,%@%``&hh@ h$  h$h@4"@?@<"$ " ?, " "$`""`h" 㿘 ` \ ` ` @@  @ ?$(D$(Hg  ` @`  `㿘 \ @D $X$\I "` p @2$@$``   "` p @2$@$``  @` @`  ` 㿘`$ !`\#``H" '%@@ (t$(t &`$` p&`H @2I @E `$ @@@ 8 ($(@"@@ (  \" ($"@  8 ("   ' h"@  &`H ` $( "(($@4"@?@2&`$  &`$ 㿘`\`$( ,! `H" '@@ t$t &`$  W&`H`$ @@@ J $@"@@ ,, ,  \,  @," 8("  g@ " $` &`H p" @2@$@4"@?@2&`$  &`$ 㿘 \ f(`㿐 \;n ` #  p ?$# 0@ # ` Pb? t @?#$#L$#H$#D$#@0@a#  @$# 09   2 ? t '  ` @ @? K@ ` 2`@:?BigMAC: Cannot reset the QEC. <3>BIGMAC: Transmitter will not reset. <3>BIGMAC: tx_cfg is %08x <3>BIGMAC: Receiver will not reset. <3>BIGMAC: rx_cfg is %08x <3>write_tcvr_bit: No transceiver type known! <3>read_tcvr_bit: No transceiver type known! <3>read_tcvr_bit2: No transceiver type known! <3>bigmac_tcvr_read: Whoops, no known transceiver type. <3>BIGMAC: AIEEE, neither internal nor external MDIO available! <3>BIGMAC: mgmt_pal[%08x] tcvr_pal[%08x] <3>%s: PHY reset failed. <6>%s: Link is now up at %s. 100baseT10baseT<3>%s: Link down, cable problem? <3>%s: Error, cannot re-init the BigMAC. <3>%s: Aieee, link timer is asleep but we got one anyways! <3>bigmac_is_medium_rare: QEC_ERROR, QEC_BMAC_ERROR, BMAC_ERROR, TXD_ERROR, TX_LATE_ERROR, TX_PARITY_ERROR, TX_SBUS_ERROR, RX_DROP_ERROR, RX_SMALL_ERROR, RX_LATE_ERROR, RX_PARITY_ERROR, RX_SBUS_ERROR, RESET <5>%s: Memory squeeze, deferring packet. BIG MAC<3>BIGMAC: Can't order irq %d to go. <3>%s: transmit timed out, resetting <3>%s: Transmitter access conflict. <6>%s<6>%s: BigMAC 100baseT Ethernet %2.2x%c <3>BIGMAC: Device does not have 2 and 3 regs, it has %d and %d. <3>BIGMAC: Would you like that for here or to go? ranges<3>BigMAC: Aieee, bogus QEC range for space %08x BigMAC QEC Global Regs<3>BIGMAC: Cannot map QEC global registers. <3>BigMAC: AIEEE, QEC is not in BigMAC mode! burst-sizesBigMAC QEC Channel Regs<3>BIGMAC: Cannot map QEC channel registers. BigMAC Primary Regs<3>BIGMAC: Cannot map BigMAC primary registers. BigMAC Transceiver Regs<3>BIGMAC: Cannot map BigMAC transceiver registers. BigMAC Init Blockboard-versionBigMAC Bufsqecbekernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment4$!:,  ,$2J  =$B$H$cP-@2Y-r=-b00 ( 5Li "2T;TG,|[m|dTT(<d8 \ l @,1 hGXhoX{,   ' @EKQbs 7Rk~ !2Mn# !2#>$ tMsunbmac.cgcc2_compiled.versionroot_bigmac_devqec_initbigmac_stopbigmac_get_countersbigmac_init_ringssun4c_bigmac_init_ringswrite_tcvr_bitread_tcvr_bitread_tcvr_bit2bigmac_tcvr_writebigmac_tcvr_readbigmac_tcvr_inittry_next_permutationbigmac_timerbigmac_initbigmac_begin_auto_negotiationbigmac_is_medium_rarebigmac_interruptsun4c_bigmac_interruptbigmac_openbigmac_closebigmac_start_xmitsun4c_bigmac_start_xmitbigmac_get_statsbigmac_set_multicastversion_printed.660bigmac_ether_initcalled.663*ABS*__module_kernel_version__module_using_checksums.div.urem.udivudelay_Ra39b4cf2printk_Rdd132261local_irq_count_R3e580ce8local_bh_count_R8c090c95___atomic_sub__kfree_skb_Rcbfaf351alloc_skb_R74d0de82skb_over_panic_R255f64c2jiffies_R0da02d67add_timer_Rbea990b2sparc_cpu_model_Rb1a8ddf9eth_copy_and_sum_R43ede27aeth_type_trans_R6a436647netif_rx_R56a7a815bh_active_Rfff9d0a3request_irq_Rb9ba6802__this_module___atomic_adddel_timer_R5811f067free_irq_Rf20dabd8___set_bit__memcpy_Rbfaaaa73init_etherdev_Rd7facc4aidprom_Ra3bdb69cprom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getintdefault_R858c90dc_sparc_dvma_malloc_Rac4503aaether_setup_R681499f5sparc_free_io_Rf8afdb8dkfree_R037a0cbabigmac_probeSBus_chain_R359591d7strcmp_Re2d5255ainit_modulecleanup_moduleunregister_netdev_Rc734b91a- 0. 0 X. X- x . x .  / 0 / 0 102p123( <, <44H p.t  .   .  < P@.D P| P. P- .   . h-   .   D ( X ( \ H d H h X l X t.  ` .  `   .     .   5 $5 06 -   .   45 @5 D L \6 -   .   7 7 p-$ (., D H.L X (\.` ( @. @ P. P `. ` p. p .  .  . , 0.4 D H.L X \ `.d h l.p ,1@23x | 43T hX h`4t89: . H; L; T; 3T hX h`4t89: . 8; <; D; \7 `7 p ht 0 h  0  0< 8. 8= = >?X1l212@= = 1,5 05 D `L.P `p5 12A . P5 T5 5 5  `. `5 8AH P.T B5 5 $182-4C< D T X \ ` d.h l t.x |  D D .D  .  .  $ 8(., 8H pL pTE`,0FHFT \ lG .  . -  .    ( $ ( ,H HH  8  8 G  P .  P     G! !.!  ! !$ !4G!H !L.!P !d  !h  !lI! 8! 8!H!7 !7 ! H!I! H! X! ! X! !7 " " " " " "  "$ "( "HJ"P "T "X "l x"t."x x"K"K"K"K"L# # #N #N #, #@ X#D `#XO#\ X#O# `# # #M$ $ $$ $0K$<K$HK$TK$\R$dL$t ELF,4( 㿐!8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @ 6!F?b 6!F !@* *` 2` &` ` @- ?) @ ` @"?! $?Ȓ* 6!F !@* *` 2` &` ` @ ? @ ` @"?  @  ?㿐!@ !82  @ @ !8`2!4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @a 6!Pa"    `@  @㿐!@ !82  @ @ !8`2!4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @@6!F  @!F!  @㿐! !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @a6!Pa ` `@"     !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @aV6!F   ?"  b   " ` !4  &!4 b ?&!4 }"  b   "b 0 㿐!8    !4 2!@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@!C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ !8`` !` " $@'  $@@ !8`` !` "$@?$@@ !8`` !` " $@'$@@!8`` !` " $@'$@@!8`` !` " $@!8'"*  $` ` @ ? @ ` @"? @ !8 ` ?#!8 @  !4 2!@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@!C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ !8`` !` " $@'  $@@ !8`` !` "$@?$@@ !8`` !` " $@'$@@!8`` !` " $@'$@@!8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @- 2 !*`2  " 㿐!!  `\&! `"!8! !8   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $'!*  $  @ ` `@  @"`@   ?# @!6!F@ 6!F !@*   $  @@ ` `@  @"`@  ͐ !8   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @?c 6!T !@* *` 2` $  @ ` `@  @"` @  &!   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @` Z6!H 2!8 [&!!8   !4 2!@$    $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @`6!Hf ! !@ &!   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @!86!H   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @!'6!T/ H !T6!T!@*   $  @@   `@  @"`2- @ ( 2*!H   !T?# 6!T !@*   $  @@ ` `@  @"`2 @    O &! ( ?2!8!@ @k !@ 0   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $'!*  $  @ ` `@  @"`@   ?# @6!T 2!&!!T6!T!@*   $  @@   `@  @"`2&!@ &!  @  &! &! !x`x@&!!c0 0" 0"c0c, 4" 4"c,c( (" ("c(bH @ " @bHbL $ " $"bH"bL㿐!8` π &` &!@&!8  &` ` @@ ? @ ` @"? 2!8@ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @ @ǐ&`&!8&!@В&` !@*   &` ` @@ ? @ ` @"? 2!8@ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @ @ &` &!@&!8 !@*    &` ` @@ ? @ ` @"?  @   !8   !4 2}!@ &`  &`&@&@  &`&@&@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` "&@'  &@@ !8`` !` "&@?&@@ !8`` !` "&@'&@@ !8`` !` "&@'&@@ !8`` !` "&@' *  &` ` @ ? @ ` @"? @  ` ?# @# @- @6!F@ ?2T!8 "H?!8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!H   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!J   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!L   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!F?* 6!N6!F !@*   &` ` @@ ? @ ` @"?  @   !8   !4 2}!@ &`  &`&@&@  &`&@&@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` "&@'  &@@ !8`` !` "&@?&@@ !8`` !` "&@'&@@ !8`` !` "&@'&@@ !8`` !` "&@' *  &` ` @ ? @ ` @"? @  ` ?# @# @d @ ?2U!8 "Ѱ?ѐ 2̰ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@'"*  &` ` @ ? @ ` @"? @  &?` ?# @`  !@* * 2 &` ` @@ ? @ ` @"?  @  㿘!4``9!8  "G ` 2 ??#&`` Ȕ &`!4 @&!4 ?&!8&!@ &`021`2  , `  ?#&`` Ȕ &`!4 @&!4 &!8&!@` ?&`0`"! &`&!8&!@ ?&` &!8&!@@  &!8㿘 `!      &!(&! &!$&! @ "  p @2&@@&@  `  @ "  p @2&@@&@  `` &@ "= ``? ? @ ` &`&``"0 , %`&``\`%쀢 &`\&`%@% 2`!, `!,`@ , $@ !$ , $@ !$ ``` &`&`  $&  " ?? 0!0@"!"!("! "!$` !* " "@  h  ?㿐!8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!H   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!F   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!J   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!L   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @6!N I!H(` ?#ߐ @6!N!H@"!N!N @6!N?# @6!N!H@"!N!N 6!N?# @6!N!H@"!N!N!6!N?" @6!N !@!N*   &` ` @@ ? @ ` @"? 2!F@ !F6!F !@*   &` ` @@ ? @ ` @"? 2!F@ !F6!F!@*   &` ` @@  ? @ ` @"?  ?@  ? !8   !4 2}!@ &`  &`&@&@  &`&@&@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` "&@'  &@@ !8`` !` "&@?&@@ !8`` !` "&@'&@@ !8`` !` "&@'&@@ !8`` !` "&@' *  &` ` @ ? @ ` @"? @  ` ?# @b6!F@ ?2X!8 "!&! @!F!@  2  d26!F6!F  !F!6!F !@!F*   &` ` @@ ? @ ` @"? @ 8 ͐ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @?c 6!T !@* *` 2` &` ` @ ? @ ` @"? 2 @  &!&! `x&!&!!x@&!㿐!!x`h   @ !4"2 "&!4o!4  +?c$ Ȕ $!4 @&!4 % ` +?? @ `2? 2@  `clc$!4` ? $ !8   ?$@ $@; 2?$bb    `@ b`2`@ $cc    `@ c`2` @  $b, $b$b  *` #$bP  *`@ $c  *  $c *`@ $c !`Pc`t @c$cL$cH$cD$c@I A;n `p#    2 ?! `t(   @ ? K@ ` 2`@:?`$`\.$`@     `$ $ 2 $    \ @ $ $ \$ @`@ `" !&>*  2,`i ,`i@4`t@`$$` .`  [$@  $ "' ( @4"@?ဢ@< ' ?, ' " $b"' 㿐`\?" @ &`   2_&`  @@ 8  4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @84F   4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @a 4P@ F !` @ F4F`@ @ F4F@  @F*   $` ` @@ ? @ ` @"? 24@ 4 ?#$`` Ȕ $`4 @$4@@(( "$( *@   ` $$(@@| ,,`k0,* * 0@*  @2 `;``; $ $@"̐ `$$@     `$ $ 2  &$ ` \@ @$ $ $ \$ @`@ @4 t@`$$! %% ,`$@ `$ "&` ( @4"@?ဢ@< &` ?, &` " $b"&` 㿐 \?" @ '   2'  @@ 8  4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @84F   4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @a 4P@ F !` @ F4F`@ @ F4F@  @F*   $` ` @@ ? @ ` @"? 24@ 4 ?#$`` Ȕ $`4 @$4@(@(  (, `, @ $@p\@$@2@     ` $$(@@Ǵ -2`; @$-; $ $" ̐ `$$- $ - , @ !&& ?&@ " `? ? @   $ $ "ܴ% $  \% e쀢 $ \$ @%- `, @ @" ! ` $ $ &@`\:>`$`\4$`@     `$ $ 2 $    \ @ $ $ \$ @`@ - ,`  @@"!&@>*  2,`i ,`i@4`t@`$$ - @ I@$@  $ "' ( @4"@?ဢ@< ' ?, ' " $b"' 㿈`' /` \?"@ &  I  &  @@ 8  4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @84F   4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @a 4P@ F !` @ F4F`@ @ F4F@  @F*   $` ` @@ ? @ ` @"? 24@ 4 ?#$`` Ȕ $`4 @$4@(@(  (, `, @ $@p\@$@2@     ` $$(@@ .`2`; @.`; $ $" ̐ `$$.` $ !`%{%9&@ " `? ? @   $ $ "& $  \% e쀢 $ \$ @% "  !  $ $ %`\4? `$`\.$`@     `$ $ 2 $    \ @ $ $ \$ @`@ `" !%? *  2,`i ,`i@4`t@`$$` .`  [$@ $ "`( @4"@?ဢ@< `?, `" $b"``C& 㿘 \!4 @@  !* !a."   ` @@   2 ` ` @@   !@ @?05  ` @`  `㿘 \  $@@  ? @ @`2?  @   "` p @2$@$``   "` p @2$@$`` @x4 @@ " @* "@` @`  ` 㿘`\`$ @" !(1 `H" '&@@ !$!   `b @@ &`$ &`H! @"@ဢ@"1  \ 2 \* ( "  ( h"@  ?8+@  " $! ` &`H "! !(4"?ဢ2&`$  &`$ 㿘`\`$, 0! `H" '@@ ᨐ$O &`$  S&`H`$ @@ G ( @"@@ ,, ,  \,  @," ?8,@ @ (# $ ` &`H p" @2 @ (@4"@?ဢ@2&`$  &`$ 㿘`\`$ @ ! `H" '(@@ a$a@ a``  @b @Ӓ &`$ &`Ha(a @"@ဢ@"8  \ 2 \1 ,`" a a,*  @ `," `?8, @ (# $a ` &`H`"a a(@4"@?ဢ@2&`$  &`$ 㿘 \  !㿐`\;n  `p`$ @`P?`t@ ?"L"H"D"@C&`$ @" ;&`$  0`t ' ` @@? J@ `0?;?happy meal: Aieee, transceiver MIF read bolixed <3>happy meal: Aieee, transceiver MIF write bolixed <6>%s: Link is up using external internal transceiver at 100Mb/s, Full Duplex. 100Mb/s, Half Duplex. 10Mb/s, Full Duplex. 10Mb/s, Half Duplex. <6>%s: Link has been forced up using 100Mb/s, 10Mb/s, Full Duplex. Half Duplex. <5>%s: Auto-Negotiation unsuccessful, trying force link mode <5>%s: Auto negotiation successful, link still not completely up. <5>%s: Link down, cable problem? <3>%s: Error, cannot re-init the Happy Meal. <3>%s: Aieee, link timer is asleep but we got one anyways! <3>happy meal: Transceiver BigMac ATTACK!<3>happy meal: Receiver BigMac ATTACK!<3>happy meal: Fry guys.<3>happy meal: Transceiver and a coke please.<3>%s: Happy Meal would not start auto negotiation BMCR=0x%04x <5>%s: Performing force link detection. <3>happy meal: Eieee, rx config register gets greasy fries. <3>happy meal: Trying to set %08x, reread gives %08lx <3>%s: Error interrupt for happy meal, status = %08lx <3>%s: Happy Meal receive FIFO overflow. <3>%s: Happy Meal BigMAC SQE test failed. <3>%s: Happy Meal transmitter FIFO underrun, DMA error. <3>%s: Happy Meal MAX Packet size error. <6>%s: Happy Meal out of receive descriptors, packet dropped. <3>%s: Happy Meal rx DMA errors [ GenericError ParityError RxTagBotch ] <3>%s: EOP not set in happy meal transmit descriptor! <3>%s: Happy Meal MIF interrupt. <3>%s: Happy Meal tx DMA errors [ LateError ParityErro TagBotch <3>%s: Happy Meal register access SBUS slave (%s) error. paritygeneric<5>%s: Resetting... <6>%s: Link status change. <6>%s: Switching to 100Mbps at full duplex.<6>%s: Switching to 100MBps at half duplex.<6>%s: Switching to 10MBps at full duplex.<6>%s: Using 10Mbps at half duplex.<6>%s: Memory squeeze, deferring packet. HAPPY MEAL<3>happy meal: Can't order irq %d to go. <3>happy_meal(SBUS): Can't order irq %s to go. <3>%s: transmit timed out, resetting <3>%s: Happy Status %08x TX[%08x:%08x] <3>happy meal: Transmitter access conflict. rangesQuattro<3>Quattro: Fatal IRQ registery error %d. QFE request irq<6>%s<6>%s: Quattro HME slot %d (SBUS) 10/100baseT Ethernet <6>%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet local-mac-address%2.2x%c <3>happymeal: Device does not have 5 regs, it has %d. <3>happymeal: Would you like that for here or to go? Happy Meal Global Regs<3>happymeal: Cannot map Happy Meal global registers. Happy Meal MAC TX Regs<3>happymeal: Cannot map Happy Meal MAC Transmit registers. Happy Meal MAC RX Regs<3>happymeal: Cannot map Happy Meal MAC Receive registers. Happy Meal BIGMAC Regs<3>happymeal: Cannot map Happy Meal BIGMAC registers. Happy Meal Tranceiver Regs<3>happymeal: Cannot map Happy Meal Tranceiver registers. hm-revburst-sizesHappy Meal Init BlockHappy Meal BufsSUNW,hmeqfeSUNW,qfekernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment4!d0  ,20  =BH iPX2YŊ=b4 / δ !0>S@e D~ P(xc$-x-HxP I4#Kp?Llah4porP }<  44 H4|$:V<rxtX( ( .F _djp#=Vt *8KVjL!;BTu%6BQisunhme.cgcc2_compiled.versionroot_happy_devqfe_sbus_listtry_next_permutationdisplay_link_modedisplay_forced_link_modeset_happy_link_modesis_lucent_phyhappy_meal_timerhappy_meal_inithappy_meal_get_countershappy_meal_tcvr_resethappy_meal_transceiver_checkhappy_meal_init_ringssun4c_happy_meal_init_ringshappy_meal_begin_auto_negotiationhappy_meal_set_initial_advertisementhappy_meal_is_not_so_happyhappy_meal_interruptsun4c_happy_meal_interruptsun4d_happy_meal_interruptquattro_sbus_interrupthappy_meal_openhappy_meal_closehappy_meal_start_xmitsun4c_happy_meal_start_xmitsun4d_happy_meal_start_xmithappy_meal_get_statshappy_meal_set_multicasthappy_meal_ioctlquattro_apply_rangesquattro_sbus_findquattro_sbus_register_irqshme_version_printedhappy_meal_ether_initcalled.702*ABS*__module_kernel_version__module_using_checksums.div.urem.udivudelay_Ra39b4cf2printk_Rdd132261jiffies_R0da02d67add_timer_Rbea990b2local_irq_count_R3e580ce8local_bh_count_R8c090c95___atomic_sub__kfree_skb_Rcbfaf351alloc_skb_R74d0de82sparc_cpu_model_Rb1a8ddf9skb_over_panic_R255f64c2iounit_map_dma_page_Rbf0e9ec0del_timer_R5811f067__memcpy_Rbfaaaa73eth_type_trans_R6a436647netif_rx_R56a7a815bh_active_Rfff9d0a3eth_copy_and_sum_R43ede27arequest_irq_Rb9ba6802___f___irq_itoa__this_module___atomic_addfree_irq_Rf20dabd8___set_bitstack_top_Ra6cab6a7__copy_user_R9c5239ebcap_bset_R59ab4080quattro_get_rangesprom_getproperty_R156810c5SBus_chain_R359591d7kmalloc_R93d4cfe6panic_R01075bf0init_etherdev_Rd7facc4aidprom_Ra3bdb69cprom_getproplen_Rff8b6749memcpy__bzero_Rdd42e263prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getintdefault_R858c90dc_sparc_dvma_malloc_Rac4503aaiounit_map_dma_init_R5e1dc352ether_setup_R681499f5dev_new_index_R8fddc84chappy_meal_probestrcmp_Re2d5255ainit_modulecleanup_modulesparc_free_io_Rf8afdb8d___f_mmu_release_scsi_oneunregister_netdev_Rc734b91akfree_R037a0cba404t444`4 5 44 @5 @ x5 x    5  5 4@4444p4 5         5 (5  (0 4 < @ D5L P5T <444 4 <4 4   5    P  P  `  ` 5 , p 4 p 8  <  @5 H4 4 4 4 H4 4   5  4`44444 5 l44404l44 5  4\44444 5 $4h444$44 5  5 D4d @h5l @l44404l44 5 |4 @5 @44$4`4440 458  l4 4 4!04!l4!4" "5" "P "\5"` #P4#4#4$4$P4$4$ $5$ %4&84&|4&4&4'h4' '5' (4(< @(@5(D @(4( @(5( @)P )X5)\ )t @)5) @*p4*4*4+44+p4+4, , 5, ,4, @,5, @, p,5, p,6 ,6 -7-4. @. 5. @.4/@4/4/4/40p40 050 1$41H @1L51P @2<42424343<4343 353 4X44| @454 @5t454546046h4646 657 7848@48484949@4949 959 :4;(4;l4;4;44>L4>4>4? ? 5?$ @,4@p4@4@4A,4A4A A5A B84B\ @B`5Bd @CT4C4C4D4DH4D4D D5D E4F04Ft4F4F4G04G4G G5G H<4H` @Hd5Hh @H4IH4I (I5I (I8 I9 I8 I9 J<:JP;J:J;J<K@= KL K`KP K`KX>K`= K?MX4M4M4N4NX4N4N N5N O4P@4P4P4P4Qp4Q Q5Q R4R4S(4Sd4S4T4T4 T85T< UD4U4U4V4VD4V4V V5V W4X,4Xp4X4X4Y\4Y| Y5Y Z4Z @Z5Z @[<4[` @[d5[h @[4[ @[5[ @\4]4]T4]4]4^44^T ^X5^\ ^4^ X^ X^5^ ^5^ _l4_ @_5_ @`4`4a4aX4a4b4b( b,5b0 b4b @b5b @b6 b6 b b c7c0@c4c4c= c c5c c= c= d4d d5d e4e@ eD5eH g g5g g g g5g4hl4h h5h j4jX4j4j4k4k4k k5k l4l4m<4mx4m4n(4nH nL5nP op4o @o5o @o @o @o5o xo5o xp p5p p, p45p8 pH pT5pX pl Hpx5p| Hp p5p p p5p p p5p p p5p p p5p q q5q q(  q45q8  qH HqT5qX Hqh ql qp5qt q pq5q pq q5q q q5q q5q q q q q q r r5r( r05r4 r r5r s4s4t,4th4t4u4u8 u<5u@ vH4v4v4w 4wH4w4w w5w x (x5x (x8 XxD5xH Xxl xt5xx x x5x x4y @y5y  @yH4y:y;z<{0 {D{4 {D{<>{<| ||  ||>|$A|dB|pC| |5| }D }$D },D } }5} ~4~44P444  $5( 04t444044 5  (5 (  X,50 XT \5` t |5 4 @5 @04t<  >E B,C 5 D D D X d5h T4444T44 5 4<4444l4 5  (5 ( X5 X $5( < D5H 4 @5 @4d:x;\?<  > ?x<  >A$?\BhC 5 D D $D  5 44,4h4448 <5@ H444 4H44 5  (5 (8 XD5H Xl t5x  5 4 @5  @H4:;<0 D4 D<><   >$AdBpC 5 D $D ,D h= =  }<  }< F   rP     rP F PG  P,5LH PH \I4 5 :;X:l;@JH H H :K$6 (6 < D5H X ` x56 6 $6 6 6  5 6 K  5 pA6 6 :;PK`6 d6 x 5   56 @?6 6 $KL L M4,4p444\4| 5 444X444( ,50 L MN N @  P3  Q Q R O    }< }<  rP  rP 4   $ @(= ,= T 4` dFx5| S @= R$T0 4 D H L PP T5X Pd h Xp Xt55 U   VU P U W  50 458 DX\ `5d h p Y X XZ p p  Z  $ , <ZP X \ Xd XtZ p p  Z  5  [X ` h[t x |\= =  8\ 8] H | |  H= ( 0 8 < <D <H P T X t\ ` d t^_     Q Q   H X `a HLaP X`ad `  `    dd$d0d<dD= H= `ehfpg ELF"T4( 㿘 &  &  $& & @4@`  b@ *"$f㿐(  h@.   @ ? 2  $@ @  @ ? 2  @? " g? $` $($` $`$`$`$` @$`$`$ $` `$ "  ` $`,`, \$`($`0$`4. . . . . .  .  . 0   .  .  .  .  .  . .  `     .   . l#@c `@ 1@c   ?? @   /@㿘 @  @  D& D@ @  D t & D& t@ @  D & D@ @  D  T & D& T@@ @  D & D @@ @@ @  D T!a& D& T@ @  D  p & D& p@ @  D & D@ @  D  p & D& p@@ @  D  p & D& p@h @ T!a& @& Td @ \!a& @& \b @ l!a& @& l @  @ \ & @& \a @  @ T & @& T``@ @ d!a& @& d` @ `!a& @& `@  @ H l` & @& H& l` @  @ X & @& X` `@  @ & @` @  @  l & @& l` @  @  l & @& l`Z 㿘   ,@ b $ * @*`@*` ' ?*@ @  `; 3  @ X  H`& @& X9& H @     `$ $ 2  H && H ` \@  @$ $ $ \$ @@  @4 t@ 0 8`& 0& 8b %% ,@  &  @ 㿘@ cߤ , ` 5  `$ @c 2$ n$ ,㿘 \ #* ,  ` @`  `㿘 \   ,  @ ? 2  $@ @  @ ?  @` @`  ` @ *`  '4<` `"4@ "<"`$@4"@"@0  `$ 㿘`\ $`$ @! `H" '@@ , &`$ &`H@"@?@ *`  > *`  \, -  ",  @@8" g@  " $` &`H p" @2@@4"@?@2&`$  &`$  \ 0㿐;n \ p$ , @P2t@ .`     ( 0LJ   0?t 6'  ` @@? J@ `@0?>`QuadEther: AIEEE cannot reset the QEC! <3>QuadEther: AIEEE cannot reset the MACE! <3>QuadEther: Cannot reset QE channel! <5>%s: Warning, link state is down. <3>%s: Excessive transmit defers. <3>%s: Carrier lost, link down? <3>%s: Excessive transmit retries (more than 16). <3>%s: Late transmit collision. <3>%s: Transmit fifo underflow, driver bug. <3>%s: Jabber error. <3>%s: Babble error. <3>%s: Transmit descriptor is bogus, driver bug. <3>%s: Transmit late error. <3>%s: Transmit DMA parity error. <3>%s: Transmit DMA sbus error ack. <3>%s: Receive fifo overflow. <3>%s: Late receive collision. <6>%s: Receive packet dropped. <3>%s: Receive buffer too small, driver bug. <3>%s: Receive late error. <3>%s: Receive DMA parity error. <3>%s: Receive DMA sbus error ack. <6>%s: Memory squeeze, deferring packet. <5>%s: transmit timed out, resetting <6>%schannel#ranges<3>QuadEther: Aieee, bogus QEC range for space %08x QEC Global Registers<3>QuadEther: Cannot map QEC global registers. <3>QuadEther: AIEEE, QEC is not in MACE mode! burst-sizesQEC Per-Channel Registers<3>QuadEther: Cannot map QE %d's channel registers. QE MACE Registers<3>QuadEther: Cannot map QE %d's MACE registers. QE Init BlockQE RX/TX BuffersQuadEther<3>QuadEther: Can't register QEC master irq handler. <6>%s: QuadEthernet channel[%d] %2.2x%c qecqekernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment40!,  ,d28  =tBtHP!2Y!=!b$\P  (  -x;x\C $TLb hv P~   h      -?EVg{$6I_ 4i~#<YoD`sunqe.cgcc2_compiled.versionroot_qec_devqe_init_ringsqe_initqe_set_multicastqe_is_bolixedqe_rxqec_interruptqe_openqe_closeqe_tx_reclaimqe_start_xmitqe_get_statsversion_printed.618called.621*ABS*__module_kernel_version__module_using_checksums.div.urem.udivbzero_1page_R84f9fba4__bzero_Rdd42e263.umuludelay_Ra39b4cf2printk_Rdd132261alloc_skb_R74d0de82skb_over_panic_R255f64c2eth_copy_and_sum_R43ede27aeth_type_trans_R6a436647netif_rx_R56a7a815__this_module___atomic_add___atomic_subbh_active_Rfff9d0a3___set_bitjiffies_R0da02d67__memcpy_Rbfaaaa73__kfree_skb_Rcbfaf351qec_probeSBus_chain_R359591d7strcmp_Re2d5255ainit_etherdev_Rd7facc4aidprom_Ra3bdb69ckmalloc_R93d4cfe6prom_getintdefault_R858c90dcprom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169e_sparc_dvma_malloc_Rac4503aaether_setup_R681499f5request_irq_Rb9ba6802dev_new_index_R8fddc84ckfree_R037a0cbainit_modulecleanup_moduleunregister_netdev_Rc734b91asparc_free_io_Rf8afdb8dfree_irq_Rf20dabd8 0 " ( (" X X#d!\"t" #  #  #  H P#T t 0|# 0 X# X #  # 8 @#D p x#|  #  8# 8l `t#x ` #   # H P#T | #  #  8# 8$H \L \T%h&t'( `# ` )  )  * "  ( ( ( D" \)  ` X d X h# p)  t)  + 8, L, T, \, - . .   #   . X/ . . + 0 L-  (2 ,2 < P T X3|  333304@ P5 d5 5      # 4 5 5 45 T6l  77<77   8$  #9 9, <:P (T#X (| X# X" #   77(   @ P : :8 @;D @`;d P" ( (" X X#  $ ( h, 0 $4 8 hD P h\ h $<  h= x# x      #,#D#H d>     #?? H L P1d h x  B C C ?  D C?  ELF4( `  ` 2@`P@"*`Q*`Q@`2` 㿘 ' %    2 2` 2 `@  `  2 2` 2 `} t` ;  2j "fL 2b `@ " @4 X$ \$ |"@  "Q@( 2 T@ `` 5` @ T` "` $    @" x  |` @ ,@ @@ 2  @ 2  - @*`% < % t% \ $ $ $ @"%@ 2 ` @㿘 x T` ` @ T` "` $   @ 㿈 'D'H'L'P'T 2T22`ݰ?PDxPx ' P `@ D @``   @   .``d `  : `@x `2:q `@#\@d`"b ` T 2@2X@ `2T@ @`#\#`@L`0  * @ `2)L :`@ ``$L@` `:)L :`@ ``$L:@@`@`2`  @ l`@`DL$H  LP&6㿘 F 2?@  @ | `  &?㿘 `&  @ \2 @ ?㿘`@ ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  ü|zyvutsrqnmlkjigfec\ZYVUTSRQNMLKJIGFEC<:9654321.-,+*)'&%#:Am@01.01mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... fcalsocalFCALCannot register FCAL host FCAL: Total of %d Sun Enterprise Network Array (A5000 or EX500) channels found Sun Enterprise Network Array (A5000 or E?500) on %s PROM node %x Initiator AL-PA: %02x Attached devices: %s none [AL-PA: %02x] Not responded to PLOGI [AL-PA: %02x, Port WWN: %08x%08x, Node WWN: %08x%08x] Not responded to PRLI [AL-PA: %02x, Id: %02d, Port WWN: %08x%08x, Node WWN: %08x%08x] %s Unknown device%c Fibre Channel Arbitrated Loopkernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4!\  ,@2  = TB TH hP 82Y jc j= lDP  *#/LH@` Y _djp pDL,:Pew`h`8QnLfcal.cgcc2_compiled.alpa2targettarget2alpafcal_select_queue_depthsfcal_encode_addr*ABS*.div.urem.udiv__module_kernel_version__module_using_checksumsproc_scsi_fcalfcal_detectfc_channels_Rfac845fdrequest_module_R27e4dc04memcpykmalloc_R93d4cfe6scsi_register_R622c52fbpanic_R01075bf0___atomic_addfc_do_plogi_Rda138acbfc_do_prli_R804a85a3__bzero_Rdd42e263printk_Rdd132261fcal_release___atomic_subkfree_R037a0cbafcal_proc_infoscsi_hostlist_R6dbc9e5asprintf_R3c2c5af5scsi_device_types_Rd54b74acdriver_templatefcp_scsi_queuecommand_R60230385fcp_scsi_abort_R15d01087fcp_scsi_dev_reset_R7abaed9afcp_scsi_bus_reset_Rb6d678dbfcp_scsi_host_reset_R5176c4cbfcp_old_abort_Rcaa29114init_module__this_modulescsi_register_module_Rfa20b7b0scsi_unregister_module_Rf741008fcleanup_moduleP X ` d      $ \ `p @t @     $ Tl    !(#X$l& p&  8 8'  ,'0 @ P T \ ` d l'    ' ,'0 x 8 8'  ( (   ' ' @ D'H X x'|  '  ' \ |  ) 1 ) 1 23) ) 3t%"*+,-./ELF 4( 㿘` @Z㿘?& ` @ ` @I`  ` 2@`P@"*`Q*`Q@`2` @'D & ! 3`&`` 2 @` 2@` "`@`2`` `@  ``` 2 @` 2@` "`@`2`` `~  * * " * " *  @* 5 &@ i /*@ *`"@ *`"@ *`@ @*`@ X  `+"`%``M  `! 1` 2>@`"> ` 26@L` 22@` @  "Ⱀ @4`X$`\`$$`| @ ""x9?   #*E*I""*C"""T!"@a"l"@`2` 1)`  ?# %"`!("`@`@ @``" c$ @  @Q` ```@`   "`  €!`2`$@ ᰐ  JḘ`J`Ḁ`JK  ``JK "@`2y`$J  L  `JK  ``JK "@`2a`$ 6 7@ * @  \`D@  2`T@  ` ` @`T` "` 7$< 6|$D`x$\$t 6 $` 7$`$` 6 7@ @*`$x @ -`@ 2*$@ -` @ 2*(@ -`@ 2 *``$  `V`*@ *`"@ *`"@ *`@ @*`  @㿘 x T` ` @ T` "` $   @ 㿐 x! <  D #\#`   |`@@ "` xP` @㿘 F 2? B    @ ?@  6@ B6` @6`6` &㿘 `&  @ \2 @ ?㿘`@ @@@@@@6Am@01.01mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... plutosocPLUTO: Not enough memory to probe SSASUNCannot register PLUTO host PLUTO: Total of %d SparcSTORAGE Arrays found SUN SparcSTORAGE Array %s fw %s serial %s %dx%d on %s PROM node %xSparc Storage Array 100/200kernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4 !  , 2  = B H P 2Y c = 'lP   DH%L*P30H0Z8\qL|   Dd  '5;H^w+?Pdv`,xp`,If L lpluto.cgcc2_compiled.fcsfcscountfcssfc_timerpluto_detect_timeoutpluto_detect_donepluto_detect_scsi_donepluto_select_queue_depthspluto_encode_addrbuf.412p.413*ABS*.div.urem.udiv__module_kernel_version__module_using_checksumsproc_scsi_plutofc_sem___atomic_add__up_R450143b0___atomic_sub.umulpluto_detectfc_channels_Rfac845fdrequest_module_R27e4dc04scsi_init_malloc_R7a0e9b85printk_Rdd132261__bzero_Rdd42e263scsi_command_size_R9b05ea5cmemcpyjiffies_R0da02d67___f_disable_irqfcp_scsi_queuecommand_R60230385___f_enable_irqadd_timer_Rbea990b2__down_R4663c8e5del_timer_R5811f067kmalloc_R93d4cfe6scsi_register_R622c52fbpanic_R01075bf0strchr_R349cba85scsi_init_free_R6ac8ba0bpluto_releasekfree_R037a0cbapluto_infosprintf_R3c2c5af5driver_templatefcp_scsi_abort_R15d01087fcp_scsi_dev_reset_R7abaed9afcp_scsi_bus_reset_Rb6d678dbfcp_scsi_host_reset_R5176c4cbfcp_old_abort_Rcaa29114init_module__this_modulescsi_register_module_Rfa20b7b0scsi_unregister_module_Rf741008fcleanup_module  D LL LX h l x  # #  H  H4 H< HP H\ H` d$h l# x H H H H H% D D & ( H, PP'\'d h# l p Ht Px L L(  (    H ) D4 D8 0X 0 D D*   H 8 D  H+ D 8$,, D8-@ HT* X Pd.l x  L H0 H D D $ ( |   !1 H2  3$ 4 D` !')4)4()84P Hh H| H D5  & 74 D P H` Hd9p4x |   9' $: (A ,: 0A <B XC p: t: xC   /"68,;<=>?ELFvt4( 㿘)@ @  ` '  4` ?d@  ? 2@@ @ 2 ?` *` €` 4``4``4``4``4`@4` @  2@ 2 d@ 4d@?d@ @ ? @ `  ?%@  ` ? `  @ ?`  @ ? 2@@ @ @ ?` *` €`6` `6``6``6``6``6@d@@4d@` ?# 4`  㿈 x HH/ 4d@br   4b$` 4b@! 4`  c4`"4`B?`  @ ? 2@ 4d@%   4`   4`   4` 4` 4`d `  .%##".%4d.$    ! %6%6% 6% 6%6%6%6%6%6%6%6%6%  ͆%  %$    %"% 22N% "2@2@222  `  $ *@?%? ? @ *` &% 4d@ 77  $=  07%7  2$@"& $) &  !77 7 777  $  77 7 777}   $ @ R  27%7% 7f  37%7^   ), 77U   ,  7J  17%7B   8 , 77@*``773   `  7%7'  &  㿈 `  -HHo`* 4 6 *, @   * "  $ 4` 4`"4`B!`  @ ?  $ @ 04d@@# 4`%  4`0   4`0 4`04`4` d  .%##".%4d. 4d@4d@bv! .%.% 4d@ 777777  $m  ), @ 777  2$@ $S 4, 4d@@# 4`4`  4d@ 77j  2$" $2 77X  7R  2$耤$  4%.$*`.$:`.$778  2$耢" %$ @ 2  ?$ 777  ?777  㿘e @ e @d@  e d@ e  d @ d @ Le  2 ,ed @ ,e P'D & ` '  ' "n `@ `@ #@` 2U D @K@%䦒 x@ 2 @ $<$$$  #+? 3 2" $ `@ @`@$@ c - $` `0@ `0 4 @8 $@ @`4`0   @  $@ ,$T$P ;,X$$\*@ $"@"$ `\    @@ @   $#+`\@3`@`@??$579;`@?$2  ` @ $`"d@`@  @ ` @  0 0" ,@!  @b@* `, (,@$@$$@$ $ @   @ 6 "@  # @'`@   @, ,@ `$ * * * * "     6$   "#@`$ 4 @$`@ ?$` l@ T& $`  T $`$4`$` ,"  @ *`  " 5% $  "@,*"  5n%h  &!@ 㿘  `C  *` € ab  d h@@2         @   * >㿘H/`3`u  l  5$@ `  @   @  @ @  @ $5 "G$ , *` "  ?* 2     "  $ @`Ȓ @   Q$a$a`~`" @` `@``@`T `@*`@ %@ 5 `2$ 2` 㿘H`` k4@ ` @   @  @ @  @ &`4 `"G&`` `, `*` "  ?* 2     "  &` @`Ȓ @   dː$a$a`~`" dd@` `@``@`T `@*` % 4`2`&`㿈 @  A@ x` ! 2 + @" @  +  @  A* 3 7777 @@  ` 2`㿈`x@   2`7%7  @" @    2`㿘 `&  @ \2 @ ?㿘`@ x0$ COPYRIGHT 1991,1992,1993,1994 QLOGIC CORPORATION ISP1000 Firmware Version 01.31   qp ? pISpP p p?p 10 y5xc/ '  @B Qxx xxO i5@jh< !xlh(hh hhhh#hh' i6  h hhhj-  i6 h7h @hhdpxx8x/:xx32 ppxxxxx2}x}x//xxxxp p z zp@xx0x/ 5h!/xx6x 5o!e@ 5j!!! `x)xx 5o 5i! @- @xx| a`@8|ppppp 8yHVVagDk$2FZ9CJp  8y rq @xsrq @p a` P @|p@x A A Sxppzxxxx ppISpP p p?p yx 10 Y )W Qp ar P @xUqrsp 10@psr Q I4 Ap& IB ANpp q.pp@Bp   B J &Sxp @BHB&Sxp &Sxqp!^ rxppxprstprstҠ@}xrzz{~|vxxxxxxprstprst֠@xz{|xxxxxx 5Y! x 5A! x 5B! x a5@a bx 5E! x 5F! x 5G! x 5H! xyz xqā6jh@kxk xwx kj 'xwx ijk xqġxxqġ 5A"~!xuxq 1 "@#p!xx1~ 5B"!~xxd2K a5@a bp`p`x a5@ap`xq  (@c  2@c  < a5@`~a#xx3xqġ 5G"!~xxqġ 5H"~!xxqrȡ!yx "z xxqā6 rh~&@j @@@@ρ@@xxxxr̂@h@ a5@a(@衆2@<@dHxPHxCHqqrxj hhk qxwx jk phph'xqrs̡xxwx jj 'xwx jj h@Ax 'xwx jj h@Ux 'xw A I Q x 'jxwrswrsxh@'xx |  @x xww A! I Q x a5@`g`x x|wwwwƧ a5@``gxx  A! I Q xph68 |x 9 A! I Qx h i 8ݧ?8? ih0@@hK hH@ p xhK hH@px px y5x a5@```xxhh hF |xx@x`qqyJ|tsrtsr y5 @xo@x?@Zxxx` x 5h  # " $   , .%0~x/eeff`` x|p@xqpyxqq!hx ii -h p@xp@pxqrs!!yp@qrsxp@pppwqx 1&$0$"F 1xxxUUy`qqġybxy`qxyTqqyVyXqqyZy\qqy^xyTqyXqy\qxp @pppqrs 0` Sx ppq1p q p|p @KppFpqrs 0x ppp Zp lq l,Sp|xPe@w,xR c|~ y5xP b,xR| @zR @/  x | 6|x)h**h.h i 5O! h@ ``h~ x ~he@`hxxhhii|e@`` xx!x|`  @h(`h,`|~ q5@p@5- pB|~ q5@ 5r@!H!!tB|x hxe@_x),x`e@_` #`#,( 5O @_hF` `hFhxPdx `dP,h%`x`` xhh | 9 A! I Q x8j?8?j | a`xx|@xyxx` x x xx` x  xx`  xp a` @|,`, cxdxfxhyj@,xyn| ~ a5h- k`d`f`haj@-xan |x@ ~`e@x `xx|xle@ xdxf,xnxj |xeytprТ"3x@exhe @xexo@ez|{x @x?@\xxxxe xxxx xexx`yf|n}nnnn 9xx``x`xxz|x@xnx`x`@x@xxxx|xxnxx|x@xnxg `@ӧ @ 9 @xx- h+h/hh - h pxxx|xm,xx`x,h`x-`x`xxxxx `|.%0a`a@~x/eeff``gx h@? x x xxxy` F`"jh HU@U 9xzxy, he@]aiai!``hh h@@s@h xxxx|`` x xe@`x`x}xx|ypxt xvpx@xh @|h )xle@x@~x(x@ @|{yrpԢ"#|Hף||x `$@ @x@xx xxxx x xxyx xp֠|z{| 5h ~ y 5@ !4 5!4x044xD |~ # q5@ y - +#@Px##S3xCx xx p\xTpxbxxxCxSx 8pG5pC | " x[|  px" |  px! |  px" | "ϡ | ~ a`bc |" ~ a``` |" ~ a`` ` | ~ a``b `c  | ~~h@9 a?xA@' a> ~xA@ `pxx9> q5@p``q` pxx5 q5@``q` px x;   |,@X `` U`U`UxZ`xB| 5A"  ;"@j !!"|~h䠌 @`6p q@ @ 2@x x ?x !p |h~ qp. qpppÀ qp @ px~~~ #<~X|0}8?@@ا|-xPxy "%k%%&e&'D S%Jx |pp?p0@ p3p\py*Kqxx Fx$(pxx-^Ipx~xxx x`xx[ x$Ippp35pxx-^oqx~xxyxx`xx[ x$oppp35pxx-^qx~xxyx qyx x`xx[ x$ppp35pxxKx-^p hxox,,Phxn A xx-^xp\ hox,,P`` hx 1 Ax- xt@@5 0qD*H 5!de!qFpp?xv@5qD&xqF%h%Xu>,P`4gw6?@/!@@g @/`g hna@?`HB@BxHp `"g k6 ` HpJ`pN`pR*`xFx-^kpL@s@u@{ {@g xqL@) !H "H  H@z@x-wja >,d@``` ~*``` xx-^*`ay@q. ~qP@ݡ@x*ݡ@x)p`@桍yZix`(xxahhx~~~ ,x Shx~xm}}n~~x0`` x-wxr*xIx-wx;j zZxIx-wr%@;yIp2G``xQ0000QQQxxx ~ y5x@yphpxpwp hhhhhp~ q@ 5+ x 5! 5 5+ ppxpx.  9x+pxp yx !5W$@ƭh "xhox,x(xpT `h`jhhx !?x !5Wx !>x px a6`a``pxpp?x~$@ hh~jhhxx  #|P#x#y&)@/xpppy6>>@t)>t>xwx+wx,`@k !?  x@k~ !>~  x@j pjx[8Fxxwx,`@ !?   x@~ !>~   x@ pxx"yxppx"yxx$p(x(`` x(@(x$@ h-~h@- x "ihhx```` x(|x#y 5xx   0 xIxx전@!y # )  -X-X  /xp@ x"x+xUxx+xxx+xxx+xx _x$py > F S F( H( F Fxqp Qx)x(x(`` x(@(xx   0 nxIxx전@ j!y x -X-X -Pxx+xUxx+xxx+xxx+xx#y xx&ehxy䡄0@&ex전@&ey # ) -0-X-X -PxP x#y """y "xxx H+j+jy +j+j+j+ xy@ @ x+jp x'R+jy!!!!.!0!+j+j!+j+j""+j+j+j"x@!% x:xxh@!,hx-0xii!Jh!Rh!Bh@!xXx@!RxXx`@!@!!`x!z~Znxtzyx!m?k!hk"h@@!~Znp!x/:x0xgxx1jilk"@!""!|{#!@~Znxgxxg"!x0xx1xxjxxXxxx"!i@!ܡi ~pH ````` x"@"i ~pH ````` ,H @"x,x)@"x`(x~X~Z" xUxxix~X"xXxxjxx+px+p y@"xx"D#| @"<H"<x">x!$z">x"* "#@"TH"Tx"#@"hh~X 0~Z`` ~pH `` ,H @"xx,x*x" ~pH `` ,H @"x,x)@"x`(x~Z"xUxxixzx"*#@"H"x"*+vx+px+vx+jxx@"xzx+jy"+j)9+j*g"xx+xix"xx+xixP"x#y""##@"x p:py### # %%0$##x#x.@#xh@#Z#)x(`` x(@#Zx.x#A(#Zx.`` `@#A`@#A@#A`h@hhpT ~ `h` `h-#W``x~x$hh'o@###w`@#wxzh.j*6"#x#" @#h#x$x@#@ih@#p8hix(x(#`` h#x(x#pT `h`xxH#x"y#####xp@#x+xixjxxxy@#x+jxjxhh$x+x$ @$ xx+xixx-wx0$$y||`$)h/h+x$$8hH5$8x.| @$bxЀ$Fx1xx1@@$Ph/h+x$5hH5@$Jp8$\yzi.j*x$5@@$lh/h+x$5hH5@$fp8$zp;yzxЀ$?i.j*!$x$5x1|@$`` hj(i,j:i>h+h/h3 hh py$$$$$$$$$xh$x(x$pT,P `h`*` !5W$@$ x$-" k|wx+x,`@% ~ ? h  !?  x@%~ !>~  x@% p%x$8$xx(x(h'xohx1ʦ@%i ih@%$h !5Wh "j8ix& ?!h- qVn`@'@'hhhx.x'@ @'x1xЀ'xx1yzx'x,x1@'@hxtx-| x-|  '8x-|'3?k!hk"hxx+vp3P'Lx#y'O'R'\'"y'U'Z+v'Z''xp'ix(x.p4` x'np@'cp ? hp>p2"y'x+v'}''}+vxp'x(x.p4` x'p@'p ? hp>p2"y''''''xx+xixp'x(x.p4` x'p@'pzx| i?--qV h@'h@'hx'p ? hp>p2~ / p'x'jhhh#n~Zh @(Ox+x(Op(x(x.p4` x( p@(pzx|yy>--qV h@(*h@(Chx(p ? hp>p2~ / p(;x(4jhhh#n~Zh @(Ox+~Xx(O~6 `pJ`pN`pR`@(klih(t{{||ަ~Zx0x(h!#$@({{||h~Zx1x, j@( i ~Zy-p>6 Hx` @(`"`` p`&|x.hhh@hpy(((((((((xx(x(xxpxhx%h(``|`@((x``` |`@(`|x-whx)&x-whx)&x-whx)&wx,q>-- h)xhr@) hx)h hpx(h)/x(x(hh xx+j}~ii@)i@)H)Z@)Z 1++x,$@)dx*3x)x+ ~)```x*W ii~X~Z)xUxxix ~)```x*W ~X)xXxxjx ~pH `a@)bH)@) &)"0bp()¢) x)Ȣ )  ")"(x+++x,$@)x*3x)x+x*WxXxZ xix ~)``*`))a | 2 x*#bp(** x* *  cH*#@*# xxxz{hh | ~qH!` 5~`x~fxx`x7``` | ~pH ``xxx`xx |+jzii@*i+jx*x*W x,x)@*x`(x~X~Z*xUxxix~X*xXxxjx*@*qH! * x+x*x*WxXxZxix ~~)``  *`@*ᡌax* xxxzhh | ~pH `@* @`xxx`x`` |~p@+x+x+f @+fx@@+fx@+%{?+,@+M+5@+bx1xx1x+f@@+Mx+F?+b~Zyz +Vyyzzx1xgx0^xxgxxjxx+xixx+xixh#x+i ih@+hxix x+  x+ x+  x+  x+ xx~Z|~?;;6 y@+x```88y@@+ϡx```|xxxxzx`x| 1 )2xxxx}~x`x|~ xy 5F (@, !,  x, !,  d$@," #p,"x,|~ 5F"2H,8@,< !,v   2x,L(@,D !,  x,J !,  d"@,\H,\ #p,Yx,L|d,expx x전@,s$,s !x,t$|02BDTVfhxz  2BRbrfvxz|~"2BRTdtvxz|~xF| 6|yzxЀ,?|~ y 5@ !y,,,,,,,,,xxKxH,xKxH,h@hxX@xZx0,,h ,xx,x | ~h6` -.a@-. @- 2@-!x-% x-' ?x-' !` `` |xjxxixxXxxUxxxxxxxxxxxxxpxFx~x0-uxx x전!@-uxx |xx |x0@-|-x|xx x전!@--x~xx |p@- ~-`/hxk-x,h hxX?hh/h+xKx  @ x전@  x+p ~h6 ` HpJ`pN`pR | b G  0 8~*89(œèd;0(â0 (GajV:(✠d)0 0(ᜠ( dgo;p#vwxn> (+dgo;p#vw> i( D! ܢr<no00 Ht.?a22!ℨhe*#`B`*!0 ׈"(H0(0(= 0 &:  ~*8~ " I.prr p@.x.p |p/ q.x/x.p @/ p/p.p@/.px/ @/ x1k/@.x/Vp |d$@/0,p 9/5'hh 0h)!@/08'/pu@/0 9/2x/| ~ " y5 qp pp q p pp Ix | I/Vp/pqp/^0@/k0/^p/p /q //Vx/hppp/pqH/xp I|~~~~ "qx/ |r!qp /ꡄ / y/////////xp/ Ix/x1k/x|p/x/x1k/x|px/Vx,h@/h|xxx0Prqp (x@0xx03x0P',X`c ""c!$@0)0) +`x0+`/2=,holkpx/V|8'0D`@0M ` 9/2Q@0Lp| Q|P9'0] 9/8`d0]-`|~ ~ " h `hklW/2~ h@@0y~ yxX@@00pp0p@0x$0x0,X'``~p`p !0Ƞ@0Ȧ0ppvpx`p`pb $pb#pvp+`x08x0x1k0 |~ ~ " pp0p |~ ~ "  I0pp0p@1x~ h@@1h$@1 P 9/5-`x1k1 |~~~ ~ " ~ h@@10 I1h$U@1h-p.` 9/5'hh "hH1UQ1Gx8'1;pu `@1h 9/2x1:" i $"i#1dx q x0 |p@1'!p!p!p!p~ yxX@@11vpx08|~~ ~ " I1 q1h$@1x.x1q1x/x1pq1x/p1p1p I |~~~~ ~ "  I1ʭ 1p h&ppp@1Spp1 Ip |~~ ~ "  I1h `hklW/2~pp2,X'``p`pppvp 1 2,qp 2, H29x/ꤠklp Ip | 2Q2L|~ @2w2wH2j2k2_x2o#2_~2 |~2x2s2 `x x"2x$x" i5@h@2@2h0 @2!@2 @3o a6 `4@2`62`@2xp2x2x2x2x2 |x<x>2x@x>xH@2ӀxJ2x|x4x62x8x6 xD2 xF> @ e@2` @2`"@3(`,@x2|x(x*3'x,x*x03 x26#@3' "@3 3'# x| i5@h@32h<@3o``?````` Bgoxh@3Jhhh h3Txh`/`+,hx i5@ hyD3ji hx | 5O!d ixk`hX?``H``/`+h0@@3hK hH@3p3x3hK hH@3p3x3 p3x3hh hF 5h xLxJ | y5x4x3x3x3x3xGxK|  5F"2@3  "<@3 {*{.| 0 5F"2@3 9"<@3 '{6{:|  5F"<@4  {>{B| / 5F"2@4 9q"<@4 &&{"{&|$( Am01.01mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeoutU U3#f#UfD"D"3"####$$$""3""""3DDqlogicpti<0>qlogicpti: mbox_command loop timeout #1 <0>qlogicpti: mbox_command loop timeout #2 <0>qlogicpti: mbox_command loop timeout #3 <0>qlogicpti: mbox_command loop timeout #4 <0>qlogicpti: reset_hardware loop timeout <0>qlogicpti%d: Cannot execute ISP firmware. <0>qlogicpti%d: Cannot set initiator SCSI ID. <0>qlogicpti%d: Cannot init response queue. <0>qlogicpti%d: Cannot init request queue. <0>qlogicpti%d: Aieee, firmware checksum failed!<0>qlogicpti%d: Cannot reset the ISP.<0>qlogicpti%d: Cannot stop firmware for reload. qlogicpti%d: Firmware dload failed, I'm bolixed! <0>qlogicpti%d: New firmware csum failure! <0>qlogicpti%d: AboutFirmware cmd fails. <0>qlogicpti%d: could not set clock rate. qlogicpti%d: Fuse returned to normal state. qlogicpti%d: termpwr back to normal state. qlogicpti%d: Fuse is open! qlogicpti%d: termpwr failure qlogicpti%d: You have a single ended device on a differential bus! Please fix! ptispPTI,ptispQLGC,ispqpti%d: Adapter reports no interrupt, skipping over this card.Cannot register PTI Qlogic ISP SCSI hostNo qpti in hostdatanamePTI Qlogic/ISP RegistersPTI Qlogic/ISP registers unmappablePTI Qlogic/ISP Status RegPTI Qlogic/ISP status reg unmappablePTI Qlogic/ISP SCSICannot acquire PTI Qlogic/ISP irq line qpti%d: IRQ %s initiator-idscsi-initiator-idSCSI ID %d burst-sizesclock-frequencyPTISP Response QueuePTISP Request QueueSBUS Qlogic/ISP firmware load failedPTI Qlogic/ISP tmon verification failedPTI Qlogic/ISP cannot be reset(Firmware v%d.%d.%d)isp-fcode(Firmware %s)differential [%s Wide, using %s interface] UltraFastsingle endedQPTI: Total of %d PTI Qlogic/ISP hosts found, %d actually in use. PTI Qlogic,ISP SBUS SCSI irq %s regs at %08lx PROM node %x<0>qlogicpti: Unexpected request queue overflow <0>qlogicpti%d: request queue overflow <0>qpti%d: unknown completion status 0x%04x <4>qlogicpti : Aborting cmd for tgt[%d] lun[%d] <0>qlogicpti : scsi abort failure: %x <4>qlogicpti : Resetting SCSI bus! <0>qlogicisp : scsi bus reset failure: %x kernel_version=2.2.14-5.0using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4"d!  ,"H2T  =kxhBkxHk Pu2Yucu=vlx  }4 H4*H8D>UnT d|,dHh0L  7 PH2aH2yC 8?Xr  <XiDxD/I Y!tiH|`y!L"Hqlogicpti.cgcc2_compiled.qptis_runningproc_scsi_qlogicptiqlogicpti_mbox_commandqlogicpti_reset_hardwareqlogicpti_load_firmwareqlogicpti_verify_tmonqptichaindo_qlogicpti_intr_handler_sun4mdo_qlogicpti_intr_handlerbuf.544ourdoneqlogicpti_return_status*ABS*.div.urem.udiv__module_kernel_version__module_using_checksumssbus_risc_code01sbus_risc_code_length01mbox_paramprintk_Rdd132261udelay_Ra39b4cf2qlogicpti_detectSBus_chain_R359591d7strcmp_Re2d5255ascsi_register_R622c52fbpanic_R01075bf0prom_getstring_Rbf7c51d9prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169esparc_cpu_model_Rb1a8ddf9request_irq_Rb9ba6802___f___irq_itoaprom_getintdefault_R858c90dc__bzero_Rdd42e263_sparc_dvma_malloc_Rac4503aaprom_getbool_R77b288bcqlogicpti_releasefree_irq_Rf20dabd8sun4c_unmapioaddr_R064d976bsrmmu_unmapioaddr_R6e86608eromvec_R8b808848qlogicpti_infosprintf_R3c2c5af5qlogicpti_queuecommand_slowqlogicpti_queuecommandjiffies_R0da02d67__memcpy_Rbfaaaa73___f_mmu_get_scsi_sgl___f_mmu_get_scsi_onememcpy___f_mmu_release_scsi_sgl___f_mmu_release_scsi_oneqlogicpti_abortqlogicpti_resetdriver_templateinit_module__this_modulescsi_register_module_Rfa20b7b0scsi_unregister_module_Rf741008fcleanup_module  d h l t   4!L HP T Hp! x  x!     4  44t8l<d@\DTHL!D!` d h , 8  8 8 h h $ (     0 8 `!   !  (  (  `  ` $!         H  L  P   (    ( 8 X @  D X `  h  l  |           H8  H8 # #  d  d   $  ($ 8 ( < ( @$ T 8 X$ \ 8 | H  H  %   &     &    d  d  8     d, 4'@ 8D$|( ) &     ) @& @  dD dP* * *  h | |   h+      ,   $ , 0-@ T \ `-  -   --  $-4X.` d h/t (| (/ @& @ h& h  &        $'8 < @ L0P p t |       ( (  8 8  H4 H4(* 028* <* L3X 8` d4p 8t x |5 5  8 8$* 3 4  5 5     ,$ 87 H H0 d d d9 9 49   .   .x: |: : : : ;8<d h l =H `L ``Ddh`l`p,t4x<|````````L`````DLLLLLL,L P X  d d>?4@ d> 4? L@  P  P !8 !L !T !X !| ! ! ! ! ! "C "E "C " E "F"4G"LC "PC "TGH<H"H1H6H8HAHBELF84(㿐  *`$& `#+`  6?,*  +`   +  2`2 @@ (?V 2 ڰ? `$@Ӱ? 'Ho`  "'$ ` ! 2L  2,  2>@ ! 2L  2, !H/` P ` 2J"`L  M`$@? 'H`  "'$  !L `   >@!L  2!H/`  ` 2"`  ;  ,  `n, $ `?@  &`X2, "? `$` ` @ `$ "` ` ` @ ` "` 㿘`X "9?  ?3?@ @  2&`X,  `$` ` @ `$ "  ` ` @ ` "` , @  hX` ?` ?@ 2<?`@ ? Ld #  `@  @ؐ@  2K $$@b? 'ȒȕH`` "`'$`    >@!@ "!H/`  ` 2"`   $#$  @ $ $`$$   , ?   @6㿀 X ? @ 2<?`@ ? )?@ ` ?ߒ@ $`$$` @M$ -$  -$ `2   @ `0 & `$&  ܀ @?0d@@  @ؔ 0ZHo` $ 2@ ` 2$@ @ =? 4 $ , , C@  *` /Ho`` 4 ~`4 `$ M$ 2$ `$ ` $ $`4` 4`$`  #\ @聍`㿘`X` ``?@ Y?"z"<H"q"<$""I`  ""x<2`$""2""<%`$"p"<`$"t"?< "r/"s?`$ "v"< "y"[<`$""r<"}"`( "{"|"<`$"<j" "{""c<`$#" ##*`$`    ? 6$` ? `    ?  ,d p2` `,d`  ?Ld$0`  ?  `2$ $  $  $ K 0$ S`l `$R Z4  Q4  $ $ e <`    ? U@ ,d`  ? H`(` ?@ "=`(``2@?$7 `  @ "``2@<`  %?$0!`  ?$0`$  ?<`    ? ` @g ?@ѐ`@ <`  `$0`  ? $0ސ  ۰?<`    ? ˀ @  2  ,", ", ?,`    ? @ ,d`  ?Ld$0`    ? ,d`  ?Ld$0|`    ? n`& ,d<`   $0]`  X?` $\2  $0NM?@ 2<F?`  ? 97 `$  2?@-`    ?  *`:  ,@f   @ `$   ?@$ 㿘X ` ` # ``"`(@ `(`"Ld 2`@ " A`` Ld    $ 㿘`X ?@, 4 㿘  * ' 6$ * * ` ` `(     2  @`2`( 2  ~  @ @04  4  $  @$ $ 4 @ !: `  *` €   Ȁ  >2$ ,$ , $ ,!2  Ȓc  2  0P2` d"P! 0: * * $ 0L`$ 02   2 0 @ 0!* *` $ 0!* * @$ 0  @ @Ld`  @  `( @) `  `@ `,  @ 㿘 ` @ 07@ `  @  @ @  %` "  2 @@@    `㿘` @ 2@ 0 @ 0   @`a  $2\3` `@  N N @ 2  @  U /-+@2  2  @  @ N$N$ $@N$N$`N$@N$ (@ "')'%#ND  @~((` @ 2@ 2ND  㿘N 0` *` €   2`a  @ ` ` *` 㿘! `1 21`@   @    & 1    ,* @*  &   ,, @  㿘   ` `$ ?*#`$       &"@ "" ***` "  n!"2 `  *`㿘 G  A 27 @ ")"H`@``( " @ " @F  2@`2`(@  $ $?& $  ,,`Ė㿘 `"` @ 㿘` @`@ #` " ,  ,*@ @*`$`, 㿘@ d㿘  @u   @@< @& @ϐ0@ 㿘  @N D @N@@㿈``?" a > @   '@ k@2 & & . 6& a '@ "Y?  '#@  .  E& 쀢" 4`? @6   '耢- +&   4'' '@X $$`$@`` $'耤 ܀&  6 ?㿘`#!   @ `@& @` @㿘   `@  @?$@$ `   "6  @qN 6 & & 6㿘`#!   @``@& @` @㿘 o$3 >`ho  #`  `   $" $  @  3@#``3`` #` `+``#`"2` #`` #` `+` 2` `#` *`D   `  $ ` ( 00  " $*`D ( 2    (   2㿘( 0 "(J䴀   ```H`4     2&     & & . D@  @ $& `"  (@2 "" (  "   @"@ 㿘    0, $  @ & @$p .$& .$` p2  .$.$.$&  $ @ 2"@   " 㿘   ? . ; `(``@ `  ڔ ``2@`#  @ 2@@&  "@ " `@"@ @` |`&`J$@ے$ .d (  HD 2HD 㿘`    ```  @ X2V&U-`!> `K .` `F#%`@`@@  2&`"1$`.6`@: `.` ("5 .`@  @> `2& @㿘'H &H I?Jd+ 0>/  Hv 25&HnH %`   HHa HZ   S  H KH  H& 2&㿘&`` <  @ "`@ 0   *  `@ 0@ 㿘 `2 2 ~2 " " " N@01.01Version: 2.1.36 (991218)mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... sg$sg_open: inode maj=%d, min=%d sdp maj=%d, min=%d sg_command_donesg_debug_all: sg_dev_arr NULL, death is imminent sg_debug_all: sfp (file descriptor pointer) NULL sg_debug_all: dev_max=%d, %s scsi_dma_free_sectors=%u, sg_pool_secs_aval=%d sg_big_buff=%d ***** Invoking device follows ***** sg_debug: sfp (file descriptor pointer) NULL sg_debug: sdp pointer (to device) NULL sg_debug: device detached ?? >>> device=%d(sg%c), sg_debug: device=%d(sg%c), scsi%d chan=%d id=%d lun=%d em=%d sg_tablesize=%d, excl=%d, sgdebug=%d, merge_fd=%d *** Following data belongs to invoking FD *** >> Following FD has NULL parent pointer ??? FD(%d): timeout=%d, bufflen=%d, use_sg=%d low_dma=%d, cmd_q=%d, s_sc_len=%d, f_packid=%d urun_flag=%d, next_cmd_len=%d, closed=%d No requests active reserved buff >> written: pack_id=%d, bufflen=%d, use_sg=%d to_read: pack_id=%d, bufflen=%d, use_sg=%d >> request has NULL parent pointer ??? Detected scsi generic sg%c at scsi%d, channel %d, id %d, lun %d Unable to get major %d for generic SCSI device sg_init: no space for sg_dev_arr scsi_devices corrupt (sg)sg_low_malloc: bad mem_src=%d, rqSz=%df sg_low_free: bad mem_src=%d, buff=0x%p, rqSz=%df kernel_version=2.2.14-5.0using_checksums=1???????????????????????????????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.fixup.rela.fixup__ex_table.rela__ex_table.comment4.!G$p ,.<2U =.B.H."P42Y5,$`V<t  l6PwW  7H=7:`9 A $3 FP0Xbl4v<8'8P(0h&T ``&p  '0&06 x ?)<M#x\$PmLTvD -@<|% "$ %P+P)-41)?-K Qi , +?Uq )0F\|<(dd?[tsg.cgcc2_compiled.sg_version_strsg_version_numsg_pool_secs_availsg_detectsg_initsg_finishsg_attachsg_detachsg_dev_arrsize_sg_headersg_opensg_add_sfpsg_releasesg_fasyncsg_remove_sfpsg_readsg_get_requestsg_finish_rem_reqsg_writesg_add_requestsg_remove_requestsg_start_reqsg_command_donesg_ioctlsg_res_in_usesg_remove_scatsg_build_reservesg_debugsg_debug_allsg_pollmin_sb_len.420sg_clr_scpntsg_fopssg_registered.429sg_shorten_timeoutsg_link_reservesg_build_scatsg_write_xfersg_read_xfersg_unlink_reservesg_mallocsg_freesg_low_mallocsg_low_free*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsg_big_buffsg_templateprintk_Rdd132261scsi_block_when_processing_errors_R9133c5c7schedule_R01000e51___atomic_add___atomic_sub__wake_up_Rdecddc1estack_top_Ra6cab6a7__copy_user_R9c5239ebscsi_command_size_R9b05ea5cscsi_allocate_device_Rbed3f66dscsi_do_cmd_R7643813fscsi_ioctl_send_command_Rff6ac236scsi_ioctl_Rb9ece558__pollwait_R0019e686fasync_helper_Ree5e0221scsi_release_command_Rfae1f7fememcpyprint_sense_R1d0a35bckill_fasync_Re3d796fbscsi_dma_free_sectors_Re930b3cbregister_chrdev_Rcc8411c6scsi_init_malloc_R7a0e9b85panic_R01075bf0scsi_sleep_R35962bf8init_module__this_modulescsi_register_module_Rfa20b7b0cleanup_modulescsi_unregister_module_Rf741008funregister_chrdev_Rc192d491scsi_init_free_R6ac8ba0b__bzero_Rdd42e263kmalloc_R93d4cfe6scsi_malloc_R1cce3f92__get_free_pages_R19d9ac40scsi_free_R475dddfakfree_R037a0cbafree_pages_Rb5136506 < <(? ,? |  @ABBC? CD? ? DEXAtF xF   F GB4GAF F ,GxH |H DI G < 0 P 0 TJ A dF F F DF HF F F F F F F F F pF tF F F F F TF XF xF |F F F LF PF F F F F F F (F ,F |F F   F F AF F XKhF LhMN4 <8 <T? X? EO8PT lX llptx|p t xQEOE4RH <L <\  `@d  p t Xx@| X ?  ?  @ S  S   @ > >  @  @ \ (`@d (t Xx@| X @     @  @   @ S $S ( , 0 4@8 L P T d 8l 8| p p@ @ @ @ 8@ 8 X p x  X p@0 xH T@l p@t   ?  ?   @? ? 4? 8? H |L |X <\ ` @d h @lT| H H@ | | < <? U < x@ x? ?   <4 <`? t? ?  V ?   < <?  ? W@? DY HY L? TZh? l? t\|  ] < <^ <W!_#4G#hG$lG$G'_'_(_(> (> *@`* *S * *S *a* * + +Hb+db+ +@-Dc-L -P -\ -hd-x -e-@- (,0048D0HPT x\d8lD  d$ ,4<(D4L@T`\ldxlx8tl$H$<    \ $ $,(,40 4<8,<D@8DLHXLTPdT\Xp\d`xdlhltp0tx|ld@|ELFf 4( 㿘!  R ?:  . Ȣ ` `p p' ` "    `p p     @ @ :  `@ `p p?`, "* * ܐ " @ ` "  `` 㿘 1 @:.` ((` Ȅ2 Ȁ"  ̅( ͇(.  ΄ ʄ 4" ?#`  $จ@㿐H/` 2 A` @  2  A` @ ` > * @.`&` &`&``< `,  6 ~` .@  46 ~` (?#` & & . C@6 #\ @ \    @c `"` 㿘   @[ `$ "  @`$ "@ @ "@ $ x*  ` & $ Ѐ` @ $`$㿀  /耦`//// /// , #\/  [ ?@ ` `  ?`   @  ` 㿀 ` "  `  `#@]?[? Ѐ`2 U Q `@?@ ($@@@  А //@ ,< < //#\/  2 x)? *   `c  2 . "? @ `?? $`` & $` . " @㿘 + *`" *  * `T 6 N? K x*  `t@Ѐ 2: ``@?@$`$"` `   2` -`  %` %` @    `  `  %` -`%`㿘 + `ʀ` ?V& ``̀"` ``ɀ  * ` `Ѐ@"  `Д@@ `  V  @ ? x *;`  ` `2   ,%/*`@*`  @ ? `Ȁ`" *?2  `t  ,`ϒ $`t*` 4@`'  `" .  `2  " `  `  . `  @Ӑ  $` @e? .  $`` *`"``" `` `n2 ,`,`2"<"`  ,6`& .  <. @    # ` , & .`&  ` '`?,`,`Đ`*??%,`$`ܓ*`@*` ` $`` @ ` $  # ` ` ` @ ` "`@ /`0 #\  h  2%  ` $`` @ ` $  #  `;` @ ` 2"`% b 23`@ /`0 #\ - ` T* T `$`| $`x$` ``````**@**##@ ` `   ` `"$ ``J 1`  b    Ԁ :2   ,`@? ,`$`,`,`$`$`$`|$`xm,`΀ *?@  /`, #\ Қ !`? Ȁ ?` ( ` `*  `*  $` (  *`@$`$`$`ؐ@   //`, #\  ` `$`# Y,` ( ` (` `2  ,` ( `,` ( *  *`  $`` @$;` `"@ 25``А @@`%*$`*`@*`   `$`` @  ` $  # `` ` ` @` ` "`հ? ( 2`,`@`Ѐ`$``@ $  "` `"`"` `ǀ 5 * 2  .,``%*$`*`@*`   `$`` @  ` $  # `` ` ` @` ` "`? ` ;` 7@  .$`x`%*$`*`@*`   `$`` @  ` $  # `` ` ` @` ` "`Q`x $`|$`I ,`,`,` ` 24 `$H 6- `$`%*$`*`@*`   `$`` @  ` $  # `` `` @` ` "` @   `$ @ ,`Ȱ 㿐` `` * `- "* `* tx**` `4 @ X &  2Y  T`&T   ?2 #`@  ,`   , ,#\  0 "p  `! Ȓc   Ȁ  ͒@ ΐ  @  @ "M?L @   $ $   :, 28 x `*  `  "    #  2 ϐh 2 , 2 ]  "  2   $  ,$ π  @  "㿘 +% *`" *  *  ΀ 2  @   ", @  *@,  ` $`` @ ` $  #   ` ` @ ` "` 㿈   + ,`"@*`@*` @ ' 2? ŀ  ??t*  4 `?2   T`?Ѐ`" @  @?  "x@ . x Ƒ*  `?Ѐ 2 `  "@  2 ԰?  " ΀ 2  @f 2  ,  )  +,"* 2& 2"w  `" ˀ 2``?@ߐ   @ ? `" `  `#@  ,   t?r?Ѐ #!< @ @    _?@?< @  @    M?  2 @   "! @  (Ж  @ , , ` ' @" @@ T 'Ѐ 2 @@>>-`-`-`, #\ 3 ? `Z Ȑ K?Ѐ  Ȁ  ̑*  ͓*` * ΐ     ʐ     @@! $@   ;  B? `& Ѐ @ `  @@$ ,??$,$?@"` ,0 <` B? &`@Ѐ @`$" ,Ѐ    `S `2J ,@   ' h@d  B? "  `" @P` < (`@Ѐ@ 0 `$`@@$` В@ ,@ >>*** , S#\  `?`@`2,  ,'@`4,㿐 + ` ?- "* `* `x*```t@ *   4`@ް ! @  -``Ѐ@ , `Ѐ 2  `  ` @4@@`<<*** `, #\ &?`" ,` `""  `Ȑ p p  `ʐ   Ϙ+`ʐ "n  `Ȁ   ` `̑*  `͓*` * `ΐ  `Ѐ`  " /` H`F @ & @  $ @ X?`@$`"  $ @  ":E?  @    ,`Ѐ``'" "&    ,`Ѐ``&@"`@`&@"`?` $ `ʐ  2? ,?   `Ѐ`2` @$㿐 '` + ?* "@*`@*` @`  2? `ŀ   ??`t*  4 @`@? ` "`@ `Ѐ 2 ``  `"@  2 ?  2 ``Ѐ`" `@ " `հ? "`x `΀ 2 `x @H 2`x ,``x*  @` @  ,@` `2<  ``? , <7@ @    ?<@ @    ?@<?    @    u?<?   @    e?  ,; ` `&8 6` O@, `& 8 @   ' < @'6  >  B= @`Ѐ  "` @'        ,` $` $   , ",㿘 t ``@`    !@  #`  @ ` @㿘 + ,`"* *  t*``4    4@  "<@ * 6`6`6` `  `, , , , 6`6`6`6`6`  `    . . !. . . K`1 6` . 6` 6` . # `5,  5 `?` , `2, `2, `2, `2. ` 2. !`@2. a2. b2.  J 1`d2. h2. #@2, d .`    @ s?& (. #@2?$ T $  <.@   * *@ *`@ *`& 03 *@ *`@ *`& , ? 2>??c@ @ `?4   4   2 ` . $ . $   `,  @    ,   @ 㿀 ŀ 2R?@  ,     ////#\  ݚ 2 9?` 2`( ` @-`"  *`@     ///( * (* (  ?(#\ ,  `@.  @?㿀+ -"* * @ ŀ   ` q?o?x*`` 0   @ ` " !(` `k `F`X P?`k`" I?`  ``ư?0>` ?` + 8?`i ``Ԁ` " +?`̀`Q $?` `a` ?`u#@`@?0  66////뀤 / 2     ;`;`////뀤 /$?66////逥`/@  ;`;`////쀥`/ժ%@ 66//// /  ;`;`/////쀦Ь ??̨  ƀ 2? `/ /66///쀤 ,``? /=  `/ /쀦`  # #/0'  //"  ?   z   //   n? //0 * r //n / j/ Ā   ``R?#@`@ ? Ԁ ؀   @6? // @(`  (*`*  (`*`  (*`,#@`@6 (*`  (*`#@`@2?`. ,;` (;`*  (*` (* , #\  2? 2a @ $$ ,`#@,΀`",΀` `  ` F ``@`?.`$@ $ `"`@ "`6 ,`,",̀` `  , ,2,```, *2   ,ϒ**@` $x @ ` ` `` ,$ ˀ` ̑*  ͓*` * ΐ   c  ` Ȁ  `   J$ ``  ` $ $ $ =$`  `  $ $ 1$` ʀ  @   $  ,#$%@ ?$` ʀ ? ?$ $`@ ? $? $,$ " , ʐ  ` , ,@ 㿀 + *`" *  *  ŀ`d?@  J1  4  / /쀦/ # 2 , / , #\    2 @? 2 & J1  ( `"J1&&@,?   ( @ `*  `*  &@&(  *  *`  *  &@ `( & `( @  ` $ $ @ x + *`" *  *  ŀ`? x *  0`2{?ꀦ v?i   ,`,`$`@  J1   + 6`6`/////6`6`6`////퀦/ # 2 x / x/ / #\  G  ?2?$`$` ,` `   %? J 1` @" '$ x . $ x ` ",```,`, ,`` $`$` @㿐   4?㿘 + *`" *  * x|@ *   `2 " |  = 㿀 + *`" *  *  ŀ`2%?@     //// , #\     ?@ ` ?`( `㿀 +ɢ  B,`"* `*  ``( * >`** *  ? `? 0**** * **@    /// 0 #\ r  ?@ `  @? 㿀 + - "* * @`t`x**`4``@ @@ F6 m>2< @6 2)?<` @    2?W 2 @X   !! `2 @ @? 2 `W <@"?`T F  WW    ?  W '  $ W`  `  `|`x@ ?* 2    `  ` ```   )W * 2   *`:     2?T *@"T `΀      @,`W      !`,` ` `΀   ` *`<z _*`:  ! " ` 7`4`4Q?`@  $`F?`@A?$`|> $  `    ` ``**@*`  $`$`|$`x$$ 2 ``| ` db,`  W `ŀ `  VW`  l @ ?1 & `  m 5 m m m6 2ְ?`? `͐*`*` "`"` "`Ѐ"`  ` @`  2 ``  `@? "$ `" `ǀ``  " ` 2 `x    " ``x"   `` `  " `̀  `  `2 ``   " `ŀ  `@  " `ŀ 2 `  "  `  " ` 2` ` " ``Ѐ 2` `̀ "<`@  " <` `@    /?` +" 2%`2"`6 ? m'< @    ɰ?0@㿘/  @   & <0& 8  *4@ s`& -@ # @ 4`@2 : @ :`@ @  o@ & 44`@: o, 4@ : <@ #,`,`"@8,` 8 5@, %%@  $"@2  :  4`@:   <,   @@ ,  @   8"  <"@ ̀  4. & (.6 .& 6 0& *` `" %@  㿘@P` ,4 .$`A   5 .@&@ ,2 @.+*@,` 4 "@ &@$@2  : `6: @@  8"  <"@  . 6 .& `@؀ 㿘 0 .@6 0 <,`  4,` `@   ." @ &  06 .㿘`.  @``<,`@* `@ " @@ 6?*'`<,` "@ `4   <`  @ ```.&`@ &ۖ  ? @?㿘 .  @  <,`@* `@ " @@ 8?,),` < "@  <`@   4 @ @ `  " .@& & @@ &ٖ  ? @?㿘H0  ! ` ` $? $   `   `  &*@ "  *  * @ "`H1  q r  "@ 3@+`+`+` `pW2  +`"+`+`+`+`+` +`!+`# W  #`(+`$#`,#`0#`x#`|#`  ?`<`@`:`8`7`6`9`5`4**@*+((+&0@`  `  ?``````**@*+  `  +`4+`ʒ #`t+`+` `  *`㿘H0   `*   2 ` @㿘) ` ! +`@  @    $ +`     `,  ,  `  @  `*`" *  * @   %`@ `@ b   *"@ *`@ @*`   #  $ @ $  @  `  @*  "`@ `@  *"@ *`@ `@*`0%@ "  $  4 " #   2   @`     @2   $" $  ?**`@㿘 * " `*` "  4  " `" ` @  `"` @   㿘1  @`@ `?`@"  *"@ *`@ @*`- "4 / ) `-   . @+`,`<4 `@ ` .@ `@@  &` @*` *`@ @H@@ꙋ@@ꡋ@x 01.01kernel_version=2.2.14-5.0using_checksums=1parm_buffer_kbs=iparm_write_threshold_kbs=iparm_max_buffers=iparm_max_sg_segs=iDMA timeoutmapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... tapest<4>st%d: Error with sense data: <4>st%d: Error %x (sugg. bt 0x%x, driver bt 0x%x, host bt 0x%x). <3>st%d: Can't get SCSI request. <4>st: write_behind_check: something left in buffer! <3>st%d: Stepping over filemark %s failed. forwardbackward<3>st%d: Error on flush. <4>st%d: Can't set default block size to %d bytes and density %x. <4>st%d: Can't allocate tape buffer. <5>st%d: Blocksize %d too large for buffer. <4>st%d: Can't set default drive buffering to %d. <3>st%d: Error on write filemark. <4>st%d: Write not multiple of tape block size. <4>st%d: Can't set default compression. <5>st%d: Incorrect block size. <6>st%d: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d <6>st%d: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d, <6>st%d: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d <6>st%d: sysv: %d <4>st%d: Write threshold %d too small or too large. <6>st%d: Write threshold set to %d bytes. <6>st%d: Default block size disabled. <6>st%d: Default block size set to %d bytes. <6>st%d: Long timeout set to %d seconds. <6>st%d: Normal timeout set to %d seconds. <6>st%d: Density default disabled. <6>st%d: Density default set to %x <6>st%d: Drive buffer default disabled. <6>st%d: Drive buffer default set to %x <6>st%d: Compression default disabled. <6>st%d: Compression default set to %x <4>st%d: Illegal block size. <6>st%d: Partitioning of tape failed. <4>st%d: MTSETDRVBUFFER only allowed for root. <5>st%d: Could not relock door after bus reset. <5>st: Can't allocate new tape buffer (nbr %d). <5>st: failed to enlarge buffer to %d bytes. <4>st: append_to_buffer offset overflow. <4>st: append_to_buffer overflow (left %d). <4>st: from_buffer offset overflow. <4>st: from_buffer overflow (left %d). scsi_devices corrupt (st)<4>Detected scsi tape st%d at scsi%d, channel %d, id %d, lun %d <3>Unable to get major %d for SCSI tapes <6>st: Only %d tapes accessible. <3>Unable to allocate descriptors for SCSI tapes. <3>Unable to allocate tape buffer pointers. <6>No tape buffers allocated at initialization. <6>Number of tape buffers adjusted. <6>st: bufsize %d, wrt %d, max buffers %d, s/g segs %d. <6>st: Unloaded. GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4Y!sl  ,Y2d  =Z`4BZ`HZxQ[ RYej=ebh0 > nD 4@ L[n} $S\SQ tVxhh tt"@/0 <M \,k0vJ4LD><@ >|Nl .\N|D '!1%x9OLE*T*c:p;X}??,A 4T<  8P=pWq(,}4:Lx/KVWeW\st.cgcc2_compiled.buffer_kbswrite_threshold_kbsmax_buffersmax_sg_segsst_buffer_sizest_write_thresholdst_max_buffersst_max_sg_segsscsi_tapesmodes_definedst_detectst_initst_attachst_detachst_chk_resultst_sleep_donest_do_scsiwrite_behind_checkcross_eofflush_write_bufferflush_bufferst_int_ioctlset_mode_densblkscsi_tape_openst_nbr_buffersst_buffersnew_tape_bufferenlarge_bufferfind_partitioncmd.436scsi_tape_flushupdate_partitionscsi_tape_closenormalize_buffercmd.441st_writest_compressionappend_to_buffercmd.444read_tapest_readfrom_bufferst_log_optionsst_set_optionsget_locationset_locationnbr_partitionspartition_tapest_ioctlst_fopsst_registered*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_buffer_kbs__module_parm_write_threshold_kbs__module_parm_max_buffers__module_parm_max_sg_segsst_templateprintk_Rdd132261print_sense_R1d0a35bc___atomic_add__up_R450143b0scsi_allocate_device_Rbed3f66dscsi_do_cmd_R7643813f___atomic_sub__down_R4663c8e5scsi_release_command_Rfae1f7fe.umul__bzero_Rdd42e263scsi_block_when_processing_errors_R9133c5c7stack_top_Ra6cab6a7__copy_user_R9c5239ebmemcpycap_bset_R59ab4080scsi_ioctl_Rb9ece558scsi_init_malloc_R7a0e9b85scsi_init_free_R6ac8ba0bpanic_R01075bf0register_chrdev_Rcc8411c6unregister_chrdev_Rc192d491init_module__this_modulescsi_register_module_Rfa20b7b0cleanup_modulescsi_unregister_module_Rf741008f  H  I  H   0 tG xG   XJL @ @Hp h hMNN(PD hHHL h@$PD P T \ ` d lH@ Q$R0RH@  H,PL d @@ l  x  |H  $  $ G G   S  l , t ,  0  0  ,  ,  ,  P  P H  0  0  DJ L pG J R  N  XN RPRR x xHP N G 4NdP@ N  DG `N N (G DN N ,G HN  H  p t |R ,P4 8 <HXP   HNP tG xG N  SA  H8 @< @@HH $L $T T U T <UxQ  R  Q`@lQdQ@PP <P @ Q @    !LP! ! " " "R" "|@"Q" #P# p# p#H$Q$Q%`@% % %S&A'|T 'T 'U'T 'U(T (U(DT (\U(P) P)P* * *,H*4 *< *LH*X (*` (*lH*t x*| x*H* * *V* $* $, , , , , ,H, -  -  - -$  -d P-p P- - - - - - . .( ., 0.4 0.X `.` `.dH. . .H.R/TR/P/P0  0$ 0R5 5 5 5( 5, 50H5TR6P7$@:P:  :8 :XR;P; < <R>,P> > ?  ?$ ?DR?P? @ @tR@P@ @ @HA A ALSAT AT AUAW AW B  B$ B(HD (D (D HG@@Gp@I<T I@T IXUIT IT IUJ XJ8 ,J<G J@G JH ,Jh J| J JYJ J KYKL K| KYK KQLZL0ZLX Lp ,L ,L 0L 0L ,L `LHL `L L M,QMT MdYMQM MHNDZN NHN O0T O4T OLUO O OHP (PHP  (PdT PlT PUP PP PPHQ$G Q(G Q< QT QtG QG Q xQ[Q xQ Q R R< SXG SG SG S S SHSG SG S S T T  T TT T TT\T, T0 T4HTD TL TP TT TdG T T THTYT T 8THT 8T T T]URU$G U8 UHYUT UdRUlG UG UYU 0U 0U pUHU pU U U]U UZUHU V V  V ,V, ,V0 VT VXHV\ VG VG V V V W W W W W W( W0 W4 W8 W< W@ WL WP WT W` Wd Wh Wl Wx W| W W W W W W W WHWG W_ W_ WG W`WG WG WbW W W]X X X X  X X8ZX@ 0XD 0XPG XT ,XX ,XhG Xp 0X 0X 0X 0XZX 0X 0X 0XZX ,Y 0YG Y  0YZYG Y @Y$HY( @Y@KY`OYO,0@SDSLQ PVX%x\hAp txThis is a brief list of all the files in ./linux/Documentation and what they contain. If you add a documentation file, please list it here in alphabetical order as well, or risk being hunted down like a rabid dog. Note that subdirectories have their own index files too. Please try and keep the descriptions small enough to fit on one line. Thanks -- Paul G. 00-INDEX - this file. ARM-README - information for using Linux on the ARM architecture. BUG-HUNTING - brute force method of doing binary search of patches to find bug. Changes - list of changes that break older software packages. CodingStyle - how the boss likes the C code in the kernel to look. Configure.help - text file that is used for help when you run "make config" IO-APIC.txt - info on using the enhanced interrupt hardware on SMP boards. IO-mapping.txt - how to access I/O mapped memory from within device drivers. SMP.txt - notes, and "To Fix" list for multi-processor Linux. (see smp.tex) VGA-softcursor.txt - how to change your VGA cursor from a blinking underscore. arm/ - directory with info about Linux on the ARM architecture. binfmt_misc.txt - info on the kernel support for extra binary formats. cdrom/ - directory with information on the CD-ROM drivers that Linux has. cpqarray.txt - info on using Compaq's SMART2 Intelligent Disk Array Controllers. devices.tex - TeX source listing of all the nodes in /dev/ with major minor #'s devices.txt - plain ASCII listing of all the nodes in /dev/ with major minor #'s digiboard.txt - info on the Digiboard PC/X{i,e,eve} multiport boards. digiepca.txt - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards. exception.txt - how Linux v2.2 handles exceptions without verify_area etc. fb/ - directory with info on the frame buffer graphics abstraction layer. filesystems/ - directory with info on the various filesystems that Linux supports. ftape.txt - notes about the floppy tape device driver hayes-esp.txt - info on using the Hayes ESP serial driver. i386/ - directory with info about Linux on the intel ix86 architecture. ide.txt - important info for users of ATA devices (IDE/EIDE disks and CD-ROMS) initrd.txt - how to use the RAM disk as an initial/temporary root filesystem. ioctl-number.txt - how to implement and register device/driver ioctl calls. isdn/ - directory with info on the Linux ISDN support, and supported cards. java.txt - info on the in-kernel binary support for Java(tm) joystick.txt - info on using joystick devices (and driver) with Linux. joystick-api.txt - API specification for applications that will be using the joystick. joystick-parport.txt - info on how to hook joysticks/gamepads to the parallel port. kbuild/ - directory with info about the kernel build process kernel-docs.txt - listing of various WWW + books that document kernel internals. kernel-parameters.txt - summary listing of command line / boot prompt args for the kernel. kmod.txt - info on the kernel module loader/unloader (kerneld replacement). locks.txt - info on file locking implementations, flock() vs. fcntl(), etc. logo.gif - Full colour GIF image of Linux logo (penguin) logo.txt - Info on creator of above logo & site to get additional images from. m68k/ - directory with info about Linux on Motorola 68k architecture. magic-number.txt - list of magic numbers used to mark/protect kernel data structures. mandatory.txt - info on the Linux implementation of Sys V mandatory file locking. mca.txt - info on supporting Micro Channel Architecture (e.g. PS/2) systems. md.txt - info on boot arguments for the multiple devices driver memory.txt - info on typical Linux memory problems. mkdev.ida - script to make /dev entries for Intelligent Disk Array Controllers. modules.txt - short guide on how to make kernel parts into loadable modules mtrr.txt - how to use PPro Memory Type Range Registers to increase performance nbd.txt - info on a TCP implementation of a network block device. networking/ - directory with info on various aspects of networking with Linux. nfsroot.txt - short guide on setting up a diskless box with NFS root filesystem oops-tracing.txt - how to decode those nasty internal kernel error dump messages. paride.txt - information about the parallel port IDE subsystem. parport.txt - how to use the parallel-port driver. pci.txt - info on the PCI subsystem for device driver authors pcwd-watchdog.txt - info and sample code for using with the PC Watchdog reset card. powerpc/ - directory with info on using Linux with the PowerPC. proc.txt - detailed info on Linux's /proc filesystem. ramdisk.txt - short guide on how to set up and use the RAM disk. riscom8.txt - notes on using the RISCom/8 multi-port serial driver. rtc.txt - notes on how to use the Real Time Clock (aka CMOS clock) driver. scsi-generic.txt - info on the sg driver for generic (non-disk/CD/tape) SCSI devices. scsi.txt - short blurb on using SCSI support as a module. serial-console.txt - how to set up Linux with a serial line console as the default. sgi-visws.txt - short blurb on the SGI Visual Workstations. smart-config.txt - description of the Smart Config makefile feature. smp.tex - TeX document describing implementation of Multiprocessor Linux smp.txt - a few more notes on symmetric multi-processing sound/ - directory with info on sound card support specialix.txt - info on hardware/driver for specialix IO8+ multiport serial card. spinlocks.txt - info on using spinlocks to provide exclusive access in kernel. stallion.txt - info on using the Stallion multiport serial driver. svga.txt - short guide on selecting video modes at boot via VGA BIOS. sx.txt - info on the Specialix SX/SI multiport serial driver. sysctl/ - directory with info on the /proc/sys/* files sysrq.txt - info on the magic SysRq key transname.txt - how to use name translation to ease use of diskless systems. unicode.txt - info on the Unicode character/font mapping used in Linux. video4linux/ - directory with info regarding video/TV/radio cards and linux. watchdog.txt - how to auto-reboot Linux if it has "fallen and can't get up". ;-) xterm-linux.xpm - XPM image of penguin logo (see logo.txt) sitting on an xterm. ARM Linux 2.1.99 ================ Since this is a development kernel, it will not be as stable as the 2.0 series, and can cause very nasty problems (eg, trashing your hard disk). When running one of these kernels, I advise you to back up the complete contents of all your hard disks. Contributors ------------ Here is a list of people actively working on the project (If you wish to be added to the list, please email me): Name: Russell King Mail: linux@arm.uk.linux.org Desc: Original developer of ARM Linux, project co-ordinator. Name: Dave Gilbert Mail: linux@treblig.org Desc: A3/4/5xx floppy and hard disk code maintainer. Name: Philip Blundell Mail: Philip.Blundell@pobox.com Desc: Architecture and processor selection during make config. Todo list --------- This is the list of changes to be done (roughly prioritised): * fully test new MEMC translation code * fully test new AcornSCSI driver. * reply to email ;) Notes ===== Compilation of kernel --------------------- In order to compile ARM Linux, you will need a compiler capable of generating ARM ELF code with GNU extensions. GCC-2.7.2.2 is good. To build ARM Linux natively, you shouldn't have to alter the ARCH = line in the top level Makefile. However, if you don't have the ARM Linux ELF tools installed as default, then you should change the CROSS_COMPILE line as detailed below. If you wish to cross-compile, then alter the following lines in the top level make file: ARCH = with ARCH = arm and CROSS_COMPILE= to CROSS_COMPILE= eg. CROSS_COMPILE=/usr/bin/arm-unknown-linuxelf- Do a 'make config', followed by 'make dep', and finally 'make all' to build the kernel (vmlinux). A compressed image can be built by doing a 'make zImage' instead of 'make all'. Bug reports etc. ---------------- Please send patches, bug reports and code for the ARM Linux project to linux@arm.uk.linux.org. Patches will not be included into future kernels unless they come to me (or the relevant person concerned). When sending bug reports, please ensure that they contain all relevant information, eg. the kernel messages that were printed before/during the problem, what you were doing, etc. For patches, please include some explanation as to what the patch does and why (if relevant). Modules ------- Although modularisation is supported (and required for the FP emulator), each module on an arm2/arm250/arm3 machine when is loaded will take memory up to the next 32k boundary due to the size of the pages. Hence is modularisation on these machines really worth it? However, arm6 and up machines allow modules to take multiples of 4k, and as such Acorn RiscPCs and other architectures using these processors can make good use of modularisation. ADFS Image files ---------------- You can access image files on your ADFS partitions by mounting the ADFS partition, and then using the loopback device driver. You must have losetup installed. Please note that the PCEmulator DOS partitions have a partition table at the start, and as such, you will have to give '-o offset' to losetup. Kernel initialisation abort codes --------------------------------- When the kernel is unable to boot, it will if possible display a colour at the top of the screen. The colours have the following significance when run in a 16 colour mode with the default palette: Stripes of white, red, yellow, and green: Kernel does not support the processor architecture detected. Request to developers --------------------- When writing device drivers which include a separate assembler file, please include it in with the C file, and not the arch/arm/lib directory. This allows the driver to be compiled as a loadable module without requiring half the code to be compiled into the kernel image. In general, try to avoid using assembler unless it is really necessary. It makes drivers far less easy to port to other hardware. ST506 hard drives ----------------- The ST506 hard drive controllers seem to be working fine (if a little slowly). At the moment they will only work off the controllers on an A4x0's motherboard, but for it to work off a Podule just requires someone with a podule to add the addresses for the IRQ mask and the HDC base to the source. As of 31/3/96 it works with two drives (you should get the ADFS *configure hard drive set to 2). I've got an internal 20 MB and a great big external 5.25" FH 64 MB drive (who could ever want more :-) ). I've just got 240 K/s off it (a dd with bs=128k); that's about half of what RiscOS gets, but it's a heck of a lot better than the 50 K/s I was getting last week :-) Known bug: Drive data errors can cause a hang; including cases where the controller has fixed the error using ECC. (Possibly ONLY in that case...hmm). 1772 Floppy ----------- This also seems to work OK, but hasn't been stressed much lately. It hasn't got any code for disc change detection in there at the moment which could be a bit of a problem! Suggestions on the correct way to do this are welcome. Kernel entry (head-armv.S) -------------------------- The initial entry into the kernel made via head-armv.S uses architecture independent code. The architecture is selected by the value of 'r1' on entry, which must be kept unique. You can register a new architecture by mailing the following details to rmk@arm.uk.linux.org. Please give the mail a subject of 'Register new architecture': Name: ARCHDIR: Description: Please follow this format - it is an automated system. You should receive a reply the next day. --- Russell King (03/05/1998) Kernel Support for miscellaneous (your favourite) Binary Formats v1.1 ===================================================================== This Kernel feature allows you to invoke almost (for restrictions see below) every program by simply typing its name in the shell. This includes for example compiled Java(TM), Python or Emacs programs. To achieve this you must tell binfmt_misc which interpreter has to be invoked with which binary. Binfmt_misc recognises the binary-type by matching some bytes at the beginning of the file with a magic byte sequence (masking out specified bits) you have supplied. Binfmt_misc can also recognise a filename extension aka '.com' or '.exe'. To actually register a new binary type, you have to set up a string looking like :name:type:offset:magic:mask:interpreter: (where you can choose the ':' upon your needs) and echo it to /proc/sys/fs/binfmt_misc/register. Here is what the fields mean: - 'name' is an identifier string. A new /proc file will be created with this name below /proc/sys/fs/binfmt_misc - 'type' is the type of recognition. Give 'M' for magic and 'E' for extension. - 'offset' is the offset of the magic/mask in the file, counted in bytes. This defaults to 0 if you omit it (i.e. you write ':name:type::magic...') - 'magic' is the byte sequence binfmt_misc is matching for. The magic string may contain hex-encoded characters like \x0a or \xA4. In a shell environment you will have to write \\x0a to prevent the shell from eating your \. If you chose filename extension matching, this is the extension to be recognised (without the '.', the \x0a specials are not allowed). Extension matching is case sensitive! - 'mask' is an (optional, defaults to all 0xff) mask. You can mask out some bits from matching by supplying a string like magic and as long as magic. The mask is anded with the byte sequence of the file. - 'interpreter' is the program that should be invoked with the binary as first argument (specify the full path) There are some restrictions: - the whole register string may not exceed 255 characters - the magic must reside in the first 128 bytes of the file, i.e. offset+size(magic) has to be less than 128 - the interpreter string may not exceed 127 characters You may want to add the binary formats in one of your /etc/rc scripts during boot-up. Read the manual of your init program to figure out how to do this right. Think about the order of adding entries! Later added entries are matched first! A few examples (assumed you are in /proc/sys/fs/binfmt_misc): - enable support for em86 (like binfmt_em86, for Alpha AXP only): echo ':i386:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/bin/em86:' > register echo ':i486:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/bin/em86:' > register - enable support for packed DOS applications (pre-configured dosemu hdimages): echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register - enable support for Windows executables using wine: echo ':DOSWin:M::MZ::/usr/local/bin/wine:' > register For java support see Documentation/java.txt You can enable/disable binfmt_misc or one binary type by echoing 0 (to disable) or 1 (to enable) to /proc/sys/fs/binfmt_misc/status or /proc/.../the_name. Catting the file tells you the current status of binfmt_misc/the entry. You can remove one entry or all entries by echoing -1 to /proc/.../the_name or /proc/sys/fs/binfmt_misc/status. HINTS: ====== If you want to pass special arguments to your interpreter, you can write a wrapper script for it. See Documentation/java.txt for an example. Your interpreter should NOT look in the PATH for the filename; the kernel passes it the full filename to use. Using the PATH can cause unexpected behaviour and be a security hazard. There is a web page about binfmt_misc at http://www.anatom.uni-tuebingen.de/~richi/linux/binfmt_misc.html Richard Gnther, richard.guenther@student.uni-tuebingen.de [Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)] This is how to track down a bug if you know nothing about kernel hacking. It's a brute force approach but it works pretty well. You need: . A reproducible bug - it has to happen predictably (sorry) . All the kernel tar files from a revision that worked to the revision that doesn't You will then do: . Rebuild a revision that you believe works, install, and verify that. . Do a binary search over the kernels to figure out which one introduced the bug. I.e., suppose 1.3.28 didn't have the bug, but you know that 1.3.69 does. Pick a kernel in the middle and build that, like 1.3.50. Build & test; if it works, pick the mid point between .50 and .69, else the mid point between .28 and .50. . You'll narrow it down to the kernel that introduced the bug. You can probably do better than this but it gets tricky. . Narrow it down to a subdirectory - Copy kernel that works into "test". Let's say that 3.62 works, but 3.63 doesn't. So you diff -r those two kernels and come up with a list of directories that changed. For each of those directories: Copy the non-working directory next to the working directory as "dir.63". One directory at time, try moving the working directory to "dir.62" and mv dir.63 dir"time, try mv dir dir.62 mv dir.63 dir find dir -name '*.[oa]' -print | xargs rm -f And then rebuild and retest. Assuming that all related changes were contained in the sub directory, this should isolate the change to a directory. Problems: changes in header files may have occurred; I've found in my case that they were self explanatory - you may or may not want to give up when that happens. . Narrow it down to a file - You can apply the same technique to each file in the directory, hoping that the changes in that file are self contained. . Narrow it down to a routine - You can take the old file and the new file and manually create a merged file that has #ifdef VER62 routine() { ... } #else routine() { ... } #endif And then walk through that file, one routine at a time and prefix it with #define VER62 /* both routines here */ #undef VER62 Then recompile, retest, move the ifdefs until you find the one that makes the difference. Finally, you take all the info that you have, kernel revisions, bug description, the extent to which you have narrowed it down, and pass that off to whomever you believe is the maintainer of that section. A post to linux.dev.kernel isn't such a bad idea if you've done some work to narrow it down. If you get it down to a routine, you'll probably get a fix in 24 hours. My apologies to Linus and the other kernel hackers for describing this brute force approach, it's hardly what a kernel hack would do. However, it does work and it lets non-hackers help bug fix. And it is cool because Linux snapshots will let you do this - something that you can't do with vender supplied releases. Intro ===== This document is designed to provide a list of the minimum levels of software necessary to run the 2.2 kernels, as well as provide brief instructions regarding any other "Gotchas" users may encounter when trying life on the Bleeding Edge. If upgrading from a pre-2.0.x kernel, please consult the Changes file included with 2.0.x kernels for additional information; most of that information will not be repeated here. Basically, this document assumes that your system is already functional and running at least 2.0.x kernels. It is originally based on my "Changes" file for 2.0.x kernels and therefore owes credit to the same people as that file (Jared Mauch, Axel Boldt, Alessandro Sigala, and countless other users all over the 'net). Please feel free to submit changes, corrections, gripes, flames, money, etc. to me (chris.ricker@genetics.utah.edu). If you do so, you don't need to bother doing so in the form of a diff, as this is generated by texinfo so a diff is useless anyway (though I can incorporate one by hand if you insist upon sending it that way ;-). The most current version should always be available from http://cyberbuzz.gatech.edu/kaboom/linux/ as well. Voir http://www.linux-france.com/article/sys/Changes-2.2/Changes-2.2.1.html pour la traduction franais. Nihongo-ban ha kochira desu (text & html) http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/Changes http://www2.palnet.or.jp/~matsuda/Changes-2.2.ja.html Visite http://www2.adi.uam.es/~ender/tecnico/cambios22.html para obtener la traduccin al espaol de este documento. Also, don't forget http://www.linuxhq.com/ http://www.kernelnotes.org/ http://www.kernel.org/ for all your Linux kernel needs. Last updated: October 13, 1999 Current Author: Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). Current Minimal Requirements **************************** Upgrade to at *least* these software revisions before thinking you've encountered a bug! If you're unsure what version you're currently running, the suggested command should tell you. - Kernel modutils 2.1.121 ; insmod -V - Gnu C 2.7.2.3 ; gcc --version - Binutils 2.8.1.0.23 ; ld -v - Linux libc5 C Library 5.4.46 ; ls -l /lib/libc* - Linux libc6 C Library 2.0.7pre6 ; ls -l /lib/libc* - Dynamic Linker (ld.so) 1.9.9 ; ldd --version or ldd -v - Linux C++ Library 2.7.2.8 ; ls -l /usr/lib/libg++.so.* - Procps 2.0.3 ; ps --version - Procinfo 16 ; procinfo -v - Psmisc 17 ; pstree -V - Net-tools 1.52 ; hostname -V - Loadlin 1.6a - Sh-utils 1.16 ; basename --v - Autofs 3.1.3 ; automount --version - NFS 2.2beta40 ; showmount --version - Bash 1.14.7 ; bash -version - Ncpfs 2.2.0 ; ncpmount -v - Pcmcia-cs 3.0.14 ; cardmgr -V - PPP 2.3.10 ; pppd --version - Util-linux 2.9z ; chsh -v - isdn4k-utils v3.1beta7 ; isdnctrl 2>&1|grep version Upgrade notes ************* General Information =================== now performs a cold reboot instead of a warm reboot for increased hardware compatibility. If you want a warm reboot and know it works on your hardware, add a "reboot=warm" command line option in LILO. A small number of machines need "reboot=bios" to reboot via the BIOS. Also, please remember that cua* devices are now obsolete. Switch to the corresponding ttyS* device instead (e.g., cua0 -> ttyS0, cua1 -> ttyS1, etc.). In addition, some software still works, but needs to be compiled against 2.2 headers for complete functionality. Fdutils binaries compiled under 2.0 or earlier kernels should be replaced with ones compiled under 2.2, for example. As of 2.1.115, support for the deprecated major 4 /dev/ttyp* devices was removed. If necessary (eg, you get "out of pty" error messages when you obviously are not out of pty's), create major 3 /dev/tty* and major 2 /dev/pty* devices (see Documentation/devices.txt for more information). In general, you should make sure that your /dev directory is up-to-date if you are experiencing any problems. Optional support for Unix98 pty devices has also been added. If you want to use the Unix98 ptys, you should be running at least glibc-2.0.9x, and you must switch completely to Unix98 pty's. The general procedure for configuring Unix98 pty support is: - Compile your kernel with CONFIG_UNIX98_PTYS and CONFIG_DEVPTS_FS. - mknod /dev/ptmx c 5 2 chmod 666 /dev/ptmx mkdir /dev/pts - Add to /etc/fstab: none /dev/pts devpts gid=5,mode=620 0 0 (Note: gid=5 is applicable for Red Hat systems for which group "tty" has gid 5. Adjust according to your distribution. Use mode=600 if you want "mesg n" to be default.) - Mount /dev/pts Frame buffer consoles ("fbcon") are now in the kernel for all platforms, not just those non-Intel ones for which VGA text mode is impossible. VGAcon is still available for those who want it, but fbcon has the advantage of providing a uniform graphical subsystem across all Linux ports, and it displays a spiffy penguin logo on boot-up ;-). For more information, see the files in Documentation/fb/ ; you may also need to download the fbset utilities. Libc (libc5) ============ Linux-2.2 is ELF-only. You can still compile a.out apps if you really want, but your kernel must be compiled ELF. If you can't currently compile ELF, consult the ELF howto at http://metalab.unc.edu/mdw/HOWTO/ELF-HOWTO.html and upgrade your system accordingly. For modules to work, you need to be running libc-5.4.x or greater. Since updates to libc fix other problems as well (security flaws, for example) and since 5.4.7 is missing a few needed symbols, try to get the latest 5.4.x you can. Currently, libc-5.4.46 is the latest public release. If you upgrade to libc-5.4.x, you also have to upgrade your dynamic linker (ld.so) to at least 1.9.9, or all sorts of weirdness will happen. Actually, ld.so-1.8.2 and later will work, but 1.9.9 is widely available, so if you need to upgrade, use it. If you get a release later than 1.8.5, avoid 1.8.10 as it introduces a few bugs that are fixed in later releases. Please make sure you don't install ld.so-2.x unless you're running glibc2 / libc6. If you upgrade to libc-5.4.x, you may also need to upgrade ypbind if you're using NIS. For ypbind and glibc, you'll probably need the ypbind-3.3-glibc5.diff patch available in the same place as the ypbind source. If you upgrade to libc-5.4.46, please read and pay attention to its accompanying release notes. The section about it breaking make is not a joke. GNU libc (libc6) ================ Older versions of GNU libc (libc6) have a bug in the dynamic linker. /etc/ld.so.cache gets mapped into memory and is never unmapped. If one of your boot scripts calls ldconfig, /etc/ld.so.cache is deleted. Init, however, still references that file; as of 2.1.122, the kernel will consequently not be able to remount the root file system r/o at system shutdown. To fix this, upgrade to at least the pre6 release of GNU libc 2.0.7. As a temporary workaround, modify your boot scripts to do the following before calling ldconfig: ln -f /etc/ld.so.cache /etc/ld.so.cache.old Modules ======= You need to upgrade to the latest version of modutils for the Linux 2.2 kernel. This version will also work with your 2.0 kernel. As of 2.1.90-pre1, kerneld has been replaced by a kernel thread, kmod. See Documentation/kmod.txt for more information. The main user-level change this requires is modification to your init scripts to check for the absence of /proc/sys/kernel/modprobe before starting kerneld. Binutils ======== If you upgrade binutils, please read its accompanying release notes to find out the proper way to upgrade it. No, the instruction to "rm `which encaps`" is not a joke. The last public release of the binutils 2.8.x series was 2.8.1.0.23. Binutils 2.8.1.0.25 to 2.9.1.0.2 are beta releases, and are known to be very buggy. Binutils 2.9.1 (note the absence of a suffix) from the FSF should work, and binutils 2.9.1.0.7 and later releases are also good. Either use binutils-2.8.1.0.23 or binutils-2.9.1.0.7 or later. Glibc2 users should especially try to use the 2.9.1.0.x releases, as they resolve known issues with glibc2 and binutils-2.8.x releases. libbfd, libiberty, and /usr/include/bfd.h, which are part of recent binutils packages, are also required to compile ksymoops. Depending upon your distribution, this may require you to install both binutils and binutils-development packages (Debian puts bfd.h in binutils-dev, for example). Bin86 ===== To compile the kernel on the IA32 platform, a real-mode assembler and linker is required. These are found in the bin86 package. Gnu C ===== You need at least GCC 2.7.2 to compile the kernel. If you're upgrading from an earlier release, you might as well get GCC 2.7.2.3, the latest stable public release. If you already have GCC 2.7.2 on your system, you don't have to upgrade just so the kernel will work (though feel free to upgrade if you want the gcc bug fixes). Note that the latest compilers (egcs, pgcc, gcc 2.8) may do Bad Things while compiling your kernel, particularly if absurd optimizations (like -O9) are used. Caveat emptor. Currently, the only C compiler available in a binary distribution is egcs. Version 1.1.2 seems okay; if you have to have a binary, you may be successful using that. In general, however, gcc-2.7.2.3 is known to be stable, while egcs and others have not been as thoroughly tested yet. Networking Changes ================== Please read Documentation/networking/routing.txt and Documentation/networking/policy-routing.txt for more information about changes in routing code. OSPF classes have been added, and interface routes are generated automatically. If for some reason you need to override this automatic default routing, you have to specify the complete route specification (netmask, device, etc.) for the kernel to accept it. Consequently, you need to either remove interface routes from your init scripts or add missing information to them if you need to replace the automatic routes. Also note that some routes, such as loopback routes, do not show up in some standard tools. Check in /proc/net/rt_local to verify their presence. To turn on IP forwarding, issue the following command: echo 1 > /proc/sys/net/ipv4/ip_forward Similar procedures are necessary to turn on other features. If something appears broken, check the /proc/sys/net/ipv4/ directory. "1" generally denotes enabled, while "0" generally denotes disabled. If you're experiencing reports of lots of network errors, chances are you need to upgrade to a more recent net-tools that understands the new /proc/net/dev format. This will also provide support for new features like IPv6. As of 2.1.102, the IP firewalling code has been replaced; ipfwadm will no longer work. You need to obtain "ipchains," available from http://www.rustcorp.com/linux/ipchains/ , and use that instead of ipfwadm. To use masq forwarding you will need to obtain "ipmasqadm," available from http://juanjox.linuxhq.com/ . DHCP clients for 2.0 do not work with the new networking code in the 2.2 kernel. You will need to upgrade your dhcpcd / dhcpclient. In 2.0.x the kernel could be configured to drop source routed IP packets via a compile time configuration option. In 2.2.x, this has been replaced by a sysctl. See Documentation/networking/ip-sysctl.txt for more information. Memory ====== As of 2.1.41, the format of /proc/meminfo has changed. This broke many memory utils, which have to be upgraded. Get the new procps and you should be set. Network File System =================== The NFS code in the kernel is currently being revised, resulting in much-improved performance. Also, amd is being phased out in favor of the much better autofs. You'll also have to get the appropriate utils to use autofs as well as the new NFS utils. In addition, you have the choice of user-land NFS or kernel-level NFS (knfs). Util-linux (including mount) ============================ Among other changes made in the development of Linux kernel 2.2, the 128 meg limit on IA32 swap partition sizes has been eliminated. To use larger swap spaces, you need the new mkswap found in util-linux. You also need to upgrade util-linux to get the latest version of mount. Partitions on 2048-bytes-per-sector media (certain magneto-opticals most prominently) were broken throughout the 2.1 kernel series, meaning that you will be unable to use 2.1-partitioned media on Linux 2.2. This is not a 2.2 bug - 2.2 finally does the right thing! [If you have to interchange media between Linux 2.1 and 2.2, your best bet is to not use partitions at all but create the filesystem on the raw device (e.g. /dev/sda) instead. This is also known as the superfloppy format.] To properly create partitions on 2048-bytes-per-sector media with Linux 2.2, be sure to use no less than fdisk version 2.9i and invoke fdisk using '-b 2048' as an option. RPM === If you run Red Hat Linux or any other distribution that uses RPM, you need to upgrade RPM to a 2.5.x or later version. DOSEMU ====== A new "stable" version of DOSEMU is available for 2.2 kernels. Upgrade to 0.98.6 or later. Loadlin ======= Linux 2.1.22 and later releases use a new method of memory size detection, requiring loadlin users to upgrade to loadlin-1.6a. Sh-utils ======== As of Linux-2.1.26, the Configure script ("make config") has been updated to be POSIX-compliant. As a result, your expr needs to be updated. Use sh-utils 1.16 or later. Parallel Ports ============== As of 2.1.33, parallel port support can now be handled by the parport driver. Be aware that with Plug-and-Play support turned on, your parallel port may no longer be where you expect it; for example, LPT1 (under DOS) was sometimes /dev/lp1 in Linux, but will probably be /dev/lp0 with the new Plug-and-Play driver. If printing breaks with the new driver, try checking your lpd configuration. A good source of more information is the Documentation/parport.txt file included with the kernel. Setserial ========= If you experience random problems (stuck lines, lost characters, etc.) with serial lines under recent kernels, upgrading setserial should help. Syncookies ========== When you build your kernel with Syncookie support (CONFIG_SYN_COOKIES) the syncookie code still defaults to off (unlike the 2.0.30+ behavior). You have to explicitly enable it by issuing the following command: echo 1 > /proc/sys/net/ipv4/tcp_syncookies Bash ==== Old versions of Bash fail to properly handle symlinks, which can cause problems when compiling modules. Upgrade to at least 1.14 to fix this problem. Sysklogd ======== Older versions of sysklogd sometimes segfault under 2.2 kernels. Upgrading to the latest release fixes that problem as well as adding support for new features like system power-off on halt (with appropriate incantations of halt; see the man page) and automatic decoding of kernel oopses. Ncpfs ===== To mount NetWare shares, you'll need to upgrade to a more recent version of the ncpfs utils. SMBfs ===== To mount SMB (Samba / Windows) shares, you'll need to use the smbmount utility included with release 2.0 of Samba. Documentation/filesystems/smbfs.txt has more information about this. Note that smbmount must have been built against 2.2 headers to work with 2.2; if all else fails, recompile it and hope it works ;-). In addition, Mike Warfield has a script and some information at http://www.wittsend.com/mhw/smbmount.html that you will probably find useful. Pcmcia-cs ========= If you use pcmcia cards, you'll need to upgrade the daemon and support utils to the latest release of pcmcia-cs. PPP === Due to changes in the routing code, those of you using PPP networking will need to upgrade your pppd. iBCS ==== A new version of iBCS is necessary for 2.2 kernels. AppleTalk ========= Use the Asun version of netatalk for AppleTalk support, as Umich's version is not compatible with 2.2 kernels. Psmisc ====== fuser, which comes with psmisc, reads /proc/*/fd/* to do its job. Upgrade psmisc if 2.2 changes to /proc broke the version you're using. Tunelp ====== A new version of tunelp is available which will allow you to enable "trustirq" mode, improving printing while using IRQ-driven lp ports. PCI utils ========= Linux PCI utils are available; these include lspci, which displays the detailed information about your system's PCI devices which used to be in /proc/pci, and setpci, which allws you to read and write configuration registers on your PCI devices. Xosview ======= Changes to the /proc interface require a recent xosview. RealPlayer ========== Current releases of Real Player 5.0 depend on a bug in the sound sub-system which is no longer there. Consequently, they don't work. Real is aware of the problem and should have an updated version of the software available shortly. In the mean time, you can always try backing up your copy of rvplayer, and then editing it by: dd if=/dev/zero of=rvplayer bs=1 count=1 seek=657586 conv=notrunc dd if=/dev/zero of=rvplayer bs=1 count=1 seek=665986 conv=notrunc If you're lucky, you'll then have sound.... You may also need to edit it with dd if=/dev/zero of=rvplayer bs=1 count=1 seek=702554 conv=notrunc as well. Alternately, download rpopen from http://onramp.i2k.com/~jeffd/rpopen/ and pre-load it before you run rvplayer (it's a shared object which blocks rvplayer from doing the NONBLOCKing open of /dev/dsp). Quotas ====== If you are using large quotas, you should upgrade your quota utils; newer versions count file sizes in blocks instead of bytes, providing an upper limit of terabytes instead of 4 GB. Ping ==== Most distributed ping clients are buggy. Get an updated one from the iputils package. Patch ===== Really old versions of patch cannot delete files. This can be a problem if you try to upgrade via patches. If, for example, you are unable to compile Linux 2.2, you may have an outdated version of patch. Upgrade, re-patch the kernel, and try again. Process accounting ================== If you use process accounting, you need to recompile the package against 2.2 kernel includes for it to work properly. Furthermore, when you do so, watch out for a quirky configure script. Your generated config.h file needs to #define HAVE_LINUX_ACCT_H but instead it often has /* #undef HAVE_LINUX_ACCT_H */ so be sure to check that when you recompile. ISDN4Linux ========== Older isdn4k-utils versions don't support EXTRAVERSION into kernel version string. A upgrade to isdn4k-utils.v3.1beta7 or later is recomented. Where to get the files ********************** Binutils ======== The 2.9.1.0.25 release: ftp://ftp.varesearch.com/pub/support/hjl/binutils/2.9.1/binutils-2.9.1.0.25.tar.gz Installation notes: ftp://ftp.varesearch.com/pub/support/hjl/binutils/2.9.1/release.binutils-2.9.1.0.25 The 2.9.5.0.16 release: ftp://ftp.varesearch.com/pub/support/hjl/binutils/binutils-2.9.5.0.16.tar.bz2 Installation notes: ftp://ftp.varesearch.com/pub/support/hjl/binutils/release.binutils-2.9.5.0.16 Bin86 ===== The 0.4 release: ftp://metalab.unc.edu/pub/Linux/GCC/bin86-0.4.tar.gz ftp://tsx-11.mit.edu/pub/linux/packages/GCC/bin86-0.4.tar.gz Gnu C ===== The egcs-1.1.2 release: ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-glibc.x86.tar.bz2 ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-libc5.x86.tar.bz2 ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-alpha.x86.tar.bz2 Installation notes: ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/release.egcs-1.1.2 Gnu C 2.7.2.3 source: ftp://ftp.gnu.org/gnu/gcc/gcc-2.7.2.3.tar.gz ftp://metalab.unc.edu/pub/gnu/gcc-2.7.2.3.tar.gz Linux C Library =============== The (libc5) 5.4.46 release: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/libc-5.4.46.bin.tar.gz ftp://metalab.unc.edu/pub/Linux/GCC/libc-5.4.46.bin.tar.gz Installation notes for 5.4.46: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/release.libc-5.4.46 ftp://metalab.unc.edu/pub/Linux/GCC/release.libc-5.4.46 The (libc6) GNU libc 2.0.7pre6 release: ftp://ftp.kernel.org/pub/software/libs/glibc/glibc-2.0.7pre6.tar.gz ftp://ftp.kernel.org/pub/software/libs/glibc/glibc-2.0.7pre6.tar.bz2 Linux C++ Library ================= The 2.7.2 release: ftp://ftp.gnu.org/gnu/libg++/libg++-2.7.2.tar.gz Dynamic Linker ============== The 1.9.9 release: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.9.9.tar.gz ftp://metalab.unc.edu/pub/Linux/GCC/ld.so-1.9.9.tar.gz Modules utilities ================= The 2.1.121 release: ftp://ftp.kernel.org/pub/linux/kernel/v2.1/modutils-2.1.121.tar.gz Procps utilities ================ The 2.0.3 release: ftp://tsx-11.mit.edu/pub/linux/sources/usr.bin/procps-2.0.3.tar.gz Procinfo utilities ================== The 17 release: ftp://ftp.cistron.nl/pub/people/svm/procinfo-17.tar.gz Psmisc utilities ================ The 17 release: ftp://lrcftp.epfl.ch/pub/linux/local/psmisc/psmisc-17.tar.gz ftp://metalab.unc.edu/pub/Linux/system/status/ps/psmisc-17.tar.gz RPM utilities ============= The 2.5.1 source release: ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1-1.src.rpm ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1.tar.gz DOSEMU ====== The 0.98.6 release: ftp://ftp.dosemu.org/dosemu/dosemu-0.98.6.tgz Loadlin ======= The 1.6a release: ftp://ftp.suse.com/pub/loadlin/update-1.6a/loadlin.exe.gz ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/update-1.6a/loadlin.exe.gz Sh-utils ======== The 1.16 release: ftp://metalab.unc.edu/pub/gnu/sh-utils-1.16.tar.gz ftp://ftp.gnu.org/gnu/sh-utils/sh-utils-1.16.tar.gz Util-linux ========== The 2.9 release: ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/util-linux-2.9z.tar.gz Autofs ====== The 3.1.3 release: ftp://ftp.kernel.org/pub/linux/daemons/autofs/autofs-3.1.3.tar.gz NFS === The user-land 2.2beta40 release: ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz ftp://linux.nrao.edu/mirrors/fb0429.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz The kernel-level 1.4.7 release: ftp://ftp.varesearch.com/pub/support/hjl/knfsd/knfsd-1.4.7.tar.gz ftp://ftp.kernel.org/pub/linux/devel/gcc/knfsd-1.4.7.tar.gz Net-tools ========= The 1.52 release: ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/net-tools-1.52.tar.gz http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.52.tar.gz Ypbind ====== The 3.3 release: ftp://ftp.kernel.org/pub/linux/utils/net/NIS/ypbind-3.3.tar.gz Sysklogd ======== The 1.3-31 release: ftp://metalab.unc.edu/pub/Linux/system/daemons/sysklogd-1.3-31.tar.gz Bash ==== The 1.14.7 release: ftp://ftp.gnu.org/gnu/bash/bash-1.14.7.tar.gz The 2.03 release: ftp://ftp.gnu.org/gnu/bash/bash-2.03.tar.gz Ncpfs ===== The 2.2.0 release: ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/ncpfs-2.2.0.tgz SMBfs ===== The 2.0.5a release of Samba: ftp://ftp.samba.org/pub/samba/samba-2.0.5a.tar.gz Pcmcia-cs ========= The 3.0.14 release: ftp://sourceforge.org/pcmcia/pcmcia-cs.3.0.14.tar.gz Setserial ========= The 2.15 release: ftp://tsx-11.mit.edu/pub/linux/sources/sbin/setserial-2.15.tar.gz ftp://metalab.unc.edu/pub/Linux/system/serial/setserial-2.15.tar.gz PPP === The 2.3.10 release: ftp://cs.anu.edu.au/pub/software/ppp/ppp-2.3.10.tar.gz IP Chains ========= The 1.3.9 release: ftp://ftp.rustcorp.com/ipchains/ipchains-1.3.9.tar.gz ftp://ftp.rustcorp.com/ipchains/ipchains-1.3.9.tar.bz2 IP Masq Adm =========== The 0.4.2 release: http://juanjox.linuxhq.com/ipmasqadm-0.4.2.tar.gz DHCP clients ============ The 2.0 ISC dhcpclient release: ftp://ftp.isc.org/isc/dhcp/test/dhcp-2.0.tar.gz The 1.3.18-pl1 PhysTech dhcpcd release: ftp://ftp.phystech.com/pub/dhcpcd-1.3.18-pl1.tar.gz iBCS ==== The 11/05/98 release: ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2/ibcs-2.1-981105-ALPHA.tar.gz Asun netatalk ============= The 2.1.3 release: ftp://ftp.u.washington.edu/pub/user-supported/asun/netatalk-1.4b2+asun2.1.3.tar.gz Fbset ===== The 2.1 release: http://www.cs.kuleuven.ac.be/~geert/bin/fbset-2.1.tar.gz PCI utils ========= The 2.0 release: ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/pciutils-2.0.tar.gz ftp://metalab.unc.edu/pub/Linux/hardware/pciutils-2.0.tar.gz Tunelp ====== The 0-2.1.131 release: ftp://e-mind.com/pub/linux/tunelp/tunelp-0-2.1.131.tar.gz Xosview ======= The 1.6.1 release: ftp://metalab.unc.edu/pub/Linux/system/status/xstatus/xosview-1.6.1.tar.gz Quota utils =========== The 1.55 release: ftp://ftp.uk.linux.org/pub/linux/sct/quota/quota-1.55-10.i386.rpm ftp://ftp.uk.linux.org/pub/linux/sct/quota/quota-1.55-10.src.rpm IP utils ======== The latest releases: ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.2.4-now-ss990824.tar.gz ftp://ftp.inr.ac.ru/ip-routing/iputils-ss990915.tar.gz Patch ===== The 2.5 release: ftp://ftp.gnu.org/gnu/patch/patch-2.5.tar.gz ISDN4Linux ========== The v3.1beta7 release: ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/testing/isdn4k-utils.v3.1beta7.tar.gz Other Info ========== Please remember that most of these utils are available on your favorite local linux mirror. If you can, please get them from a closer site before checking metalab or tsx-11. You may also want to check for updated versions of this software in a package format for the distribution you use. For those of you running Red Hat (or RPM on a different distribution), most of these are available in RPM format. Check around your favorite Red Hat mirror site before installing the non-RPM version. Remember, you might need to use the --force option to get the upgrade to install. ftp://contrib.redhat.com/ , ftp://developer.redhat.com/ , or ftp://updates.redhat.com/ will have almost everything you need, and Red Hat 5.2 ships with most necessary software. Those of you running Debian (or a different distribution that supports .deb packages) can look in the "unstable" and "project/experimental" directories of your favorite Debian mirror. The Debian 2.0 release ships with most packages you need as well. Please send info about any other packages that 2.2 "broke" or about any new features of 2.2 that require extra or new packages for use to Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). Linux kernel coding style This is a short document describing the preferred coding style for the linux kernel. Coding style is very personal, and I won't _force_ my views on anybody, but this is what goes for anything that I have to be able to maintain, and I'd prefer it for most other things too. Please at least consider the points made here. First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it's a great symbolic gesture. Anyway, here goes: Chapter 1: Indentation Tabs are 8 characters, and thus indentations are also 8 characters. There are heretic movements that try to make indentations 4 (or even 2!) characters deep, and that is akin to trying to define the value of PI to be 3. Rationale: The whole idea behind indentation is to clearly define where a block of control starts and ends. Especially when you've been looking at your screen for 20 straight hours, you'll find it a lot easier to see how the indentation works if you have large indentations. Now, some people will claim that having 8-character indentations makes the code move too far to the right, and makes it hard to read on a 80-character terminal screen. The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program. In short, 8-char indents make things easier to read, and have the added benefit of warning you when you're nesting your functions too deep. Heed that warning. Chapter 2: Placing Braces The other issue that always comes up in C styling is the placement of braces. Unlike the indent size, there are few technical reasons to choose one placement strategy over the other, but the preferred way, as shown to us by the prophets Kernighan and Ritchie, is to put the opening brace last on the line, and put the closing brace first, thusly: if (x is true) { we do y } However, there is one special case, namely functions: they have the opening brace at the beginning of the next line, thus: int function(int x) { body of function } Heretic people all over the world have claimed that this inconsistency is ... well ... inconsistent, but all right-thinking people know that (a) K&R are _right_ and (b) K&R are right. Besides, functions are special anyway (you can't nest them in C). Note that the closing brace is empty on a line of its own, _except_ in the cases where it is followed by a continuation of the same statement, ie a "while" in a do-statement or an "else" in an if-statement, like this: do { body of do-loop } while (condition); and if (x == y) { .. } else if (x > y) { ... } else { .... } Rationale: K&R. Also, note that this brace-placement also minimizes the number of empty (or almost empty) lines, without any loss of readability. Thus, as the supply of new-lines on your screen is not a renewable resource (think 25-line terminal screens here), you have more empty lines to put comments on. Chapter 3: Naming C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable "tmp", which is much easier to write, and not the least more difficult to understand. HOWEVER, while mixed-case names are frowned upon, descriptive names for global variables are a must. To call a global function "foo" is a shooting offense. GLOBAL variables (to be used only if you _really_ need them) need to have descriptive names, as do global functions. If you have a function that counts the number of active users, you should call that "count_active_users()" or similar, you should _not_ call it "cntusr()". Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs. LOCAL variable names should be short, and to the point. If you have some random integer loop counter, it should probably be called "i". Calling it "loop_counter" is non-productive, if there is no chance of it being mis-understood. Similarly, "tmp" can be just about any type of variable that is used to hold a temporary value. If you are afraid to mix up your local variable names, you have another problem, which is called the function-growth-hormone-imbalance syndrome. See next chapter. Chapter 4: Functions Functions should be short and sweet, and do just one thing. They should fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24, as we all know), and do one thing and do that well. The maximum length of a function is inversely proportional to the complexity and indentation level of that function. So, if you have a conceptually simple function that is just one long (but simple) case-statement, where you have to do lots of small things for a lot of different cases, it's OK to have a longer function. However, if you have a complex function, and you suspect that a less-than-gifted first-year high-school student might not even understand what the function is all about, you should adhere to the maximum limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to in-line them if you think it's performance-critical, and it will probably do a better job of it that you would have done). Another measure of the function is the number of local variables. They shouldn't exceed 5-10, or you're doing something wrong. Re-think the function, and split it into smaller pieces. A human brain can generally easily keep track of about 7 different things, anything more and it gets confused. You know you're brilliant, but maybe you'd like to understand what you did 2 weeks from now. Chapter 5: Commenting Comments are good, but there is also a danger of over-commenting. NEVER try to explain HOW your code works in a comment: it's much better to write the code so that the _working_ is obvious, and it's a waste of time to explain badly written code. Generally, you want your comments to tell WHAT your code does, not HOW. Also, try to avoid putting comments inside a function body: if the function is so complex that you need to separately comment parts of it, you should probably go back to chapter 4 for a while. You can make small comments to note or warn about something particularly clever (or ugly), but try to avoid excess. Instead, put the comments at the head of the function, telling people what it does, and possibly WHY it does it. Chapter 6: You've made a mess of it That's OK, we all do. You've probably been told by your long-time Unix user helper that "GNU emacs" automatically formats the C sources for you, and you've noticed that yes, it does do that, but the defaults it uses are less than desirable (in fact, they are worse than random typing - a infinite number of monkeys typing into GNU emacs would never make a good program). So, you can either get rid of GNU emacs, or change it to use saner values. To do the latter, you can stick the following in your .emacs file: (defun linux-c-mode () "C mode with adjusted defaults for use with the Linux kernel." (interactive) (c-mode) (c-set-style "K&R") (setq c-basic-offset 8)) This will define the M-x linux-c-mode command. When hacking on a module, if you put the string -*- linux-c -*- somewhere on the first two lines, this mode will be automatically invoked. Also, you may want to add (setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode) auto-mode-alist)) to your .emacs file if you want to have linux-c-mode switched on automagically when you edit source files under /usr/src/linux. But even if you fail in getting emacs to do sane formatting, not everything is lost: use "indent". Now, again, GNU indent has the same brain dead settings that GNU emacs has, which is why you need to give it a few command line options. However, that's not too bad, because even the makers of GNU indent recognize the authority of K&R (the GNU people aren't evil, they are just severely misguided in this matter), so you just give indent the options "-kr -i8" (stands for "K&R, 8 character indents"). "indent" has a lot of options, and especially when it comes to comment re-formatting you may want to take a look at the manual page. But remember: "indent" is not a fix for bad programming. Computone Intelliport II/Plus Multiport Serial Driver ----------------------------------------------------- Release Notes For Linux Kernel 2.2 and higher. These notes are for the drivers which have already been integrated into the kernel and have been tested on Linux kernels 2.0, 2.2, and 2.3. Version: 1.2.4 Date: 12/15/99 Author: Andrew Manison Testing: larryg@computone.com Support: support@computone.com Fixes and Updates: Doug McNash Proc Filesystem and Kernel Integration: Mike Warfield This file assumes that you are using the Computone drivers which are integrated into the kernel sources. For updating the drivers or installing drivers into kernels which do not already have Computone drivers, please refer to the instructions in the README.computone file in the driver patch. 1. INTRODUCTION This driver supports the entire family of Intelliport II/Plus controllers with the exception of the MicroChannel controllers. It does not support products previous to the Intelliport II. This driver was developed on the v2.0.x Linux tree and has been tested up to v2.2.13; it will probably not work with earlier v1.X kernels,. 2. QUICK INSTALLATION Hardware - If you have an ISA card, find a free interrupt and io port. List those in use with `cat /proc/interrupts` and `cat /proc/ioports`. Set the card dip switches to a free address. You may need to configure your BIOS to reserve an irq for an ISA card. PCI and EISA parameters are set automagically. Insert card into computer with the power off before or after drivers installation. Note the hardware address from the Computone ISA cards installed into the system. These are required for editing ip2.h or editing /etc/config.modules, or for specification on the modprobe command line. Software - Module installation: a) Obtain driver-kernel patch file b) Copy to the linux source tree root, Run ip2build (if not patch) c) Determine free irq/address to use if any (configure BIOS if need be) d) Run "make config" or "make menuconfig" or "make xconfig" Select (m) module for CONFIG_COMPUTONE under character devices. CONFIG_PCI and CONFIG_MODULES also may need to be set. e) Set address on ISA cards then: edit /usr/src/linux/drivers/char/ip2/ip2.h if needed or edit /etc/conf.modules (or /etc/modules.conf) if needed (module). or both to match this setting. f) Run "make dep" g) Run "make modules" h) Run "make modules_install" i) Run "/sbin/depmod -a" j) install driver using `modprobe ip2 ` (options listed below) k) run ip2mkdev (either the script below or the binary version) Kernel installation: a) Obtain driver-kernel patch file b) Copy to the linux source tree root, Run ip2build (if not patch) c) Determine free irq/address to use if any (configure BIOS if need be) d) Run "make config" or "make menuconfig" or "make xconfig" Select (y) kernel for CONFIG_COMPUTONE under character devices. CONFIG_PCI may need to be set if you have PCI bus. e) Set address on ISA cards then: edit /usr/src/linux/drivers/char/ip2/ip2.h f) Run "make dep" g) Run "make zImage" or whatever target you prefer. h) mv /usr/src/linux/arch/i386/boot/zImage to /boot. i) Add new config for this kernel into /etc/lilo.conf, run "lilo" or copy to a floppy disk and boot from that floppy disk. j) Reboot using this kernel k) run ip2mkdev (either the script below or the binary version) 3. INSTALLATION Previously, the driver sources were packaged with a set of patch files to update the character drivers' makefile and configuration file, and other kernel source files. A build script (ip2build) was included which applies the patches if needed, and build any utilities needed. What you recieve may be a single patch file in conventional kernel patch format build script. That form can also be applied by running patch -p1 < ThePatchFile. Otherwise run ip2build. The driver can be installed as a module (recommended) or built into the kernel. This is selected as for other drivers through the `make config` command from the root of the Linux source tree. If the driver is built into the kernel you will need to edit the file ip2.h to match the boards you are installing. See that file for instructions. If the driver is installed as a module the configuration can also be specified on the modprobe command line as follows: modprobe ip2 irq=irq1,irq2,irq3,irq4 io=addr1,addr2,addr3,addr4 where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11, 12,15) and addr1-4 are the base addresses for up to four controllers. If the irqs are not specified the driver uses the default in ip2/ip2.h (which selects polled mode). If no base addresses are specified the defaults in ip2.h are used. If you are autoloading the driver module with kerneld or kmod the base addresses and interrupt number must also be set in ip2/ip2.h and recompile or just insert and options line in /etc/modules.conf or both. The options line is equivalent to the command line and takes precidence over what is in ip2.h. /etc/modules.conf sample: options ip2 io=1,0x328 irq=1,10 alias char-major-71 ip2 alias char-major-72 ip2 alias char-major-73 ip2 equivelant ip2.h: static ip2config_t ip2config = { {1,10,0,0}, { 0x0001, // Board 0, ttyF0 - ttyF63 /* PCI card */ 0x0328, // Board 1, ttyF64 - ttyF127 /* ISA card */ 0x0000, // Board 2, ttyF128 - ttyF191 /* empty */ 0x0000 // Board 3, ttyF192 - ttyF255 /* empty */ } }; Note: Both io and irq should be updated to reflect YOUR system. An "io" address of "1/2" indicates a PCI/EISA card in the board table. The PCI or EISA irq will be assigned automatically. Specifying an invalid or in-use irq will default the driver into running in polled mode for that card. If all irq entries are 0 then all cards will operate in polled mode. If you select the driver as part of the kernel run : make depend make zlilo (or whatever you do to create a bootable kernel) If you selected a module run : make modules && make modules_install The utility ip2mkdev (see 5 and 7 below) creates all the device nodes required by the driver. For a device to be created it must be configured in the driver and the board must be installed. Only devices corresponding to real IntelliPort II ports are created. With multiple boards and expansion boxes this will leave gaps in the sequence of device names. ip2mkdev uses Linux tty naming conventions: ttyF0 - ttyF255 for normal devices, and cuf0 - cuf255 for callout devices. 4. USING THE DRIVERS As noted above, the driver implements the ports in accordance with Linux conventions, and the devices should be interchangeable with the standard serial devices. (This is a key point for problem reporting: please make sure that what you are trying do works on the ttySx/cuax ports first; then tell us what went wrong with the ip2 ports!) Higher speeds can be obtained using the setserial utility which remaps 38,400 bps (extb) to 57,600 bps, 115,200 bps, or a custom speed. Intelliport II installations using the PowerPort expansion module can use the custom speed setting to select the highest speeds: 153,600 bps, 230,400 bps, 307,200 bps, 460,800bps and 921,600 bps. The base for custom baud rate configuration is fixed at 921,600 for cards/expantion modules with ST654's and 115200 for those with Cirrus CD1400's. This corresponds to the maximum bit rates those chips are capable. For example if the baud base is 921600 and the baud divisor is 18 then the custom rate is 921600/18 = 51200 bps. See the setserial man page for complete details. Of course if stty accepts the higher rates now you can use that as well as the standard ioctls(). 5. ip2mkdev and assorted utilities... Several utilities, including the source for a binary ip2mkdev utility are available under .../drivers/char/ip2. These can be build by changing to that directory and typing "make" after the kernel has be built. If you do not wish to compile the binary utilities, the shell script below can be cut out and run as "ip2mkdev" to create the necessary device files. To use the ip2mkdev script, you must have procfs enabled and the proc file system mounted on /proc. 6. NOTES This is a release version of the driver, but it is impossible to test it in all configurations of Linux. If there is any anomalous behaviour that does not match the standard serial port's behaviour please let us know. 7. ip2mkdev shell script Previously, this script was simply attached here. It is now attached as a shar archive to make it easier to extract the script from the documentation. To create the ip2mkdev shell script change to a convenient directory (/tmp works just fine) and run the following command: unshar /usr/src/linux/Documentation/computone.txt (This file) You should now have a file ip2mkdev in your current working directory with permissions set to execute. Running that script with then create the necessary devices for the Computone boards, interfaces, and ports which are present on you system at the time it is run. #!/bin/sh # This is a shell archive (produced by GNU sharutils 4.2). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 1999-12-17 16:06 EST by . # Source directory was `/mnt2/src/linux-2.3.33/Documentation'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 3300 -rwxr-xr-x ip2mkdev # save_IFS="${IFS}" IFS="${IFS}:" gettext_dir=FAILED locale_dir=FAILED first_param="$1" for dir in $PATH do if test "$gettext_dir" = FAILED && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = GNU then gettext_dir=$dir fi fi if test "$locale_dir" = FAILED && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fi done IFS="$save_IFS" if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED then echo=echo else TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext -s" fi touch -am 1231235999 $$.touch >/dev/null 2>&1 if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touch else shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 1231235999 $$.touch # if mkdir _sh06360; then $echo 'x -' 'creating lock directory' else $echo 'failed to create lock directory' exit 1 fi # ============= ip2mkdev ============== if test -f 'ip2mkdev' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'ip2mkdev' '(file already exists)' else $echo 'x -' extracting 'ip2mkdev' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'ip2mkdev' && #!/bin/sh - X # ip2mkdev # # Make or remove devices as needed for Computone Intelliport drivers # # First rule! If the dev file exists and you need it, don't mess # with it. That prevents us from screwing up open ttys, ownership # and permissions on a running system! # # This script will NOT remove devices that no longer exist because # their board or interface box has been removed. If you want to get # rid of them, you can manually do an "rm -f /dev/ttyF* /dev/cuaf*" # before running this script, which will then recreate all the valid # devices # # =mhw= # Michael H. Warfield # mhw@wittsend.com # if test ! -f /proc/tty/drivers then X echo "\ Unable to check driver status. Make sure proc file system is mounted." X X exit 255 fi X if test ! -f /proc/tty/driver/ip2 then X echo "\ Unable to locate ip2 proc file. Attempting to load driver" X X if /sbin/insmod ip2 X then X if test ! -f /proc/tty/driver/ip2 X then X echo "\ Unable to locate ip2 proc file after loading driver. Driver initialization failure or driver version error. " X exit 255 X fi X else X echo "Unable to load ip2 driver." X exit 255 X fi fi X # Ok... So we got the driver loaded and we can locate the procfs files. # Next we need our major numbers. X TTYMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/tty/!d' -e 's/.*tty.[ ]*\([0-9]*\)[ ]*.*/\1/' < /proc/tty/drivers` CUAMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/cu/!d' -e 's/.*cu.[ ]*\([0-9]*\)[ ]*.*/\1/' < /proc/tty/drivers` BRDMAJOR=`sed -e '/^Driver: /!d' -e 's/.*IMajor=\([0-9]*\)[ ]*.*/\1/' < /proc/tty/driver/ip2` X echo "\ TTYMAJOR = $TTYMAJOR CUAMAJOR = $CUAMAJOR BRDMAJOR = $BRDMAJOR " X # Ok... Now we should know our major numbers, if appropriate... # Now we need our boards and start the device loops. X grep '^Board [0-9]:' /proc/tty/driver/ip2 | while read token number type alltherest do X # The test for blank "type" will catch the stats lead-in lines X # if they exist in the file X if test "$type" = "vacant" -o "$type" = "Vacant" -o "$type" = "" X then X continue X fi X X BOARDNO=`expr "$number" : '\([0-9]\):'` X PORTS=`expr "$alltherest" : '.*ports=\([0-9]*\)' | tr ',' ' '` X MINORS=`expr "$alltherest" : '.*minors=\([0-9,]*\)' | tr ',' ' '` X X if test "$BOARDNO" = "" -o "$PORTS" = "" X then # This may be a bug. We should at least get this much information X echo "Unable to process board line" X continue X fi X X if test "$MINORS" = "" X then # Silently skip this one. This board seems to have no boxes X continue X fi X X echo "board $BOARDNO: $type ports = $PORTS; port numbers = $MINORS" X X if test "$BRDMAJOR" != "" X then X BRDMINOR=`expr $BOARDNO \* 4` X STSMINOR=`expr $BRDMINOR + 1` X if test ! -c /dev/ip2ipl$BOARDNO ; then X mknod /dev/ip2ipl$BOARDNO c $BRDMAJOR $BRDMINOR X fi X if test ! -c /dev/ip2stat$BOARDNO ; then X mknod /dev/ip2stat$BOARDNO c $BRDMAJOR $STSMINOR X fi X fi X X if test "$TTYMAJOR" != "" X then X PORTNO=$BOARDBASE X X for PORTNO in $MINORS X do X if test ! -c /dev/ttyF$PORTNO ; then X # We got the harware but no device - make it X mknod /dev/ttyF$PORTNO c $TTYMAJOR $PORTNO X fi X done X fi X X if test "$CUAMAJOR" != "" X then X PORTNO=$BOARDBASE X X for PORTNO in $MINORS X do X if test ! -c /dev/cuf$PORTNO ; then X # We got the harware but no device - make it X mknod /dev/cuf$PORTNO c $CUAMAJOR $PORTNO X fi X done X fi done X Xexit 0 SHAR_EOF $shar_touch -am 1217160599 'ip2mkdev' && chmod 0755 'ip2mkdev' || $echo 'restore of' 'ip2mkdev' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'ip2mkdev:' 'MD5 check failed' eccd181f4a2005e47a969fc83885df61 ip2mkdev SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'ip2mkdev'`" test 3300 -eq "$shar_count" || $echo 'ip2mkdev:' 'original size' '3300,' 'current size' "$shar_count!" fi fi rm -fr _sh06360 exit 0 # Maintained by Axel Boldt (boldt@math.ucsb.edu) # # This version of the Linux kernel configuration help texts # corresponds to the kernel versions 2.2.x. # # Translations of this file available on the WWW: # # - Japanese, by Tetsuyasu YAMADA (tetsu@cauchy.nslab.ntt.co.jp), at # http://jf.gee.kyoto-u.ac.jp/JF/JF-ftp/euc/Configure.help.euc # - Russian, by kaf@linux.nevod.perm.su, at # http://nevod.perm.su/service/linux/doc/kernel/Configure.help # - French, by David Bourgin (dbourgin@wsc.com), at # http://www.linux-kheops.com/traduc/kernels/ # - Spanish, by Carlos Perell Marn (fperllo@ehome.encis.es), at # http://visar.csustan.edu/~carlos/ # - Italian, by Alessandro Rubini (rubini@linux.it), at # ftp://ftp-pavia1.linux.it/pub/linux/Configure.help # - Polish, by Cezar Cichocki (cezar@cs.net.pl), at # http://www.cs.net.pl/~cezar/Kernel # - German, by Jrg Strebel (jstrebel@suse.de) and Karl Eichwalder # (ke@suse.de), at http://www.suse.de/~ke/kernel/Configure.de.help.gz # # Information about what a kernel is, what it does, how to patch and # compile it and much more is contained in the Kernel-HOWTO, available # via FTP (user: anonymous) from metalab.unc.edu in the directory # /pub/Linux/docs/HOWTO. Before you start compiling, make sure that # you have the necessary versions of all programs and libraries # required to compile and run this kernel; they are listed in the file # Documentation/Changes. Make sure to read the toplevel kernel README # file as well. # # Format of this file: descriptionvariablehelp text. If # the question being documented is of type "choice", we list only the # first occurring config variable. The help texts may contain empty # lines, but every non-empty line must be indented two positions. # Order of the help texts does not matter, however, no variable should # be documented twice: if it is, only the first occurrence will be # used by Configure. We try to keep the help texts of related variables # close together. Lines starting with `#' are ignored. To be nice to # menuconfig, limit your line length to 70 characters. Use emacs' # kfill.el to edit and ispell.el to spell check this file or you lose. # # If you add a help text to this file, please try to be as gentle as # possible. Don't use unexplained acronyms and generally write for the # hypothetical ignorant but intelligent user who has just bought a PC, # removed Windows, installed Linux and is now recompiling the kernel # for the first time. Tell them what to do if they're unsure. Technical # information should go in a README in the Documentation directory. # Mention all the relevant READMEs and HOWTOs in the help text. # Repetitions are fine since the help texts are not meant to be read # in sequence. # # All this was shamelessly stolen from several different sources. Many # thanks to all the contributors. Feel free to use these help texts in # your own kernel configuration tools. The texts are copyrighted (c) # 1995-1999 by Axel Boldt and many others and are governed by the GNU # General Public License. Prompt for development and/or incomplete code/drivers CONFIG_EXPERIMENTAL Some of the various things that Linux supports (such as network drivers, filesystems, network protocols, etc.) can be in a state of development where the functionality, stability, or the level of testing is not yet high enough for general use. This is usually known as the "alpha-test" phase amongst developers. If a feature is currently in alpha-test, then the developers usually discourage uninformed widespread use of this feature by the general public to avoid "Why doesn't this work?" type mail messages. However, active testing and use of these systems is welcomed. Just be aware that it may not meet the normal level of reliability or it may fail to work in some special cases. Detailed bug reports from people familiar with the kernel internals are usually welcomed by the developers (before submitting bug reports, please read the documents README, MAINTAINERS, REPORTING_BUGS, Documentation/BUG-HUNTING, and Documentation/oops-tracing.txt in the kernel source). Unless you intend to help test and develop a feature or driver that falls into this category, or you have a situation that requires using these features you should probably say N here, which will cause this configure script to present you with fewer choices. If you say Y here, you will be offered the choice of using features or drivers that are currently considered to be in the alpha-test phase. Symmetric Multi Processing CONFIG_SMP This enables support for systems with more than one CPU. If you have a system with only one CPU, like most personal computers, say N. If you have a system with more than one CPU, say Y. If you say N here, the kernel will run on single and multiprocessor machines, but will use only one CPU of a multiprocessor machine. If you say Y here, the kernel will run on many, but not all, singleprocessor machines. On a singleprocessor machine, the kernel will run faster if you say N here. Note that if you say Y here and choose architecture "586" or "Pentium" under "Processor family", the kernel will not work on 486 architectures. Similarly, multiprocessor kernels for the "PPro" architecture may not work on all Pentium based boards. People using multiprocessor machines who say Y here should also say Y to "Enhanced Real Time Clock Support", below. The "Advanced Power Management" code will be disabled if you say Y here. See also: Documentation/SMP.txt, Documentation/smp.tex, Documentation/smp.txt, and Documentation/IO-APIC.txt. Also see the SMP-FAQ on the WWW at http://www.irisa.fr/prive/mentre/smp-faq/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you don't know what to do here, say N. Kernel math emulation CONFIG_MATH_EMULATION Linux can emulate a math coprocessor (used for floating point operations) if you don't have one. 486DX and Pentium processors have a math coprocessor built in, 486SX and 386 do not, unless you added a 487DX or 387, respectively. (The messages during boot time can give you some hints here ["man dmesg"].) Everyone needs either a coprocessor or this emulation. If you don't have a math coprocessor, you need to say Y here; if you say Y here even though you have a coprocessor, the coprocessor will be used nevertheless. (This behavior can be changed with the kernel command line option "no387", which comes handy if your coprocessor is broken. Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) This means that it is a good idea to say Y here if you intend to use this kernel on different machines. More information about the internals of the Linux math coprocessor emulation can be found in arch/i386/math-emu/README. If you are not sure, say Y; apart from resulting in a 45 KB bigger kernel, it won't hurt. Timer and CPU usage LEDs CONFIG_LEDS If you define this option, the LEDs on your machine will be used to provide useful information about your current system status. If you are compiling a kernel for a NetWinder or EBSA-285, you will be able to select which LEDs are active using the options below. If you are compiling a kernel for the EBSA-110 however, the red LED will simply flash regularly to indicate that the system is still functional. It is still safe to say yes here if you have a CATS system, but the driver will do nothing. Timer LED CONFIG_LEDS_TIMER If you say yes here, one of the system LEDs (the green one on the NetWinder or the amber one on the EBSA285) will flash regularly to indicate that the system is still operational. This is mainly useful to kernel hackers who are debugging unstable kernels. CPU usage LED CONFIG_LEDS_CPU If you say yes here, the red LED will be used to give a good real time indication of CPU usage, by lighting whenever the idle task is not currently executing. Kernel FP software completion CONFIG_MATHEMU This option is required for IEEE compliant floating point arithmetic on the Alpha. The only time you would ever not say Y is to say M in order to debug the code. Say Y unless you know what you are doing. Normal PC floppy disk support CONFIG_BLK_DEV_FD If you want to use the floppy disk drive(s) of your PC under Linux, say Y. Information about this driver, especially important for IBM Thinkpad users, is contained in drivers/block/README.fd. This file also contains the location of the Floppy driver FAQ as well as location of the fdutils package used to configure additional parameters of the driver at run time. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called floppy.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Support for PowerMac floppy CONFIG_MAC_FLOPPY If you have a SWIM-3 (Super Woz Integrated Machine 3; from Apple) floppy controller, say Y here. Most commonly found in PowerMacs. RAM disk support CONFIG_BLK_DEV_RAM Saying Y here will allow you to use a portion of your RAM memory as a block device, so that you can make filesystems on it, read and write to it and do all the other things that you can do with normal block devices (such as hard drives). It is usually used to load and store a copy of a minimal root file system off of a floppy into RAM during the initial install of Linux. Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read Documentation/ramdisk.txt. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M and read Documentation/modules.txt. The module will be called rd.o. Most normal users won't need the RAM disk functionality, and can thus say N here. Initial RAM disk (initrd) support CONFIG_BLK_DEV_INITRD The initial RAM disk is a RAM disk that is loaded by the boot loader (loadlin or lilo) and that is mounted as root before the normal boot procedure. It is typically used to load modules needed to mount the "real" root file system, etc. See Documentation/initrd.txt for details. Loop device support CONFIG_BLK_DEV_LOOP Saying Y here will allow you to use a regular file as a block device; you can then create a file system on that block device and mount it just as you would mount other block devices such as hard drive partitions, CDROM drives or floppy drives. This is useful if you want to check an ISO 9660 file system before burning the CD, or if you want to use floppy images without first writing them to floppy. The loop device driver can also be used to "hide" a filesystem in a disk partition, floppy, or regular file, either using encryption (scrambling the data) or steganography (hiding the data in the low bits of, say, a sound file). This is also safe if the file resides on a remote file server. If you want to do this, you will first have to acquire and install a kernel patch from ftp://ftp.replay.com/pub/crypto/linux/all or ftp://verden.pvv.org/pub/linux/kerneli/v2.1/, and then you need to say Y to this option. Note that alternative ways to use encrypted filesystems are provided by the cfs package, which can be gotten via FTP (user: anonymous) from ftp://ftp.replay.com/pub/crypto/disk/, and the newer tcfs package, available at http://tcfs.dia.unisa.it/. You do not need to say Y here if you want to use one of these. However, using cfs requires saying Y to "NFS filesystem support" below while using tcfs requires applying a kernel patch. To use the loop device, you need the losetup utility and a recent version of the mount program, both contained in the util-linux package. The location and current version number of util-linux is contained in the file Documentation/Changes. Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called loop.o. Most users will answer N here. Network Block Device support CONFIG_BLK_DEV_NBD Saying Y here will allow your computer to be a client for network block devices, i.e. it will be able to use block devices exported by servers (mount filesystems on them etc.). Communication between client and server works over TCP/IP networking, but to the client program this is hidden: it looks like a regular local file access to a block device special file such as /dev/nd0. Network block devices also allows you to run a block-device in userland (making server and client physically the same computer, communicating using the loopback network device). Read Documentation/nbd.txt for more information, especially about where to find the server code, which runs in user space and does not need special kernel support. Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called nbd.o. If unsure, say N. Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support CONFIG_BLK_DEV_IDE If you say Y here, you will use the full-featured IDE driver to control up to four IDE interfaces, each being able to serve a "master" and a "slave" device, for a total of up to eight IDE disk/cdrom/tape/floppy drives. People with SCSI-only systems can say N here. Useful information about large (>540 MB) IDE disks, multiple interfaces, what to do if IDE devices are not automatically detected, sound card IDE ports, module support, and other topics, is contained in Documentation/ide.txt. For detailed information about hard drives, consult the Disk-HOWTO and the Multi-Disk-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. To fine-tune IDE drive/interface parameters for improved performance, look for the hdparm package at ftp://metalab.unc.edu/pub/Linux/kernel/patches/diskdrives/ If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt and Documentation/ide.txt. The module will be called ide.o. Do not compile this driver as a module if your root filesystem (the one containing the directory /) is located on an IDE device. If you have one or more IDE drives, say Y or M here. If your system has no IDE drives, or if memory requirements are really tight, you could say N here, and select the "Old hard disk driver" below instead to save about 13 KB of memory in the kernel. Old hard disk (MFM/RLL/IDE) driver CONFIG_BLK_DEV_HD_ONLY There are two drivers for MFM/RLL/IDE hard disks. Most people use the newer enhanced driver, but this old one is still around for two reasons. Some older systems have strange timing problems and seem to work only with the old driver (which itself does not work with some newer systems). The other reason is that the old driver is smaller, since it lacks the enhanced functionality of the new one. This makes it a good choice for systems with very tight memory restrictions, or for systems with only older MFM/RLL/ESDI drives. Choosing the old driver can save 13 KB or so of kernel memory. If you are unsure, then just choose the Enhanced IDE/MFM/RLL driver instead of this one. For more detailed information, read the Disk-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. People with SCSI-only systems can say N here. Use old disk-only driver on primary interface CONFIG_BLK_DEV_HD_IDE There are two drivers for MFM/RLL/IDE disks. Most people use just the new enhanced driver by itself. This option however installs the old hard disk driver to control the primary IDE/disk interface in the system, leaving the new enhanced IDE driver to take care of only the 2nd/3rd/4th IDE interfaces. Doing this will prevent you from having an IDE/ATAPI CDROM or tape drive connected to the primary IDE interface. Choosing this option may be useful for older systems which have MFM/RLL/ESDI controller+drives at the primary port address (0x1f0), along with IDE drives at the secondary/3rd/4th port addresses. Normally, just say N here; you will then use the new driver for all 4 interfaces. People with SCSI-only systems don't need this and can say N here as well. Include IDE/ATA-2 DISK support CONFIG_BLK_DEV_IDEDISK This will include enhanced support for MFM/RLL/IDE hard disks. If you have a MFM/RLL/IDE disk, and there is no special reason to use the old hard disk driver instead, say Y. If you have an SCSI-only system, you can say N here. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-disk.o. Do not compile this driver as a module if your root filesystem (the one containing the directory /) is located on the IDE disk. If unsure, say Y. Include IDE/ATAPI CDROM support CONFIG_BLK_DEV_IDECD If you have a CDROM drive using the ATAPI protocol, say Y. ATAPI is a newer protocol used by IDE CDROM and TAPE drives, similar to the SCSI protocol. Most new CDROM drives use ATAPI, including the NEC-260, Mitsumi FX400, Sony 55E, and just about all non-SCSI double(2X) or better speed drives. If you say Y here, the CDROM drive will be identified at boot time along with other IDE devices, as "hdb" or "hdc", or something similar (check the boot messages with dmesg). If this is your only CDROM drive, you can say N to all other CDROM options, but be sure to say Y or M to "ISO 9660 CDROM filesystem support". Read the CDROM-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and the file Documentation/cdrom/ide-cd. Note that older versions of lilo (the Linux boot loader) cannot properly deal with IDE/ATAPI CDROMs, so install lilo-16 or higher, available from ftp://metalab.unc.edu/pub/Linux/system/Linux-boot/lilo. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-cd.o. Include IDE/ATAPI TAPE support CONFIG_BLK_DEV_IDETAPE If you have an IDE tape drive using the ATAPI protocol, say Y. ATAPI is a newer protocol used by IDE tape and CDROM drives, similar to the SCSI protocol. If you have an SCSI tape drive however, you can say N here. If you say Y here, the tape drive will be identified at boot time along with other IDE devices, as "hdb" or "hdc", or something similar, and will be mapped to a character device such as "ht0" (check the boot messages with dmesg). Be sure to consult the drivers/block/ide-tape.c and Documentation/ide.txt files for usage information. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-tape.o. Include IDE/ATAPI FLOPPY support CONFIG_BLK_DEV_IDEFLOPPY If you have an IDE floppy drive which uses the ATAPI protocol, answer Y. ATAPI is a newer protocol used by IDE CDROM/tape/floppy drives, similar to the SCSI protocol. The LS-120 and the IDE/ATAPI Iomega ZIP drive are also supported by this driver. (ATAPI PD-CD/CDR drives are not supported by this driver; support for PD-CD/CDR drives is available if you answer Y to "SCSI emulation support", below). If you say Y here, the FLOPPY drive will be identified along with other IDE devices, as "hdb" or "hdc", or something similar (check the boot messages with dmesg). If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-floppy.o. SCSI emulation support CONFIG_BLK_DEV_IDESCSI This will provide SCSI host adapter emulation for IDE ATAPI devices, and will allow you to use a SCSI device driver instead of a native ATAPI driver. This is useful if you have an ATAPI device for which no native driver has been written (for example, an ATAPI PD-CD or CDR drive); you can then use this emulation together with an appropriate SCSI device driver. In order to do this, say Y here and to "SCSI support" and "SCSI generic support", below. Note that this option does NOT allow you to attach SCSI devices to a box that doesn't have a SCSI host adapter installed. If both this SCSI emulation and native ATAPI support are compiled into the kernel, the native support will be used. People with SCSI-only systems can say N here. If unsure, say N. CMD640 chipset bugfix/support CONFIG_BLK_DEV_CMD640 The CMD-Technologies CMD640 IDE chip is used on many common 486 and Pentium motherboards, usually in combination with a "Neptune" or "SiS" chipset. Unfortunately, it has a number of rather nasty design flaws that can cause severe data corruption under many common conditions. Say Y here to include code which tries to automatically detect and correct the problems under Linux. This option also enables access to the secondary IDE ports in some CMD640 based systems. This driver will work automatically in PCI based systems (most new systems have PCI slots). But if your system uses VESA local bus (VLB) instead of PCI, you must also supply a kernel boot parameter to enable the CMD640 bugfix/support: "ide0=cmd640_vlb". (Try "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) The CMD640 chip is also used on add-in cards by Acculogic, and on the "CSA-6400E PCI to IDE controller" that some people have. For details, read Documentation/ide.txt. People with SCSI-only systems should say N here. If unsure, say Y. CMD640 enhanced support CONFIG_BLK_DEV_CMD640_ENHANCED This option includes support for setting/autotuning PIO modes and prefetch on CMD640 IDE interfaces. For details, read Documentation/ide.txt. If you have a CMD640 IDE interface and your BIOS does not already do this for you, then say Y here. Otherwise say N. RZ1000 chipset bugfix/support CONFIG_BLK_DEV_RZ1000 The PC-Technologies RZ1000 IDE chip is used on many common 486 and Pentium motherboards, usually along with the "Neptune" chipset. Unfortunately, it has a rather nasty design flaw that can cause severe data corruption under many conditions. Say Y here to include code which automatically detects and corrects the problem under Linux. This may slow disk throughput by a few percent, but at least things will operate 100% reliably. People with SCSI-only systems should say N here. If unsure, say Y. Generic PCI IDE chipset support CONFIG_BLK_DEV_IDEPCI Say Y here for PCI systems which use IDE drive(s). This option helps the IDE driver to automatically detect and configure all PCI-based IDE interfaces in your system. People with SCSI-only systems should say N here; if unsure say Y. Generic PCI bus-master DMA support CONFIG_BLK_DEV_IDEDMA If your PCI system uses IDE drive(s) (as opposed to SCSI, say) and is capable of bus-master DMA operation (most Pentium PCI systems), you will want to say Y here to reduce CPU overhead. You can then use the "hdparm" utility to enable DMA for drives for which it was not enabled automatically. By default, DMA is not enabled automatically for these drives, but you can change that by saying Y to the following question "Use DMA by default when available". You can get the latest version of the hdparm utility via anonymous FTP from ftp://metalab.unc.edu/pub/Linux/system/hardware/. Read the comments at the beginning of drivers/block/idedma.c and the file Documentation/ide.txt for more information. It is safe to say Y to this question. Winbond SL82c105 support CONFIG_BLK_DEV_SL82C105 If you have a Winbond SL82c105 IDE controller, say Y here to enable special configuration for this chip. This is common on various CHRP motherboards, but could be used elsewhere. If in doubt, say Y. Boot off-board chipsets first support CONFIG_BLK_DEV_OFFBOARD Normally, IDE controllers built into the motherboard (on-board controllers) are assigned to ide0 and ide1 while those on add-in PCI cards (off-board controllers) are relegated to ide2 and ide3. Answering Y here will reverse the situation, with off-board controllers on ide0/1 and on-board controllers on ide2/3. This can improve the usability of some boot managers such as LILO when booting from a drive on an off-board controller. Note that, if you say Y here, the order of the hd* devices will be rearranged which may require modification of fstab and other files. If in doubt, say N. Use DMA by default when available CONFIG_IDEDMA_AUTO Prior to kernel version 2.1.112, Linux used to automatically use DMA for IDE drives and chipsets which support it. Due to concerns about a couple of cases where buggy hardware may have caused damage, the default is now to NOT use DMA automatically. To revert to the previous behaviour, say Y to this question. If you suspect your hardware is at all flakey, say N here. Do NOT email the IDE kernel people regarding this issue! It is normally safe to answer Y to this question unless your motherboard uses a VIA VP2 chipset, in which case you should say N. Other IDE chipset support CONFIG_IDE_CHIPSETS Say Y here if you want to include enhanced support for various IDE interface chipsets used on motherboards and add-on cards. You can then pick your particular IDE chip from among the following options. This enhanced support may be necessary for Linux to be able to access the 3rd/4th drives in some systems. It may also enable setting of higher speed I/O rates to improve system performance with these chipsets. Most of these also require special kernel boot parameters to actually turn on the support at runtime; you can find a list of these in the file Documentation/ide.txt. People with SCSI-only systems can say N here. Generic 4 drives/port support CONFIG_BLK_DEV_4DRIVES Certain older chipsets, including the Tekram 690CD, use a single set of I/O ports at 0x1f0 to control up to four drives, instead of the customary two drives per port. Support for this can be enabled at runtime using the "ide0=four" kernel boot parameter if you say Y here. DTC-2278 support CONFIG_BLK_DEV_DTC2278 This driver is enabled at runtime using the "ide0=dtc2278" kernel boot parameter. It enables support for the secondary IDE interface of the DTC-2278 card, and permits faster I/O speeds to be set as well. See the Documentation/ide.txt and drivers/block/dtc2278.c files for more info. Holtek HT6560B support CONFIG_BLK_DEV_HT6560B This driver is enabled at runtime using the "ide0=ht6560b" kernel boot parameter. It enables support for the secondary IDE interface of the Holtek card, and permits faster I/O speeds to be set as well. See the Documentation/ide.txt and drivers/block/ht6560b.c files for more info. PROMISE DC4030 support (EXPERIMENTAL) CONFIG_BLK_DEV_PDC4030 This driver provides support for the secondary IDE interface and cache of Promise IDE chipsets, e.g. DC4030 and DC5030. This driver is known to incur timeouts/retries during heavy I/O to drives attached to the secondary interface. CDROM and TAPE devices are not supported yet. This driver is enabled at runtime using the "ide0=dc4030" kernel boot parameter. See the Documentation/ide.txt and drivers/block/pdc4030.c files for more info. PS/2 ESDI hard disk support CONFIG_BLK_DEV_PS2 Say Y here if you have a PS/2 machine with a MCA bus and an ESDI hard disk. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ps2esdi.o. Tekram TRM290 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_TRM290 This driver adds support for bus master DMA transfers using the Tekram TRM290 PCI IDE chip. Volunteers are needed for further tweaking and development. Please read the comments at the top of drivers/block/trm290.c. OPTi 82C621 enhanced support (EXPERIMENTAL) CONFIG_BLK_DEV_OPTI621 This is a driver for the OPTi 82C621 EIDE controller. Please read the comments at the top of drivers/block/opti621.c. NS87415 support (EXPERIMENTAL) CONFIG_BLK_DEV_NS87415 This driver adds detection and support for the NS87415 chip (used in SPARC64, among others). Please read the comments at the top of drivers/block/ns87415.c. VIA82C586 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_VIA82C586 This adds initial timing settings for VIA (U)DMA onboard ide controllers that are ATA3 compliant. May work with ATA4 systems, but not tested to date. If you say Y here, you also need to say Y to "Use DMA by default when available", above. If unsure, say N. CMD646 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_CMD646 Say Y here if you have an IDE controller like this. QDI QD6580 support CONFIG_BLK_DEV_QD6580 This driver is enabled at runtime using the "ide0=qd6580" kernel boot parameter. It permits faster I/O speeds to be set. See the files Documentation/ide.txt and drivers/block/qd6580.c for more info. UMC 8672 support CONFIG_BLK_DEV_UMC8672 This driver is enabled at runtime using the "ide0=umc8672" kernel boot parameter. It enables support for the secondary IDE interface of the UMC-8672, and permits faster I/O speeds to be set as well. See the files Documentation/ide.txt and drivers/block/umc8672.c for more info. ALI M14xx support CONFIG_BLK_DEV_ALI14XX This driver is enabled at runtime using the "ide0=ali14xx" kernel boot parameter. It enables support for the secondary IDE interface of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster I/O speeds to be set as well. See the files Documentation/ide.txt and drivers/block/ali14xx.c for more info. XT hard disk support CONFIG_BLK_DEV_XD Very old 8 bit hard disk controllers used in the IBM XT computer will be supported if you say Y here. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called xd.o. It's pretty unlikely that you have one of these: say N. Mylex DAC960/DAC1100 PCI RAID Controller support CONFIG_BLK_DEV_DAC960 This driver adds support for the Mylex DAC960, AcceleRAID, and eXtremeRAID PCI RAID controllers. See README.DAC960 for further information about this driver. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called DAC960.o. Parallel port IDE device support CONFIG_PARIDE There are many external CD-ROM and disk devices that connect through your computer's parallel port. Most of them are actually IDE devices using a parallel port IDE adapter. This option enables the PARIDE subsystem which contains drivers for many of these external drives. Read linux/Documentation/paride.txt for more information. If you have said Y to the "Parallel-port support" configuration option, you may share a single port between your printer and other parallel port devices. Answer Y to build PARIDE support into your kernel, or M if you would like to build it as a loadable module. If your parallel port support is in a loadable module, you must build PARIDE as a module. If you built PARIDE support into your kernel, you may still build the individual protocol modules and high-level drivers as loadable modules. If you build this support as a module, it will be called paride.o. To use the PARIDE support, you must say Y or M here and also to at least one high-level driver (e.g. "Parallel port IDE disks", "Parallel port ATAPI CD-ROMs", "Parallel port ATAPI disks" etc.) and to at least one protocol driver (e.g. "ATEN EH-100 protocol", "MicroSolutions backpack protocol", "DataStor Commuter protocol" etc.). Parallel port IDE disks CONFIG_PARIDE_PD This option enables the high-level driver for IDE-type disk devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port IDE driver, otherwise you should answer M to build it as a loadable module. The module will be called pd.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver are the SyQuest EZ-135, EZ-230 and SparQ drives, the Avatar Shark and the backpack hard drives from MicroSolutions. Parallel port ATAPI CD-ROMs CONFIG_PARIDE_PCD This option enables the high-level driver for ATAPI CD-ROM devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port ATAPI CD-ROM driver, otherwise you should answer M to build it as a loadable module. The module will be called pcd.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver are the MicroSolutions backpack CD-ROM drives and the Freecom Power CD. If you have such a CD-ROM drive, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. Parallel port ATAPI disks CONFIG_PARIDE_PF This option enables the high-level driver for ATAPI disk devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port ATAPI disk driver, otherwise you should answer M to build it as a loadable module. The module will be called pf.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver are the MicroSolutions backpack PD/CD drive and the Imation Superdisk LS-120 drive. Parallel port ATAPI tapes CONFIG_PARIDE_PT This option enables the high-level driver for ATAPI tape devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port ATAPI disk driver, otherwise you should answer M to build it as a loadable module. The module will be called pt.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver is the parallel port version of the HP 5GB drive. Parallel port generic ATAPI devices CONFIG_PARIDE_PG This option enables a special high-level driver for generic ATAPI devices connected through a parallel port. The driver allows user programs, such as cdrecord, to send ATAPI commands directly to a device. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port generic ATAPI driver, otherwise you should answer M to build it as a loadable module. The module will be called pg.o. You must also have at least one parallel port protocol driver in your system. This driver implements an API loosely related to the generic SCSI driver. See /usr/include/linux/pg.h for details. You can obtain the most recent version of cdrecord from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . Versions 1.6.1a3 and later fully support this driver. ATEN EH-100 protocol CONFIG_PARIDE_ATEN This option enables support for the ATEN EH-100 parallel port IDE protocol. This protocol is used in some inexpensive low performance parallel port kits made in Hong Kong. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called aten.o. You must also have a high-level driver for the type of device that you want to support. MicroSolutions backpack protocol CONFIG_PARIDE_BPCK This option enables support for the MicroSolutions backpack parallel port IDE protocol. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called bpck.o. You must also have a high-level driver for the type of device that you want to support. DataStor Commuter protocol CONFIG_PARIDE_COMM This option enables support for the Commuter parallel port IDE protocol from DataStor. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called comm.o. You must also have a high-level driver for the type of device that you want to support. DataStor EP-2000 protocol CONFIG_PARIDE_DSTR This option enables support for the EP-2000 parallel port IDE protocol from DataStor. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called dstr.o. You must also have a high-level driver for the type of device that you want to support. Shuttle EPAT/EPEZ protocol CONFIG_PARIDE_EPAT This option enables support for the EPAT parallel port IDE protocol. EPAT is a parallel port IDE adapter manufactured by Shuttle Technology and widely used in devices from major vendors such as Hewlett-Packard, SyQuest, Imation and Avatar. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called epat.o. You must also have a high-level driver for the type of device that you want to support. Shuttle EPIA protocol CONFIG_PARIDE_EPIA This option enables support for the (obsolete) EPIA parallel port IDE protocol from Shuttle Technology. This adapter can still be found in some no-name kits. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called epia.o. You must also have a high-level driver for the type of device that you want to support. FIT TD-2000 protocol CONFIG_PARIDE_FIT2 This option enables support for the TD-2000 parallel port IDE protocol from Fidelity International Technology. This is a simple (low speed) adapter that is used in some portable hard drives. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called ktti.o. You must also have a high-level driver for the type of device that you want to support. FIT TD-3000 protocol CONFIG_PARIDE_FIT3 This option enables support for the TD-3000 parallel port IDE protocol from Fidelity International Technology. This protocol is used in newer models of their portable disk, CD-ROM and PD/CD devices. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called fit3.o. You must also have a high-level driver for the type of device that you want to support. Freecom IQ ASIC-2 protocol CONFIG_PARIDE_FRIQ This option enables support for version 2 of the Freecom IQ parallel port IDE adapter. This adapter is used by the Maxell Superdisk drive. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called friq.o. You must also have a high-level driver for the type of device that you want to support. FreeCom power protocol CONFIG_PARIDE_FRPW This option enables support for the Freecom power parallel port IDE protocol. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called frpw.o. You must also have a high-level driver for the type of device that you want to support. KingByte KBIC-951A/971A protocols CONFIG_PARIDE_KBIC This option enables support for the KBIC-951A and KBIC-971A parallel port IDE protocols from KingByte Information Corp. KingByte's adapters appear in many no-name portable disk and CD-ROM products, especially in Europe. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called kbic.o. You must also have a high-level driver for the type of device that you want to support. KT PHd protocol CONFIG_PARIDE_KTTI This option enables support for the "PHd" parallel port IDE protocol from KT Technology. This is a simple (low speed) adapter that is used in some 2.5" portable hard drives. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called ktti.o. You must also have a high-level driver for the type of device that you want to support. OnSpec 90c20 protocol CONFIG_PARIDE_ON20 This option enables support for the (obsolete) 90c20 parallel port IDE protocol from OnSpec (often marketed under the ValuStore brand name). If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called on20.o. You must also have a high-level driver for the type of device that you want to support. OnSpec 90c26 protocol CONFIG_PARIDE_ON26 This option enables support for the 90c26 parallel port IDE protocol from OnSpec Electronics (often marketed under the ValuStore brand name). If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called on26.o. You must also have a high-level driver for the type of device that you want to support. Multiple devices driver support CONFIG_BLK_DEV_MD This driver lets you combine several hard disk partitions into one logical block device. This can be used to simply append one partition to another one or to combine several redundant hard disks to a RAID1/4/5 device so as to provide protection against hard disk failures. This is called "Software RAID" since the combining of the partitions is done by the kernel. "Hardware RAID" means that the combining is done by a dedicated controller; if you have such a controller, you do not need to say Y here. More information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If unsure, say N. Autodetect RAID partitions CONFIG_AUTODETECT_RAID This feature lets the kernel detect RAID partitions on bootup. An autodetect RAID partition is a normal partition with partition type 0xfd. Use this if you want to boot RAID devices, or want to run them automatically. Linear (append) mode CONFIG_MD_LINEAR If you say Y here, then your multiple devices driver will be able to use the so-called linear mode, i.e. it will combine the hard disk partitions by simply appending one to the other. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called linear.o. If unsure, say Y. RAID-0 (striping) mode CONFIG_MD_STRIPED If you say Y here, then your multiple devices driver will be able to use the so-called raid0 mode, i.e. it will combine the hard disk partitions into one logical device in such a fashion as to fill them up evenly, one chunk here and one chunk there. This will increase the throughput rate if the partitions reside on distinct disks. Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called raid0.o. If unsure, say Y. RAID-1 (mirroring) mode CONFIG_MD_MIRRORING A RAID-1 set consists of several disk drives which are exact copies of each other. In the event of a mirror failure, the RAID driver will continue to use the operational mirrors in the set, providing an error free MD (multiple device) to the higher levels of the kernel. In a set with N drives, the available space is the capacity of a single drive, and the set protects against a failure of (N - 1) drives. Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If you want to use such a RAID-1 set, say Y. This code is also available as a module called raid1.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say Y. RAID-4/RAID-5 mode CONFIG_MD_RAID5 A RAID-5 set of N drives with a capacity of C MB per drive provides the capacity of C * (N - 1) drives, and protects against a failure of a single drive. For a given sector (row) number, (N - 1) drives contain data sectors, and one drive contains the parity protection. For a RAID-4 set, the parity blocks are present on a single drive, while a RAID-5 set distributes the parity across the drives in one of the available parity distribution methods. Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If you want to use such a RAID-4/RAID-5 set, say Y. This code is also available as a module called raid5.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say Y. Translucent Block Device Support (EXPERIMENTAL) CONFIG_MD_TRANSLUCENT DO NOT USE THIS STUFF YET! currently there is only a placeholder there as the implementation is not yet usable. Hierarchical Storage Management support (EXPERIMENTAL) CONFIG_MD_HSM DO NOT USE THIS STUFF YET! i have released this so people can comment on the architecture, but user-space tools are still unusable so there is nothing much you can do with this. Boot support (linear, striped) CONFIG_MD_BOOT To boot with an initial linear or striped md device you have to answer Y here. For lilo and loadlin options see the file Documentation/md.txt. Support for Deskstation RPC44 CONFIG_DESKSTATION_RPC44 This is a machine with a R4400 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for Acer PICA 1 chipset CONFIG_ACER_PICA_61 This is a machine with a R4400 133/150 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for Algorithmics P4032 CONFIG_ALGOR_P4032 This is an evaluation board of the British company Algorithmics. The board uses the R4300 and a R5230 CPUs. For more information about this board see http://www.algor.co.uk. IDE card support CONFIG_BLK_DEV_IDE_CARDS On Acorn systems, enable this if you wish to use an IDE interface expansion card. If you do not or are unsure, say N to this. ICS IDE interface CONFIG_BLK_DEV_IDE_ICS On Acorn systems, enable this if you wish to use the ICS IDE interface card. This is not required for ICS partition support. If you are unsure, say N to this. ADFS partition support CONFIG_BLK_DEV_PART This allows Linux on Acorn systems to determine its partitions in the 'non-ADFS' partition area of the hard disk - usually located after the ADFS partition. You are probably using this system, so you should enable it. Support for Mips Magnum 4000 CONFIG_MIPS_MAGNUM_4000 This is a machine with a R4000 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for Olivetti M700 CONFIG_OLIVETTI_M700 This is a machine with a R4000 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). CPU type CONFIG_CPU_R3000 Give the type of your machine's MIPS CPU. For this question, it suffices to give a unique prefix of the option you want to choose. In case of doubt select the R3000 CPU. The kernel will then run on other MIPS machines but with slightly reduced performance. Compile the kernel into the ECOFF object format CONFIG_ECOFF_KERNEL Some machines require a kernel in the ECOFF format. You will have to say Y here for example if you want to use a Mips Magnum 3000 or a DECstation. Generate little endian code CONFIG_CPU_LITTLE_ENDIAN Some MIPS machines can be configured for either little or big endian byte order. These modes require different kernels. Say Y if your machine is little endian, N if it's a big endian machine. Kernel support for IRIX binaries CONFIG_BINFMT_IRIX If you say Y here, the kernel will support running of IRIX binaries. You will need IRIX libraries for this to work. Networking support CONFIG_NET Unless you really know what you are doing, you should say Y here. The reason is that some programs need kernel networking support even when running on a stand-alone machine that isn't connected to any other computer. If you are upgrading from an older kernel, you should consider updating your networking tools too because changes in the kernel and the tools often go hand in hand. The tools are contained in the package net-tools, the location and version number of which are given in Documentation/Changes. For a general introduction to Linux networking, it is highly recommended to read the NET-3-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Socket filtering CONFIG_FILTER The Linux Socket Filter is derived from the Berkeley Packet Filter. If you say Y here, user-space programs can attach a filter to any socket and thereby tell the kernel that it should allow or disallow certain types of data to get through the socket. Linux Socket Filtering works on all socket types except TCP for now. See the text file linux/Documentation/networking/filter.txt for more information. If unsure, say N. Network firewalls CONFIG_FIREWALL A firewall is a computer which protects a local network from the rest of the world: all traffic to and from computers on the local net is inspected by the firewall first, and sometimes blocked or modified. The type of firewall you'll get if you say Y here is called a "packet filter": it can block network traffic based on type, origin and destination. By contrast, "proxy-based" firewalls are more secure but more intrusive and more bothersome to set up; they inspect the network traffic much more closely, modify it and have knowledge about the higher level protocols, which packet filters lack. They also often require changes in the programs running on the local clients. Proxy-based firewalls don't need support by the kernel, but they are often combined with packet filters, which only works if you say Y here. If you want to configure your Linux box as a packet filter firewall for a local network, say Y here. If your local network is TCP/IP based, you will then also have to say Y to "IP: firewalling", below. You also need to say Y here and to "IP firewalling" below in order to be able to use IP masquerading (i.e. local computers can chat with an outside host, but that outside host is made to think that it is talking to the firewall box -- makes the local network completely invisible to the outside world and avoids the need to allocate globally valid IP host addresses for the machines on the local net) and IP transparent proxying (makes the computers on the local network think they're talking to a remote computer, while in reality the traffic is redirected by your Linux firewall to a local proxy server). Make sure to say N to "Fast switching" below if you intend to say Y here. Chances are that you should say Y here for every machine which is run as a router and N for every regular host. If unsure, say N. SYN flood protection CONFIG_SYN_COOKIES Normal TCP/IP networking is open to an attack known as "SYN flooding". This denial-of-service attack prevents legitimate remote users from being able to connect to your computer during an ongoing attack and requires very little work from the attacker, who can operate from anywhere on the Internet. SYN cookies provide protection against this type of attack. If you say Y here, the TCP/IP stack will use a cryptographic challenge protocol known as "SYN cookies" to enable legitimate users to continue to connect, even when your machine is under attack. There is no need for the legitimate users to change their TCP/IP software; SYN cookies work transparently to them. For technical information about SYN cookies, check out ftp://koobera.math.uic.edu/syncookies.html . If you are SYN flooded, the source address reported by the kernel is likely to have been forged by the attacker; it is only reported as an aid in tracing the packets to their actual source and should not be taken as absolute truth. SYN cookies may prevent correct error reporting on clients when the server is really overloaded. If this happens frequently better turn them off. If you say Y here, note that SYN cookies aren't enabled by default; you can enable them by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the command echo 1 >/proc/sys/net/ipv4/tcp_syncookies at boot time after the proc filesystem has been mounted. If unsure, say Y. Sun floppy controller support CONFIG_BLK_DEV_SUNFD This is support for floppy drives on Sun SPARC workstations. Say Y if you have a floppy drive, otherwise N. Easy. Alpha system type CONFIG_ALPHA_GENERIC This is the system type of your hardware. A "generic" kernel will run on any supported Alpha system. However, if you configure a kernel for your specific system, it will be faster and smaller. To find out what type of Alpha system you have, you may want to check out the Linux/Alpha FAQ, accessible on the WWW from http://www.alphalinux.org (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). In summary: Alcor/Alpha-XLT AS 600 Alpha-XL XL-233, XL-266 AlphaBook1 Alpha laptop Avanti AS 200, AS 205, AS 250, AS 255, AS 300, AS 400 Cabriolet AlphaPC64, AlphaPCI64 DP264 DP264 EB164 EB164 21164 evaluation board EB64+ EB64+ 21064 evaluation board EB66 EB66 21066 evaluation board EB66+ EB66+ 21066 evaluation board Jensen DECpc 150, DEC 2000 model 300, DEC 2000 model 500 LX164 AlphaPC164-LX Miata Personal Workstation 433a, 433au, 500a, 500au, 600a, or 600au Mikasa AS 1000 Noname AXPpci33, UDB (Multia) Noritake AS 1000A, AS 600A, AS 800 PC164 AlphaPC164 Rawhide AS 1200, AS 4000, AS 4100 Ruffian RPX164-2, AlphaPC164-UX, AlphaPC164-BX SX164 AlphaPC164-SX Sable AS 2000, AS 2100 Takara Takara If you don't know what to do, choose "generic". EV5 CPU daughtercard CONFIG_ALPHA_PRIMO Say Y if you have an AS 1000 5/xxx or an AS 1000A 5/xxx. EV5 CPU(s) CONFIG_ALPHA_GAMMA Say Y if you have an AS 2000 5/xxx or an AS 2100 5/xxx. Using SRM as bootloader CONFIG_ALPHA_SRM There are two different types of booting firmware on Alphas: SRM, which is command line driven, and ARC, which uses menus and arrow keys. Details about the Linux/Alpha booting process are contained in the Linux/Alpha FAQ, accessible on the WWW from http://www.alphalinux.org (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). The usual way to load Linux on an Alpha machine is to use MILO (a bootloader that lets you pass command line parameters to the kernel just like lilo does for the x86 architecture) which can be loaded either from ARC or can be installed directly as a permanent firmware replacement from floppy (which requires changing a certain jumper on the motherboard). If you want to do either of these, say N here. If MILO doesn't work on your system (true for Jensen motherboards), you can bypass it altogether and boot Linux directly from an SRM console; say Y here in order to do that. Note that you won't be able to boot from an IDE disk using SRM. If unsure, say N. Use SRM PCI setup CONFIG_ALPHA_SRM_SETUP This option controls whether or not the PCI configuration set up by SRM is modified. If you say Y, the existing PCI configuration will be left intact. Non-standard serial port support CONFIG_SERIAL_NONSTANDARD Say Y here if you have any non-standard serial boards -- boards which aren't supported using the standard "dumb" serial driver. This includes intelligent serial boards such as Cyclades, Digiboards, etc. These are usually used for systems that need many serial ports because they serve many terminals or dial-in connections. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about non-standard serial boards. Most people can say N here. Extended dumb serial driver options CONFIG_SERIAL_EXTENDED If you wish to use any non-standard features of the standard "dumb" driver, say Y here. This includes HUB6 support, shared serial interrupts, special multiport support, support for more than the four COM 1/2/3/4 boards, etc. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about serial driver options. If unsure, say N. Support more than 4 serial ports CONFIG_SERIAL_MANY_PORTS Say Y here if you have dumb serial boards other than the four standard COM 1/2/3/4 ports. This may happen if you have an AST FourPort, Accent Async, Boca (read the Boca mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini), or other custom serial port hardware which acts similar to standard serial port hardware. If you only use the standard COM 1/2/3/4 ports, you can say N here to save some memory. You can also say Y if you have an "intelligent" multiport card such as Cyclades, Digiboards, etc. Support for sharing serial interrupts CONFIG_SERIAL_SHARE_IRQ Some serial boards have hardware support which allows multiple dumb serial ports on the same board to share a single IRQ. To enable support for this in the serial driver, say Y here. Auto detect IRQ on standard ports (unsafe) CONFIG_SERIAL_DETECT_IRQ Say Y here if you want the kernel to try to guess which IRQ to use for your serial port. This is considered unsafe; it is far better to configure the IRQ in a boot script using the setserial command. If unsure, say N. Support special multiport boards CONFIG_SERIAL_MULTIPORT Some multiport serial ports have special ports which are used to signal when there are any serial ports on the board which need servicing. Say Y here to enable the serial driver to take advantage of those special I/O ports. SGI Zilog85C30 serial support CONFIG_SGI_SERIAL If you want to use your SGI's built-in serial ports under Linux, answer Y. SGI graphics support CONFIG_SGI_GRAPHICS If you have an SGI machine and you want to compile the graphics drivers, say Y here. This will include the code for the /dev/graphics and /dev/gfx drivers into the kernel for supporting virtualized access to your graphics hardware. Support the Bell Technologies HUB6 card CONFIG_HUB6 Say Y here to enable support in the dumb serial driver to support the HUB6 card. PCI support CONFIG_PCI Find out whether you have a PCI motherboard. PCI is the name of a bus system, i.e. the way the CPU talks to the other stuff inside your box. Other bus systems are ISA, EISA, Microchannel (MCA) or VESA. If you have PCI, say Y, otherwise N. The PCI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, contains valuable information about which PCI hardware does work under Linux and which doesn't. PCI access mode CONFIG_PCI_GOBIOS On PCI systems, the BIOS can be used to detect the PCI devices and determine their configuration. However, some old PCI motherboards have BIOS bugs and may crash if this is done. Also, some embedded PCI-based systems don't have any BIOS at all. Linux can also try to detect the PCI hardware directly without using the BIOS. With this option, you can specify how Linux should detect the PCI devices. If you choose "BIOS", the BIOS will be used, if you choose "Direct", the BIOS won't be used, and if you choose "Any", the kernel will try the direct access method and falls back to the BIOS if that doesn't work. If unsure, go with the default. PCI quirks CONFIG_PCI_QUIRKS If you have a broken BIOS, it may fail to set up the PCI bus in a correct or optimal fashion. Saying Y here will correct that problem. If your BIOS is fine you can say N here for a very slightly smaller kernel. If unsure, say Y. PCI bridge optimization (experimental) CONFIG_PCI_OPTIMIZE This can improve access times for some hardware devices if you have a really broken BIOS and your computer uses a PCI bus system. Say Y if you think it might help, but try turning it off if you experience any problems with the PCI bus. N is the safe answer. Backward-compatible /proc/pci CONFIG_PCI_OLD_PROC Older kernels supported a /proc/pci file containing brief textual descriptions of all PCI devices in the system. Several programs tried to parse this file, so it became almost impossible to add new fields without breaking compatibility. So a new /proc interface to PCI (/proc/bus/pci) has been implemented and the old one is supported for compatibility reasons only; you'll get the old one (in addition to the new one) if you say Y here and to "/proc filesystem support", below. If unsure, say Y. If you say N, you'll only get the new /proc/bus/pci interface. MCA support CONFIG_MCA MicroChannel Architecture is found in some IBM PS/2 machines and laptops. It is a bus system similar to PCI or ISA. See Documentation/mca.txt (and especially the web page given there) before attempting to build an MCA bus kernel. SGI Visual Workstation support CONFIG_VISWS The SGI Visual Workstation series is an IA32-based workstation based on SGI systems chips with some legacy PC hardware attached. Say Y here to create a kernel to run on the SGI 320 or 540. A kernel compiled for the Visual Workstation will not run on other PC boards and vice versa. See Documentation/sgi-visws.txt for more. SGI Visual Workstation framebuffer support CONFIG_FB_SGIVW SGI Visual Workstation support for framebuffer graphics. System V IPC CONFIG_SYSVIPC Inter Process Communication is a suite of library functions and system calls which let processes (running programs) synchronize and exchange information. It is generally considered to be a good thing, and some programs won't run unless you say Y here. In particular, if you want to run the DOS emulator dosemu under Linux (read the DOSEMU-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO), you'll need to say Y here. You can find documentation about IPC with "info ipc" and also in section 6.4 of the Linux Programmer's Guide, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/LDP/programmers-guide. Saying Y here enlarges your kernel by about 7 KB. Just say Y. BSD Process Accounting CONFIG_BSD_PROCESS_ACCT If you say Y here, a user level program will be able to instruct the kernel (via a special system call) to write process accounting information to a file: whenever a process exits, information about that process will be appended to the file by the kernel. The information includes things such as creation time, owning user, command name, memory usage, controlling terminal etc. (the complete list is in the struct acct in include/linux/acct.h). It is up to the user level program to do useful things with this information. This is generally a good idea, so say Y. Sysctl support CONFIG_SYSCTL The sysctl interface provides a means of dynamically changing certain kernel parameters and variables on the fly without requiring a recompile of the kernel or reboot of the system. The primary interface consists of a system call, but if the /proc filesystem is enabled, a tree of modifiable sysctl entries will be generated beneath the /proc/sys directory. They are explained in the files in Documentation/sysctl/. Note that enabling this option will enlarge the kernel by at least 8 KB. As it is generally a good thing, you should say Y here unless building a kernel for install/rescue disks or your system is very limited in memory. Kernel support for ELF binaries CONFIG_BINFMT_ELF ELF (Executable and Linkable Format) is a format for libraries and executables used across different architectures and operating systems. Saying Y here will enable your kernel to run ELF binaries and enlarge it by about 2 KB. ELF support under Linux has now all but replaced the traditional Linux a.out formats (QMAGIC and ZMAGIC) because it is portable (this does *not* mean that you will be able to run executables from different architectures or operating systems however) and makes building run-time libraries very easy. Many new executables are distributed solely in ELF format. You definitely want to say Y here. Information about ELF is contained in the ELF HOWTO available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you find that after upgrading from Linux kernel 1.2 and saying Y here, you still can't run any ELF binaries (they just crash), then you'll have to install the newest ELF runtime libraries, including ld.so (check the file Documentation/Changes for location and latest version). If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called binfmt_elf.o. Saying M or N here is dangerous because some crucial programs on your system might be in ELF format. Kernel support for A.OUT binaries CONFIG_BINFMT_AOUT A.out (Assembler.OUTput) is a set of formats for libraries and executables used in the earliest versions of UNIX. Linux used the a.out formats QMAGIC and ZMAGIC until they were replaced with the ELF format. As more and more programs are converted to ELF, the use for a.out will gradually diminish. If you disable this option it will reduce your kernel by one page. This is not much and by itself does not warrant removing support. However its removal is a good idea if you wish to ensure that absolutely none of your programs will use this older executable format. If you don't know what to answer at this point then answer Y. If someone told you "You need a kernel with QMAGIC support" then you'll have to say Y here. You may answer M to compile a.out support as a module and later load the module when you want to use a program or library in a.out format. The module will be called binfmt_aout.o. Saying M or N here is dangerous though, because some crucial programs on your system might still be in A.OUT format. Kernel support for JAVA binaries (obsolete) CONFIG_BINFMT_JAVA JAVA(tm) is an object oriented programming language developed by SUN; JAVA programs are compiled into "JAVA bytecode" binaries which can then be interpreted by run time systems on many different architectures and operating systems. These JAVA binaries are becoming a universal executable format. If you want to execute JAVA binaries, read the Java on Linux HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You will then need to install the run time system contained in the Java Developers Kit (JDK) as described in the HOWTO. This is completely independent of the Linux kernel and you do NOT need to say Y here for this to work. Saying Y here allows you to execute a JAVA bytecode binary just like any other Linux program: by simply typing in its name. (You also need to have the JDK installed for this to work). As more and more Java programs become available, the use for this will gradually increase. You can even execute HTML files containing JAVA applets (little embedded JAVA binaries) if those files start with the string "". If you want to use this, say Y here and read Documentation/java.txt. If you disable this option it will reduce your kernel by about 4 KB. This is not much and by itself does not warrant removing support. However its removal is a good idea if you do not have the JDK installed. You may answer M for module support and later load the module when you install the JDK or find an interesting Java program that you can't live without. The module will be called binfmt_java.o. The complete functionality of this Java support is also provided by the more general option "Kernel support for MISC binaries", below. This option is therefore considered obsolete and you should say N here and Y to "Kernel support for MISC binaries" if you're interested in transparently executing Java programs. Kernel support for Linux/Intel ELF binaries CONFIG_BINFMT_EM86 Say Y here if you want to be able to execute Linux/Intel ELF binaries just like native Alpha binaries on your Alpha machine. For this to work, you need to have the emulator /usr/bin/em86 in place. You may answer M to compile the emulation support as a module and later load the module when you want to use a Linux/Intel binary. The module will be called binfmt_em86.o. If unsure, say Y. Kernel support for MISC binaries CONFIG_BINFMT_MISC If you say Y here, it will be possible to plug wrapper-driven binary formats into the kernel. You will like this especially when you use programs that need an interpreter to run like Java, Python or Emacs-Lisp. It's also useful if you often run DOS executables under the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO). Once you have registered such a binary class with the kernel, you can start one of those programs simply by typing in its name at a shell prompt; Linux will automatically feed it to the correct interpreter. If you say Y here, you won't need "Kernel support for JAVA binaries" (CONFIG_BINFMT_JAVA) or "Kernel support for Linux/Intel ELF binaries" (CONFIG_BINFMT_EM86), as this is a more general solution. You can do other nice things, too. Read Documentation/binfmt_misc.txt to learn how to use this feature, and Documentation/java.txt for information about how to include Java support. You must say Y to "proc filesystem support" (CONFIG_PROC_FS) to use this part of the kernel. You may say M here for module support and later load the module when you have use for it; the module is called binfmt_misc.o. If you don't know what to answer at this point, say Y. Solaris binary emulation CONFIG_SOLARIS_EMUL This is experimental code which will enable you to run (many) Solaris binaries on your SPARC Linux machine. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called solaris.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Processor family CONFIG_M386 This is the processor type of your CPU. This information is used for optimizing purposes. In order to compile a kernel that can run on all x86 CPU types (albeit not optimally fast), you can specify "386" here. If you specify one of "486" or "586" or "Pentium" or "PPro" or "PIII", then the kernel will not necessarily run on earlier architectures (e.g. a Pentium optimized kernel will run on a PPro, but not necessarily on a i486). Here are the settings recommended for greatest speed: - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI 486DLC/DLC2 and UMC 486SX-S. Only "386" kernels will run on a 386 class machine. - "486" for the AMD/Cyrix/IBM/Intel DX4 or 486DX/DX2/SL/SX/SX2, AMD/Cyrix 5x86, NexGen Nx586 and UMC U5D or U5S. - "586" for generic Pentium CPUs, possibly lacking the TSC (time stamp counter) register. - "Pentium" for the Intel Pentium/Pentium MMX, AMD K5, K6 and K6-3D. - "PPro" for the Cyrix/IBM/National Semiconductor 6x86MX, MII and Intel Pentium II/Pentium Pro. - "PIII/Xeon/Deschutes" for the PIII (Katmai), Xeon and later PIIs with the Deschutes or Mendocino core. You have to chose this for MMX2 support. If you don't know what to do, choose "386". Disable PII/PIII Serial Number at bootup CONFIG_X86_PN_OFF This makes the kernel disable the CPUID serial number that is embedded on the new PIII CPUs at bootup. Enable PII/PIII Extended Fast FPU save and restore support CONFIG_X86_FX This enables use of the new PII/PIII FXSAVE/FXRSTOR support. This item is required to make use of the new PIII 128bit XMM registers. It is safe to leave this enabled all the time. Enable CPU Specific (MMX/MMX2) Optimizations CONFIG_X86_CPU_OPTIMIZATIONS This enables use of the MMX registers and 128bit MMX2 registers on CPUs that can support the new instructions (Pentium/AMD K6 or newer). In order to support the Pentium III 128 bit XMM registers you must enable both this and PII/PIII Extended Fast FPU save support. It is safe to leave this enabled all the time. VGA text console CONFIG_VGA_CONSOLE Saying Y here will allow you to use Linux in text mode through a display that complies with the generic VGA standard. Virtually everyone wants that. The program SVGATextMode can be used to utilize SVGA video cards to their full potential in text mode. Download it via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/utils/console. Say Y. Video mode selection support CONFIG_VIDEO_SELECT This enables support for text mode selection on kernel startup. If you want to take advantage of some high-resolution text mode your card's BIOS offers, but the traditional Linux utilities like SVGATextMode don't, you can say Y here and set the mode using the "vga=" option from your boot loader (lilo or loadlin) or set "vga=ask" which brings up a video mode menu on kernel startup. Try "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Read Documentation/svga.txt for more information about the Video mode selection support. If unsure, say N. Support for frame buffer devices (EXPERIMENTAL) CONFIG_FB The frame buffer device provides an abstraction for the graphics hardware. It represents the frame buffer of some video hardware and allows application software to access the graphics hardware through a well-defined interface, so the software doesn't need to know anything about the low-level (hardware register) stuff. Frame buffer devices work identically across the different architectures supported by Linux and make the implementation of application programs easier and more portable; at this point, an X server exists which uses the frame buffer device exclusively. On several non-X86 architectures, the frame buffer device is the only way to use the graphics hardware. The device is accessed through special device nodes, usually located in the /dev directory, i.e. /dev/fb*. You need an utility program called fbset to make full use of frame buffer devices. Please read Documentation/fb/framebuffer.txt and the Framebuffer-HOWTO at http://www.tahallah.demon.co.uk/programming/prog.html for more information. Say Y here and to the driver for your graphics board below if you are compiling a kernel for a non-x86 architecture. If you are compiling for the x86 architecture, you can say Y if you want to play with it, but it is not essential. Please note that running graphical applications that directly touch the hardware (e.g. an accelerated X server) and that are not frame buffer device-aware may cause unexpected results. If unsure, say N. Acorn VIDC support CONFIG_FB_ACORN This is the frame buffer device driver for the Acorn VIDC graphics chipset. Apollo frame buffer device CONFIG_FB_APOLLO This is the frame buffer device driver for the monochrome graphics hardware found in some Apollo workstations. Amiga native chipset support CONFIG_FB_AMIGA This is the frame buffer device driver for the builtin graphics chipset found in Amigas. Amiga OCS chipset support CONFIG_FB_AMIGA_OCS This enables support for the original Agnus and Denise video chips, found in the Amiga 1000 and most A500's and A2000's. If you intend to run Linux on any of these systems, say Y; otherwise say N. Amiga ECS chipset support CONFIG_FB_AMIGA_ECS This enables support for the Enhanced Chip Set, found in later A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If you intend to run Linux on any of these systems, say Y; otherwise say N. Amiga AGA chipset support CONFIG_FB_AMIGA_AGA This enables support for the Advanced Graphics Architecture (also known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T and CD32. If you intend to run Linux on any of these systems, say Y; otherwise say N. Amiga CyberVision support CONFIG_FB_CYBER This enables support for the Cybervision 64 graphics card from Phase5. Please note that its use is not all that intuitive (i.e. if you have any questions, be sure to ask!). Say N unless you have a Cybervision 64 or plan to get one before you next recompile the kernel. Please note that this driver DOES NOT support the Cybervision 64 3D card, as they use incompatible video chips. Amiga CyberVision3D support (EXPERIMENTAL) CONFIG_FB_VIRGE This enables support for the Cybervision 64/3D graphics card from Phase5. Please note that its use is not all that intuitive (i.e. if you have any questions, be sure to ask!). Say N unless you have a Cybervision 64/3D or plan to get one before you next recompile the kernel. Please note that this driver DOES NOT support the older Cybervision 64 card, as they use incompatible video chips. Amiga RetinaZ3 support (EXPERIMENTAL) CONFIG_FB_RETINAZ3 This enables support for the Retina Z3 graphics card. Say N unless you have a Retina Z3 or plan to get one before you next recompile the kernel. Amiga CLgen driver (EXPERIMENTAL) CONFIG_FB_CLGEN This enables support for Cirrus Logic GD542x/543x based boards on Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum. Say N unless you have such a graphics board or plan to get one before you next recompile the kernel. Apollo support CONFIG_APOLLO Say Y here if you want to run Linux on an MC680x0-based Apollo Domain workstation such as the DN3500. Apollo 3c505 support CONFIG_APOLLO_ELPLUS Say Y or M here if your Apollo has a 3Com 3c505 ISA Ethernet card. If you don't have one made for Apollos, you can use one from a PC, except that your Apollo won't be able to boot from it (because the code in the ROM will be for a PC). Atari native chipset support CONFIG_FB_ATARI This is the frame buffer device driver for the builtin graphics chipset found in Ataris. Open Firmware frame buffer device support CONFIG_FB_OF Say Y if you want support with Open Firmware for your graphics board. S3 Trio frame buffer device support CONFIG_FB_S3TRIO If you have a S3 Trio say Y. Say N for S3 Virge. ATI Mach64 display support CONFIG_FB_ATY This driver supports graphics boards with the ATI Mach64 chips. PowerMac "control" frame buffer device support CONFIG_FB_CONTROL This driver supports a frame buffer for the graphics adapter in the Power Macintosh 7300 and others. PowerMac "platinum" frame buffer device support CONFIG_FB_PLATINUM This driver supports a frame buffer for the "platinum" graphics adapter in some Power Macintoshes. PowerMac "valkyrie" frame buffer device support CONFIG_FB_VALKYRIE This driver supports a frame buffer for the "valkyrie" graphics adapter in some Power Macintoshes. Chips 65550 display support CONFIG_FB_CT65550 This is the frame buffer device driver for the Chips & Technologies 65550 graphics chip in PowerBooks. Mac frame buffer device CONFIG_FB_MAC This is the frame buffer device driver for the graphics hardware in m68k Macintoshes. HP300 frame buffer device CONFIG_FB_HP300 This is the frame buffer device driver for the Topcat graphics hardware found in HP300 workstations. TGA frame buffer support CONFIG_FB_TGA This is the frame buffer device driver for generic TGA graphic cards. Say Y if you have one of those. VESA VGA graphics console CONFIG_FB_VESA This is the frame buffer device driver for generic VESA 2.0 compliant graphic cards. The older VESA 1.2 cards are not supported. You will get a boot time penguin logo at no additional cost. Please read Documentation/fb/vesafb.txt. If unsure, say Y. VGA 16-color graphics console CONFIG_FB_VGA16 This is the frame buffer device driver for VGA 16 color graphic cards. Say Y if you have such a card. Backward compatibility mode for Xpmac CONFIG_FB_COMPAT_XPMAC If you use the Xpmac X server (common with mklinux), you'll need to say Y here to use X. You should consider changing to XFree86 which includes a server that supports the frame buffer device directly (XF68_FBDev). Matrox unified accelerated driver CONFIG_FB_MATROX Say Y here if you have Matrox Millennium, Matrox Millennium II, Matrox Mystique, Matrox Mystique 220, Matrox Productiva G100, Matrox Mystique G200, Matrox Millennium G200 or Matrox Marvel G200 video card in your box. At this time, support for the G100, Mystique G200 and Marvel G200 is untested. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called matroxfb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. You can pass several parameters to the driver at boot time or at module load time. The parameters look like "video=matrox:XXX", where the meaning of XXX can be found at the end of the main source file (drivers/video/matroxfb.c). Please see the file Documentation/fb/matroxfb.txt. Matrox Millennium support CONFIG_FB_MATROX_MILLENIUM Say Y here if you have a Matrox Millennium or Matrox Millennium II video card. If you select "Advanced lowlevel driver options" below, you should check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can also use font widths different from 8. Matrox Mystique support CONFIG_FB_MATROX_MYSTIQUE Say Y here if you have a Matrox Mystique or Matrox Mystique 220 video card. If you select "Advanced lowlevel driver options" below, you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can also use font widths different from 8. Matrox G100/G200 support CONFIG_FB_MATROX_G100 Say Y here if you have a Matrox Productiva G100, Matrox Mystique G200, Matrox Marvel G200 or Matrox Millennium G200 video card. If you select "Advanced lowlevel driver options", you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can also use font widths different from 8. Matrox unified driver multihead support CONFIG_FB_MATROX_MULTIHEAD Say Y here if you have more than one (supported) Matrox device in your computer and you want to use all of them. If you have only one device, you should say N because the driver compiled with Y is larger and a bit slower, especially on ia32 (ix86). If you said M to "Matrox unified accelerated driver" and N here, you will still be able to use several Matrox devices simultaneously. This is slightly faster but uses 40 KB of kernel memory per Matrox card. You do this by inserting several instances of the module matroxfb.o into the kernel with insmod, supplying the parameter "dev=N" where N is 0, 1, etc. for the different Matrox devices. MDA text console (dual-headed) CONFIG_MDA_CONSOLE Say Y here if you have an old MDA or monochrome Hercules graphics adapter in your system acting as a second head ( = video card). You will then be able to use two monitors with your Linux system. Do not say Y here if your MDA card is the primary card in your system; the normal VGA driver will handle it. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called mdacon.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. SBUS and UPA frame buffers CONFIG_FB_SBUS Say Y if you want support for SBUS or UPA based frame buffer device. Creator/Creator3D support CONFIG_FB_CREATOR This is the frame buffer device driver for the Creator and Creator3D graphics boards. CGsix (GX,TurboGX) support CONFIG_FB_CGSIX This is the frame buffer device driver for the CGsix (GX, TurboGX) frame buffer. BWtwo support CONFIG_FB_BWTWO This is the frame buffer device driver for the BWtwo frame buffer. CGthree support CONFIG_FB_CGTHREE This is the frame buffer device driver for the CGthree frame buffer. TCX (SS4/SS5 only) support CONFIG_FB_TCX This is the frame buffer device driver for the TCX 24/8bit frame buffer. Virtual Frame Buffer support (ONLY FOR TESTING!) CONFIG_FB_VIRTUAL This is a `virtual' frame buffer device. It operates on a chunk of unswapable kernel memory instead of on the memory of a graphics board. This means you cannot see any output sent to this frame buffer device, while it does consume precious memory. The main use of this frame buffer device is testing and debugging the frame buffer subsystem. Do NOT enable it for normal systems! To protect the innocent, it has to be enabled explicitly at boot time using the kernel option `video=vfb:'. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called vfb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Advanced low level driver options CONFIG_FBCON_ADVANCED The frame buffer console uses character drawing routines that are tailored to the specific organization of pixels in the memory of your graphics hardware. These are called the low level frame buffer console drivers. Note that they are used for text console output only; they are NOT needed for graphical applications. If you say N here, the needed low level drivers are automatically enabled, depending on what frame buffer devices you selected above. This is recommended for most users. If you say Y here, you have more fine-grained control over which low level drivers are enabled. You can e.g. leave out low level drivers for color depths you do not intend to use for text consoles. Low level frame buffer console drivers can be modules ( = code which can be inserted and removed from the running kernel whenever you want). The modules will be called fbcon-*.o. If you want to compile (some of) them as modules, read Documentation/modules.txt. If unsure, say N. Monochrome support CONFIG_FBCON_MFB This is the low level frame buffer console driver for monochrome (2 colors) packed pixels. 2 bpp packed pixels support CONFIG_FBCON_CFB2 This is the low level frame buffer console driver for 2 bits per pixel (4 colors) packed pixels. 4 bpp packed pixels support CONFIG_FBCON_CFB4 This is the low level frame buffer console driver for 4 bits per pixel (16 colors) packed pixels. 8 bpp packed pixels support CONFIG_FBCON_CFB8 This is the low level frame buffer console driver for 8 bits per pixel (256 colors) packed pixels. 16 bpp packed pixels support CONFIG_FBCON_CFB16 This is the low level frame buffer console driver for 15 or 16 bits per pixel (32K or 64K colors, also known as `hicolor') packed pixels. 24 bpp packed pixels support CONFIG_FBCON_CFB24 This is the low level frame buffer console driver for 24 bits per pixel (16M colors, also known as `truecolor') packed pixels. It is NOT for `sparse' 32 bits per pixel mode. 32 bpp packed pixels support CONFIG_FBCON_CFB32 This is the low level frame buffer console driver for 32 bits per pixel (16M colors, also known as `truecolor') sparse packed pixels. Amiga bitplanes support CONFIG_FBCON_AFB This is the low level frame buffer console driver for 1 to 8 bitplanes (2 to 256 colors) on Amiga. Amiga interleaved bitplanes support CONFIG_FBCON_ILBM This is the low level frame buffer console driver for 1 to 8 interleaved bitplanes (2 to 256 colors) on Amiga. Atari interleaved bitplanes (2 planes) support CONFIG_FBCON_IPLAN2P2 This is the low level frame buffer console driver for 2 interleaved bitplanes (4 colors) on Atari. Atari interleaved bitplanes (4 planes) support CONFIG_FBCON_IPLAN2P4 This is the low level frame buffer console driver for 4 interleaved bitplanes (16 colors) on Atari. Atari interleaved bitplanes (8 planes) support CONFIG_FBCON_IPLAN2P8 This is the low level frame buffer console driver for 8 interleaved bitplanes (256 colors) on Atari. Mac variable bpp packed pixels support CONFIG_FBCON_MAC This is the low level frame buffer console driver for 1/2/4/8/16/32 bits per pixel packed pixels on Mac. It supports variable font widths for low resolution screens. VGA characters/attributes support CONFIG_FBCON_VGA This is the low level frame buffer console driver for VGA text mode; it is used if you said Y to "VGA chipset support (text only)" above. Parallel-port support CONFIG_PARPORT If you want to use devices connected to your machine's parallel port (the connector at the computer with 25 holes), e.g. printer, ZIP drive, PLIP link (Parallel Line Internet Protocol is mainly used to create a mini network by connecting the parallel ports of two local machines) etc., then you need to say Y here; please read Documentation/parport.txt and drivers/misc/BUGS-parport. For extensive information about drivers for many devices attaching to the parallel port see http://www.torque.net/linux-pp.html on the WWW (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). It is possible to share a single parallel port among several devices and it is safe to compile all the corresponding drivers into the kernel. If you want to compile parallel port support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called parport.o. If you have more than one parallel port and want to specify which port and IRQ to be used by this driver at module load time, read Documentation/networking/net-modules.txt. If unsure, say Y. PC-style hardware CONFIG_PARPORT_PC You should say Y here if you have a PC-style parallel port. All IBM PC compatible computers and some Alphas have PC-style parallel ports. This code is also available as a module. If you want to compile it as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called parport_pc.o. If unsure, say Y. Support foreign hardware CONFIG_PARPORT_OTHER Say Y here if you want to be able to load driver modules to support other non-standard types of parallel ports. This causes a performance loss, so most people say N. Sun Ultra/AX-style hardware CONFIG_PARPORT_AX Say Y here if you need support for the parallel port hardware on Sun Ultra/AX machines. This code is also available as a module (say M), called parport_ax.o. If in doubt, saying N is the safe plan. Plug and Play support CONFIG_PNP Plug and Play support allows the kernel to automatically configure some peripheral devices. Say Y to enable PnP. Auto-probe for parallel devices CONFIG_PNP_PARPORT Some IEEE-1284 conforming parallel-port devices can identify themselves when requested. Say Y to enable this feature, or M to compile it as a module (parport_probe.o). If in doubt, say N. Enable loadable module support CONFIG_MODULES Kernel modules are small pieces of compiled code which can be inserted in or removed from the running kernel, using the programs insmod and rmmod. This is described in the file Documentation/modules.txt, including the fact that you have to say "make modules" in order to compile the modules that you chose during kernel configuration. Modules can be device drivers, file systems, binary executable formats, and so on. If you think that you may want to make use of modules with this kernel in the future, then say Y here. If unsure, say Y. Set version information on all symbols for modules CONFIG_MODVERSIONS Usually, modules have to be recompiled whenever you switch to a new kernel. Saying Y here makes it possible, and safe, to use the same modules even after compiling a new kernel; this requires the program modprobe. All the software needed for module support is in the modutils package (check the file Documentation/Changes for location and latest version). NOTE: if you say Y here but don't have the program genksyms (which is also contained in the above mentioned modutils package), then the building of your kernel will fail. If you are going to use modules that are generated from non-kernel sources, you would benefit from this option. Otherwise it's not that important. So, N ought to be a safe bet. Kernel module loader support CONFIG_KMOD Normally when you have selected some drivers and/or filesystems to be created as loadable modules, you also have the responsibility to load the corresponding modules (using the programs insmod or modprobe) before you can use them. If you say Y here however, the kernel will be able to load modules for itself: when a part of the kernel needs a module, it runs modprobe with the appropriate arguments, thereby loading the module if it is available. (This is a replacement for kerneld.) Say Y here and read about configuring it in Documentation/kmod.txt. ARP daemon support (EXPERIMENTAL) CONFIG_ARPD Normally, the kernel maintains an internal cache which maps IP addresses to hardware addresses on the local network, so that Ethernet/Token Ring/ etc. frames are sent to the proper address on the physical networking layer. For small networks having a few hundred directly connected hosts or less, keeping this address resolution (ARP) cache inside the kernel works well. However, maintaining an internal ARP cache does not work well for very large switched networks, and will use a lot of kernel memory if TCP/IP connections are made to many machines on the network. If you say Y here, the kernel's internal ARP cache will never grow to more than 256 entries (the oldest entries are expired in a LIFO manner) and communication will be attempted with the user space ARP daemon arpd. Arpd then answers the address resolution request either from its own cache or by asking the net. This code is experimental. If you do say Y here, you should obtain a copy of arpd from http://www.loran.com/~layes/arpd/index.html, and you should also say Y to "Kernel/User network link driver", below. If unsure, say N. TCP/IP networking CONFIG_INET These are the protocols used on the Internet and on most local Ethernets. It is highly recommended to say Y here (this will enlarge your kernel by about 35 KB), since some programs (e.g. the X window system) use TCP/IP even if your machine is not connected to any other computer. You will get the so-called loopback device which allows you to ping yourself (great fun, that!). For an excellent introduction to Linux networking, please read the NET-3-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This option is also necessary if you want to use the full power of term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer; for more information, read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html). If you say Y here and also to "/proc filesystem support" and "Sysctl support" below, you can change various aspects of the behavior of the TCP/IP code by writing to the (virtual) files in /proc/sys/net/ipv4/*; the options are explained in the file Documentation/Networking/ip-sysctl.txt. Short answer: say Y. IP: multicasting CONFIG_IP_MULTICAST This is code for addressing several networked computers at once, enlarging your kernel by about 2 kB. You need multicasting if you intend to participate in the MBONE, a high bandwidth network on top of the Internet which carries audio and video broadcasts. More information about the MBONE is on the WWW at http://www.best.com/~prince/techinfo/mbone.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Information about the multicast capabilities of the various network cards is contained in Documentation/networking/multicast.txt. For most people, it's safe to say N. IP: advanced router CONFIG_IP_ADVANCED_ROUTER If you intend to run your Linux box mostly as a router, i.e. as a computer that forwards and redistributes network packets, say Y; you will then be presented with several options that allow more precise control about the routing process. The answer to this question won't directly affect the kernel: answering N will just cause this configure script to skip all the questions about advanced routing. Note that your box can only act as a router if you enable IP forwarding in your kernel; you can do that by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the line echo "1" > /proc/sys/net/ipv4/ip_forward at boot time after the /proc filesystem has been mounted. If you turn on IP forwarding, you will also get the rp_filter, which automatically rejects incoming packets if the routing table entry for their source address doesn't match the network interface they're arriving on. This has security advantages because it prevents the so-called IP spoofing, however it can pose problems if you use asymmetric routing (packets from you to a host take a different path than packets from that host to you) or if you operate a non-routing host which has several IP addresses on different interfaces. To turn rp_filter off use: echo 0 > /proc/sys/net/ipv4/conf//rp_filter or echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter If unsure, say N here. IP: policy routing CONFIG_IP_MULTIPLE_TABLES Normally, a router decides what to do with a received packet based solely on the packet's final destination address. If you say Y here, the Linux router will also be able to take the packet's source address into account. Furthermore, if you also say Y to "IP: use TOS value as routing key" below, the TOS (Type-Of-Service) field of the packet can be used for routing decisions as well. In addition, if you say Y here and to "IP: fast network address translation" below, the router will also be able to modify source and destination addresses of forwarded packets. If you are interested in this, please see the preliminary documentation at http://www.compendium.com.ar/policy-routing.txt and ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex. You will need supporting software from ftp://ftp.inr.ac.ru/ip-routing/ If unsure, say N. IP: equal cost multipath CONFIG_IP_ROUTE_MULTIPATH Normally, the routing tables specify a single action to be taken in a deterministic manner for a given packet. If you say Y here however, it becomes possible to attach several actions to a packet pattern, in effect specifying several alternative paths to travel for those packets. The router considers all these paths to be of equal "cost" and chooses one of them in a non-deterministic fashion if a matching packet arrives. IP: use TOS value as routing key CONFIG_IP_ROUTE_TOS The header of every IP packet carries a TOS (Type of Service) value with which the packet requests a certain treatment, e.g. low latency (for interactive traffic), high throughput, or high reliability. If you say Y here, you will be able to specify different routes for packets with different TOS values. IP: use FWMARK value as routing key CONFIG_IP_ROUTE_FWMARK If you say Y here, you will be able to specify different routes for packets with different FWMARK ("firewalling mark") values (see ipchains(8), "-m" argument). IP: verbose route monitoring CONFIG_IP_ROUTE_VERBOSE If you say Y here, which is recommended, then the kernel will print verbose messages regarding the routing, for example warnings about received packets which look strange and could be evidence of an attack or a misconfigured system somewhere. The information is handled by the klogd daemon which is responsible for kernel messages ("man klogd"). IP: large routing tables CONFIG_IP_ROUTE_LARGE_TABLES If you have routing zones that grow to more than about 64 entries, you may want to say Y here to speed up the routing process. IP: fast network address translation CONFIG_IP_ROUTE_NAT If you say Y here, your router will be able to modify source and destination addresses of packets that pass through it, in a manner you specify. General information about Network Address Translation can be gotten from the document http://www.csn.tu-chemnitz.de/~mha/linux-ip-nat/diplom/nat.html IP: optimize as router not host CONFIG_IP_ROUTER Some Linux network drivers use a technique called copy and checksum to optimize host performance. For a machine which acts as a router most of the time and is forwarding most packets to another host this is however a loss. If you say Y here, copy and checksum will be switched off. In the future, it may make other changes which optimize for router operation. Note that your box can only act as a router if you enable IP forwarding in your kernel; you can do that by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the line echo "1" > /proc/sys/net/ipv4/ip_forward at boot time after the /proc filesystem has been mounted. You can do that even if you say N here. If unsure, say N here. IP: firewalling CONFIG_IP_FIREWALL If you want to configure your Linux box as a packet filter firewall for a local TCP/IP based network, say Y here. You may want to read the FIREWALL-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also, you will need the ipchains tool (available on the WWW at http://www.rustcorp.com/linux/ipchains/) to allow selective blocking of Internet traffic based on type, origin and destination. Note that the Linux firewall code has changed and the old program called ipfwadm won't work anymore. Please read the IPCHAINS-HOWTO. The type of firewall provided by ipchains and this kernel support is called a "packet filter". The other type of firewall, a "proxy-based" one, is more secure but more intrusive and more bothersome to set up; it inspects the network traffic much more closely, modifies it and has knowledge about the higher level protocols, which a packet filter lacks. Moreover, proxy-based firewalls often require changes to the programs running on the local clients. Proxy-based firewalls don't need support by the kernel, but they are often combined with a packet filter, which only works if you say Y here. The firewalling code will only work if IP forwarding is enabled in your kernel. You can do that by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the line echo "1" > /proc/sys/net/ipv4/ip_forward at boot time after the /proc filesystem has been mounted. You need to say Y to "IP firewalling" in order to be able to use IP masquerading (masquerading means that local computers can chat with an outside host, but that outside host is made to think that it is talking to the firewall box -- makes the local network completely invisible to the outside world and avoids the need to allocate globally valid IP host addresses for the machines on the local net) and IP packet logging and accounting (keeping track of what is using all your network bandwidth) and IP transparent proxying (makes the computers on the local network think they're talking to a remote computer, while in reality the traffic is redirected by your Linux firewall to a local proxy server). If in doubt, say N here. IP: firewall packet netlink device CONFIG_IP_FIREWALL_NETLINK If you say Y here, you can use the ipchains tool to copy all or part of any packet you specify that hits your Linux firewall to optional user space monitoring software that can then look for attacks and take actions such as paging the administrator of the site. To use this, you need to create a character special file under /dev with major number 36 and minor number 3 using mknod ("man mknod"), and you need (to write) a program that reads from that device and takes appropriate action. IP: kernel level autoconfiguration CONFIG_IP_PNP This enables automatic configuration of IP addresses of devices and of the routing table during kernel boot, based on either information supplied at the kernel command line or by BOOTP or RARP protocols. You need to say Y only for diskless machines requiring network access to boot (in which case you want to say Y to "Root file system on NFS" as well), because all other machines configure the network in their startup scripts. BOOTP support CONFIG_IP_PNP_BOOTP If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS and you want the IP address of your computer to be discovered automatically at boot time using the BOOTP protocol (a special protocol designed for doing this job), say Y here. In case the boot ROM of your network card was designed for booting Linux and does BOOTP itself, providing all necessary information on the kernel command line, you can say N here. If unsure, say Y. Note that if you want to use BOOTP, a BOOTP server must be operating on your network. Read Documentation/nfsroot.txt for details. RARP support CONFIG_IP_PNP_RARP If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS and you want the IP address of your computer to be discovered automatically at boot time using the RARP protocol (an older protocol which is being obsoleted by BOOTP and DHCP), say Y here. Note that if you want to use RARP, a RARP server must be operating on your network. Read Documentation/nfsroot.txt for details. IP: tunneling CONFIG_NET_IPIP Tunneling means encapsulating data of one protocol type within another protocol and sending it over a channel that understands the encapsulating protocol. This particular tunneling driver implements encapsulation of IP within IP, which sounds kind of pointless, but can be useful if you want to make your (or some other) machine appear on a different network than it physically is, or to use mobile-IP facilities (allowing laptops to seamlessly move between networks without changing their IP addresses; check out http://anchor.cs.binghamton.edu/~mobileip/LJ/index.html). Saying Y to this option will produce two modules ( = code which can be inserted in and removed from the running kernel whenever you want). Most people won't need this and can say N. IP: GRE tunnels over IP CONFIG_NET_IPGRE Tunneling means encapsulating data of one protocol type within another protocol and sending it over a channel that understands the encapsulating protocol. This particular tunneling driver implements GRE (Generic Routing Encapsulation) and at this time allows encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure. This driver is useful if the other endpoint is a Cisco router: Cisco likes GRE much better than the other Linux tunneling driver ("IP: tunneling" above). In addition, GRE allows multicast redistribution through the tunnel. IP: broadcast GRE over IP CONFIG_NET_IPGRE_BROADCAST One application of GRE/IP is to construct a broadcast WAN (Wide Area Network), which looks like a normal Ethernet LAN (Local Area Network), but can be distributed all over the Internet. If you want to do that, say Y here and to "IP: multicast routing" below. IP: transparent proxying CONFIG_IP_TRANSPARENT_PROXY This enables your Linux firewall to transparently redirect any network traffic originating from the local network and destined for a remote host to a local server, called a "transparent proxy server". This makes the local computers think they are talking to the remote end, while in fact they are connected to the local proxy. Redirection is activated by defining special input firewall rules (using the ipchains utility) and/or by doing an appropriate bind() system call. IP: masquerading CONFIG_IP_MASQUERADE If one of the computers on your local network for which your Linux box acts as a firewall wants to send something to the outside, your box can "masquerade" as that computer, i.e. it forwards the traffic to the intended outside destination, but makes it look like it came from the firewall box itself. It works both ways: if the outside host replies, the Linux firewall will silently forward the traffic to the corresponding local computer. This way, the computers on your local net are completely invisible to the outside world, even though they can reach the outside and can receive replies. This makes it possible to have the computers on the local network participate on the Internet even if they don't have officially registered IP addresses. (This last problem can also be solved by connecting the Linux box to the Internet using SLiRP [SLiRP is a SLIP/PPP emulator that works if you have a regular dial up shell account on some UNIX computer; get it via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/ ].) The IP masquerading code will only work if IP forwarding is enabled in your kernel; you can do this by saying Y to "/proc filesystem support" and "Sysctl support" below and then executing a line like echo "1" > /proc/sys/net/ipv4/ip_forward from a boot time script after the /proc filesystem has been mounted. Enabling masquerading automagically enables ip_always_defrag too. Details on how to set things up are contained in the IP Masquerade mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini; there's also some information on the WWW at http://www.tor.shaw.wave.ca/~ambrose/kernel21.html. If you say Y here, then the modules ip_masq_ftp.o (for ftp file transfers), ip_masq_irc.o (for irc chats), ip_masq_quake.o (you guessed it), ip_masq_vdolive.o (for VDOLive video connections), ip_masq_cuseeme.o (for CU-SeeMe broadcasts) and ip_masq_raudio.o (for RealAudio downloads) will automatically be compiled. They are needed to make masquerading for these protocols work. Modules are pieces of code which can be inserted in and removed from the running kernel whenever you want; read Documentation/modules.txt for details. IP: ICMP masquerading CONFIG_IP_MASQUERADE_ICMP The basic masquerade code described for "IP: masquerading" above only handles TCP or UDP packets (and ICMP errors for existing connections). This option adds additional support for masquerading ICMP packets, such as ping or the probes used by the Windows 95 tracert program. If you want this, say Y. IP: masquerading special modules support CONFIG_IP_MASQUERADE_MOD This provides support for special modules that can modify the rewriting rules used when masquerading. Please note that this feature adds a little overhead in the input packet processing chain. Examples of such modules are ipautofw (allowing the masquerading of protocols which don't have their own protocol helpers) and port forwarding (making an incoming port of a local computer visible through the masquerading host). You will need the user space program "ipmasqadm" to use these additional modules; you can download it from http://juanjox.linuxhq.com/ All this additional code is still under development and so is currently marked EXPERIMENTAL. If you want to try, for example, PORT FORWARDING, say Y. IP: ipautofw masquerade support (Experimental) CONFIG_IP_MASQUERADE_IPAUTOFW ipautofw is a program which allows the masquerading of protocols which do not (as yet) have their own protocol helpers. Information and source for ipautofw is available via FTP (user: anonymous) from ftp://ftp.netis.com/pub/members/rlynch/ You will also need the ipmasqadm tool available from http://juanjox.linuxhq.com/ . The ipautofw code is still under development and so is currently marked EXPERIMENTAL. If you want to try it, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ip_masq_autofw.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: ipportfw masquerade support CONFIG_IP_MASQUERADE_IPPORTFW Port Forwarding is an addition to IP Masquerading which allows some forwarding of packets from outside to inside a firewall on given ports. This could be useful if, for example, you want to run a web server behind the firewall or masquerading host and that web server should be accessible from the outside world. An external client sends a request to port 80 of the firewall, the firewall forwards this request to the web server, the web server handles the request and the results are sent through the firewall to the original client. The client thinks that the firewall machine itself is running the web server. This can also be used for load balancing if you have a farm of identical web servers behind the firewall. Information about this feature is available from http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). For general info, please see ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/ You will need the user space program "ipmasqadm" which can be downloaded from http://juanjox.linuxhq.com/ The portfw code is still under development and so is currently marked EXPERIMENTAL. If you want to try it, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ip_masq_portfw.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: ipmarkfw masquerade support CONFIG_IP_MASQUERADE_MFW Firewall Mark Forwarding provides functionality similar to port forwarding (see "IP: ipportfw masquerade support", above), the difference being that Firewall Mark Forwarding uses "firewalling mark" to select which packets must be forwarded (see ipchains(8), "-m" argument). This code is still under development and so is currently marked EXPERIMENTAL. If you want to try it, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ip_masq_markfw.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: masquerading virtual server support CONFIG_IP_MASQUERADE_VS IP Virtual Server support will let you build a virtual server based on cluster of two or more real servers. This option must be enabled for at least one of the clustered computers that will take care of intercepting incomming connections to a single IP address and scheduling them to real servers. Three request dispatching techniques are implemented, they are virtual server via NAT, virtual server via tunneling and virtual server via direct routing. The round-robin scheduling, the weighted round-robin secheduling, or the weighted least-connection scheduling algorithm can be used to choose which server the connection is directed to, thus load balancing can be achieved among the servers. For more information and its administration program, please visit the following URL: http://www.linuxvirtualserver.org/ If you want this, say Y. IP masquerading VS table size (the Nth power of 2) CONFIG_IP_MASQUERADE_VS_TAB_BITS Using a big ipvs hash table for virtual server will greatly reduce conflicts in the ipvs hash table when there are hundreds of thousands of active connections. Note the table size must be power of 2. The table size will be the value of 2 to the your input number power. For example, the default number is 12, so the table size is 4096. Don't input the number too small, otherwise you will lose performance on it. You can adapt the table size yourself, according to your virtual server application. It is good to set the table size not far less than the number of connections per second multiplying average lasting time of connection in the table. For example, your virtual server gets 200 connections per second, the connection lasts for 200 seconds in average in the masquerading table, the table size should be not far less than 200x200, it is good to set the table size 32768 (2**15). Another note that each connection occupies 128 bytes effectively and each hash entry uses 8 bytes, so you can estimate how much memory is needed for your box. IPVS: round-robin scheduling CONFIG_IP_MASQUERADE_VS_RR The robin-robin scheduling algorithm simply directs network connections to different real servers in a round-robin manner. If you want to compile it in kernel, say Y. If you want to compile it as a module, say M here and read Documentation/modules.txt. IPVS: weighted round-robin scheduling CONFIG_IP_MASQUERADE_VS_WRR The weighted robin-robin scheduling algorithm directs network connections to different real servers based on server weights in a round-robin manner. Servers with higher weights receive new connections first than those with less weights, and servers with higher weights get more connections than those with less weights and servers with equal weights get equal connections. If you want to compile it in kernel, say Y. If you want to compile it as a module, say M here and read Documentation/modules.txt. IPVS: least-connection scheduling CONFIG_IP_MASQUERADE_VS_LC The least-connection scheduling algorithm directs network connections to the server with the least number of active connections. If you want to compile it in kernel, say Y. If you want to compile it as a module, say M here and read Documentation/modules.txt. IPVS: weighted least-connection scheduling CONFIG_IP_MASQUERADE_VS_WLC The weighted least-connection scheduling algorithm directs network connections to the server with the least active connections normalized by the server weight. If you want to compile it in kernel, say Y. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: aliasing support CONFIG_IP_ALIAS Sometimes it is useful to give several IP addresses to a single physical network interface (serial port or Ethernet card). The most common case is that you want to serve different WWW or ftp documents to the outside depending on which of your host names was used to connect to you. This is called "multihosting" or "virtual domains" or "virtual hosting services" and is explained in detail on the WWW at http://www.thesphere.com/~dlp/TwoServers/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and also in the Virtual-Services-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Another scenario would be that there are two logical networks living on your local Ethernet and you want to access them both with the same Ethernet card. This can also be done if you say Y here. The configuration of these alias addresses is done with a special name syntax explained in Documentation/networking/alias.txt and in the IP-Alias mini-HOWTO. If you want this, say Y. Most people don't need it and say N. IP: multicast routing CONFIG_IP_MROUTE This is used if you want your machine to act as a router for IP packets that have several destination addresses. It is needed on the MBONE, a high bandwidth network on top of the Internet which carries audio and video broadcasts. In order to do that, you would most likely run the program mrouted. Information about the multicast capabilities of the various network cards is contained in Documentation/networking/multicast.txt. If you haven't heard about it, you don't need it. IP: PIM-SM version 1 support CONFIG_IP_PIMSM_V1 Kernel side support for Sparse Mode PIM (Protocol Independent Multicast) version 1. This multicast routing protocol is used widely because Cisco supports it. You need special software to use it (pimd-v1). Please see http://netweb.usc.edu/pim/ for more information about PIM (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Say Y if you want to use PIM-SM v1. Note that you can say N here if you just want to use Dense Mode PIM. IP: PIM-SM version 2 support CONFIG_IP_PIMSM_V2 Kernel side support for Sparse Mode PIM version 2. In order to use this, you need an experimental routing daemon supporting it (pimd or gated-5). This routing protocol is not used widely, so say N unless you want to play with it. PC/TCP compatibility mode CONFIG_INET_PCTCP If you have been having difficulties telnetting to your Linux machine from a DOS system that uses (broken) PC/TCP networking software (all versions up to OnNet 2.0) over your local Ethernet try saying Y here. Everyone else says N. People having problems with NCSA telnet should see the file linux/Documentation/networking/ncsa-telnet. Reverse ARP server CONFIG_INET_RARP If there are (usually diskless or portable) machines on your local network that know their hardware Ethernet addresses but don't know their IP addresses upon startup, they can send out a Reverse Address Resolution Protocol (RARP) request to find out their own IP addresses. Diskless Sun 3 machines use this procedure at boot time, and diskless Linux boxes can be configured to do it as well. If you want your Linux box to be able to *answer* such requests, answer Y here; you'll then have to run the program rarp ("man rarp") on your box. If you actually want to use a diskless Sun 3 machine as an X terminal to Linux, say Y here and fetch Linux-Xkernel from ftp://metalab.unc.edu/pub/Linux/system/network/boot.net/. Superior solutions to the problem of booting and configuring machines over a net connection are given by the protocol BOOTP and its successor DHCP. See the DHCP FAQ http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html for details (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile RARP support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called rarp.o. If you don't understand a word of the above, say N and rest in peace. Assume subnets are local CONFIG_INET_SNARL Say Y if you are on a subnetted network with all machines connected by Ethernet segments only, as this option optimizes network access for this special case. If there are other connections, e.g. SLIP links, between machines of your IP network, say N. If in doubt, answer N. The PATH mtu discovery facility will cover most cases anyway. Path MTU Discovery (normally enabled) CONFIG_PATH_MTU_DISCOVERY MTU (maximal transfer unit) is the size of the chunks we send out over the net. "Path MTU Discovery" means that, instead of always sending very small chunks, we start out sending big ones and if we then discover that some host along the way likes its chunks smaller, we adjust to a smaller size. This is good, so most people say Y here. However, some DOS software (versions of DOS NCSA telnet and Trumpet Winsock in PPP mode) is broken and won't be able to connect to your Linux machine correctly in all cases (especially through a terminal server) unless you say N here. See Documentation/networking/ncsa-telnet for the location of fixed NCSA telnet clients. If in doubt, say Y. Disable NAGLE algorithm (normally enabled) CONFIG_TCP_NAGLE_OFF The NAGLE algorithm works by requiring an acknowledgment before sending small IP frames (packets). This keeps tiny telnet and rlogin packets from congesting Wide Area Networks. Most people strongly recommend to say N here, thereby leaving NAGLE enabled. Those programs that would benefit from disabling this facility can do it on a per connection basis themselves. IP: Allow large windows (not recommended if <16 MB of memory) CONFIG_SKB_LARGE On high speed, long distance networks the performance limit on networking becomes the amount of data the sending machine can buffer until the other end confirms its reception. (At 45 Mbit/second there are a lot of bits between New York and London ...). If you say Y here, bigger buffers can be used which allows larger amounts of data to be "in flight" at any given time. It also means a user process can require a lot more memory for network buffers and thus this option is best used only on machines with 16 MB of memory or higher. Unless you are using long links with end to end speeds of over 2 Mbit a second or satellite links this option will make no difference to performance. Unix domain sockets CONFIG_UNIX If you say Y here, you will include support for Unix domain sockets; sockets are the standard Unix mechanism for establishing and accessing network connections. Many commonly used programs such as the X Window system and syslog use these sockets even if your machine is not connected to any network. Unless you are working on an embedded system or something similar, you therefore definitely want to say Y here. However, the socket support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called unix.o. If you try building this as a module and you have said Y to "Kernel module loader support" above, be sure to add 'alias net-pf-1 unix' to your /etc/conf.modules file. Note that several important services won't work correctly if you say M here and then neglect to load the module. Say Y unless you know what you are doing. The IPv6 protocol CONFIG_IPV6 This is experimental support for the next version of the Internet Protocol: IP version 6 (also called IPng "IP next generation"). Features of this new protocol include: expanded address space, authentication and privacy, and seamless interoperability with the current version of IP (IP version 4). For general information about IPv6, see http://playground.sun.com/pub/ipng/html/ipng-main.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape); for specific information about IPv6 under Linux read the file net/ipv6/README in the kernel source. If you want to use IPv6, please upgrade to the newest net-tools as given in Documentation/Changes. You will still be able to do regular IPv4 networking as well. This protocol support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ipv6.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. It is safe to say N here for now. IPv6: enable EUI-64 token format CONFIG_IPV6_EUI64 6bone, the network of computers using the IPv6 protocol, is moving to a new aggregatable address format and a new link local address assignment (EUI-64). Say Y if your site has upgraded already, or has started to upgrade. IPv6: disable provider based addresses CONFIG_IPV6_NO_PB Linux tries to operate correctly when your site has moved to EUI-64 only partially. Unfortunately, the two address formats (old: "provider based" and new: "aggregatable") are incompatible. Say Y if your site finished the upgrade to EUI-64, and/or you encountered some problems caused by the presence of two link-local addresses on an interface. IPv6: routing messages via old netlink CONFIG_IPV6_NETLINK You can say Y here to receive routing messages from the IPv6 code through the old netlink interface. However, a better option is to say Y to "Kernel/User network link driver" and to "Routing messages" instead. IPX networking CONFIG_IPX This is support for the Novell networking protocol, IPX, commonly used for local networks of Windows machines. You need it if you want to access Novell NetWare file or print servers using the Linux Novell client ncpfs (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/filesystems/) or from within the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO). In order to do the former, you'll also have to say Y to "NCP filesystem support", below. IPX is similar in scope to IP, while SPX, which runs on top of IPX, is similar to TCP. There is also experimental support for SPX in Linux (see "SPX networking", below). To turn your Linux box into a fully featured NetWare file server and IPX router, say Y here and fetch either lwared from ftp://metalab.unc.edu/pub/Linux/system/network/daemons/ or mars_nwe from ftp://ftp.gwdg.de/pub/linux/misc/ncpfs. For more information, read the IPX-HOWTO in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). The IPX driver would enlarge your kernel by about 5 kB. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ipx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Unless you want to integrate your Linux box with a local Novell network, say N. IPX: Full internal IPX network CONFIG_IPX_INTERN Every IPX network has an address that identifies it. Sometimes it is useful to give an IPX "network" address to your Linux box as well (for example if your box is acting as a file server for different IPX networks: it will then be accessible from everywhere using the same address). The way this is done is to create a virtual internal "network" inside your box and to assign an IPX address to this network. Say Y here if you want to do this; read the IPX-HOWTO at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO for details. The full internal IPX network enables you to allocate sockets on different virtual nodes of the internal network. This is done by evaluating the field sipx_node of the socket address given to the bind call. So applications should always initialize the node field to 0 when binding a socket on the primary network. In this case the socket is assigned the default node that has been given to the kernel when the internal network was created. By enabling the full internal IPX network the cross-forwarding of packets targeted at 'special' sockets to sockets listening on the primary network is disabled. This might break existing applications, especially RIP/SAP daemons. A RIP/SAP daemon that works well with the full internal net can be found on ftp://ftp.gwdg.de/pub/linux/misc/ncpfs. If you don't know what you are doing, say N. IPX: SPX networking (EXPERIMENTAL) CONFIG_SPX The Sequenced Packet eXchange protocol is a transport layer protocol built on top of IPX. It is used in Novell NetWare systems for client-server applications and is similar to TCP (which runs on top of IP). Note that Novell NetWare file sharing does not use SPX; it uses a protocol called NCP, for which separate Linux support is available ("NCP filesystem support" below for the client side, and the user space programs lwared or mars_nwe for the server side). Say Y here if you have use for SPX; read the IPX-HOWTO at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO for details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called af_spx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AppleTalk DDP CONFIG_ATALK AppleTalk is the way Apple computers speak to each other on a network. If your Linux box is connected to such a network and you want to join the conversation, say Y. You will need to use the netatalk package so that your Linux box can act as a print and file server for Macs as well as access AppleTalk printers. Check out http://threepio.hitchcock.org/cgi-bin/faq/netatalk/faq.pl on the WWW for details (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). EtherTalk is the name used for AppleTalk over Ethernet and the cheaper and slower LocalTalk is AppleTalk over a proprietary Apple network using serial links. EtherTalk and LocalTalk are fully supported by Linux. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html The NET-3-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO contains valuable information as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called appletalk.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. I hear that the GNU boycott of Apple is over, so even politically correct people are allowed to say Y here. AppleTalk-IP driver support CONFIG_IPDDP This allows IP networking for users who only have AppleTalk networking available. This feature is experimental. With this driver, you can encapsulate IP inside AppleTalk (e.g. if your Linux box is stuck on an AppleTalk only network) or decapsulate (e.g. if you want your Linux box to act as an Internet gateway for a zoo of AppleTalk connected Macs). Please see the file Documentation/networking/ipddp.txt for more information. If you say Y here, the AppleTalk-IP support will be compiled into the kernel. In this case, you can either use encapsulation or decapsulation, but not both. With the following two questions, you decide which one you want. If you say M here, the AppleTalk-IP support will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want, read Documentation/modules.txt). The module is called ipddp.o. In this case, you will be able to use both encapsulation and decapsulation simultaneously, by loading two copies of the module and specifying different values for the module option ipddp_mode. IP to AppleTalk-IP Encapsulation support CONFIG_IPDDP_ENCAP If you say Y here, the AppleTalk-IP code will be able to encapsulate IP packets inside AppleTalk frames; this is useful if your Linux box is stuck on an AppleTalk network (which hopefully contains a decapsulator somewhere). Please see Documentation/networking/ipddp.txt for more information. If you said Y to "AppleTalk-IP driver support" above and you say Y here, then you cannot say Y to "AppleTalk-IP to IP Decapsulation support", below. AppleTalk-IP to IP Decapsulation support CONFIG_IPDDP_DECAP If you say Y here, the AppleTalk-IP code will be able to decapsulate AppleTalk-IP frames to IP packets; this is useful if you want your Linux box to act as an Internet gateway for an AppleTalk network. Please see Documentation/networking/ipddp.txt for more information. If you said Y to "AppleTalk-IP driver support" above and you say Y here, then you cannot say Y to "IP to AppleTalk-IP Encapsulation support", above. Apple/Farallon LocalTalk PC card support CONFIG_LTPC This allows you to use the AppleTalk PC card to connect to LocalTalk networks. The card is also known as the Farallon PhoneNet PC card. If you are in doubt, this card is the one with the 65C02 chip on it. You also need version 1.3.3 or later of the netatalk package. This driver is experimental, which means that it may not work. See the file Documentation/networking/ltpc.txt. COPS LocalTalk PC card support CONFIG_COPS This allows you to use COPS AppleTalk cards to connect to LocalTalk networks. You also need version 1.3.3 or later of the netatalk package. This driver is experimental, which means that it may not work. This driver will only work if you choose "AppleTalk DDP" networking support, above. Please read the file Documentation/networking/cops.txt. Dayna firmware support CONFIG_COPS_DAYNA Support COPS compatible cards with Dayna style firmware (Dayna DL2000/ Daynatalk/PC (half length), COPS LT-95, Farallon PhoneNET PC III, Farallon PhoneNET PC II). Tangent firmware support CONFIG_COPS_TANGENT Support COPS compatible cards with Tangent style firmware (Tangent ATB_II, Novell NL-1000, Daystar Digital LT-200. Amateur Radio support CONFIG_HAMRADIO If you want to connect your Linux box to an amateur radio, answer Y here. You want to read http://www.tapr.org/tapr/html/pkthome.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and the HAM-HOWTO and the AX25-HOWTO, both available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about amateur radio. Amateur Radio AX.25 Level 2 CONFIG_AX25 This is the protocol used for computer communication over amateur radio. It is either used by itself for point-to-point links, or to carry other protocols such as tcp/ip. To use it, you need a device that connects your Linux box to your amateur radio. You can either use a low speed TNC (a Terminal Node Controller acts as a kind of modem connecting your computer's serial port to your radio's microphone input and speaker output) supporting the KISS protocol or one of the various SCC cards that are supported by the generic Z8530 or the DMA SCC driver. Another option are the Baycom modem serial and parallel port hacks or the sound card modem (supported by their own drivers). If you say Y here, you also have to say Y to one of those drivers. Information about where to get supporting software for Linux amateur radio as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You might also want to check out the file Documentation/networking/ax25.txt in the kernel source. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html. (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ax25.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AX.25 DAMA Slave support CONFIG_AX25_DAMA_SLAVE DAMA is a mechanism to prevent collisions when doing AX.25 networking. A DAMA server (called "master") accepts incoming traffic from clients (called "slaves") and redistributes it to other slaves. If you say Y here, your Linux box will act as a DAMA slave; this is transparent in that you don't have to do any special DAMA configuration. (Linux cannot yet act as a DAMA server.) If unsure, say N. AX.25 DAMA Master support CONFIG_AX25_DAMA_MASTER DAMA is a mechanism to prevent collisions when doing AX.25 networking. A DAMA server (called "master") accepts incoming traffic from clients (called "slaves") and redistributes it to other slaves. If you say Y here, your Linux box will act as a DAMA server. If unsure, say N. Amateur Radio NET/ROM CONFIG_NETROM NET/ROM is a network layer protocol on top of AX.25 useful for routing. A comprehensive listing of all the software for Linux amateur radio users as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You also might want to check out the file Documentation/networking/ax25.txt. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called netrom.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Amateur Radio X.25 PLP (Rose) CONFIG_ROSE The Packet Layer Protocol (PLP) is a way to route packets over X.25 connections in general and amateur radio AX.25 connections in particular, essentially an alternative to NET/ROM. A comprehensive listing of all the software for Linux amateur radio users as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You also might want to check out the file Documentation/networking/ax25.txt. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called rose.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Serial port KISS driver for AX.25 CONFIG_MKISS KISS is a protocol used for the exchange of data between a computer and a Terminal Node Controller (a small embedded system commonly used for networking over AX.25 amateur radio connections; it connects the computer's serial port with the radio's microphone input and speaker output). Although KISS is less advanced than the 6pack protocol, it has the advantage that it is already supported by most modern TNCs without the need for a firmware upgrade. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called mkiss.o. Serial port 6PACK driver for AX.25 CONFIG_6PACK 6pack is a transmission protocol for the data exchange between your PC and your TNC (the Terminal Node Controller acts as a kind of modem connecting your computer's serial port to your radio's microphone input and speaker output). This protocol can be used as an alternative to KISS for networking over AX.25 amateur radio connections, but it has some extended functionality. Note that this driver is still experimental and might cause problems. For details about the features and the usage of the driver, read Documentation/networking/6pack.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called 6pack.o. BPQ Ethernet driver CONFIG_BPQETHER AX.25 is the protocol used for computer communication over amateur radio. If you say Y here, you will be able to send and receive AX.25 traffic over Ethernet (also called "BPQ AX.25"), which could be useful if some other computer on your local network has a direct amateur radio connection. High-speed (DMA) SCC driver for AX.25 CONFIG_DMASCC This is a driver for high-speed SCC boards, i.e. those supporting DMA on one port. You usually use those boards to connect your computer to an amateur radio modem (such as the WA4DSY 56kbps modem), in order to send and receive AX.25 packet radio network traffic. Currently, this driver supports Ottawa PI/PI2 (http://hydra.carleton.ca/info/pi2.html) and Gracilis PackeTwin (http://www.paccomm.com/gracilis.html) boards. They are detected automatically. If you have one of these cards, say Y here and read the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/. This driver can operate multiple boards simultaneously. If you compile it as a module (by saying M instead of Y), it will be called dmascc.o. If you don't pass any parameter to the driver, all possible I/O addresses are probed. This could irritate other devices that are currently not in use. You may specify the list of addresses to be probed by "dmascc=addr1,addr2,..." (when compiled into the kernel image) or "io=addr1,addr2,..." (when loaded as a module). The network interfaces will be called dmascc0 and dmascc1 for the board detected first, dmascc2 and dmascc3 for the second one, and so on. Before you configure each interface with ifconfig, you MUST set certain parameters, such as channel access timing, clock mode, and DMA channel. This is accomplished with a small utility program, dmascc_cfg, available at http://www.nt.tuwien.ac.at/~kkudielk/Linux/. (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Z8530 SCC driver for AX.25 CONFIG_SCC These cards are used to connect your Linux box to an amateur radio in order to communicate with other computers. If you want to use this, read Documentation/networking/z8530drv.txt and the AX25-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also make sure to say Y to "Amateur Radio AX.25 Level 2" support. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called scc.o. additional delay for PA0HZP OptoSCC compatible boards CONFIG_SCC_DELAY Say Y here if you experience problems with the SCC driver not working properly; please read Documentation/networking/z8530drv.txt for details. If unsure, say N. #support for TRX that feedback the tx signal to rx #CONFIG_SCC_TRXECHO ### ### Don't know what's going on here. ### # YAM driver for AX.25 CONFIG_YAM Support for the YAM modem on serial port. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. BAYCOM picpar and par96 driver for AX.25 CONFIG_BAYCOM_PAR This is a driver for Baycom style simple amateur radio modems that connect to a parallel interface. The driver supports the picpar and par96 designs. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_par.o. BAYCOM EPP driver for AX.25 CONFIG_BAYCOM_EPP This is a driver for Baycom style simple amateur radio modems that connect to a parallel interface. The driver supports the EPP designs. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_par.o. BAYCOM ser12 full duplex driver for AX.25 CONFIG_BAYCOM_SER_FDX This is one of two drivers for Baycom style simple amateur radio modems that connect to a serial interface. The driver supports the ser12 design in full duplex mode. In addition, it allows the baudrate to be set between 300 and 4800 baud (however not all modems support all baudrates). This is the preferred driver. The next driver, "BAYCOM ser12 half duplex driver for AX.25" is the old driver and still provided in case this driver does not work with your serial interface chip. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_ser_fdx.o. BAYCOM ser12 half duplex driver for AX.25 CONFIG_BAYCOM_SER_HDX This is one of two drivers for Baycom style simple amateur radio modems that connect to a serial interface. The driver supports the ser12 design in full duplex mode. This is the old driver. It is still provided in case your serial interface chip does not work with the full duplex driver. This driver is depreciated. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_ser_hdx.o. Sound card modem driver for AX.25 CONFIG_SOUNDMODEM This experimental driver allows a standard Sound Blaster or WindowsSoundSystem compatible sound card to be used as a packet radio modem (NOT as a telephone modem!), to send digital traffic over amateur radio. To configure the driver, use the sethdlc, smdiag and smmixer utilities available in the standard ax25 utilities package. For information on how to key the transmitter, see http://www.ife.ee.ethz.ch/~sailer/pcf/ptt_circ/ptt.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/soundmodem.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called soundmodem.o. Sound card modem support for Sound Blaster and compatible cards CONFIG_SOUNDMODEM_SBC This option enables the soundmodem driver to use Sound Blaster and compatible cards. If you have a dual mode card (i.e. a WSS cards with a Sound Blaster emulation) you should say N here and Y to "Sound card modem support for WSS and Crystal cards", below, because this usually results in better performance. This option also supports SB16/32/64 in full duplex mode. Sound card modem support for WSS and Crystal cards CONFIG_SOUNDMODEM_WSS This option enables the soundmodem driver to use WindowsSoundSystem compatible cards. These cards feature a codec chip from either Analog Devices (such as AD1848, AD1845, AD1812) or Crystal Semiconductors (such as CS4248, CS423x). This option also supports the WSS full duplex operation which currently works with Crystal CS423x chips. If you don't need full duplex operation, do not enable it to save performance. Sound card modem support for 1200 baud AFSK modulation CONFIG_SOUNDMODEM_AFSK1200 This option enables the soundmodem driver 1200 baud AFSK modem, compatible to popular modems using TCM3105 or AM7911. The demodulator requires about 12% of the CPU power of a Pentium 75 CPU per channel. Sound card modem support for 2400 baud AFSK modulation (7.3728MHz crystal) CONFIG_SOUNDMODEM_AFSK2400_7 This option enables the soundmodem driver 2400 baud AFSK modem, compatible to TCM3105 modems (over-)clocked with a 7.3728MHz crystal. Note that the availability of this driver does _not_ imply that I recommend building such links. It is only here since users especially in eastern Europe have asked me to do so. In fact this modulation scheme has many disadvantages, mainly its incompatibility with many transceiver designs and the fact that the TCM3105 (if used) is operated widely outside its specifications. Sound card modem support for 2400 baud AFSK modulation (8MHz crystal) CONFIG_SOUNDMODEM_AFSK2400_8 This option enables the soundmodem driver 2400 baud AFSK modem, compatible to TCM3105 modems (over-)clocked with an 8MHz crystal. Note that the availability of this driver does _not_ imply that I recommend building such links. It is only here since users especially in eastern Europe have asked me to do so. In fact this modulation scheme has many disadvantages, mainly its incompatibility with many transceiver designs and the fact that the TCM3105 (if used) is operated widely outside its specifications. Sound card modem support for 2666 baud AFSK modulation CONFIG_SOUNDMODEM_AFSK2666 This option enables the soundmodem driver 2666 baud AFSK modem. This modem is experimental, and not compatible to anything else I know of. Sound card modem support for 4800 baud 8PSK modulation CONFIG_SOUNDMODEM_PSK4800 This option enables the soundmodem driver 4800 baud 8PSK modem. This modem is experimental, and not compatible to anything else I know of. Sound card modem support for 4800 baud HAPN-1 modulation CONFIG_SOUNDMODEM_HAPN4800 This option enables the soundmodem driver 4800 baud HAPN-1 compatible modem. This modulation seems to be widely used 'down under' and in the Netherlands. Here, nobody uses it, so I could not test if it works. It is compatible to itself, however :-) Sound card modem support for 9600 baud FSK G3RUH modulation CONFIG_SOUNDMODEM_FSK9600 This option enables the soundmodem driver 9600 baud FSK modem, compatible to the G3RUH standard. The demodulator requires about 4% of the CPU power of a Pentium 75 CPU per channel. You can say Y to both 1200 baud AFSK and 9600 baud FSK if you want (but obviously you can only use one protocol at a time, depending on what the other end can understand). CCITT X.25 Packet Layer CONFIG_X25 X.25 is a set of standardized network protocols, similar in scope to frame relay; the one physical line from your box to the X.25 network entry point can carry several logical point-to-point connections (called "virtual circuits") to other computers connected to the X.25 network. Governments, banks, and other organizations tend to use it to connect to each other or to form Wide Area Networks (WANs). Many countries have public X.25 networks. X.25 consists of two protocols: the higher level Packet Layer Protocol (PLP) (say Y here if you want that) and the lower level data link layer protocol LAPB (say Y to "LAPB Data Link Driver" below if you want that). You can read more about X.25 at http://www.sangoma.com/x25.html and http://www.cisco.com/univercd/data/doc/software/11_0/rpcg/cx25.htm (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Information about X.25 for Linux is contained in the files Documentation/networking/x25.txt and Documentation/networking/x25-iface.txt. One connects to an X.25 network either with a dedicated network card using the X.21 protocol (not yet supported by Linux) or one can do X.25 over a standard telephone line using an ordinary modem (say Y to "X.25 async driver" below) or over Ethernet using an ordinary Ethernet card and either the 802.2 LLC protocol (say Y to "802.2 LLC" below) or LAPB over Ethernet (say Y to "LAPB Data Link Driver" and "LAPB over Ethernet driver" below). If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called x25.o. If unsure, say N. LAPB Data Link Driver (EXPERIMENTAL) CONFIG_LAPB Link Access Procedure, Balanced (LAPB) is the data link layer (i.e. the lower) part of the X.25 protocol. It offers a reliable connection service to exchange data frames with one other host, and it is used to transport higher level protocols (mostly X.25 Packet Layer, the higher part of X.25, but others are possible as well). Usually, LAPB is used with specialized X.21 network cards, but Linux currently supports LAPB only over Ethernet connections. If you want to use LAPB connections over Ethernet, say Y here and to "LAPB over Ethernet driver" below. Read Documentation/networking/lapb-module.txt for technical details. If you want to compile this driver as a module though ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called lapb.o. If unsure, say N. 802.2 LLC (VERY EXPERIMENTAL) CONFIG_LLC This is a Logical Link Layer protocol used for X.25 connections over Ethernet, using ordinary Ethernet cards. Bridging (EXPERIMENTAL) CONFIG_BRIDGE If you say Y here, then your Linux box will be able to act as an Ethernet bridge, which means that the different Ethernet segments it is connected to will appear as one Ethernet to the participants. Several such bridges can work together to create even larger networks of Ethernets using the IEEE802.1 spanning tree algorithm. As this is a standard, Linux bridges will interwork properly with other third party bridge products. In order to use this, you'll need the bridge configuration tools available via FTP (user: anonymous) from ftp://shadow.cabi.net/pub/Linux. Please read the Bridge mini-HOWTO for more information. Note that if your box acts as a bridge, it probably contains several Ethernet devices, but the kernel is not able to recognize more than one at boot time without help; for details read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. The Bridging code is still in test. If unsure, say N. Packet socket CONFIG_PACKET The Packet protocol is used by applications which communicate directly with network devices without an intermediate network protocol implemented in the kernel, e.g. tcpdump. If you want them to work, choose Y. This driver is also available as a module called af_packet.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. You will need to add 'alias net-pf-17 af_packet' to your /etc/conf.modules file for the module version to function automatically. If unsure, say Y. Kernel/User network link driver CONFIG_NETLINK This driver allows for two-way communication between certain parts of the kernel or modules and user processes; the user processes are able to read from and write to character special files in the /dev directory having major mode 36. So far, the kernel uses it to publish some network related information if you say Y to "Routing messages", below. It is also used by the firewall code to publish information about possible attacks if you say Y to "IP: firewall packet netlink device" further down. You also need to say Y here if you want to use arpd, a daemon that helps keep the internal ARP cache (a mapping between IP addresses and hardware addresses on the local network) small. The ethertap device, which lets user space programs read and write raw Ethernet frames, also needs the network link driver. If unsure, say Y. Routing messages CONFIG_RTNETLINK If you say Y here and create a character special file /dev/route with major number 36 and minor number 0 using mknod ("man mknod"), you (or some user space utility) can read some network related routing information from that file. Everything you write to that file will be discarded. Netlink device emulation CONFIG_NETLINK_DEV This is a backward compatibility option, choose Y for now. This option will be removed soon. SCSI support? CONFIG_SCSI If you want to use a SCSI hard disk, SCSI tape drive, SCSI CDROM or any other SCSI device under Linux, say Y and make sure that you know the name of your SCSI host adapter (the card inside your computer that "speaks" the SCSI protocol, also called SCSI controller), because you will be asked for it. You also need to say Y here if you want support for the parallel port version of the 100 MB IOMEGA ZIP drive. Please read the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. The SCSI-Programming-HOWTO contains information about how to add or remove an SCSI device from a running Linux machine without rebooting. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called scsi_mod.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt. However, do not compile this as a module if your root filesystem (the one containing the directory /) is located on a SCSI device. SCSI disk support CONFIG_BLK_DEV_SD If you want to use a SCSI hard disk or the SCSI or parallel port version of the IOMEGA ZIP drive under Linux, say Y and read the SCSI-HOWTO, the Disk-HOWTO and the Multi-Disk-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This is NOT for SCSI CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sd_mod.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt. Do not compile this driver as a module if your root filesystem (the one containing the directory /) is located on a SCSI disk. In this case, do not compile the driver for your SCSI host adapter (below) as a module either. SCSI tape support CONFIG_CHR_DEV_ST If you want to use a SCSI tape drive under Linux, say Y and read the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and drivers/scsi/README.st in the kernel source. This is NOT for SCSI CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called st.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt . SCSI CDROM support CONFIG_BLK_DEV_SR If you want to use a SCSI CDROM under Linux, say Y and read the SCSI-HOWTO and the CDROM-HOWTO from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also make sure to say Y or M to "ISO 9660 CDROM filesystem support" later. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sr_mod.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt . Enable vendor-specific extensions (for SCSI CDROM) CONFIG_BLK_DEV_SR_VENDOR This enables the usage of vendor specific SCSI commands. This is required to support multisession CDs with old NEC/TOSHIBA cdrom drives (and HP Writers). If you have such a drive and get the first session only, try saying Y here; everybody else says N. SCSI generic support CONFIG_CHR_DEV_SG If you want to use SCSI scanners, synthesizers or CD-writers or just about anything having "SCSI" in its name other than hard disks, CDROMs or tapes, say Y here. These won't be supported by the kernel directly, so you need some additional software which knows how to talk to these devices using the SCSI protocol. For scanners, look at SANE (www.mostang.com/sane). For CD writer software look at cdrecord (www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private /cdrecord.html) and for burning a "disk at once": cdrdao (www.ping.de/sites/daneb/cdrdao.html). Cdparanoia is a high quality digital reader of audio CDs (www.xiph.org/paranoia). For other devices, it's possible that you'll have to write the driver software yourself. Please read the file Documentation/scsi-generic.txt for more information. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt and Documentation/scsi.txt. The module will be called sg.o. If unsure, say N. Probe all LUNs on each SCSI device CONFIG_SCSI_MULTI_LUN If you have a SCSI device that supports more than one LUN (Logical Unit Number), e.g. a CD jukebox, and only one LUN is detected, you can say Y here to force the SCSI driver to probe for multiple LUNs. A SCSI device with multiple LUNs acts logically like multiple SCSI devices. The vast majority of SCSI devices have only one LUN, and so most people can say N here and should in fact do so, because it is safer. Verbose SCSI error reporting (kernel size +=12K) CONFIG_SCSI_CONSTANTS The error messages regarding your SCSI hardware will be easier to understand if you say Y here; it will enlarge your kernel by about 12 KB. If in doubt, say Y. SCSI logging facility CONFIG_SCSI_LOGGING This turns on a logging facility that can be used to debug a number of SCSI related problems. If you say Y here, no logging output will appear by default, but you can enable logging by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the command echo "scsi log token [level]" > /proc/scsi/scsi at boot time after the /proc filesystem has been mounted. There are a number of things that can be used for 'token' (you can find them in the source: drivers/scsi/scsi.c), and this allows you to select the types of information you want, and the level allows you to select the level of verbosity. If you say N here, it may be harder to track down some types of SCSI problems. If you say Y here your kernel will be somewhat larger, but there should be no noticeable performance impact as long as you have logging turned off. AdvanSys SCSI support CONFIG_SCSI_ADVANSYS This is a driver for all SCSI host adapters manufactured by AdvanSys. It is documented in the kernel source in drivers/scsi/advansys.c. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called advansys.o. Adaptec AHA152X/2825 support CONFIG_SCSI_AHA152X This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825 SCSI host adapters. It also works for the AVA-1505, but the IRQ etc. must be manually specified in this case. It is explained in section 3.3 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You might also want to read the comments at the top of drivers/scsi/aha152x.c. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called aha152x.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Adaptec AHA1542 support CONFIG_SCSI_AHA1542 This is support for a SCSI host adapter. It is explained in section 3.4 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that Trantor was recently purchased by Adaptec, and some former Trantor products are being sold under the Adaptec name. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/aha1542.h. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called aha1542.o. Adaptec AHA1740 support CONFIG_SCSI_AHA1740 This is support for a SCSI host adapter. It is explained in section 3.5 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/aha1740.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called aha1740.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Adaptec AIC7xxx chipset SCSI controller support CONFIG_SCSI_AIC7XXX This is support for the various aic7xxx based Adaptec SCSI controllers. These include the 274x EISA cards; 284x VLB cards; 2902, 2910, 293x, 294x, 394x, 3985 and several other PCI and motherboard based SCSI controllers from Adaptec. It does not support the AAA-13x RAID controllers from Adaptec, nor will it likely ever support them. It does not support the 2920 cards from Adaptec that use the Future Domain SCSI controller chip. For those cards, you need the "Future Domain 16xx SCSI support" driver. In general, if the controller is based on an Adaptec SCSI controller chip from the aic777x series or the aic78xx series, this driver should work. The only exception is the 7810 which is specifically not supported (that's the RAID controller chip on the AAA-13x cards). Note that the AHA2920 SCSI host adapter is *not* supported by this driver; choose "Future Domain 16xx SCSI support" instead if you have one of those. Information on the configuration options for this controller can be found by checking the help file for each of the available configuration options. You should read drivers/scsi/README.aic7xxx at a minimum before contacting the maintainer with any questions. The SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO can also be of great help. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called aic7xxx.o. Enable or Disable Tagged Command Queueing by default CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT This option causes the aic7xxx driver to attempt to use tagged command queueing on any devices that claim to support it. If this is set to yes, you can still turn off TCQ on troublesome devices with the use of the tag_info boot parameter. See /usr/src/linux/drivers/scsi/README.aic7xxx for more information on that and other aic7xxx setup commands. If this option is turned off, you may still enable TCQ on known good devices by use of the tag_info boot parameter. If you are unsure about your devices then it is safest to say N here. However, TCQ can increase performance on some hard drives by as much as 50% or more, so I would recommend that if you say N here, that you at least read the README.aic7xxx file so you will know how to enable this option manually should your drives prove to be safe in regards to TCQ. Conversely, certain drives are known to lock up or cause bus resets when TCQ is enabled on them. If you have a Western Digital Enterprise SCSI drive for instance, then don't even bother to enable TCQ on it as the drive will become unreliable, and it will actually reduce performance. Default number of TCQ commands per device CONFIG_AIC7XXX_CMDS_PER_DEVICE Specify the number of commands you would like to allocate per SCSI device when Tagged Command Queueing (TCQ) is enabled on that device. Reasonable figures are in the range of 8 to 24 commands per device, but depending on hardware could be increased or decreased from that figure. If the number is too high for any particular device, the driver will automatically compensate usually after only 10 minutes of uptime. It will not hinder performance if some of your devices eventually have their command depth reduced, but is a waste of memory if all of your devices end up reducing this number down to a more reasonable figure. NOTE: Certain very broken drives are known to lock up when given more commands than they like to deal with. Quantum Fireball drives are the most common in this category. For the Quantum Fireball drives I would suggest no more than 8 commands per device. Default: 8 Collect statistics to report in /proc CONFIG_AIC7XXX_PROC_STATS This option tells the driver to keep track of how many commands have been sent to each particular device and report that information to the user via the /proc/scsi/aic7xxx/n file, where n is the number of the aic7xxx controller you want the information on. This adds a small amount of overhead to each and every SCSI command the aic7xxx driver handles, so if you aren't really interested in this information, it is best to leave it disabled. This will only work if you also say Y to "/proc filesystem support", below. If unsure, say N. Delay in seconds after SCSI bus reset CONFIG_AIC7XXX_RESET_DELAY This sets how long the driver will wait after resetting the SCSI bus before attempting to communicate with the devices on the SCSI bus again. This delay will be used during the reset phase at bootup time as well as after any reset that might occur during normal operation. Reasonable numbers range anywhere from 5 to 15 seconds depending on your devices. DAT tape drives are notorious for needing more time after a bus reset to be ready for the next command, but most hard drives and CD-ROM devices are ready in only a few seconds. This option has a maximum upper limit of 20 seconds to avoid bad interactions between the aic7xxx driver and the rest of the linux kernel. The default value has been reduced to 5 seconds. If this doesn't work with your hardware, try increasing this value. IBM ServeRAID Support CONFIG_SCSI_IPS This is support for the IBM ServeRAID hardware RAID controllers. Consult the SCSI-HOWTO, available via anonymous FTP from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, and the file README.ips in drivers/scsi for more information. If this driver does not work correctly without modification please contact the author by email at ipslinux@us.ibm.com. BusLogic SCSI support CONFIG_SCSI_BUSLOGIC This is support for BusLogic MultiMaster and FlashPoint SCSI Host Adapters. Consult the SCSI-HOWTO, available via anonymous FTP from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, and the files README.BusLogic and README.FlashPoint in drivers/scsi for more information. If this driver does not work correctly without modification, please contact the author, Leonard N. Zubkoff, by email to lnz@dandelion.com. You can also build this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), but only a single instance may be loaded. If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called BusLogic.o. Omit BusLogic SCSI FlashPoint support CONFIG_SCSI_OMIT_FLASHPOINT This option allows you to omit the FlashPoint support from the BusLogic SCSI driver. The FlashPoint SCCB Manager code is substantial, so users of MultiMaster Host Adapters may wish to omit it. DTC3180/3280 SCSI support CONFIG_SCSI_DTC3280 This is support for DTC 3180/3280 SCSI Host Adapters. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and the file drivers/scsi/README.dtc3x80. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dtc.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support CONFIG_SCSI_EATA_DMA This is support for the EATA-DMA protocol compliant SCSI Host Adapters like the SmartCache III/IV, SmartRAID controller families and the DPT PM2011B and PM2012B controllers. Note that this driver is obsolete; if you have one of the above SCSI Host Adapters, you should normally say N here and Y to "EATA ISA/EISA/PCI support", below. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eata_dma.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. EATA-PIO (old DPT PM2001, PM2012A) support CONFIG_SCSI_EATA_PIO This driver supports all EATA-PIO protocol compliant SCSI Host Adapters like the DPT PM2001 and the PM2012A. EATA-DMA compliant host adapters could also use this driver but are discouraged from doing so, since this driver only supports hard disks and lacks numerous features. You might want to have a look at the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called eata_pio.o. UltraStor 14F/34F support CONFIG_SCSI_U14_34F This is support for the UltraStor 14F and 34F SCSI-2 host adapters. The source at drivers/scsi/u14-34f.c contains some information about this hardware. If the driver doesn't work out of the box, you may have to change some settings in drivers/scsi/u14-34f.c. Read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that there is also another driver for the same hardware: "UltraStor SCSI support", below. You should say Y to both only if you want 24F support as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called u14-34f.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. enable elevator sorting CONFIG_SCSI_U14_34F_LINKED_COMMANDS This option enables elevator sorting for all probed SCSI disks and CDROMs. It definitely reduces the average seek distance when doing random seeks, but this does not necessarily result in a noticeable performance improvement: your mileage may vary... The safe answer is N. maximum number of queued commands CONFIG_SCSI_U14_34F_MAX_TAGS This specifies how many SCSI commands can be maximally queued for each probed SCSI device. You should reduce the default value of 8 only if you have disks with buggy or limited tagged command support. Minimum is 2 and maximum is 14. This value is also the window size used by the elevator sorting option above. The effective value used by the driver for each probed SCSI device is reported at boot time. Future Domain 16xx SCSI/AHA-2920A support CONFIG_SCSI_FUTURE_DOMAIN This is support for Future Domain's 16-bit SCSI host adapters (TMC-1660/1680, TMC-1650/1670, TMC-3260, TMC-1610M/MER/MEX) and other adapters based on the Future Domain chipsets (Quantum ISA-200S, ISA-250MG; Adaptec AHA-2920A; and at least one IBM board). It is explained in section 3.7 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI controller support"). This Future Domain driver works with the older Adaptec AHA-2920A boards with a Future Domain chip on them. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called fdomain.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Future Domain MCS-600/700 SCSI support CONFIG_SCSI_FD_MCS This is support for Future Domain MCS 600/700 MCA SCSI adapters. Some PS/2 computers are equipped with IBM Fast SCSI Adapter/A which is identical to the MCS 700 and hence also supported by this driver. This driver also supports the Reply SB16/SCSI card (the SCSI part). It supports multiple adapters in the same system. Generic NCR5380/53c400 SCSI support CONFIG_SCSI_GENERIC_NCR5380 This is the generic NCR family of SCSI controllers, not to be confused with the NCR 53c7 or 8xx controllers. It is explained in section 3.8 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/g_NCR5380.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called g_NCR5380.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Enable NCR53c400 extensions CONFIG_SCSI_GENERIC_NCR53C400 This enables certain optimizations for the NCR53c400 SCSI cards. You might as well try it out. Note that this driver will only probe for the Trantor T130B in its default configuration; you might have to pass a command line option to the kernel at boot time if it doesn't detect your card. See the file drivers/scsi/README.g_NCR5380 for details. NCR5380/53c400 mapping method (use Port for T130B) CONFIG_SCSI_G_NCR5380_PORT The NCR5380 and NCR53c400 SCSI controllers come in two varieties: port or memory mapped. You should know what you have. The most common card, Trantor T130B, uses port mapped mode. NCR53c7,8xx SCSI support CONFIG_SCSI_NCR53C7xx This is a driver for the 53c7 and 8xx NCR family of SCSI controllers, not to be confused with the NCR 5380 controllers. It is explained in section 3.8 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/53c7,8xx.h. Please read drivers/scsi/README.ncr53c7xx for the available boot time command line options. Note: there is another driver for the 53c8xx family of controllers ("NCR53C8XX SCSI support" below). If you want to use them both, you need to say M to both and build them as modules, but only one may be active at a time. If you have a 53c8xx board, it's better to use the other driver. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 53c7,8xx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. always negotiate synchronous transfers CONFIG_SCSI_NCR53C7xx_sync In general, this is good; however, it is a bit dangerous since there are some broken SCSI devices out there. Take your chances. Safe bet is N. allow FAST-SCSI [10MHz] CONFIG_SCSI_NCR53C7xx_FAST This will enable 10MHz FAST-SCSI transfers with your host adapter. Some systems have problems with that speed, so it's safest to say N here. allow DISCONNECT CONFIG_SCSI_NCR53C7xx_DISCONNECT This enables the disconnect/reconnect feature of the NCR SCSI controller. When you say Y here, a slow SCSI device will not lock the SCSI bus while processing a request, allowing simultaneous use of e.g. a SCSI hard disk and SCSI tape or CD-ROM drive, and providing much better performance when using slow and fast SCSI devices at the same time. Some devices, however, do not operate properly with this option enabled, and will cause your SCSI system to hang, which might cause a system crash. The safe answer therefore is to say N. NCR53C8XX SCSI support CONFIG_SCSI_NCR53C8XX This is the BSD ncr driver adapted to Linux for the NCR53C8XX family of PCI-SCSI controllers. This driver supports parity checking, tagged command queuing and fast synchronous data transfers up to 80 MB/s with wide FAST-40 LVD devices and controllers. Recent versions of the 53C8XX chips are better supported by the option "SYM53C8XX SCSI support", below. This option will configure a different driver. If you want the kernel to select the recommended driver for each of of your NCR/SYM53C8XX controllers you may just configure both the NCR53C8XX and the SYM53C8XX options to Y, or if modules are preferred, load first the sym53c8xx.o module and then the ncr53c8xx.o module. Note: there is yet another driver for the 53c8xx family of controllers ("NCR53c7,8xx SCSI support" above). If you want to use them both, you need to say M to both and build them as modules, but only one may be active at a time. If you have a 53c8xx board, you probably do not want to use the "NCR53c7,8xx SCSI support". Please read drivers/scsi/README.ncr53c8xx for more information. SYM53C8XX SCSI support CONFIG_SCSI_SYM53C8XX This driver supports all the features of recent 53C8XX chips (used in PCI SCSI controllers), notably the hardware phase mismatch feature of the SYM53C896. Older versions of the 53C8XX chips are not supported by this driver. If your system uses either a 810 rev. < 16, a 815, or a 825 rev. < 16 PCI SCSI processor, you must use the generic NCR53C8XX driver ("NCR53C8XX SCSI support" above) or configure both the NCR53C8XX and this SYM53C8XX drivers either as module or linked to the kernel image. When both drivers are linked to the kernel, the SYM53C8XX driver is called first at initialization and you can use the 'excl=ioaddr' driver boot option to exclude attachment of adapters by the SYM53C8XX driver. For instance, entering 'sym53c8xx=excl:0xb400,excl=0xc000' at lilo prompt prevents adapters at io address 0xb400 and 0xc000 from being attached by the SYM53C8XX driver, thus allowing the NCR53C8XX driver to attach them. The 'excl' option is also supported by the NCR53C8XX driver. Please read drivers/scsi/README.ncr53c8xx for more information. synchronous data transfers frequency CONFIG_SCSI_NCR53C8XX_SYNC The SCSI Parallel Interface-2 Standard defines 4 classes of transfer rates: FAST-5, FAST-10, FAST-20 and FAST-40. The numbers are respectively the maximum data transfer rates in mega-transfers per second for each class. For example, a FAST-20 Wide 16 device is able to transfer data at 20 million 16 bit packets per second for a total rate of 40 MB/s. You may specify 0 if you want to only use asynchronous data transfers. This is the safest and slowest option. Otherwise, specify a value between 5 and 40, depending on the capability of your SCSI controller. The higher the number, the faster the data transfer. Note that 40 should normally be ok since the driver decreases the value automatically according to the controller's capabilities. Your answer to this question is ignored for controllers with NVRAM, since the driver will get this information from the user set-up. It also can be overridden using a boot setup option, as follows (example): 'ncr53c8xx=sync:12' will allow the driver to negotiate for FAST-20 synchronous data transfer (20 mega-transfers per second). The normal answer therefore is not to go with the default but to select the maximum value 40 allowing the driver to use the maximum value supported by each controller. If this causes problems with your SCSI devices, you should come back and decrease the value. There is no safe option other than using good cabling, right terminations and SCSI conformant devices. use normal IO CONFIG_SCSI_NCR53C8XX_IOMAPPED If you say Y here, the driver will use normal IO, as opposed to memory mapped IO. Memory mapped IO has less latency than normal IO and works for most Intel-based hardware. Under Linux/Alpha only normal IO is currently supported by the driver and so, this option has no effect on those systems. The normal answer therefore is N; try Y only if you encounter SCSI related problems. not allow targets to disconnect CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT This option is only provided for safety if you suspect some SCSI device of yours to not support properly the target-disconnect feature. In that case, you would say Y here. In general however, to not allow targets to disconnect is not reasonable if there is more than 1 device on a SCSI bus. The normal answer therefore is N. default tagged command queue depth CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS "Tagged command queuing" is a feature of SCSI-2 which improves performance: the host adapter can send several SCSI commands to a device's queue even if previous commands haven't finished yet. Some SCSI devices don't implement this properly; if you want to disable this feature, enter 0 or 1 here (it doesn't matter which). The default value is 8 and should be supported by most hard disks. This value can be overridden from the boot command line using the 'tags' option as follows (example): 'ncr53c8xx=tags:4/t2t3q16/t0u2q10' will set default queue depth to 4, set queue depth to 16 for target 2 and target 3 on controller 0 and set queue depth to 10 for target 0 / lun 2 on controller 1. The normal answer therefore is to go with the default 8 and to use a boot command line option for devices that need to use a different command queue depth. There is no safe option other than using good SCSI devices. maximum number of queued commands CONFIG_SCSI_NCR53C8XX_MAX_TAGS This option allows you to specify the maximum number of commands that can be queued to any device, when tagged command queuing is possible. The default value is 32. Minimum is 2, maximum is 64. Modern hard disks are able to support 64 tags and even more, but do not seem to be faster when more than 32 tags are being used. So, the normal answer here is to go with the default value 32 unless you are using very large hard disks with large cache (>= 1 MB) that are able to take advantage of more than 32 tagged commands. There is no safe option and the default answer is recommended. assume boards are SYMBIOS compatible CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT This option allows you to enable some features depending on GPIO wiring. These General Purpose Input/Output pins can be used for vendor specific features or implementation of the standard SYMBIOS features. Genuine SYMBIOS controllers use GPIO0 in output for controller LED and GPIO3 bit as a flag indicating singled-ended/differential interface. The Tekram DC-390U/F boards uses a different GPIO wiring. Your answer to this question is ignored if all your controllers have NVRAM, since the driver is able to detect the board type from the NVRAM format. If all the controllers in your system are genuine SYMBIOS boards or use BIOS and drivers from SYMBIOS, you would want to say Y here, otherwise N. N is the safe answer. enable profiling statistics gathering CONFIG_SCSI_NCR53C8XX_PROFILE This option allows you to enable profiling information gathering. These statistics are not very accurate due to the low frequency of the kernel clock (100 Hz on i386) and have performance impact on systems that use very fast devices. The normal answer therefore is N. include support for the NCR PQS/PDS SCSI card CONFIG_SCSI_NCR53C8XX_PQS_PDS Say Y here if you have a special SCSI adapter produced by NCR corporation called a PCI Quad SCSI or PCI Dual SCSI. You do not need this if you do not have one of these adapters. However, since this device is detected as a specific PCI device, this option is quite safe. The common answer here is N, but answering Y is safe. IBMMCA SCSI support CONFIG_SCSI_IBMMCA This is support for the IBM SCSI adapter found in many of the PS/2 series computers. These machines have an MCA bus, so you need to answer Y to "MCA support" as well and read Documentation/mca.txt. If the adapter isn't found during boot (a common problem for models 56, 57, 76, and 77) you'll need to use the 'ibmmcascsi=' kernel option, where is the id of the SCSI subsystem (usually 7, but if that doesn't work check your reference diskette). Owners of model 95 with a LED-matrix-display can in addition activate some activity info like under OS/2, but more informative, by setting 'ibmmcascsi=display' as an additional kernel parameter. Try "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ibmmca.o. Standard SCSI-order CONFIG_IBMMCA_SCSI_ORDER_STANDARD In the PC-world and in most modern SCSI-BIOS-setups, SCSI-hard disks are assigned to the drive letters, starting with the lowest SCSI-id (physical number -- pun) to be drive C:, as seen from DOS and similar operating systems. When looking into papers describing the ANSI-SCSI-standard, this assignment of drives appears to be wrong. The SCSI-standard follows a hardware-hierarchy which says that id 7 has the highest priority and id 0 the lowest. Therefore, the host adapters are still today everywhere placed as SCSI-id 7 by default. In the SCSI-standard, the drive letters express the priority of the disk. C: should be the hard disk, or a partition on it, with the highest priority. This must therefore be the disk with the highest SCSI-id (e.g. 6) and not the one with the lowest! IBM-BIOS kept the original definition of the SCSI-standard as also industrial- and process-control-machines, like VME-CPUs running under realtime-OSs (e.g. LynxOS, OS9) do. If you like to run Linux on your MCA-machine with the same assignment of hard disks as seen from e.g. DOS or OS/2 on your machine, which is in addition conformant to the SCSI-standard, you must say Y here. This is also necessary for MCA-Linux users who want to keep downward compatibility to older releases of the IBM-MCA-SCSI-driver (older than driver-release 2.00 and older than June 1997). If you like to have the lowest SCSI-id assigned as drive C:, as modern SCSI-BIOSes do, which does not conform to the standard, but is widespread and common in the PC-world of today, you must say N here. If unsure, say Y. Reset SCSI-devices at boot time CONFIG_IBMMCA_SCSI_DEV_RESET By default, SCSI-devices are reset when the machine is powered on. However, some devices exist, like special-control-devices, SCSI-CNC-machines, SCSI-printer or scanners of older type, that do not reset when switched on. If you say Y here, each device connected to your SCSI-bus will be issued a reset-command after it has been probed, while the kernel is booting. This may cause problems with more modern devices, like hard disks, which do not appreciate these reset commands, and can cause your system to hang. So say Y only if you know that one of your older devices needs it; N is the safe answer. NCR 53C9x MCA support CONFIG_SCSI_MCA_53C9X Some Microchannel machines, notably the NCR 35xx line, use a SCSI controller based on the NCR 53C94. This driver will allow use of the controller on the 3550, and very possibly others. If you want to compile this as a module (= code which can be inserted and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called mca_53c9x.o. Always IN2000 SCSI support CONFIG_SCSI_IN2000 This is support for an ISA bus SCSI host adapter. You'll find more information in drivers/scsi/in2000.readme. If it doesn't work out of the box, you may have to change the jumpers for IRQ or address selection. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called in2000.o. Initio 91XXU(W) SCSI support CONFIG_SCSI_INITIO This is support for the Initio 91XXU(W) SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called initio.o PAS16 SCSI support CONFIG_SCSI_PAS16 This is support for a SCSI host adapter. It is explained in section 3.10 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/pas16.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called pas16.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Initio INI-A100U2W SCSI support CONFIG_SCSI_INIA100 This is support for the Initio INI-A100U2W SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called a100u2w.o PCI2000 support CONFIG_SCSI_PCI2000 This is support for the PCI2000I EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module called pci2000.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. PCI2220i support CONFIG_SCSI_PCI2220I This is support for the PCI2220i EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module called pci2220i.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. PSI240i support CONFIG_SCSI_PSI240I This is support for the PSI240i EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module called psi240i.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Qlogic FAS SCSI support CONFIG_SCSI_QLOGIC_FAS This is a driver for the ISA, VLB, and PCMCIA versions of the Qlogic FastSCSI! cards as well as any other card based on the FASXX chip (including the Control Concepts SCSI/IDE/SIO/PIO/FDC cards). This driver does NOT support the PCI versions of these cards. The PCI versions are supported by the Qlogic ISP driver ("Qlogic ISP SCSI support"), below. Information about this driver is contained in drivers/scsi/README.qlogicfas. You should also read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called qlogicfas.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Qlogic ISP SCSI support (EXPERIMENTAL) CONFIG_SCSI_QLOGIC_ISP This driver works for all QLogic PCI SCSI host adapters (IQ-PCI, IQ-PCI-10, IQ_PCI-D) except for the PCI-basic card. (This latter card is supported by the "AM53/79C974 PCI SCSI" driver). If you say Y here, make sure to choose "BIOS" at the question "PCI access mode". Please read the file drivers/scsi/README.qlogicisp. You should also read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called qlogicisp.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Qlogic ISP FC SCSI support CONFIG_SCSI_QLOGIC_FC This is a driver for the QLogic ISP2100 SCSI-FCP host adapter. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called qlogicfc.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Seagate ST-02 and Future Domain TMC-8xx SCSI support CONFIG_SCSI_SEAGATE These are 8-bit SCSI controllers; the ST-01 is also supported by this driver. It is explained in section 3.9 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/seagate.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called seagate.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Trantor T128/T128F/T228 SCSI support CONFIG_SCSI_T128 This is support for a SCSI host adapter. It is explained in section 3.11 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/t128.h. Note that Trantor was purchased by Adaptec, and some former Trantor products are being sold under the Adaptec name. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called t128.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. UltraStor SCSI support CONFIG_SCSI_ULTRASTOR This is support for the UltraStor 14F, 24F and 34F SCSI-2 host adapter family. This driver is explained in section 3.12 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/ultrastor.h. Note that there is also another driver for the same hardware: "UltraStor 14F/34F support", above. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ultrastor.o. 7000FASST SCSI support CONFIG_SCSI_7000FASST This driver supports the Western Digital 7000 SCSI host adapter family. Some information is in the source: drivers/scsi/wd7000.c. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wd7000.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. ACARD SCSI support CONFIG_SCSI_ACARD This driver supports the ACARD 870U/W SCSI host adapter. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called atp870u.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support CONFIG_SCSI_EATA This driver supports all EATA/DMA-compliant SCSI host adapters. DPT ISA and all EISA i/o addresses are probed looking for the "EATA" signature. If you chose "BIOS" at the question "PCI access mode", the addresses of all the PCI SCSI controllers reported by the PCI subsystem are probed as well. You want to read the start of drivers/scsi/eata.c and the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that there is also another driver for the same hardware available: "EATA-DMA support". You should say Y to only one of them. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called eata.o. enable tagged command queuing CONFIG_SCSI_EATA_TAGGED_QUEUE This is a feature of SCSI-2 which improves performance: the host adapter can send several SCSI commands to a device's queue even if previous commands haven't finished yet. Most EATA adapters negotiate this feature automatically with the device, even if your answer is N. The safe answer is N. enable elevator sorting CONFIG_SCSI_EATA_LINKED_COMMANDS This option enables elevator sorting for all probed SCSI disks and CDROMs. It definitely reduces the average seek distance when doing random seeks, but this does not necessarily result in a noticeable performance improvement: your mileage may vary... The safe answer is N. maximum number of queued commands CONFIG_SCSI_EATA_MAX_TAGS This specifies how many SCSI commands can be maximally queued for each probed SCSI device. You should reduce the default value of 16 only if you have disks with buggy or limited tagged command support. Minimum is 2 and maximum is 62. This value is also the window size used by the elevator sorting option above. The effective value used by the driver for each probed SCSI device is reported at boot time. NCR53c406a SCSI support CONFIG_SCSI_NCR53C406A This is support for the NCR53c406a SCSI host adapter. For user configurable parameters, check out drivers/scsi/NCR53c406.c in the kernel source. Also read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called NCR53c406.o. Symbios Logic sym53c416 support CONFIG_SCSI_SYM53C416 This is support for the sym53c416 SCSI host adapter, the SCSI adapter that comes with some HP scanners. This driver requires that the sym53c416 is configured first using some sort of pnp configuration program (e.g. isapnp) or by a PnP aware BIOS. If you are using isapnp then you need to compile this driver as a module and then load it using insmod after isapnp has run. The parameters of the configured card(s) should be passed to the driver. The format is: insmod sym53c416 sym53c416=, [sym53c416_1=,] There is support for up to four adapters. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called sym53c416.o. Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support CONFIG_SCSI_DC390T This driver supports PCI SCSI host adapters based on the Am53C974A chip, e.g. Tekram DC390(T), DawiControl 2974 and some onboard PCscsi/PCnet (Am53/79C974) solutions. Documentation can be found in linux/drivers/scsi/README.tmscsim. Note that this driver does NOT support Tekram DC390W/U/F, which are based on NCR/Symbios chips. Use "NCR53C8XX SCSI support" for those. Also note that there is another generic Am53C974 driver, "AM53/79C974 PCI SCSI support" below. You can pick either one. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called tmscsim.o. Omit support for other Am53/79C974 based SCSI adapters CONFIG_SCSI_DC390T_NOGENSUPP If you say N here, the DC390(T) SCSI driver relies on the DC390 EEPROM to get initial values for its settings, such as speed, termination, etc. If it can't find this EEPROM, it will use defaults or the user supplied boot/module parameters. For details on driver configuration see linux/drivers/scsi/README.tmscsim. If you say Y here and if no EEPROM is found, the driver gives up and thus only supports Tekram DC390(T) adapters. This can be useful if you have a DC390(T) and another Am53C974 based adapter, which, for some reason, you want to drive with the other AM53C974 driver. If unsure, say N. AM53/79C974 PCI SCSI support CONFIG_SCSI_AM53C974 This is support for the AM53/79C974 SCSI host adapters. Please read drivers/scsi/README.AM53C974 for details. Also, the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, is for you. Note that there is another driver for AM53C974 based adapters: "Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support", above. You can pick either one. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called AM53C974.o. AMI MegaRAID support CONFIG_SCSI_MEGARAID This driver supports the AMI MegaRAID 418, 428, 438, 466, 762, 490 and 467 SCSI host adapters. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called megaraid.o. ### ### What is this? ### #Concurrent IO commands on MegaRAID #CONFIG_MEGARAID_MULTI_IO GDT SCSI Disk Array Controller support CONFIG_SCSI_GDTH This is a driver for all SCSI Disk Array Controllers (EISA/ISA/PCI) manufactured by ICP vortex. It is documented in the kernel source in drivers/scsi/gdth.c and drivers/scsi/gdth.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. IOMEGA parallel port (ppa - older drives) CONFIG_SCSI_PPA This driver supports older versions of IOMEGA's parallel port ZIP drive (a 100 MB removable media device). Note that you can say N here if you have the SCSI version of the ZIP drive: it will be supported automatically if you said Y to the generic "SCSI disk support", above. If you have the ZIP Plus drive or a more recent parallel port ZIP drive (if the supplied cable with the drive is labeled "AutoDetect") then you should say N here and Y to "IOMEGA parallel port (imm - newer drives)", below. For more information about this driver and how to use it you should read the file drivers/scsi/README.ppa. You should also read the SCSI-HOWTO, which is available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you use this driver, you will still be able to use the parallel port for other tasks, such as a printer; it is safe to compile both drivers into the kernel. This driver is also available as a module which can be inserted in and removed from the running kernel whenever you want. To compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called ppa.o. IOMEGA parallel port (imm - newer drives) CONFIG_SCSI_IMM This driver supports newer versions of IOMEGA's parallel port ZIP drive (a 100 MB removable media device). Note that you can say N here if you have the SCSI version of the ZIP drive: it will be supported automatically if you said Y to the generic "SCSI disk support", above. If you have the ZIP Plus drive or a more recent parallel port ZIP drive (if the supplied cable with the drive is labeled "AutoDetect") then you should say Y here; if you have an older ZIP drive, say N here and Y to "IOMEGA Parallel Port (ppa - older drives)", above. For more information about this driver and how to use it you should read the file drivers/scsi/README.ppa. You should also read the SCSI-HOWTO, which is available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you use this driver, you will still be able to use the parallel port for other tasks, such as a printer; it is safe to compile both drivers into the kernel. This driver is also available as a module which can be inserted in and removed from the running kernel whenever you want. To compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called imm.o. Force the Iomega ZIP drivers to use EPP-16 CONFIG_SCSI_IZIP_EPP16 EPP (Enhanced Parallel Port) is a standard for parallel ports which allows them to act as expansion buses that can handle up to 64 peripheral devices. Some parallel port chipsets are slower than their motherboard, and so we have to control the state of the chipset's FIFO queue every now and then to avoid data loss. This will be done if you say Y here. Generally, saying Y is the safe option and slows things down a bit. Assume slow parallel port control register CONFIG_SCSI_IZIP_SLOW_CTR Some parallel ports are known to have excessive delays between changing the parallel port control register and good data being available on the parallel port data/status register. This option forces a small delay (1.0 usec to be exact) after changing the control register to let things settle out. Enabling this option may result in a big drop in performance but some very old parallel ports (found in 386 vintage machines) will not work properly. Generally, saying N is fine. SCSI Debug host simulator. CONFIG_SCSI_DEBUG This is a host adapter simulator that can be programmed to simulate a large number of conditions that could occur on a real bus. The advantage is that many hard to reproduce problems can be tested in a controlled environment where there is reduced risk of losing important data. This is primarily of use to people trying to debug the middle and upper layers of the SCSI subsystem. If unsure, say N. Fibre Channel support CONFIG_FC4 This is an experimental support for storage arrays connected to the system using Fibre Optic and the "X3.269-199X Fibre Channel Protocol for SCSI" specification. You'll also need the generic SCSI support, as well as the drivers for the storage array itself and for the interface adapter such as SOC. This subsystem could even serve for IP networking, with some code extensions. If unsure, say N. Sun SOC CONFIG_FC4_SOC Serial Optical Channel is an interface card with one or two Fibre Optic ports, each of which can be connected to a disk array. Only the SBus incarnation of the adapter is supported at the moment. SparcSTORAGE Array 100 and 200 series CONFIG_SCSI_PLUTO If you never bought a disk array made by Sun, go with N. AcornSCSI support CONFIG_SCSI_ACORNSCSI_3 This enables support for the Acorn SCSI card (aka30). If you have an Acorn system with one of these, say Y. If unsure, say N. Acorn SCSI tagged queue support CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE Say Y here to enable tagged queuing support on the Acorn SCSI card. This is a feature of SCSI-2 which improves performance: the host adapter can send several SCSI commands to a device's queue even if previous commands haven't finished yet. Some SCSI devices don't implement this properly, so the safe answer is N. Acorn SCSI Synchronous transfers support CONFIG_SCSI_ACORNSCSI_SYNC Say Y here to enable synchronous transfer negotiation with all targets on the Acorn SCSI card. In general, this improves performance; however some SCSI devices don't implement it properly, so the safe answer is N. Oak SCSI support CONFIG_SCSI_OAK1 This enables support for the Oak SCSI card. If you have an Acorn system with one of these, say Y. If unsure, say N. Cumana SCSI I support CONFIG_SCSI_CUMANA_1 This enables support for the Cumana SCSI I card. If you have an Acorn system with one of these, say Y. If unsure, say N. Cumana SCSI II support CONFIG_SCSI_CUMANA_2 This enables support for the Cumana SCSI II card. If you have an Acorn system with one of these, say Y. If unsure, say N. EcoSCSI support CONFIG_SCSI_ECOSCSI This enables support for the EcoSCSI card -- a small card that sits in the Econet socket. If you have an Acorn system with one of these, say Y. If unsure, say N. EESOX SCSI support CONFIG_SCSI_EESOXSCSI This enables support for the EESOX SCSI card. If you have an Acorn system with one of these, say Y, otherwise say N. Powertec SCSI support CONFIG_SCSI_POWERTECSCSI This enables support for the Powertec SCSI card on Acorn systems. If you have one of these, say Y. If unsure, say N. Network device support? CONFIG_NETDEVICES You can say N here if you don't intend to connect your Linux box to any other computer at all or if all your connections will be over a telephone line with a modem either via UUCP (UUCP is a protocol to forward mail and news between unix hosts over telephone lines; read the UUCP-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO) or dialing up a shell account or a BBS, even using term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer. Read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)). You'll have to say Y if your computer contains a network card that you want to use under Linux (make sure you know its name because you will be asked for it and read the Ethernet-HOWTO (especially if you plan to use more than one network card under Linux), available from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini) or if you want to use SLIP (Serial Line Internet Protocol is the protocol used to send Internet traffic over telephone lines or null modem cables) or CSLIP (compressed SLIP) or PPP (Point to Point Protocol, a better and newer replacement for SLIP) or PLIP (Parallel Line Internet Protocol is mainly used to create a mini network by connecting the parallel ports of two local machines) or AX.25/KISS (protocol for sending Internet traffic over amateur radio links). Make sure to read the NET-3-HOWTO. Eventually, you will have to read Olaf Kirch's excellent and free book "Network Administrator's Guide", to be found in ftp://metalab.unc.edu/pub/Linux/docs/LDP. If unsure, say Y. Dummy net driver support CONFIG_DUMMY This is essentially a bit-bucket device (i.e. traffic you send to this device is consigned into oblivion) with a configurable IP address. It is most commonly used in order to make your currently inactive SLIP address seem like a real address for local programs. If you use SLIP or PPP, you might want to say Y here. Read about it in the Network Administrator's Guide, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/LDP. Since this thing often comes in handy, the default is Y. It won't enlarge your kernel either. What a deal. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called dummy.o. If you want to use more than one dummy device at a time, you need to compile this driver as a module. Instead of 'dummy', the devices will then be called 'dummy0', 'dummy1' etc. SLIP (serial line) support CONFIG_SLIP Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to connect to your Internet service provider or to connect to some other local Unix box or if you want to configure your Linux box as a Slip/CSlip server for other people to dial in. SLIP (Serial Line Internet Protocol) is a protocol used to send Internet traffic over serial connections such as telephone lines or null modem cables; nowadays, the protocol PPP is more commonly used for this same purpose. Normally, your access provider has to support SLIP in order for you to be able to use it, but there is now a SLIP emulator called SLiRP around (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/ ) which allows you to use SLIP over a regular dial up shell connection. If you plan to use SLiRP, make sure to say Y to CSLIP, below. The NET-3-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, explains how to configure SLIP. Note that you don't need this option if you just want to run term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer. Read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)). SLIP support will enlarge your kernel by about 4 KB. If unsure, say N. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called slip.o. CSLIP compressed headers CONFIG_SLIP_COMPRESSED This protocol is faster than SLIP because it uses compression on the TCP/IP headers (not on the data itself), but it has to be supported on both ends. Ask your access provider if you are not sure and answer Y, just in case. You will still be able to use plain SLIP. If you plan to use SLiRP, the SLIP emulator (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/) which allows you to use SLIP over a regular dial up shell connection, you definitely want to say Y here. The NET-3-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, explains how to configure CSLIP. This won't enlarge your kernel. Keepalive and linefill CONFIG_SLIP_SMART Adds additional capabilities to the SLIP driver to support the RELCOM line fill and keepalive monitoring. Ideal on poor quality analogue lines. Six bit SLIP encapsulation CONFIG_SLIP_MODE_SLIP6 Just occasionally you may need to run IP over hostile serial networks that don't pass all control characters or are only seven bit. Saying Y here adds an extra mode you can use with SLIP: "slip6". In this mode, SLIP will only send normal ASCII symbols over the serial device. Naturally, this has to be supported at the other end of the link as well. It's good enough, for example, to run IP over the async ports of a Camtec JNT Pad. If unsure, say N. PPP (point-to-point) support CONFIG_PPP PPP (Point to Point Protocol) is a newer and better SLIP. It serves the same purpose: sending Internet traffic over telephone (and other serial) lines. Ask your access provider if they support it, because otherwise you can't use it (not quite true any more: the free program SLiRP can emulate a PPP line if you just have a regular dial up shell account on some UNIX computer; get it via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/). Note that you don't need "PPP support" if you just want to run term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected UNIX computer. Read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)). To use PPP, you need an additional program called pppd as described in Documentation/networking/ppp.txt and in the PPP-HOWTO, available from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you upgrade from an older kernel, you might need to upgrade pppd as well. The PPP option enlarges your kernel by about 16 KB. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you said Y to "Version information on all symbols" above, then you cannot compile the PPP driver into the kernel; you can then only compile it as a module. The module will be called ppp.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Note that, no matter what you do, the BSD compression code (used to compress the IP packets sent over the serial line; has to be supported at the other end as well) will always be compiled as a module; it is called bsd_comp.o and will show up in the directory modules once you have said "make modules". If unsure, say N. Wireless LAN (non-hamradio) CONFIG_NET_RADIO Support for wireless LANs and everything having to do with radio, but not with amateur radio. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about radio interfaces. Some user-level drivers for scarab devices which don't require special kernel support are available via FTP (user: anonymous) from ftp://shadow.cabi.net/pub/Linux. STRIP (Metricom Starmode radio IP) CONFIG_STRIP Say Y if you have a Metricom radio and intend to use Starmode Radio IP. STRIP is a radio protocol developed for the MosquitoNet project (On the WWW at http://mosquitonet.stanford.edu/; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) to send Internet traffic using Metricom radios. Metricom radios are small, battery powered, 100kbit/sec packet radio transceivers, about the size and weight of a cellular telephone. (You may also have heard them called "Metricom modems" but we avoid the term "modem" because it misleads many people into thinking that you can plug a Metricom modem into a phone line and use it as a modem.) You can use STRIP on any Linux machine with a serial port, although it is obviously most useful for people with laptop computers. If you think you might get a Metricom radio in the future, there is no harm in saying Y to STRIP now, except that it makes the kernel a bit bigger. You can also compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called strip.o. AT&T WaveLAN & DEC RoamAbout DS support CONFIG_WAVELAN The Lucent WaveLAN (formerly NCR and AT&T; or DEC RoamAbout DS) is a Radio LAN (wireless Ethernet-like Local Area Network) using the radio frequencies 900 MHz and 2.4 GHz. This driver support the ISA version of the WaveLAN card. A separate driver for the PCMCIA (PC-card) hardware is available in David Hinds' pcmcia-cs package (see the file Documentation/Changes for location). If you want to use an ISA WaveLAN card under Linux, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Some more specific information is contained in Documentation/networking/wavelan.txt and in the source code drivers/net/wavelan.p.h. You will also need the wireless tools package available from ftp://ftp.inka.de/pub/comp/Linux/networking/NetTools/contrib/. Please read the man pages contained therein. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wavelan.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Aironet Arlan 655 & IC2200 DS support CONFIG_ARLAN Aironet makes Arlan. www.aironet.com. Uses www.Telxon.com chip, which is used on several similar cards. Driver is tested on 655 and IC2200 series. Look for http://www.ylenurme.ee/~elmer/655/ for latest information. Driver is build as two modules, arlan and arlan-proc. The later is /proc interface and not needed most of time. On some computers the card ends up in non-valid state after some time. Use a ping-reset script to clear it. LAPB over Ethernet driver CONFIG_LAPBETHER This is a driver for a pseudo device (typically called /dev/lapb0) which allows you to open an LAPB point-to-point connection to some other computer on your Ethernet network. In order to do this, you need to say Y or M to the driver for your Ethernet card as well as to "LAPB Data Link Driver". If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called lapbether.o. If unsure, say N. X.25 async driver CONFIG_X25_ASY This is a driver for sending and receiving X.25 frames over regular asynchronous serial lines such as telephone lines equipped with ordinary modems. Experts should note that this driver doesn't currently comply with the asynchronous HDLS framing protocols in CCITT recommendation X.25. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called x25_asy.o. If unsure, say N. Shortwave radio modem driver CONFIG_HFMODEM This experimental driver is used by a package (to be released) that implements the shortwave radio protocols RTTY, Sitor (Amtor), Pactor 1 and GTOR using a standard PC sound card. If unsure, say N. Shortwave radio modem driver support for Sound Blaster and compatible cards CONFIG_HFMODEM_SBC This option enables the hfmodem driver to use Sound Blaster and compatible cards. It requires a 16bit capable card, i.e. SB16 or better, or ESS1688 or newer. Shortwave radio modem driver support for WSS and Crystal cards CONFIG_HFMODEM_WSS This option enables the hfmodem driver to use WindowsSoundSystem compatible cards. These cards feature a codec chip from either Analog Devices (such as AD1848, AD1845) or Crystal Semiconductors (such as CS4248, CS423x). PLIP (parallel port) support CONFIG_PLIP PLIP (Parallel Line Internet Protocol) is used to create a reasonably fast mini network consisting of two (or, rarely, more) local machines. A PLIP link from a Linux box is a popular means to install a Linux distribution on a machine which doesn't have a CDROM drive (a minimal system has to be transferred with floppies first). The kernels on both machines need to have this PLIP option enabled for this to work. The PLIP driver has two modes, mode 0 and mode 1. The parallel ports (the connectors at the computers with 25 holes) are connected with "null printer" or "Turbo Laplink" cables which can transmit 4 bits at a time (mode 0) or with special PLIP cables, to be used on bidirectional parallel ports only, which can transmit 8 bits at a time (mode 1); you can find the wiring of these cables in Documentation/networking/PLIP.txt. The cables can be up to 15m long. Mode 0 works also if one of the machines runs DOS/Windows and has some PLIP software installed, e.g. the Crynwr PLIP packet driver (http://oak.oakland.edu/simtel.net/msdos/pktdrvr-pre.html; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and winsock or NCSA's telnet. If you want to use PLIP, say Y and read the PLIP mini-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini as well as the NET-3-HOWTO in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the PLIP protocol was changed and this PLIP driver won't work together with the PLIP support in Linux versions 1.0.x. This option enlarges your kernel by about 8 KB. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called plip.o. If unsure, say Y or M, in case you buy a laptop later. EQL (serial line load balancing) support CONFIG_EQUALIZER If you have two serial connections to some other computer (this usually requires two modems and two telephone lines) and you use SLIP (the protocol for sending Internet traffic over telephone lines) or PPP (a better SLIP) on them, you can make them behave like one double speed connection using this driver. Naturally, this has to be supported at the other end as well, either with a similar EQL Linux driver or with a Livingston Portmaster 2e. Say Y if you want this and read Documentation/networking/eql.txt. You may also want to read section 6.2 of the NET-3-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eql.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Ethertap network tap CONFIG_ETHERTAP If you say Y here (and have said Y to "Kernel/User network link driver", above) and create a character special file /dev/tap0 with major number 36 and minor number 16 using mknod ("man mknod"), you will be able to have a user space program read and write raw Ethernet frames from/to that special file. tap0 can be configured with ifconfig and route like any other Ethernet device but it is not connected to any physical LAN; everything written by the user to /dev/tap0 is treated by the kernel as if it had come in from a LAN to the device tap0; everything the kernel wants to send out over the device tap0 can instead be read by the user from /dev/tap0: the user mode program replaces the LAN that would be attached to an ordinary Ethernet device. Please read the file Documentation/networking/ethertap.txt for more information. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ethertap.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you don't know what to use this for, you don't need it. Sealevel Systems 4021 support CONFIG_SEALEVEL_4021 This is a driver for the Sealevel Systems ACB 56 serial I/O adapter. This driver can only be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to do that, say M here. The module will be called sealevel.o. Frame Relay (DLCI) support CONFIG_DLCI This is support for the frame relay protocol; frame relay is a fast low-cost way to connect to a remote Internet access provider or to form a private wide area network. The one physical line from your box to the local "switch" (i.e. the entry point to the frame relay network, usually at the phone company) can carry several logical point-to-point connections to other computers connected to the frame relay network. For a general explanation of the protocol, check out http://www.frforum.com/ on the WWW. (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape.) To use frame relay, you need supporting hardware (called FRAD) and certain programs from the net-tools package as explained in Documentation/networking/framerelay.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dlci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Max open DLCI CONFIG_DLCI_COUNT This is the maximal number of logical point-to-point frame relay connections (the identifiers of which are called DCLIs) that the driver can handle. The default is probably fine. Max DLCI per device CONFIG_DLCI_MAX You can specify here how many logical point-to-point frame relay connections (the identifiers of which are called DCLIs) should be handled by each of your hardware frame relay access devices. Go with the default. Sangoma S502A FRAD support CONFIG_SDLA Say Y here if you need a driver for the Sangoma S502A, S502E, and S508 Frame Relay Access Devices. These are multi-protocol cards, but only frame relay is supported by the driver at this time. Please read Documentation/framerelay.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sdla.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Acorn Econet/AUN protocols (EXPERIMENTAL) CONFIG_ECONET Econet is a fairly old and slow networking protocol mainly used by Acorn computers to access file and print servers. It uses native Econet network cards. AUN is an implementation of the higher level parts of Econet that runs over ordinary Ethernet connections, on top of the UDP packet protocol, which in turn runs on top of the Internet protocol IP. If you say Y here, you can choose with the next two options whether to send Econet/AUN traffic over a UDP Ethernet connection or over a native Econet network card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called econet.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AUN over UDP CONFIG_ECONET_AUNUDP Say Y here if you want to send Econet/AUN traffic over a UDP connection (UDP is a packet based protocol that runs on top of the Internet protocol IP) using an ordinary Ethernet network card. Native Econet CONFIG_ECONET_NATIVE Say Y here if you have a native Econet network card installed in your computer. WAN Router CONFIG_WAN_ROUTER Wide Area Networks (WANs), such as X.25, frame relay and leased lines, are used to interconnect Local Area Networks (LANs) over vast distances with data transfer rates significantly higher than those achievable with commonly used asynchronous modem connections. Usually, a quite expensive external device called a `WAN router' is needed to connect to a WAN. As an alternative, WAN routing can be built into the Linux kernel. With relatively inexpensive WAN interface cards available on the market, a perfectly usable router can be built for less than half the price of an external router. If you have one of those cards and wish to use your Linux box as a WAN router, say Y here and also to the WAN driver for your card, below. You will then need the wan-tools package which is available via FTP (user: anonymous) from ftp://ftp.sangoma.com. Read Documentation/networking/wan-router.txt for more information. The WAN routing support is only available as a module called wanrouter.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Fast switching (read help!) CONFIG_NET_FASTROUTE Saying Y here enables direct NIC-to-NIC (NIC = Network Interface Card) data transfers, which is fast. *** This option is NOT COMPATIBLE with several important *** *** networking options: especially CONFIG*FIREWALL. *** *** Say N here if you intend to use Linux as a firewall. *** However, it will work with all options in CONFIG_IP_ADVANCED_ROUTER section (except for CONFIG_IP_ROUTE_TOS and CONFIG_IP_ROUTE_FWMARK). At the moment, few devices support fast switching (tulip is one of them, modified 8390 can be found at ftp://ftp.inr.ac.ru/ip-routing/fastroute/fastroute-8390.tar.gz). If unsure, say N. Forwarding between high speed interfaces CONFIG_NET_HW_FLOWCONTROL This option enables NIC (Network Interface Card) hardware throttling during periods of extremal congestion. At the moment only a couple of device drivers support it (really only one -- tulip, modified 8390 can be found at ftp://ftp.inr.ac.ru/ip-routing/fastroute/fastroute-8390.tar.gz). Really, this option is applicable to any machine attached to a fast enough network, and even a 10 Mb NIC is able to kill a not very slow box, such as a 120MHz Pentium. However, do not say Y here if you did not experience any serious problems. CPU is too slow to handle full bandwidth CONFIG_CPU_IS_SLOW If you suspect that your CPU is not fast enough to handle the full bandwidth of your network connection, try saying Y here. If unsure, say N. QoS and/or fair queueing CONFIG_NET_SCHED When the kernel has several packets to send out over the network devices, it has to make a decision which one to send first. This is especially important if some of the network devices are real time devices that need a certain minimum data flow rate. There are several different algorithms for how to do this "fairly"; they are called packet schedulers. If you want to stick to the default scheduling algorithm, say N here. If you want to experiment with a couple of different algorithms, say Y. You can then attach different schedulers to different network devices. Currently, this is only recommended for experts. To administer these schedulers, you'll need the user-level utilities from the package iproute2+tc at ftp://ftp.inr.ac.ru/ip-routing/ If you say Y here and to "/proc filesystem" below, you will be able to read status information about priority schedulers from the file /proc/net/psched. The available schedulers are listed in the following questions; you can say Y to as many as you like. If unsure, say N now. CBQ packet scheduler CONFIG_NET_SCH_CBQ Say Y here if you want to use the Class-Based Queueing (CBQ) packet scheduling algorithm for some of your network devices. This algorithm classifies the waiting packets into a tree-like hierarchy of classes; the leaves of this tree are in turn scheduled by separate algorithms (called "disciplines" in this context) which you can choose below from among the various queueing algorithms. See the top of net/sched/sch_cbq.c for references about the CBQ algorithm. This code is also available as a module called sch_cbq.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. CSZ packet scheduler CONFIG_NET_SCH_CSZ Say Y here if you want to use the Clark-Shenker-Zhang (CSZ) packet scheduling algorithm for some of your network devices. At the moment, this is the only algorithm that can guarantee service for real-time applications (see the top of net/sched/sch_csz.c for details and references about the algorithm). Note: this scheduler is currently broken. This code is also available as a module called sch_csz.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The simplest PRIO pseudo scheduler CONFIG_NET_SCH_PRIO Say Y here if you want to use an n-band priority queue packet "scheduler" for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm. This code is also available as a module called sch_prio.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. RED queue CONFIG_NET_SCH_RED Say Y here if you want to use the Random Early Detection (RED) packet scheduling algorithm for some of your network devices (see the top of net/sched/sch_red.c for details and references about the algorithm). This code is also available as a module called sch_red.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. SFQ queue CONFIG_NET_SCH_SFQ Say Y here if you want to use the Stochastic Fairness Queueing (SFQ) packet scheduling algorithm for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm (see the top of net/sched/sch_sfq.c for details and references about the SFQ algorithm). This code is also available as a module called sch_sfq.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. TEQL queue CONFIG_NET_SCH_TEQL Say Y here if you want to use the True Link Equalizer (TLE) packet scheduling algorithm for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm. This queueing discipline allows the combination of several physical devices into one virtual device. (see the top of net/sched/sch_teql.c for details). This code is also available as a module called sch_teql.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. TBF queue CONFIG_NET_SCH_TBF Say Y here if you want to use the Simple Token Bucket Filter (TBF) packet scheduling algorithm for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm (see the top of net/sched/sch_tbf.c for a description of the TBF algorithm). This code is also available as a module called sch_tbf.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. QoS support CONFIG_NET_QOS Say Y here if you want to include Quality Of Service scheduling features, which means that you will be able to request certain rate-of-flow limits for your net devices. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about QoS support. Rate estimator CONFIG_NET_ESTIMATOR In order for Quality of Service scheduling to work, the current rate-of-flow for a network device has to be estimated; if you say Y here, the kernel will do just that. Packet classifier API CONFIG_NET_CLS The CBQ scheduling algorithm requires that network packets which are scheduled to be sent out over a network device be classified in some way. If you say Y here, you will get a choice of several different packet classifiers with the following questions. # # Routing tables based classifier # CONFIG_NET_CLS_ROUTE # # Firewall based classifier # CONFIG_NET_CLS_FW # # U32 classifier # CONFIG_NET_CLS_U32 # # Special RSVP classifier # CONFIG_NET_CLS_RSVP # # Special RSVP classifier for IPv6 # CONFIG_NET_CLS_RSVP6 # # Ingres traffic policing # CONFIG_NET_CLS_POLICE ### ### Some expert please fill these in ### Network code profiler CONFIG_NET_PROFILE If you say Y here and to "/proc filesystem support" below, some obscure and undocumented information about the network code's performance will be written to /proc/net/profile. If you don't know what it is about, you don't need it: say N. Comtrol Hostess SV-11 support CONFIG_HOSTESS_SV11 This is a network card for low speed synchronous serial links, at up to 256Kbps. It supports both PPP and Cisco HDLC. At this point, the driver can only be compiled as a module. COSA/SRP sync serial boards support CONFIG_COSA This is a driver for COSA and SRP synchronous serial boards. These boards allow to connect synchronous serial devices (for example base-band modems, or any other device with the X.21, V.24, V.35 or V.36 interface) to your Linux box. The cards can work as the character device, synchronous PPP network device, or the Cisco HDLC network device. To actually use the COSA or SRP board, you will need user-space utilities for downloading the firmware to the cards and to set them up. Look at the http://www.fi.muni.cz/~kas/cosa/ for more information about the cards (including the pointer to the user-space utilities). You can also read the comment at the top of the drivers/net/cosa.c for details about the cards and the driver itself. The driver will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cosa.o. For general information about modules read Documentation/modules.txt. Red Creek Hardware VPN (EXPERIMENTAL) CONFIG_RCPCI This is a driver for hardware which provides a Virtual Private Network (VPN). Say Y if you have it. This code is also available as a module called rcpci.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. SBNI Leased Line Adapters CONFIG_SBNI This is a driver for ISA SBNI12-xx cards that is a low cost alternative to leased line modems. Say Y if you want to insert driver into kernel or say M to compile driver as a module. You can find more information and last versions of drivers and utilities at http://www.granch.ru. If you have any question you can mail to sbni@granch.ru. Say N if unsure. WAN Drivers CONFIG_WAN_DRIVERS Say Y to this option if your Linux box contains a WAN card and you are planning to use the box as a WAN ( = Wide Area Network) router ( = device used to interconnect local area networks over wide area communication links, such as leased lines or public data networks, e.g. X.25 or frame relay) and you will be offered a list of drivers for WAN cards currently available. For more information, read Documentation/networking/wan-router.txt. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about WAN card drivers. If unsure, say N. Sangoma WANPIPE(tm) multiprotocol cards CONFIG_VENDOR_SANGOMA WANPIPE from Sangoma Technologies Inc. (http://www.sangoma.com; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) is a family of intelligent multiprotocol WAN adapters with data transfer rates up to T1 (1.544 Mbps). They are also known as Synchronous Data Link Adapters (SDLA) and designated S503 or S508. These cards support the X.25, Frame Relay, PPP, Cisco HDLC protocols. The driver also offers API support for protocols like HDLC (LAPB), HDLC Streaming and BiSync. If you have one or more of these cards, say M to this option; you may then also want to read the file Documentation/networking/wanpipe.txt. The next questions will ask you about the protocols you want the driver to support. The driver will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wanpipe.o. For general information about modules read Documentation/modules.txt. Maximum number of cards CONFIG_WANPIPE_CARDS Enter number of WANPIPE adapters installed in your machine. The driver can support up to 8 cards. You may enter more than you actually have if you plan to add more cards in the future without re-compiling the driver, but remember that in this case you'll waste some kernel memory (about 1K per card). WANPIPE X.25 support CONFIG_WANPIPE_X25 Say Y to this option if you are planning to connect a WANPIPE card to an X.25 network. If you say N, the X.25 support will not be included in the driver. The X.25 option is ONLY supported on S508 cards. WANPIPE Frame Relay support CONFIG_WANPIPE_FR Say Y to this option if you are planning to connect a WANPIPE card to a frame relay network. If you say N, the frame relay support will not be included in the driver. The Frame Relay option is ONLY supported on S508 cards. WANPIPE PPP support CONFIG_WANPIPE_PPP Say Y to this option if you are planning to connect a WANPIPE card to a leased line using Point-to-Point protocol (PPP). If you say N, the PPP support will not be included in the driver. The PPP option is ONLY supported on S508 cards. WANPIPE Cisco HDLC support CONFIG_WANPIPE_CHDLC Say Y to this option if you are planning to connect a WANPIPE card to a leased line using the Cisco HDLC protocol. This now supports Dual Port Cisco HDLC on the S508 card ONLY. This support also allows user to build applications using the HDLC streaming API. If you say N, the Cisco HDLC support and HDLC streaming API will not be included in the driver. MultiGate/COMX support CONFIG_COMX Say Y if you want to use any board from the MultiGate (COMX) family. These boards are synchronous serial adapters for the PC, manufactured by ITConsult-Pro Co, Hungary. Read linux/Documentation/networking/comx.txt for help on configuring and using COMX interfaces. Further info on these cards can be found at http://www.itc.hu or . If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx.o. COMX/CMX/HiCOMX board support CONFIG_COMX_HW_COMX Hardware driver for the 'CMX', 'COMX' and 'HiCOMX' boards from the MultiGate family. Say Y if you have one of these. You will need additional firmware to use these cards, which are downloadable from ftp://ftp.itc.hu/. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-hw-comx.o. LoCOMX board support CONFIG_COMX_HW_LOCOMX Hardware driver for the 'LoCOMX' board from the MultiGate family. Say Y if you have a board like this. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-hw-locomx.o. MixCOM board support CONFIG_COMX_HW_MIXCOM Hardware driver for the 'MixCOM' board from the MultiGate family. Say Y if you have a board like this. If you want to use the watchdog device on this card, you should select it in the Watchdog Cards section of the Character Devices configuration. The ISDN interface of this card is Teles 16.3 compatible, you should enable it in the ISDN configuration menu. The driver for the flash ROM of this card is available separately on ftp://ftp.itc.hu/. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-hw-mixcom.o. MultiGate Cisco-HDLC and synchronous PPP protocol support CONFIG_COMX_PROTO_PPP Cisco-HDLC and synchronous PPP protocol driver for all MultiGate boards. Say Y if you want to use either protocol on your MultiGate boards. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-proto-ppp.o. MultiGate LAPB protocol support CONFIG_COMX_PROTO_LAPB LAPB protocol driver for all MultiGate boards. Say Y if you want to use this protocol on your MultiGate boards. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-proto-lapb.o. MultiGate Frame Relay protocol support CONFIG_COMX_PROTO_FR Frame Relay protocol driver for all MultiGate boards. Say Y if you want to use this protocol on your MultiGate boards. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-proto-fr.o. Ethernet (10 or 100Mbit) CONFIG_NET_ETHERNET Ethernet (also called IEEE 802.3 or ISO 8802-2) is the most common type of Local Area Network (LAN) in universities and companies. Common varieties of Ethernet are: 10BASE-2 or Thinnet (10 Mbps over coaxial cable, linking computers in a chain), 10BASE-T or twisted pair (10 Mbps over twisted pair cable, linking computers to central hubs), 10BASE-F (10 Mbps over optical fiber links, using hubs), 100BASE-TX (100 Mbps over two twisted pair cables, using hubs), 100BASE-T4 (100 Mbps over 4 standard voice-grade twisted pair cables, using hubs), 100BASE-FX (100 Mbps over optical fiber links) [the 100BASE varieties are also known as Fast Ethernet], and Gigabit Ethernet (1 Gbps over optical fiber or short copper links). If your Linux machine will be connected to an Ethernet and you have an Ethernet network interface card (NIC) installed in your computer, say Y here and read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You will then also have to say Y to the driver for your particular NIC. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about Ethernet network cards. If unsure, say N. Sun LANCE Ethernet support CONFIG_SUN_LANCE This is support for lance Ethernet cards on Sun workstations such as the SPARCstation IPC (any SPARC with a network interface 'le0' under SunOS basically). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called lance.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sun Intel Ethernet support CONFIG_SUN_INTEL This is support for the Intel Ethernet cards on some Sun workstations (all those with a network interface 'ie0' under SunOS). Western Digital/SMC cards CONFIG_NET_VENDOR_SMC If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about Western Digital cards. If you say Y, you will be asked for your specific card in the following questions. WD80*3 support CONFIG_WD80x3 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC Ultra MCA support CONFIG_ULTRAMCA If you have a network (Ethernet) card of this type and are running an MCA based system (PS/2), say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc-mca.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC Ultra support CONFIG_ULTRA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Important: There have been many reports that, with some motherboards mixing an SMC Ultra and an Adaptec AHA154x SCSI card (or compatible, such as some BusLogic models) causes corruption problems with many operating systems. The Linux smc-ultra driver has a work-around for this but keep it in mind if you have such a SCSI card and have problems. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc-ultra.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC Ultra32 EISA support CONFIG_ULTRA32 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc-ultra32.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC 9194 Support CONFIG_SMC9194 This is support for the SMC9xxx based Ethernet cards. Choose this option if you have a DELL laptop with the docking station, or another SMC9192/9194 based chipset. Say Y if you want it compiled into the kernel, and read the file Documentation/networking/smc9.txt and the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc9194.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. PCI NE2000 support CONFIG_NE2K_PCI This driver is for NE2000 compatible PCI cards. It will not work with ISA NE2000 cards (they have their own driver, "NE2000/NE1000 support" below). If you have a PCI NE2000 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne2k-pci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. PCI DM9102 support CONFIG_DM9102 This driver is for DM9102 compatible PCI cards from Davicom (http://www.davicom.com.tw) If you have a PCI DM9102 network (Ethernet) card, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dmfe.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Racal-Interlan (Micom) NI cards CONFIG_NET_VENDOR_RACAL If you have a network (Ethernet) card belonging to this class, such as the NI5010, NI5210 or NI6210, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about NI cards. If you say Y, you will be asked for your specific card in the following questions. NI5010 support CONFIG_NI5010 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that this is still experimental code. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ni5010.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. NI5210 support CONFIG_NI52 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ni52.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. NI6510 support CONFIG_NI65 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ni65.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. RealTek 8129/8139 (not 8019/8029!) support CONFIG_RTL8139 This is a driver for the Fast Ethernet PCI network cards based on the RTL8129 and RTL8139 chips. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called rtl8139.o. SiS 900/7016 support CONFIG_SIS900 This is a driver for the Fast Ethernet PCI network cards based on the SiS 900 and SiS 7016 chips. The SiS 900 core is also embedded in SiS 630 and SiS 540 chipsets. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Please read Documentation/networking/sis900.txt and comments at the beginning of drivers/net/sis900.c for more information. This driver also supports AMD 79C901 HomePNA such that you can use your phone line as network cable. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called sis900.o. Packet Engines Yellowfin Gigabit-NIC support CONFIG_YELLOWFIN Say Y here if you have a Packet Engines G-NIC PCI Gigabit Ethernet adapter. This adapter is used by the Beowulf Linux cluster project. See http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html for more information about this driver in particular and Beowulf in general (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called yellowfin.o. General Instruments Surfboard 1000 CONFIG_NET_SB1000 This is a driver for the General Instrument SURFboard 1000 internal cable modem. This is an ISA card which is used by a number of cable TV companies to provide cable modem access. It's a one-way downstream-only cable modem, meaning that your upstream net link is provided by your regular phone modem. At present this driver only compiles as a module, so say M here if you have this card. Then read Documentation/networking/README.sb1000 for information on how to use this module, as it needs special ppp scripts for establishing a connection. Further documentation and the necessary scripts can be found at: http://www.jacksonville.net/~fventuri/ http://home.adelphia.net/~siglercm/sb1000.html http://linuxpower.cx/~cable/ If you don't have this card, of course say N. Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support CONFIG_ACENIC Say Y here if you have an Alteon AceNIC or 3Com 3C985 PCI Gigabit Ethernet adapter. The driver allows for using the Jumbo Frame option (9000 bytes/frame) however it requires that your switches can handle this as well. To enable Jumbo Frames, add `mtu 9000' to your ifconfig line. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called acenic.o. SysKonnect SK-98xx support CONFIG_SK98LIN Say Y here if you have a SysKonnect SK-98xx Gigabit Ethernet Server Adapter. The following adapters are supported by this driver: - SK-9841 (single link 1000Base-LX) - SK-9842 (dual link 1000Base-LX) - SK-9843 (single link 1000Base-SX) - SK-9844 (dual link 1000Base-SX) - SK-9821 (single link 1000Base-T) - SK-9822 (dual link 1000Base-T) The dual link adapters support a link-failover feature. Read Documentation/networking/sk98lin.txt for information about optional driver parameters. Questions concerning this driver may be addresse to: linux@syskonnect.de If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called sk98lin.o. AMD LANCE and PCnet (AT1500 and NE2100) support CONFIG_LANCE If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Some LinkSys cards are of this type. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called lance.o. 3COM cards CONFIG_NET_VENDOR_3COM If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about 3COM cards. If you say Y, you will be asked for your specific card in the following questions. 3c501 support CONFIG_EL1 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also, consider buying a new card, since the 3c501 is slow, broken, and obsolete: you will have problems. Some people suggest to ping ("man ping") a nearby machine every minute ("man cron") when using this card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c501.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c503 support CONFIG_EL2 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c503.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c505 support CONFIG_ELPLUS Information about this network (Ethernet) card can be found in Documentation/networking/3c505.txt. If you have a card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called 3c505.o. 3c507 support CONFIG_EL16 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c507.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c523 support CONFIG_ELMC If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c523.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c527 support CONFIG_ELMC_II If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c527.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c509/3c579 support CONFIG_EL3 If you have a network (Ethernet) card belonging to the 3Com EtherLinkIII series, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If your card is not working you may need to use the DOS setup disk to disable Plug & Play mode, and to select the default media type. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called 3c509.o. 3c90x series "Cyclone/Hurricane/Tornado" support CONFIG_BC90X If you have one or more of the following 3Com EtherLink PCI network adapters, say Y and read README file distributed in the package. EtherLink 10/100 PCI Adapters 3c905B-TX EtherLink 10/100 PCI with Remote Wake Up 3c905B-T4 EtherLink 10/100 PCI T4 3c905B-COMBO EtherLink 10/100 PCI COMBO 3c905C-TXM EtherLink 10/100 PCI For Complete PC Management EtherLink Server 10/100 PCI Adapters 3c980-TX EtherLink Server 10/100 PCI 3c980C-TX EtherLink Server 10/100 PCI EtherLink 100 PCI Adapters 3c905B-FX EtherLink 100 PCI Fibert EtherLink 10 PCI Adapters 3c900B-TPO EtherLink 10 PCI TPO 3c900B-TPC EtherLink 10 PCI TPC 3c900B-COMBO EtherLink 10 PCI COMBO 3c900B-FL EtherLink 10 PCI Fiber If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/3c90x.txt. 3c590 series (592/595/597) "Vortex" support CONFIG_VORTEX If you have a 3Com "Vortex" (Fast EtherLink 3c590/3c592/3c595/3c597) or "Boomerang" series (EtherLink XL 3c900 or 3c905) network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is in Documentation/networking/vortex.txt and in the comments at the beginning of drivers/net/3c59x.c. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Other ISA cards CONFIG_NET_ISA If your network (Ethernet) card hasn't been mentioned yet and its bus system (that's the way the cards talks to the other components of your computer) is ISA (as opposed to EISA, VLB or PCI), say Y. Make sure you know the name of your card. Read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If unsure, say Y. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the remaining ISA network card questions. If you say Y, you will be asked for your specific card in the following questions. Generic ARCnet support CONFIG_ARCNET If you have a network card of this type, say Y and check out the (arguably) beautiful poetry in Documentation/networking/arcnet.txt. You need both this driver, and the driver for the particular ARCnet chipset of your card. If you don't know, then it's probably a COM90xx type card, so say Y (or M) to "ARCnet COM90xx chipset support" below. You might also want to have a look at the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO (even though ARCnet is not really Ethernet). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called arcnet.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Enable arc0e (ARCnet "ether-encap" packet format) CONFIG_ARCNET_ETH This allows you to use "Ethernet encapsulation" with your ARCnet card via the virtual arc0e device. You only need arc0e if you want to talk to nonstandard ARCnet software, specifically, DOS/Windows-style "NDIS" drivers. You do not need to say Y here to communicate with industry-standard RFC1201 implementations, like the arcether.com packet driver or most DOS/Windows ODI drivers. RFC1201 is included automatically as the arc0 device. Please read the ARCnet documentation in Documentation/networking/arcnet.txt for more information about using arc0e and arc0s. Enable arc0s (ARCnet RFC1051 packet format) CONFIG_ARCNET_1051 This allows you to use RFC1051 with your ARCnet card via the virtual arc0s device. You only need arc0s if you want to talk to ARCnet software complying with the "old" standard, specifically, the DOS arcnet.com packet driver, Amigas running AmiTCP, and some variants of NetBSD. You do not need to say Y here to communicate with industry-standard RFC1201 implementations, like the arcether.com packet driver or most DOS/Windows ODI drivers. RFC1201 is included automatically as the arc0 device. Please read the ARCnet documentation in Documentation/networking/arcnet.txt for more information about using arc0e and arc0s. ARCnet COM90xx (normal) chipset driver CONFIG_ARCNET_COM90xx This is the chipset driver for the standard COM90xx cards. If you have always used the old ARCnet driver without knowing what type of card you had, this is probably the one for you. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called com90xx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ARCnet COM90xx (IO mapped) chipset driver CONFIG_ARCNET_COM90xxIO This is the chipset driver for the COM90xx cards, using them in IO-mapped mode instead of memory-mapped mode. This is slower than the normal driver. Only use it if your card doesn't support shared memory. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called com90io.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ARCnet COM90xx (RIM I) chipset driver CONFIG_ARCNET_RIM_I This is yet another chipset driver for the COM90xx cards, but this time only using memory-mapped mode, and no IO ports at all. This driver is completely untested, so if you have one of these cards, please mail David.Woodhouse@mvhi.com, especially if it works! This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called arc-rimi.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ARCnet COM20020 chipset driver CONFIG_ARCNET_COM20020 This is the driver for the new COM20020 chipset. It supports such things as promiscuous mode, so packet sniffing is possible, and extra diagnostic information. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called com20020.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Cabletron E21xx support CONFIG_E2100 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called e2100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. CS89x0 support CONFIG_CS89x0 Support for CS89x0 chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO as well as Documentation/networking/cs89x0.txt. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called cs89x.o. DEPCA support CONFIG_DEPCA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO as well as drivers/net/depca.c. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called depca.o. EtherWorks 3 support CONFIG_EWRK3 This driver supports the DE203, DE204 and DE205 network (Ethernet) cards. If this is for you, say Y and read Documentation/networking/ewrk3.txt in the kernel source as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called ewrk3.o. SEEQ8005 support CONFIG_SEEQ8005 This is a driver for the SEEQ 8005 network (Ethernet) card. If this is for you, read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. AT1700/1720 support CONFIG_AT1700 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called at1700.o. FMV-181/182/183/184 support CONFIG_FMV18X If you have a Fujitsu FMV-181/182/183/184 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you use an FMV-183 or FMV-184 and it is not working, you may need to disable Plug & Play mode of the card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called fmv18x.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. EtherExpress PRO support CONFIG_EEXPRESS_PRO If you have a network (Ethernet) card of this type, say Y. Note however that the EtherExpress PRO/100 Ethernet card has its own separate driver. Please read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eepro.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. EtherExpress support CONFIG_EEXPRESS If you have an EtherExpress16 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the Intel EtherExpress16 card used to be regarded as a very poor choice because the driver was very unreliable. We now have a new driver that should do better. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called eexpress.o. HP PCLAN+ (27247B and 27252A) support CONFIG_HPLAN_PLUS If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hp-plus.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. HP PCLAN (27245 and other 27xxx series) support CONFIG_HPLAN If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hp.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. HP 10/100VG PCLAN (ISA, EISA, PCI) support CONFIG_HP100 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called hp100.o. NE2000/NE1000 support CONFIG_NE2000 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Many Ethernet cards without a specific driver are compatible with NE2000. If you have a PCI NE2000 card however, say N here and Y to "PCI NE2000 support", above. If you have a NE2000 card and are running on an MCA system (a bus system used on some IBM PS/2 computers and laptops), say N here and Y to "NE/2 (ne2000 MCA version) support", below. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SK_G16 support CONFIG_SK_G16 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. NE/2 (ne2000 MCA version) support CONFIG_NE2_MCA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne2.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SKnet MCA support CONFIG_SKMC This are Micro Channel ethernet adapters. You need to set CONFIG_MCA to use this driver. It's both available as an in-kernel driver and as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. If you plan to use more than one network card under linux, read the Multiple-Ethernet-mini-HOWTO, available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. Supported cards are the SKnet Junior MC2 and the SKnet MC2(+). Distinguishing both cards is done automatically. Note that using multiple boards of different type hasn't been tested with this driver. EISA, VLB, PCI and on board controllers CONFIG_NET_EISA This is another class of network cards which attach directly to the bus. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about this class of network cards. If you say Y, you will be asked for your specific card in the following questions. If you are unsure, say Y. AMD PCnet32 (VLB and PCI) support CONFIG_PCNET32 If you have a PCnet32 or PCnetPCI based network (Ethernet) card, answer Y here and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called pcnet32.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Ansel Communications EISA 3200 support CONFIG_AC3200 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ac3200.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Mylex EISA LNE390A/LNE390B support CONFIG_LNE390 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called lne390.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Novell/Eagle/Microdyne NE3210 EISA support CONFIG_NE3210 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that this driver will NOT WORK for NE3200 cards as they are completely different. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne3210.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Apricot Xen-II on board Ethernet CONFIG_APRICOT If you have a network (Ethernet) controller of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called apricot.o. Generic DECchip & DIGITAL EtherWORKS PCI/EISA CONFIG_DE4X5 This is support for the DIGITAL series of PCI/EISA Ethernet cards. These include the DE425, DE434, DE435, DE450 and DE500 models. If you have a network card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/de4x5.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called de4x5.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. DECchip Tulip (dc21x4x) PCI support CONFIG_DEC_ELCP This driver is developed for the SMC EtherPower series Ethernet cards and also works with cards based on the DECchip 21040/21041/21140 (Tulip series) chips. Some LinkSys PCI cards are of this type. (If your card is NOT SMC EtherPower 10/100 PCI (smc9332dst), you can also try the driver for "Generic DECchip" cards, above. However, most people with a network card of this type will say Y here.) Do read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/tulip.txt. This is the new version of this driver. If it does not work for you please try older version which is also available. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called tulip.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Old DECchip Tulip (dc21x4x) PCI support CONFIG_DEC_ELCP_OLD This driver is developed for the SMC EtherPower series Ethernet cards and also works with cards based on the DECchip 21040/21041/21140 (Tulip series) chips. Some LinkSys PCI cards are of this type. (If your card is NOT SMC EtherPower 10/100 PCI (smc9332dst), you can also try the driver for "Generic DECchip" cards, above. However, most people with a network card of this type will say Y here.) Do read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/tulip.txt. This an older version of the driver which supports some cards the new version does not (yet) support. Use it if the new driver does not work for you. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called tulip.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Digi Intl. RightSwitch support CONFIG_DGRS This is support for the Digi International RightSwitch series of PCI/EISA Ethernet switch cards. These include the SE-4 and the SE-6 models. If you have a network card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/dgrs.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dgrs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. EtherExpress PRO/100 support CONFIG_EEXPRESS_PRO100 If you have an Intel EtherExpress PRO/100 PCI network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eepro100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ICL EtherTeam 16i/32 support CONFIG_ETH16I If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eth16i.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. TI ThunderLAN support (EXPERIMENTAL) CONFIG_TLAN If you have a PCI Ethernet network card based on the ThunderLAN chip which is supported by this driver, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Devices currently supported by this driver are Compaq Netelligent, Compaq NetFlex and Olicom cards. Please read the file Documentation/networking/tlan.txt for more details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called tlan.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Please email feedback to james.banks@caldera.com. VIA Rhine support CONFIG_VIA_RHINE If you have a VIA "rhine" based network card (Rhine-I (3043) or Rhine-2 (VT86c100A)), say Y here. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called via-rhine.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Racal-Interlan EISA ES3210 support CONFIG_ES3210 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called es3210.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC EtherPower II (EXPERIMENTAL) CONFIG_EPIC100 If you have an SMC EtherPower II 9432 PCI Ethernet network card which is based on the SMC83c170, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called epic100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SGI Seeq ethernet controller support CONFIG_SGISEEQ Say Y here if you have an Seeq based Ethernet network card. This is used in many Silicon Graphics machines. Zenith Z-Note support CONFIG_ZNET The Zenith Z-Note notebook computer has a built-in network (Ethernet) card, and this is the Linux driver for it. Note that the IBM Thinkpad 300 is compatible with the Z-Note and is also supported by this driver. Read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Pocket and portable adapters CONFIG_NET_POCKET Cute little network (Ethernet) devices which attach to the parallel port ("pocket adapters"), commonly used with laptops. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to plug a network (or some other) card into the PCMCIA (or PC-card) slot of your laptop instead (PCMCIA is the standard for credit card size extension cards used by all modern laptops), you need the pcmcia-cs package (location contained in the file Documentation/Changes) and you can say N here. Laptop users should read the Linux Laptop home page at http://www.cs.utexas.edu/users/kharker/linux-laptop/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about this class of network devices. If you say Y, you will be asked for your specific device in the following questions. AT-LAN-TEC/RealTek pocket adapter support CONFIG_ATP This is a network (Ethernet) device which attaches to your parallel port. Read drivers/net/atp.c as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO if you want to use this. If you intend to use this driver, you should have said N to the Parallel Printer support, because the two drivers don't like each other. D-Link DE600 pocket adapter support CONFIG_DE600 This is a network (Ethernet) device which attaches to your parallel port. Read Documentation/networking/DLINK.txt as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO if you want to use this. It is possible to have several devices share a single parallel port and it is safe to compile the corresponding drivers into the kernel. If you want to compile this driver as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called de600.o. D-Link DE620 pocket adapter support CONFIG_DE620 This is a network (Ethernet) device which attaches to your parallel port. Read Documentation/networking/DLINK.txt as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO if you want to use this. It is possible to have several devices share a single parallel port and it is safe to compile the corresponding drivers into the kernel. If you want to compile this driver as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called de620.o. Token Ring driver support CONFIG_TR Token Ring is IBM's way of communication on a local network; the rest of the world uses Ethernet. To participate on a Token Ring network, you need a special Token ring network card. If you are connected to such a Token Ring network and want to use your Token Ring card under Linux, say Y here and to the driver for your particular card below and read the Token-Ring mini-HOWTO, available via FTP (user:anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Most people can say N here. IBM Tropic chipset based adapter support CONFIG_IBMTR This is support for all IBM Token Ring cards that don't use DMA. If you have such a beast, say Y and read the Token-Ring mini-HOWTO, available via FTP (user:anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Warning: this driver will almost definitely fail if more than one active Token Ring card is present. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ibmtr.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IBM Olympic chipset PCI adapter support CONFIG_IBMOL This is support for all non-Lanstreamer IBM PCI Token Ring Cards. Specifically this is all IBM PCI, PCI Wake On Lan, PCI II, PCI II Wake On Lan, and PCI 100/16/4 adapters. If you have such an adapter, say Y and read the Token-Ring mini-HOWTO, available via FTP (user:anonymous) from ftp://metalab.unc/edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will will be called olympic.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Also read the linux/Documentation/networking/olympic.txt or check the Linux Token Ring Project site for the latest information at http://www.linuxtr.net SysKonnect adapter support CONFIG_SKTR This is support for all SysKonnect Token Ring cards, specifically SysKonnect TR4/16(+) ISA (SK-4190), SysKonnect TR4/16(+) PCI (SK-4590), SysKonnect TR4/16 PCI (SK-4591) adapters. If you have such an adapter and would like to use it, say Y or M and read the Token-Ring mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also read the file linux/Documentation/networking/sktr.txt or check the Linux-SNA WWW site for the latest information at http://samba.anu.edu.au/linux-sna/documents/drivers/SysKonnect/ Traffic Shaper (EXPERIMENTAL) CONFIG_SHAPER The traffic shaper is a virtual network device that allows you to limit the rate of outgoing data flow over some other network device. See Documentation/networking/shaper.txt for more information. To set up and configure shaper devices, you need the shapecfg program, available via FTP (user: anonymous) from ftp://shadow.cabi.net/pub/Linux in the shaper package. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called shaper.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. FDDI driver support CONFIG_FDDI Fiber Distributed Data Interface is a high speed local area network design; essentially a replacement for high speed Ethernet. FDDI can run over copper or fiber. If you are connected to such a network and want a driver for the FDDI card in your computer, say Y here (and then also Y to the driver for your FDDI card, below). Most people will say N. Digital DEFEA and DEFPA adapter support CONFIG_DEFXX This is support for the DIGITAL series of EISA (DEFEA) and PCI (DEFPA) controllers which can connect you to a local FDDI network. HIgh Performance Parallel Interface support (EXPERIMENTAL) CONFIG_HIPPI HIgh Performance Parallel Interface (HIPPI) is a 800Mbit/sec and 1600Mbit/sec dual-simplex switched or point-to-point network. HIPPI can run over copper (25m) or fiber (300m on multi-mode or 10km on single-mode). HIPPI networks are commonly used for clusters and to connect to super computers. If you are connected to a HIPPI network and have a HIPPI network card in your computer that you want to use under Linux, say Y here (you must also remember to enable the driver for your HIPPI card below). Most people will say N here. Essential RoadRunner HIPPI PCI adapter support CONFIG_ROADRUNNER Say Y here if this is your PCI HIPPI network card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called rrunner.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Use large TX/RX rings CONFIG_ROADRUNNER_LARGE_RINGS If you say Y here, the RoadRunner driver will preallocate up to 2 MB of additional memory to allow for fastest operation, both for transmitting and receiving. This memory cannot be used by any other kernel code or by user space programs. Say Y here only if you have the memory. Acorn Ether1 card CONFIG_ARM_ETHER1 If you have an Acorn system with one of these (AKA25) network cards, you should say Y to this option if you wish to use it with Linux. Acorn/ANT Ether3 card CONFIG_ARM_ETHER3 If you have an Acorn system with one of these network cards, you should say Y to this option if you wish to use it with Linux. I Cubed EtherH card CONFIG_ARM_ETHERH If you have an Acorn system with one of these network cards, you should say Y to this option if you wish to use it with Linux. EBSA-110 Ethernet interface CONFIG_ARM_AM79C961A If you wish to compile a kernel for the EBSA-110, then you should always answer Y to this. Support CDROM drives that are not SCSI or IDE/ATAPI CONFIG_CD_NO_IDESCSI If you have a CDROM drive that is neither SCSI nor IDE/ATAPI, say Y here, otherwise N. Read the CDROM-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about these CDROM drives. If you are unsure what you have, say Y and find out whether you have one of the following drives. For each of these drivers, a file Documentation/cdrom/ exists. Especially in cases where you do not know exactly which kind of drive you have you should read there. Most of these drivers use a file drivers/cdrom/.h where you can define your interface parameters and switch some internal goodies. All these CDROM drivers are also usable as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile them as module, say M instead of Y and read Documentation/modules.txt. If you want to use any of these CDROM drivers, you also have to answer Y or M to "ISO 9660 CDROM filesystem support" below (this answer will get "defaulted" for you if you enable any of the Linux CDROM drivers). Sony CDU31A/CDU33A CDROM support CONFIG_CDU31A These CDROM drives have a spring-pop-out caddyless drawer, and a rectangular green LED centered beneath it. NOTE: these CDROM drives will not be auto detected by the kernel at boot time; you have to provide the interface address as an option to the kernel at boot time as described in Documentation/cdrom/cdu31a or fill in your parameters into drivers/cdrom/cdu31a.c. Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cdu31a.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Standard Mitsumi [no XA/Multisession] CDROM support CONFIG_MCD This is the older of the two drivers for the older Mitsumi models LU-005, FX-001 and FX-001D. This is not the right driver for the FX-001DE and the triple or quad speed models (all these are IDE/ATAPI models). Please also the file Documentation/cdrom/mcd. With the old LU-005 model, the whole drive chassis slides out for cd insertion. The FX-xxx models use a motorized tray type mechanism. Note that this driver does not support XA or MultiSession CDs (PhotoCDs). There is a new driver (next question) which can do this. If you want that one, say N here. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IRQ channel for Mitsumi CD-ROM CONFIG_MCD_IRQ This allows you to specify the default value of the IRQ used by the driver. This setting can be overridden by passing the "mcd=" parameter to the kernel at boot time (or at module load time if you said M to "Standard Mitsumi CDROM support"). I/O base address for Mitsumi CD-ROM CONFIG_MCD_BASE This allows you to specify the default value of the I/O base address used by the driver. This setting can be overridden by passing the "mcd=" parameter to the kernel at boot time (or at module load time if you said M to "Standard Mitsumi CDROM support"). Mitsumi [XA/MultiSession] support CONFIG_MCDX Use this driver if you want to be able to read XA or MultiSession CDs (PhotoCDs) as well as ordinary CDs with your Mitsumi LU-005, FX-001 or FX-001D CDROM drive. In addition, this driver uses much less kernel memory than the old one, if that is a concern. This driver is able to support more than one drive, but each drive needs a separate interface card. Please read the file Documentation/cdrom/mcdx. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mcdx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support CONFIG_SBPCD This driver supports most of the drives which use the Panasonic or Sound Blaster interface. Please read the file Documentation/cdrom/sbpcd. The Matsushita CR-521, CR-522, CR-523, CR-562, CR-563 drives (sometimes labeled "Creative"), the Creative Labs CD200, the Longshine LCS-7260, the "IBM External ISA CDROM" (in fact a CR-56x model), the TEAC CD-55A fall under this category. Some other "electrically compatible" drives (Vertos, Genoa, some Funai models) are currently not supported; for the Sanyo H94A drive currently a separate driver (asked later) is responsible. Most drives have a uniquely shaped faceplate, with a caddyless motorized drawer, but without external brand markings. The older CR-52x drives have a caddy and manual loading/eject, but still no external markings. The driver is able to do an extended auto-probing for interface addresses and drive types; this can help to find facts in cases you are not sure, but can consume some time during the boot process if none of the supported drives gets found. Once your drive got found, you should enter the reported parameters into drivers/cdrom/sbpcd.h and set "DISTRIBUTION 0" there. This driver can support up to four CDROM controller cards, and each card can support up to four CDROM drives; if you say Y here, you will be asked how many controller cards you have. If compiled as a module, only one controller card (but with up to four drives) is usable. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sbpcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Matsushita/Panasonic, ... second CDROM controller support CONFIG_SBPCD2 Say Y here only if you have two CDROM controller cards of this type (usually only if you have more than four drives). You should enter the parameters for the second, third and fourth interface card into linux/include/linux/sbpcd.h before compiling the new kernel. Read the file Documentation/cdrom/sbpcd. Aztech/Orchid/Okano/Wearnes/TXC/CyDROM CDROM support CONFIG_AZTCD This is your driver if you have an Aztech CDA268-01A, Orchid CD-3110, Okano or Wearnes CDD110, Conrad TXC, or CyCDROM CR520 or CR540 CDROM drive. This driver -- just like all these CDROM drivers -- is NOT for CDROM drives with IDE/ATAPI interfaces, such as Aztech CDA269-031SE. Please read the file Documentation/cdrom/aztcd. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called aztcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sony CDU535 CDROM support CONFIG_CDU535 This is the driver for the older Sony CDU-535 and CDU-531 CDROM drives. Please read the file Documentation/cdrom/sonycd535. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sonycd535.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Goldstar R420 CDROM support CONFIG_GSCD If this is your CDROM drive, say Y here. As described in the file linux/Documentation/cdrom/gscd, you might have to change a setting in the file linux/drivers/cdrom/gscd.h before compiling the kernel. Please read the file Documentation/cdrom/gscd. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called gscd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Philips/LMS CM206 CDROM support CONFIG_CM206 If you have a Philips/LMS CDROM drive cm206 in combination with a cm260 host adapter card, say Y here. Please also read the file Documentation/cdrom/cm206. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cm206.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Optics Storage DOLPHIN 8000AT CDROM support CONFIG_OPTCD This is the driver for the 'DOLPHIN' drive with a 34-pin Sony compatible interface. It also works with the Lasermate CR328A. If you have one of those, say Y. This driver does not work for the Optics Storage 8001 drive; use the IDE-ATAPI CDROM driver for that one. Please read the file Documentation/cdrom/optcd. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called optcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sanyo CDR-H94A CDROM support CONFIG_SJCD If this is your CDROM drive, say Y here and read the file Documentation/cdrom/sjcd. You should then also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sjcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Soft configurable cdrom interface card support CONFIG_CDI_INIT If you want to include boot-time initialization of any cdrom interface card that is software configurable, say Y here. Currently only the ISP16/MAD16/Mozart sound cards with built-in cdrom interfaces are supported. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about these CDROM drives. ISP16/MAD16/Mozart soft configurable cdrom interface support CONFIG_ISP16_CDI These are sound cards with built-in cdrom interfaces using the OPTi 82C928 or 82C929 chips. Say Y here to have them detected and possibly configured at boot time. In addition, You'll have to say Y to a driver for the particular cdrom drive you have attached to the card. Read Documentation/cdrom/isp16 for details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called isp16.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Quota support CONFIG_QUOTA If you say Y here, you will be able to set per user limits for disk usage (also called disk quotas). Currently, it works only for the ext2 filesystem. You need additional software in order to use quota support; for details, read the Quota mini-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. Probably the quota support is only useful for multi user systems. If unsure, say N. Acorn's ADFS filesystem support (read only) (EXPERIMENTAL) CONFIG_ADFS_FS The Advanced Disk File System is the filesystem used on floppy and hard disks by Acorn Systems. Currently in development, as a read- only driver for hard disks. These should be the first partition (eg. /dev/[sh]d?1) on each of your drives. If unsure, say N. Minix fs support CONFIG_MINIX_FS Minix is a simple operating system used in many classes about OS's. The minix filesystem (method to organize files on a hard disk partition or a floppy disk) was the original filesystem for Linux, but has been superseded by the second extended filesystem ext2fs. You don't want to use the minix filesystem on your hard disk because of certain built-in restrictions, but it is sometimes found on older Linux floppy disks. This option will enlarge your kernel by about 25 kB. If unsure, say N. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called minix.o. Note that the filesystem of your root partition (the one containing the directory /) cannot be compiled as a module. Second extended fs support CONFIG_EXT2_FS This is the de facto standard Linux filesystem (method to organize files on a storage device) for hard disks. You want to say Y here, unless you intend to use Linux exclusively from inside a DOS partition using the umsdos filesystem. The advantage of the latter is that you can get away without repartitioning your hard drive (which often implies backing everything up and restoring afterwards); the disadvantage is that Linux becomes susceptible to DOS viruses and that umsdos is somewhat slower than ext2fs. Even if you want to run Linux in this fashion, it might be a good idea to have ext2fs around: it enables you to read more floppy disks and facilitates the transition to a *real* Linux partition later. Another (rare) case which doesn't require ext2fs is a diskless Linux box which mounts all files over the network using NFS (in this case it's sufficient to say Y to "NFS filesystem support" below). Saying Y here will enlarge your kernel by about 41 kB. The Ext2fs-Undeletion mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini, gives information about how to retrieve deleted files on ext2fs filesystems. To change the behavior of ext2 filesystems, you can use the tune2fs utility ("man tune2fs"). To modify attributes of files and directories on ext2 filesystems, use chattr ("man chattr"). Ext2fs partitions can be read from within DOS using the ext2tool command line tool package (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/filesystems/ext2) and from within Windows NT using the ext2nt command line tool package from ftp://metalab.unc.edu/pub/Linux/utils/dos. Explore2fs is a graphical explorer for ext2fs partitions which runs on Windows 95 and Windows NT and includes experimental write support; it is available from http://jnewbigin-pc.it.swin.edu.au/Linux/Explore2fs.htm. If you want to compile this filesystem as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ext2.o. Be aware however that the filesystem of your root partition (the one containing the directory /) cannot be compiled as a module, and so this could be dangerous. Most everyone wants to say Y here. ISO 9660 CDROM filesystem support CONFIG_ISO9660_FS This is the standard filesystem used on CDROMs. It was previously known as "High Sierra Filesystem" and is called "hsfs" on other Unix systems. The so-called Rock-Ridge extensions which allow for long Unix filenames and symbolic links are also supported by this driver. If you have a CDROM drive and want to do more with it than just listen to audio CDs and watch its LEDs, say Y (and read Documentation/filesystems/isofs.txt and the CDROM-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO), thereby enlarging your kernel by about 27 kB; otherwise say N. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called isofs.o. Microsoft Joliet cdrom extensions CONFIG_JOLIET Joliet is a Microsoft extension for the ISO 9660 CDROM filesystem which allows for long filenames in unicode format (unicode is the new 16 bit character code, successor to ASCII, which encodes the characters of almost all languages of the world; see http://www.unicode.org for more information; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Say Y here if you want to be able to read Joliet CDROMs under Linux. fat fs support CONFIG_FAT_FS If you want to use one of the FAT-based filesystems (the MS-DOS, VFAT (Windows 95) and UMSDOS (used to run Linux on top of an ordinary DOS partition) filesystems), then you must say Y or M here to include FAT support. You will then be able to mount partitions or diskettes with FAT-based filesystems and transparently access the files on them, i.e. MSDOS files will look and behave just like all other Unix files. This FAT support is not a filesystem in itself, it only provides the foundation for the other filesystems. You will have to say Y or M to at least one of "msdos fs support" or "vfat fs support" in order to make use of it. Another way to read and write MSDOS floppies and hard drive partitions from within Linux (but not transparently) is with the mtools ("man mtools") program suite. This doesn't require the FAT filesystem support. It is now also becoming possible to read and write compressed FAT filesystems; read Documentation/filesystems/fat_cvf.txt for details. The FAT support will enlarge your kernel by about 24 kB. If unsure, say Y. If you want to compile this as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called fat.o. Note that if you compile the FAT support as a module, you cannot compile any of the FAT-based filesystems into the kernel -- they will have to be modules as well. The filesystem of your root partition (the one containing the directory /) cannot be a module, so don't say M here if you intend to use UMSDOS as your root filesystem. msdos fs support CONFIG_MSDOS_FS This allows you to mount MSDOS partitions of your hard drive (unless they are compressed; to access compressed MSDOS partitions under Linux, you can either use the DOS emulator DOSEMU, described in the DOSEMU-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, or try dmsdosfs in ftp://metalab.unc.edu/pub/Linux/system/filesystems/dosfs. If you intend to use dosemu with a non-compressed MSDOS partition, say Y here) and MSDOS floppies. This means that file access becomes transparent, i.e. the MSDOS files look and behave just like all other Unix files. If you want to use umsdos, the Unix-like filesystem on top of DOS, which allows you to run Linux from within a DOS partition without repartitioning, you'll have to say Y or M here. If you have Windows 95 or Windows NT installed on your MSDOS partitions, you should use the VFAT filesystem (say Y to "vfat fs support" below), or you will not be able to see the long filenames generated by Windows 95 / Windows NT. This option will enlarge your kernel by about 7 kB. If unsure, answer Y. This will only work if you said Y to "fat fs support" as well. If you want to compile this as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called msdos.o. vfat fs support CONFIG_VFAT_FS This option provides support for normal Windows filesystems with long filenames. That includes non-compressed FAT-based filesystems used by Windows 95, Windows 98, Windows NT 4.0, and mtools. You cannot use the VFAT filesystem for your Linux root partition (the one containing the directory /); use UMSDOS instead if you want to run Linux from within a DOS partition (i.e. say Y to "umsdos: Unix like fs on top of std MSDOS fs", below). The VFAT support enlarges your kernel by about 10 kB and it only works if you said Y to the "fat fs support" above. Please read the file Documentation/filesystems/vfat.txt for details. If unsure, say Y. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called vfat.o. umsdos: Unix like fs on top of std MSDOS fs CONFIG_UMSDOS_FS Say Y here if you want to run Linux from within an existing DOS partition of your hard drive. The advantage of this is that you can get away without repartitioning your hard drive (which often implies backing everything up and restoring afterwards) and hence you're able to quickly try out Linux or show it to your friends; the disadvantage is that Linux becomes susceptible to DOS viruses and that UMSDOS is somewhat slower than ext2fs. Another use of UMSDOS is to write files with long unix filenames to MSDOS floppies; it also allows Unix-style softlinks and owner/permissions of files on MSDOS floppies. You will need a program called umssync in order to make use of umsdos; read Documentation/filesystems/umsdos.txt. This option enlarges your kernel by about 25 kB and it only works if you said Y to both "fat fs support" and "msdos fs support" above. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called umsdos.o. Note that the filesystem of your root partition (the one containing the directory /) cannot be a module, so saying M could be dangerous. If unsure, say N. /proc filesystem support CONFIG_PROC_FS This is a virtual filesystem providing information about the status of the system. "Virtual" means that it doesn't take up any space on your hard disk: the files are created on the fly by the kernel when you try to access them. Also, you cannot read the files with older version of the program less: you need to use more or cat. It's totally cool; for example, "cat /proc/interrupts" gives information about what the different IRQs are used for at the moment (there is a small number of Interrupt ReQuest lines in your computer that are used by the attached devices to gain the CPU's attention -- often a source of trouble if two devices are mistakenly configured to use the same IRQ). The /proc filesystem is explained in the file Documentation/proc.txt, in the Kernel Hacker's Guide at http://www.redhat.com:8080/HyperNews/get/khg.html on the WWW (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape), and also on the proc(8) manpage ("man 8 proc"). This option will enlarge your kernel by about 18 KB. Several programs depend on this, so everyone should say Y here. NFS filesystem support CONFIG_NFS_FS If you are connected to some other (usually local) Unix computer (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing on that computer (the NFS server) using the Network File Sharing protocol, say Y. "Mounting files" means that the client can access the files with usual UNIX commands as if they were sitting on the client's hard disk. For this to work, the server must run the programs nfsd and mountd (but does not need to have NFS filesystem support enabled in its kernel). NFS is explained in the Network Administrator's Guide, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/LDP, on its man page: "man nfs", and in the NFS-HOWTO. A superior but less widely used alternative to NFS is provided by the Coda filesystem; see "Coda filesystem support" below. If you say Y here, you should have said Y to TCP/IP networking also. This option would enlarge your kernel by about 27 kB. This filesystem is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called nfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you are configuring a diskless machine which will mount its root filesystem over NFS at boot time, say Y here and to "IP: kernel level autoconfiguration" above and to "Root file system on NFS" below. You cannot compile this driver as a module in this case. There are two packages designed for booting diskless machines over the net: netboot and etherboot, both available via FTP from ftp://metalab.unc.edu/pub/Linux/system/boot/ethernet/ . If you don't know what all this is about, say N. Root file system on NFS CONFIG_ROOT_NFS If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS (presumably because your box doesn't have a hard disk), say Y. Read Documentation/nfsroot.txt for details. It is likely that in this case, you also want to say Y to "IP: kernel level autoconfiguration" so that your box can discover its network address at boot time. Most people say N here. NFS server support CONFIG_NFSD If you want your Linux box to act as a NFS *server*, so that other computers on your local network which support NFS can access certain directories on your box transparently, you have two options: you can use the self-contained user space program nfsd, in which case you should say N here, or you can say Y and use this new experimental kernel based NFS server. The advantage of the kernel based solution is that it is faster; it might not be completely stable yet, though. In either case, you will need support software; the respective locations are given in the file Documentation/Changes in the NFS section. Please read the NFS-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. The NFS server is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called nfsd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Emulate Sun NFS daemon CONFIG_NFSD_SUN If you would like for the server to allow clients to access directories that are mount points on the local filesystem (this is how nfsd behaves on Sun systems), say yes here. If unsure, say N. OS/2 HPFS filesystem support (read only) CONFIG_HPFS_FS OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS is the filesystem used for organizing files on OS/2 hard disk partitions. Say Y if you want to be able to read files from an OS/2 HPFS partition of your hard drive. OS/2 floppies however are in regular MSDOS format, so you don't need this option in order to be able to read them. Read Documentation/filesystems/hpfs.txt. This filesystem is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called hpfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Windows NT NTFS support (read only) CONFIG_NTFS_FS NTFS is the file system of Microsoft Windows NT. Say Y if you want to get read access to files on NTFS partitions of your hard drive. The Linux NTFS driver supports most of the mount options of the VFAT driver, see Documentation/filesystems/ntfs.txt. Saying Y here will give you read-only access to NTFS partitions. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ntfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. NTFS read-write support (experimental) CONFIG_NTFS_RW If you say Y here, you will (hopefully) be able to write to NTFS file systems as well as read from them. The read-write support in NTFS is far from being complete and is not well tested. If you enable this, back up your NTFS volume first since it may get damaged. If unsure, say N. System V, Version 7 and Coherent filesystem support CONFIG_SYSV_FS SCO, Xenix and Coherent are commercial Unix systems for Intel machines, and Version 7 was used on the DEC PDP-11. Saying Y here would allow you to read to and write from their floppies and hard disk partitions. If you have floppies or hard disk partitions like that, it is likely that they contain binaries from those other Unix systems; in order to run these binaries, you will want to install iBCS2 (Intel Binary Compatibility Standard is a kernel module which lets you run SCO, Xenix, Wyse, UnixWare, Dell Unix and System V programs under Linux and is often needed to run commercial software that's only available for those systems. It's available via FTP (user: anonymous) from ftp://tsx-11.mit.edu/pub/linux/BETA). If you only intend to mount files from some other Unix over the network using NFS, you don't need the System V filesystem support (but you need NFS filesystem support obviously). Note that this option is generally not needed for floppies, since a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). Note also that this option has nothing whatsoever to do with the option "System V IPC". Read about the System V filesystem in Documentation/filesystems/sysv-fs.txt. Saying Y here will enlarge your kernel by about 34 KB. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called sysv.o. If you haven't heard about all of this before, it's safe to say N. Amiga FFS filesystem support CONFIG_AFFS_FS The Fast File System (FFS) is the common filesystem used on hard disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y if you want to be able to read and write files from and to an Amiga FFS partition on your hard drive. Amiga floppies however cannot be read with this driver due to an incompatibility of the floppy controller used in an Amiga and the standard floppy controller in PCs and workstations. Read Documentation/filesystems/affs.txt and fs/affs/Changes. With this driver you can also mount disk files used by Bernd Schmidt's Un*X Amiga Emulator (http://www.freiburg.linux.de/~uae/; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to do this, you will also need to say Y or M to "Loop device support", above. This filesystem is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called affs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Apple Macintosh filesystem support (experimental) CONFIG_HFS_FS If you say Y here, you will be able to mount Macintosh-formatted floppy disks and hard drive partitions with full read-write access. Please read fs/hfs/HFS.txt to learn about the available mount options. This filesystem support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called hfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. ROM filesystem support CONFIG_ROMFS_FS This is a very small read-only filesystem mainly intended for initial ram disks of installation disks, but it could be used for other read-only media as well. Read Documentation/filesystems/romfs.txt for details. This filesystem support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called romfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you don't know whether you need it, then you don't need it: answer N. QNX filesystem support (EXPERIMENTAL) CONFIG_QNX4FS_FS This is the filesystem used by the operating system QNX 4. Say Y if you intend to mount QNX hard disks or floppies. Unless you say Y to "QNXFS read-write support" below, you will only be able to read these filesystems. This filesystem support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called qnx4.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. QNXFS read-write support (FOR TESTING ONLY) CONFIG_QNX4FS_RW Say Y if you want to test write support for QNX filesystems. Kernel automounter support CONFIG_AUTOFS_FS The automounter is a tool to automatically mount remote filesystems on demand. This implementation is partially kernel-based to reduce overhead in the already-mounted case; this is unlike the BSD automounter (amd), which is a pure user space daemon. To use the automounter you need the user-space tools from ftp://ftp.kernel.org/pub/linux/daemons/autofs; you also want to answer Y to "NFS filesystem support", below. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called autofs.o. If you are not a part of a fairly large, distributed network, you probably do not need an automounter, and can say N here. UFS filesystem support CONFIG_UFS_FS BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD, OpenBSD and NeXTstep) use a filesystem called UFS. Some System V Unixes can create and mount hard disk partitions and diskettes using this filesystem as well. Saying Y here will allow you to read from these partitions; if you also want to write to them, say Y to the experimental "UFS filesystem write support", below. Please read the file Documentation/filesystems/ufs.txt for more information. If you only intend to mount files from some other Unix over the network using NFS, you don't need the UFS filesystem support (but you need NFS filesystem support obviously). Note that this option is generally not needed for floppies, since a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). When accessing NeXTstep files, you may need to convert them from the NeXT character set to the Latin1 character set; use the program recode ("info recode") for this purpose. If you want to compile the UFS filesystem support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ufs.o. If you haven't heard about all of this before, it's safe to say N. UFS filesystem write support (experimental) CONFIG_UFS_FS_WRITE Say Y here if you want to try writing to UFS partitions. This is experimental, so you should back up your UFS partitions beforehand. EFS filesystem support (experimental) CONFIG_EFS_FS EFS is the filesystem used for CDROMs and filesystems by SGI's IRIX. This implementation only offers read-only access. If you don't know what all this is about, it's safe to say N. For more information about EFS see it's homepage at http://aeschi.ch.eu.org/efs. SGI disklabel support CONFIG_SGI_DISKLABEL Say Y to this only if you plan on mounting disks with SGI disklabels. This is not required to mount EFS-format CDROMs. BSD disklabel (FreeBSD partition tables) support CONFIG_BSD_DISKLABEL FreeBSD uses its own hard disk partition scheme on your PC. It requires only one entry in the primary partition table of your disk and manages it similarly to DOS extended partitions, putting in its first sector a new partition table in BSD disklabel format. Saying Y here allows you to read these disklabels and further mount FreeBSD partitions from within Linux if you have also said Y to "UFS filesystem support", above. If you don't know what all this is about, say N. SMD disklabel (Sun partition tables) support CONFIG_SMD_DISKLABEL Like most systems, SunOS uses its own hard disk partition table format, incompatible with all others. Saying Y here allows you to read these partition tables and further mount SunOS disks from within Linux if you have also said Y to "UFS filesystem support", above. This is mainly used to carry data from a SPARC under SunOS to your Linux box via a removable medium like magneto-optical or ZIP drives; note however that a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). If you don't know what all this is about, say N. Solaris (x86) partition table support CONFIG_SOLARIS_X86_PARTITION Like most systems, Solaris x86 uses its own hard disk partition table format, incompatible with all others. Saying Y here allows you to read these partition tables and further mount Solaris x86 disks from within Linux if you have also said Y to "UFS filesystem support", above. ADFS filesystem support (read only) (EXPERIMENTAL) CONFIG_ADFS_FS The Acorn Disc Filing System is the standard filesystem of the RiscOS operating system which runs on Acorn's ARM-based Risc PC systems and the Acorn Archimedes range of machines. If you say Y here, Linux will be able to read from ADFS partitions on hard drives and from ADFS-formatted floppy discs. The ADFS partition should be the first partition (i.e., /dev/[hs]d?1) on each of your drives. This code is also available as a module called adfs.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. /dev/pts filesystem for Unix98 PTYs CONFIG_DEVPTS_FS You should say Y here if you said Y to "Unix98 PTY support" above. You'll then get a virtual filesystem which can be mounted on /dev/pts with "mount -t devpts". This, together with the pseudo terminal master multiplexer /dev/ptmx, is used for pseudo terminal support as described in The Open Group's Unix98 standard: in order to acquire a pseudo terminal, a process opens /dev/ptmx; the number of the pseudo terminal is then made available to the process and the pseudo terminal slave can be accessed as /dev/pts/. What was traditionally /dev/ttyp2 will then be /dev/pts/2, for example. The GNU C library glibc 2.1 contains the requisite support for this mode of operation; you also need client programs that use the Unix98 API. UnixWare slices support (EXPERIMENTAL) CONFIG_UNIXWARE_DISKLABEL Like some systems, UnixWare uses its own slice table inside a partition (VTOC - Virtual Table of Contents). Its format is incompatible with all other OSes. Saying Y here allows you to read VTOC and further mount UnixWare partitions read-only from within Linux if you have also said Y to "UFS filesystem support" or "System V and Coherent filesystem support", above. This is mainly used to carry data from a UnixWare box to your Linux box via a removable medium like magneto-optical, ZIP or removable IDE drives. Note, however, that a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). If you don't know what all this is about, say N. Macintosh partition map support CONFIG_MAC_PARTITION Say Y here if you want your Linux system to be able to read the partition tables of Macintosh hard drives, and thus use partitions on those drives. SMB filesystem support (to mount Windows shares etc...) CONFIG_SMB_FS SMB (Server Message Block) is the protocol Windows for Workgroups (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share files and printers over local networks. Saying Y here allows you to mount their filesystems (often called "shares" in this context) and access them just like any other Unix directory. Currently, this works only if the Windows machines use TCP/IP as the underlying transport protocol, and not NetBEUI. For details, read Documentation/filesystems/smbfs.txt and the SMB-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note: if you just want your box to act as an SMB *server* and make files and printing services available to Windows clients (which need to have a TCP/IP stack), you don't need to say Y here; you can use the program samba (available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/system/network/samba) for that. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile the SMB support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called smbfs.o. Most people say N, however. Coda filesystem support CONFIG_CODA_FS Coda is an advanced network filesystem, similar to NFS in that it enables you to mount filesystems of a remote server and access them with regular Unix commands as if they were sitting on your hard disk. Coda has several advantages over NFS: support for disconnected operation (e.g. for laptops), read/write server replication, security model for authentication and encryption, persistent client caches and write back caching. If you say Y here, your Linux box will be able to act as a Coda *client*. You will need user level code as well, both for the client and server. Servers are currently user level, i.e. need no kernel support. Please read Documentation/filesystems/coda.txt and check out the Coda home page http://www.coda.cs.cmu.edu (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile the coda client support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called coda.o. NCP filesystem support (to mount NetWare volumes) CONFIG_NCP_FS NCP (NetWare Core Protocol) is a protocol that runs over IPX and is used by Novell NetWare clients to talk to file servers. It is to IPX what NFS is to TCP/IP, if that helps. Saying Y here allows you to mount NetWare file server volumes and to access them just like any other Unix directory. For details, please read the file Documentation/filesystems/ncpfs.txt in the kernel source and the IPX-HOWTO on ftp://metalab.unc.edu/pub/Linux/docs/howto. You do not have to say Y here if you want your Linux box to act as a file *server* for Novell NetWare clients. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ncpfs.o. Say N unless you are connected to a Novell network. Packet signatures CONFIG_NCPFS_PACKET_SIGNING NCP allows packets to be signed for stronger security. If you want security, say Y. Normal users can leave it off. To be able to use packet signing you must use ncpfs > 2.0.12. Proprietary file locking CONFIG_NCPFS_IOCTL_LOCKING Allows locking of records on remote volumes. Say N unless you have special applications which are able to utilize this locking scheme. Clear remove/delete inhibit when needed CONFIG_NCPFS_STRONG Allows manipulation of files flagged as Delete or Rename Inhibit. To use this feature you must mount volumes with the ncpmount parameter "-s" (ncpfs-2.0.12 and newer). Say Y unless you are not mounting volumes with -f 444. Use NFS namespace when available CONFIG_NCPFS_NFS_NS Allows you to utilize NFS namespace on NetWare servers. It brings you case sensitive filenames. Say Y. You can disable it at mount-time with the `-N nfs' parameter of ncpmount. Use OS2/LONG namespace when available CONFIG_NCPFS_OS2_NS Allows you to utilize OS2/LONG namespace on NetWare servers. Filenames in this namespace are limited to 255 characters, they are case insensitive, and case in names is preserved. Say Y. You can disable it at mount time with the -N os2 parameter of ncpmount. Lowercase DOS filenames on LONG namespace volume CONFIG_NCPFS_SMALLDOS If you say Y here, every filename on a NetWare server volume using the OS2/LONG namespace will be converted to lowercase characters. (For regular NetWare file server volumes with DOS namespace, this is done automatically, even if you say N here.) Saying N here will give you these filenames in uppercase. This is only a cosmetic option since the OS2/LONG namespace is case insensitive. The only major reason for this option is backward compatibility when moving from DOS to OS2/LONG namespace support. Long filenames (created by Win95) will not be affected. This option does not solve the problem that filenames appear differently under Linux and under Windows, since Windows does an additional conversions on the client side. You can achieve similar effects by saying Y to "Allow using of Native Language Support" below. Allow mounting of volume subdirectories CONFIG_NCPFS_MOUNT_SUBDIR Allows you to mount not only whole servers or whole volumes, but also subdirectories from a volume. It can be used to reexport data and so on. There is no reason to say N, so Y is recommended unless you count every byte. To utilize this feature you must use ncpfs-2.0.12 or newer. NDS interserver authentication domains CONFIG_NCPFS_NDS_DOMAINS This allows storing NDS private keys in kernel space where they can be used to authenticate another server as interserver NDS accesses need it. You must use ncpfs-2.0.12.1 or newer to utilize this feature. Say Y if you are using NDS connections to NetWare servers. Do not say Y if security is primary for you because root can read your session key (from /proc/kcore). Allow using of Native Language Support CONFIG_NCPFS_NLS Allows you to use codepages and I/O charsets for file name translation between the server file system and input/output. This may be useful, if you want to access the server with other operating systems, e.g. Windows 95. See also NLS for more Information. To select codepages and I/O charsets use ncpfs-2.2.0.13 or newer. Symbolic links and mode permission bits CONFIG_NCPFS_EXTRAS This enables the use of symbolic links and an execute permission bit on NCPFS. The file server need not have long name space or NFS name space loaded for these to work. To use the new attributes, it is recommended to use the flags '-f 600 -d 755' on the ncpmount command line. nls codepage 437 CONFIG_NLS_CODEPAGE_437 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used in the United States and parts of Canada. This is recommended. nls codepage 737 CONFIG_NLS_CODEPAGE_737 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used for Greek. If unsure, say N. nls codepage 775 CONFIG_NLS_CODEPAGE_775 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used for the Baltic Rim Languages. If unsure, say N. nls codepage 850 CONFIG_NLS_CODEPAGE_850 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used for much of Europe -- United Kingdom, Germany, Spain, Italy, and [add more countries here]. It has some characters useful to many European languages that are not part of the US codepage 437. If unsure, say Y. nls codepage 852 CONFIG_NLS_CODEPAGE_852 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the Latin 2 codepage used by DOS for much of Central and Eastern Europe. It has all the required characters for these languages: Albanian, Croatian, Czech, English, Finnish, Hungarian, Irish, German, Polish, Romanian, Serbian (Latin transcription), Slovak, Slovenian, and Sorbian. nls codepage 855 CONFIG_NLS_CODEPAGE_855 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Cyrillic. nls codepage 857 CONFIG_NLS_CODEPAGE_857 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Turkish. nls codepage 860 CONFIG_NLS_CODEPAGE_860 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Portuguese. nls codepage 861 CONFIG_NLS_CODEPAGE_861 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Icelandic. nls codepage 862 CONFIG_NLS_CODEPAGE_862 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Hebrew. nls codepage 863 CONFIG_NLS_CODEPAGE_863 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Canadian French. nls codepage 864 CONFIG_NLS_CODEPAGE_864 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Arabic. nls codepage 865 CONFIG_NLS_CODEPAGE_865 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for the Nordic European countries. nls codepage 866 CONFIG_NLS_CODEPAGE_866 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Cyrillic/Russian. nls codepage 869 CONFIG_NLS_CODEPAGE_869 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Greek. ### ### Why do we have two codepages for Greek and Cyrillic? ### nls codepage 874 CONFIG_NLS_CODEPAGE_874 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Thai. nls iso8859-1 CONFIG_NLS_ISO8859_1 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 1 character set, which covers most West European languages such as Albanian, Catalan, Danish, Dutch, English, Faeroese, Finnish, French, German, Galician, Irish, Icelandic, Italian, Norwegian, Portuguese, Spanish, and Swedish. It is also the default for the US. If unsure, say Y. nls iso8859-2 CONFIG_NLS_ISO8859_2 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 2 character set, which works for most Latin-written Slavic and Central European languages: Czech, German, Hungarian, Polish, Rumanian, Croatian, Slovak, Slovene. nls iso8859-3 CONFIG_NLS_ISO8859_3 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 3 character set, which is popular with authors of Esperanto, Galician, Maltese, and Turkish. nls iso8859-4 CONFIG_NLS_ISO8859_4 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 4 character set which introduces letters for Estonian, Latvian, and Lithuanian. It is an incomplete predecessor of Latin 6. nls iso8859-5 CONFIG_NLS_ISO8859_5 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-5, a Cyrillic character set with which you can type Bulgarian, Byelorussian, Macedonian, Russian, Serbian, and Ukrainian. Note that the charset KOI8-R is preferred in Russia. nls iso8859-6 CONFIG_NLS_ISO8859_6 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-6, the Arabic character set. nls iso8859-7 CONFIG_NLS_ISO8859_7 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-7, the Modern Greek character set. nls iso8859-8 CONFIG_NLS_ISO8859_8 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-8, the Hebrew character set. nls iso8859-9 CONFIG_NLS_ISO8859_9 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 5 character set, and it replaces the rarely needed Icelandic letters in Latin 1 with the Turkish ones. Useful in Turkey. nls iso8859-10 CONFIG_NLS_ISO8859_10 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 6 character set, which adds the last Inuit (Greenlandic) and Sami (Lappish) letters that were missing in Latin 4 to cover the entire Nordic area. nls iso8859-14 CONFIG_NLS_ISO8859_14 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 8 character set, which adds the last accented vowels for Welsh (and Manx Gaelic) that were missing in Latin 1. http://linux.speech.cymru.org/ has further information. nls iso8859-15 CONFIG_NLS_ISO8859_15 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 9 character set, which covers most West European languages such as Albanian, Catalan, Danish, Dutch, English, Estonian, Faeroese, Finnish, French, German, Galician, Irish, Icelandic, Italian, Norwegian, Portuguese, Spanish, and Swedish. Latin 9 is an update to Latin 1 (ISO 8859-1) that removes a handful of rarely used characters and instead adds support for Estonian, corrects the support for French and Finnish, and adds the new Euro character. If unsure, say Y. nls koi8-r CONFIG_NLS_KOI8_R If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the preferred Russian character set. Virtual terminal CONFIG_VT If you say Y here, you will get support for terminal devices with display and keyboard devices. These are called "virtual" because you can run several virtual terminals (also called virtual consoles) on one physical terminal. This is rather useful, for example one virtual terminal can collect system messages and warnings, another one can be used for a text-mode user session, and a third could run an X session, all in parallel. Switching between virtual terminals is done with certain key combinations, usually Alt-. The setterm command ("man setterm") can be used to change the properties (such as colors) of a virtual terminal. You need at least one virtual terminal device in order to make use of your keyboard and monitor. Therefore, only people configuring an embedded system would want to say N here in order to save some memory; the only way to log into such a system is then via a serial or network connection. If unsure, say Y, or else you won't be able to do much with your new shiny Linux system :-) Support for console on virtual terminal CONFIG_VT_CONSOLE The system console is the device which receives all kernel messages and warnings and which allows logins in single user mode. If you answer Y here, a virtual terminal (the device used to interact with a physical terminal) can be used as system console. This is the most common mode of operations, so you should say Y here unless you want the kernel messages be output only to a serial port (in which case you should say Y to "Console on serial port", below). If you do say Y here, by default the currently visible virtual terminal (/dev/tty0) will be used as system console. You can change that with a kernel command line option such as "console=tty3" which would use the third virtual terminal as system console. (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) If unsure, say Y. Software generated cursor CONFIG_SOFTCURSOR If you say Y here, you'll be able to do lots of nice things with the cursors of your virtual consoles -- for example turn them into non-blinking block cursors which are more visible on laptop screens, or change their colors depending on the virtual console they're on. See Documentation/VGA-softcursor.txt for more information. Support for PowerMac keyboard CONFIG_MAC_KEYBOARD This option allows you to use an ADB keyboard attached to your machine. Note that this disables any other (ie. PS/2) keyboard support, even if your machine is physically capable of using both at the same time. If you use an ADB keyboard (4 pin connector), say Y here. If you use a PS/2 keyboard (6 pin connector), say N here. Standard/generic serial support CONFIG_SERIAL This selects whether you want to include the driver for the standard serial ports. The standard answer is Y. People who might say N here are those that are setting up dedicated Ethernet WWW/FTP servers, or users that have one of the various bus mice instead of a serial mouse and don't intend to use their machine's standard serial port for anything. (Note that the Cyclades and Stallion multi serial port drivers do not need this driver built in for them to work.) If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called serial.o. [WARNING: Do not compile this driver as a module if you are using non-standard serial ports, since the configuration information will be lost when the driver is unloaded. This limitation may be lifted in the future.] BTW1: If you have a mouseman serial mouse which is not recognized by the X window system, try running gpm first. BTW2: If you intend to connect a so-called Winmodem to your machine's serial port, forget it. These modems are crippled and require proprietary drivers which are only available under Windows. Most people will say Y or M here, so that they can use serial mice, modems and similar devices connecting to the standard serial ports. Support for console on serial port CONFIG_SERIAL_CONSOLE If you say Y here, it will be possible to use a serial port as the system console (the system console is the device which receives all kernel messages and warnings and which allows logins in single user mode). This could be useful if some terminal or printer is connected to that serial port. Even if you say Y here, the currently visible virtual console (/dev/tty0) will still be used as the system console by default, but you can alter that using a kernel command line option such as "console=ttyS1". (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) If you don't have a VGA card installed and you say Y here, the kernel will automatically use the first serial line, /dev/ttyS0, as system console. If unsure, say N. Support for PowerMac serial ports CONFIG_MAC_SERIAL If you have Macintosh style serial ports (8 pin mini-DIN), say Y here. If you also have regular serial ports and enable the driver for them, you can't currently use the serial console feature. Comtrol Rocketport support CONFIG_ROCKETPORT This is a driver for the Comtrol Rocketport cards which provide multiple serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called rocket.o. Digiboard Intelligent async support CONFIG_DIGIEPCA This is a driver for Digi International's Xx, Xeve, and Xem series of cards which provide multiple serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. This driver supports the original PC (ISA) boards as well as PCI, and EISA. If you have a card like this, say Y here and read the file Documentation/digiepca.txt. NOTE: There is another, separate driver for the Digiboard PC boards: "Digiboard PC/Xx Support" below. You should (and can) only select one of the two drivers. If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called epca.o. Digiboard PC/Xx Support CONFIG_DIGI This is a driver for the Digiboard PC/Xe, PC/Xi, and PC/Xeve cards that give you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read the file Documentation/digiboard.txt. If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called pcxx.o. SDL RISCom/8 card support CONFIG_RISCOM8 This is a driver for the SDL Communications RISCom/8 multiport card, which gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read the file Documentation/riscom8.txt. Also it's possible to say M here and compile this driver as kernel loadable module; the module will be called riscom8.o. Specialix IO8+ card support CONFIG_SPECIALIX This is a driver for the Specialix IO8+ multiport card (both the ISA and the PCI version) which gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read the file Documentation/specialix.txt. Also it's possible to say M here and compile this driver as kernel loadable module which will be called specialix.o. Specialix DTR/RTS pin is RTS CONFIG_SPECIALIX_RTSCTS The Specialix card can only support either RTS or DTR. If you say N here, the driver will use the pin as "DTR" when the tty is in software handshake mode. If you say Y here or hardware handshake is on, it will always be RTS. Read the file Documentation/specialix.txt for more information. Cyclades async mux support CONFIG_CYCLADES This is a driver for a card that gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. For information about the Cyclades-Z card, read drivers/char/README.cycladesZ. As of 1.3.9x kernels, this driver's minor numbers start at 0 instead of 32. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called cyclades.o. If you haven't heard about it, it's safe to say N. Cyclades-Z interrupt mode operation (EXPERIMENTAL) CONFIG_CYZ_INTR The Cyclades-Z family of multiport cards allows 2 (two) driver op modes: polling and interrupt. In polling mode, the driver will check the status of the Cyclades-Z ports every certain amount of time (which is called polling cycle and is configurable). In interrupt mode, it will use an interrupt line (IRQ) in order to check the status of the Cyclades-Z ports. The default op mode is polling. If unsure, say N. Stallion multiport serial support CONFIG_STALDRV Stallion cards give you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you say Y here, you will be asked for your specific card model in the next questions. Make sure to read drivers/char/README.stallion in this case. If you have never heard about all this, it's safe to say N. Stallion EasyIO or EC8/32 support CONFIG_STALLION If you have an EasyIO or EasyConnection 8/32 multiport Stallion card, then this is for you; say Y. Make sure to read Documentation/stallion.txt. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called stallion.o. Stallion EC8/64, ONboard, Brumby support CONFIG_ISTALLION If you have an EasyConnection 8/64, ONboard, Brumby or Stallion serial multiport card, say Y here. Make sure to read Documentation/stallion.txt. To compile it as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called istallion.o. Microgate SyncLink adapter support CONFIG_SYNCLINK Provides support for the SyncLink ISA and PCI multiprotocol serial adapters. These adapters support asynchronous and HDLC bit synchronous communication up to 10Mbps (PCI adapter). This driver can only be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called synclink.o. If you want to do that, say M here. Synchronous HDLC line discipline support CONFIG_N_HDLC Allows synchronous HDLC communications with tty device drivers that support synchronous HDLC such as the Microgate SyncLink adapter. This driver can only be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called n_hdlc.o. If you want to do that, say M here. Hayes ESP serial port support CONFIG_ESPSERIAL This is a driver which supports Hayes ESP serial ports. Both single port cards and multiport cards are supported. Make sure to read Documentation/hayes-esp.txt. To compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called esp.o. If unsure, say N. Multi-Tech multiport card support CONFIG_ISI This is a driver for the Multi-Tech cards which provide several serial ports. The driver is experimental and can currently only be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). Please read Documentation/modules.txt. The module will be called isicom.o Unix98 PTY support CONFIG_UNIX98_PTYS A pseudo terminal (PTY) is a software device consisting of two halves: a master and a slave. The slave device behaves identical to a physical terminal; the master device is used by a process to read data from and write data to the slave, thereby emulating a terminal. Typical programs for the master side are telnet servers and xterms. Linux has traditionally used the BSD-like names /dev/ptyxx for masters and /dev/ttyxx for slaves of pseudo terminals. This scheme has a number of problems. The GNU C library glibc 2.1 and later, however, supports the Unix98 naming standard: in order to acquire a pseudo terminal, a process opens /dev/ptmx; the number of the pseudo terminal is then made available to the process and the pseudo terminal slave can be accessed as /dev/pts/. What was traditionally /dev/ttyp2 will then be /dev/pts/2, for example. The entries in /dev/pts/ are created on the fly by a virtual filesystem; therefore, if you say Y here you should say Y to "/dev/pts filesystem for Unix98 PTYs" as well. If you want to say Y here, you need to have the C library glibc 2.1 or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*"). Read the instructions in Documentation/Changes pertaining to pseudo terminals. It's safe to say N. Maximum number of Unix98 PTYs in use (0-2048) CONFIG_UNIX98_PTY_COUNT The maximum number of Unix98 PTYs that can be used at any one time. The default is 256, and should be enough for desktop systems. Server machines which support incoming telnet/rlogin/ssh connections and/or serve several X terminals may want to increase this: every incoming connection and every xterm uses up one PTY. When not in use, each additional set of 256 PTYs occupy approximately 8 KB of kernel memory on 32-bit architectures. Parallel printer support CONFIG_PRINTER If you intend to attach a printer to the parallel port of your Linux box (as opposed to using a serial printer; if the connector at the printer has 9 or 25 holes ["female"], then it's serial), say Y. Also read the Printing-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the corresponding drivers into the kernel. If you want to compile this driver as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called lp.o. If you have several parallel ports, you can specify which ports to use with the "lp" kernel command line option. (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) The syntax of the "lp" command line option can be found in drivers/char/lp.c. If you have more than 3 printers, you need to increase the LP_NO variable in lp.c. Support IEEE1284 status readback CONFIG_PRINTER_READBACK If your printer conforms to IEEE 1284, it may be able to provide a status indication when you read from it (for example, with `cat /dev/lp1'). To use this feature, say Y here. Mouse Support (not serial mice) CONFIG_MOUSE This is for machines with a bus mouse or a PS/2 mouse as opposed to a serial mouse. Most people have a regular serial MouseSystem or Microsoft mouse (made by Logitech) that plugs into a COM port (rectangular with 9 or 25 pins). These people say N here. If you have something else, read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and say Y here. If you have a laptop, you either have to check the documentation or experiment a bit to find out whether the trackball is a serial mouse or not; it's best to say Y here for you. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about non-serial mice. If unsure, say Y. Logitech busmouse support CONFIG_BUSMOUSE Logitech mouse connected to a proprietary interface card. It's generally a round connector with 9 pins. Note that the newer mice made by Logitech don't use the Logitech protocol anymore; for those, you don't need this option. You want to read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called busmouse.o. If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. PS/2 mouse (aka "auxiliary device") support CONFIG_PSMOUSE The PS/2 mouse connects to a special mouse port that looks much like the keyboard port (small circular connector with 6 pins). This way, the mouse does not use any serial ports. This port can also be used for other input devices like light pens, tablets, keypads. Compaq, AST and IBM all use this as their mouse port on currently shipping machines. The trackballs of some laptops are PS/2 mice also. In particular, the C&T 82C710 mouse on TI Travelmates is a PS/2 mouse. Although PS/2 mice are not technically bus mice, they are explained in detail in the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. When using a PS/2 mouse, you can get problems if you want to use the mouse both on the Linux console and under X. Using the "-R" option of the Linux mouse managing program gpm (available from ftp://metalab.unc.edu/pub/Linux/system/Daemons) solves this problem, or you can get the "mconv" utility also from metalab. C&T 82C710 mouse port support (as on TI Travelmate) CONFIG_82C710_MOUSE This is a certain kind of PS/2 mouse used on the TI Travelmate. If you are unsure, try first to say N here and come back if the mouse doesn't work. Read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. PC110 digitizer pad support CONFIG_PC110_PAD This drives the digitizer pad on the IBM PC110 palmtop (see http://toy.cabi.net; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). It can turn the digitizer pad into a PS/2 mouse emulation with tap gestures or into an absolute pad. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called pc110pad.o. Microsoft busmouse support CONFIG_MS_BUSMOUSE These animals (also called Inport mice) are connected to an expansion board using a round connector with 9 pins. If this is what you have, say Y and read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. Also be aware that several vendors talk about 'Microsoft busmouse' and actually mean PS/2 busmouse -- so count the pins on the connector. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called msbusmouse.o. ATIXL busmouse support CONFIG_ATIXL_BUSMOUSE This is a rare type of busmouse that is connected to the back of an ATI video card. Note that most ATI mice are actually Microsoft busmice. Read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called atixlmouse.o. If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. Support for PowerMac ADB mouse CONFIG_ADBMOUSE If you have an ADB mouse (4 pin connector) as is common on Macintoshes, say Y here. QIC-02 tape support CONFIG_QIC02_TAPE If you have a non-SCSI tape drive like that, say Y. Or, if you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called tpqic02.o. Do you want runtime configuration for QIC-02 CONFIG_QIC02_DYNCONF You can either configure this driver once and for all by editing a header file (include/linux/tpqic02.h), in which case you should say N, or you can fetch a program via anonymous FTP which is able to configure this driver during runtime. The program to do this is called 'qic02conf' and it is part of the tpqic02-support-X.Y.tar.gz support package. If you want to use the qic02conf program, say Y. Floppy tape drive (QIC-80/40/3010/3020/TR-1/TR-2/TR-3) support CONFIG_FTAPE If you have a tape drive that is connected to your floppy controller, say Y here. Some tape drives (like the Seagate "Tape Store 3200" or the Iomega "Ditto 3200" or the Exabyte "Eagle TR-3") come with a "high speed" controller of their own. These drives (and their companion controllers) are also supported if you say Y here. If you have a special controller (such as the CMS FC-10, FC-20, Mountain Mach-II, or any controller that is based on the Intel 82078 FDC like the high speed controllers by Seagate and Exabyte and Iomega's "Ditto Dash") you must configure it by selecting the appropriate entries from the "Floppy tape controllers" sub-menu below and possibly modify the default values for the IRQ and DMA channel and the IO base in ftape's configuration menu. If you want to use your floppy tape drive on a PCI-bus based system, please read the file drivers/char/ftape/README.PCI. The ftape kernel driver is also available as a runtime loadable module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called ftape.o. Note that the Ftape-HOWTO is out of date (sorry) and documents the older version 2.08 of this software but still contains useful information. There is a web page with more recent documentation at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape/ . This page always contains the latest release of the ftape driver and useful information (backup software, ftape related patches and documentation, FAQ). (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape.) Note that the file system interface has changed quite a bit compared to previous versions of ftape. Please read Documentation/ftape.txt. The file system interface for ftape CONFIG_ZFTAPE Normally, you want to say Y or M. DON'T say N here or you WON'T BE ABLE TO USE YOUR FLOPPY TAPE DRIVE. The ftape module itself no longer contains the routines necessary to interface with the kernel VFS layer (i.e. to actually write data to and read data from the tape drive). Instead the file system interface (i.e. the hardware independent part of the driver) has been moved to a separate module. If you say M zftape will be compiled as a runtime loadable module ( = code which can be inserted in and removed from the running kernel whenever you want). In this case you should read Documentation/modules.txt. The module will be called zftape.o. Regardless of whether you say Y or M here, an additional runtime loadable module called `zft-compressor.o' which contains code to support user transparent on-the-fly compression based on Ross William's lzrw3 algorithm will be produced. If you have enabled the kernel module loader (i.e. have said Y to "Kernel module loader support", above) then `zft-compressor.o' will be loaded automatically by zftape when needed. Despite its name, zftape does NOT use compression by default. The file Documentation/ftape.txt contains a short description of the most important changes in the file system interface compared to previous versions of ftape. The ftape home page http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape/ contains further information (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). IMPORTANT NOTE: zftape can read archives created by previous versions of ftape and provide file mark support (i.e. fast skipping between tape archives) but previous version of ftape will lack file mark support when reading archives produced by zftape. Default block size for zftape CONFIG_ZFT_DFLT_BLK_SZ If unsure leave this at its default value, i.e. 10240. Note that you specify only the default block size here. The block size can be changed at run time using the MTSETBLK tape operation with the MTIOCTOP ioctl (i.e. with "mt -f /dev/qft0 setblk #BLKSZ" from the shell command line). The probably most striking difference between zftape and previous versions of ftape is the fact that all data must be written or read in multiples of a fixed block size. The block size defaults to 10240 which is what GNU tar uses. The values for the block size should be either 1 or multiples of 1024 up to a maximum value of 63488 (i.e. 62 K). If you specify `1' then zftape's builtin compression will be disabled. Reasonable values are `10240' (GNU tar's default block size), `5120' (afio's default block size), `32768' (default block size some backup programs assume for SCSI tape drives) or `1' (no restriction on block size, but disables builtin compression). Number of DMA buffers CONFIG_FT_NR_BUFFERS Please leave this at `3' unless you REALLY know what you are doing. It is not necessary to change this value. Values below 3 make the proper use of ftape impossible, values greater than 3 are a waste of memory. You can change the amount of DMA memory used by ftape at runtime with "mt -f /dev/qft0 setdrvbuffer #NUMBUFFERS". Each buffer wastes 32 KB of memory. Please note that this memory cannot be swapped out. Procfs entry for ftape CONFIG_FT_PROC_FS Optional. Saying Y will result in creation of a directory `/proc/ftape' under the proc file system. The files can be viewed with your favorite pager (i.e. use "more /proc/ftape/history" or "less /proc/ftape/history" or simply "cat /proc/ftape/history"). The file will contain some status information about the inserted cartridge, the kernel driver, your tape drive, the floppy disk controller and the error history for the most recent use of the kernel driver. Saying Y will enlarge the size of the ftape driver by approximately 2 KB. WARNING: When compiling ftape as a module (i.e. saying M to "Floppy tape drive") it is dangerous to use ftape's proc file system interface. Accessing `/proc/ftape' while the module is unloaded will result in a kernel Oops. This cannot be fixed from inside ftape. Controlling the amount of debugging output of ftape CONFIG_FT_NORMAL_DEBUG This option controls the amount of debugging output the ftape driver is ABLE to produce; it does not increase or diminish the debugging level itself. If unsure, leave this at its default setting, i.e. choose "Normal". Ftape can print lots of debugging messages to the system console resp. kernel log files. Reducing the amount of possible debugging output reduces the size of the kernel module by some KB, so it might be a good idea to use "None" for emergency boot floppies. If you want to save memory then the following strategy is recommended: leave this option at its default setting "Normal" until you know that the driver works as expected, afterwards reconfigure the kernel, this time specifying "Reduced" or "None" and recompile and install the kernel as usual. Note that choosing "Excessive" debugging output does not increase the amount of debugging output printed to the console but only makes it possible to produce "Excessive" debugging output. Please read Documentation/ftape.txt for a short description how to control the amount of debugging output. The floppy drive controller for ftape CONFIG_FT_STD_FDC Only change this setting if you have a special controller. If you didn't plug any add-on card into your computer system but just plugged the floppy tape cable into the already existing floppy drive controller then you don't want to change the default setting, i.e. choose "Standard". Choose "MACH-2" if you have a Mountain Mach-2 controller. Choose "FC-10/FC-20" if you have a Colorado FC-10 or FC-20 controller. Choose "Alt/82078" if you have another controller that is located at an IO base address different from the standard floppy drive controller's base address of `0x3f0', or uses an IRQ (interrupt) channel different from `6', or a DMA channel different from `2'. This is necessary for any controller card that is based on Intel's 82078 FDC such as Seagate's, Exabyte's and Iomega's "high speed" controllers. If you choose something other than "Standard" then please make sure that the settings for the IO base address and the IRQ and DMA channel in the configuration menus below are correct. Use the manual of your tape drive to determine the correct settings! If you are already successfully using your tape drive with another operating system then you definitely should use the same settings for the IO base, the IRQ and DMA channel that have proven to work with that other OS. Note that this menu lets you specify only the default setting for the hardware setup. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you have said Y to "Floppy tape drive") or module load time (i.e. if you have said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. If you want to use your floppy tape drive on a PCI-bus based system, please read the file drivers/char/ftape/README.PCI. IO base of the floppy disk controller used with Ftape CONFIG_FT_FDC_BASE You don't need to specify a value if the following default settings for the base IO address are correct: <<< MACH-2 : 0x1E0 >>> <<< FC-10/FC-20: 0x180 >>> <<< Secondary : 0x370 >>> Secondary refers to a secondary FDC controller like the "high speed" controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash. Please make sure that the setting for the IO base address specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already successfully using the tape drive with another operating system then you definitely should use the same settings for the IO base that has proven to work with that other OS. Note that this menu lets you specify only the default setting for the IO base. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you specified Y to "Floppy tape drive") or module load time (i.e. if you have said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. IRQ channel for the floppy disk controller used with Ftape CONFIG_FT_FDC_IRQ You don't need to specify a value if the following default settings for the interrupt channel are correct: <<< MACH-2 : 6 >>> <<< FC-10/FC-20: 9 >>> <<< Secondary : 6 >>> Secondary refers to secondary a FDC controller like the "high speed" controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash. Please make sure that the setting for the IO base address specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already successfully using the tape drive with another operating system then you definitely should use the same settings for the IO base that has proven to work with that other OS. Note that this menu lets you specify only the default setting for the IRQ channel. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you said Y to "Floppy tape drive") or module load time (i.e. if you said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. DMA channel for the floppy disk controller used with Ftape CONFIG_FT_FDC_DMA You don't need to specify a value if the following default settings for the DMA channel are correct: <<< MACH-2 : 2 >>> <<< FC-10/FC-20: 3 >>> <<< Secondary : 2 >>> Secondary refers to a secondary FDC controller like the "high speed" controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash. Please make sure that the setting for the IO base address specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already successfully using the tape drive with another operating system then you definitely should use the same settings for the IO base that has proven to work with that other OS. Note that this menu lets you specify only the default setting for the DMA channel. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you said Y to "Floppy tape drive") or module load time (i.e. if you said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. FDC FIFO Threshold before requesting DMA service CONFIG_FT_FDC_THR Set the FIFO threshold of the FDC. If this is higher the DMA controller may serve the FDC after a higher latency time. If this is lower, fewer DMA transfers occur leading to less bus contention. You may try to tune this if ftape annoys you with "reduced data rate because of excessive overrun errors" messages. However, this doesn't seem to have too much effect. If unsure, don't touch the initial value, i.e. leave it at "8". FDC maximum data rate CONFIG_FT_FDC_MAX_RATE With some motherboard/FDC combinations ftape will not be able to run your FDC/tape drive combination at the highest available speed. If this is the case you'll encounter "reduced data rate because of excessive overrun errors" messages and lots of retries before ftape finally decides to reduce the data rate. In this case it might be desirable to tell ftape beforehand that it need not try to run the tape drive at the highest available speed. If unsure, leave this disabled, i.e. leave it at 2000 bits/sec. MTRR control and configuration CONFIG_MTRR On Intel P6 family processors (Pentium Pro, Pentium II and later) the Memory Type Range Registers (MTRRs) may be used to control processor access to memory ranges. This is most useful when you have a video (VGA) card on a PCI or AGP bus. Enabling write-combining allows bus write transfers to be combined into a larger transfer before bursting over the PCI/AGP bus. This can increase performance of image write operations 2.5 times or more. This option creates a /proc/mtrr file which may be used to manipulate your MTRRs. Typically the X server should use this. This should have a reasonably generic interface so that similar control registers on other processors can be easily supported. The Cyrix 6x86, 6x86MX and M II processors have Address Range Registers (ARRs) which provide a similar functionality to MTRRs. For these, the ARRs are used to emulate the MTRRs. The AMD K6-2 (stepping 8 and above) and K6-3 processors have two MTRRs. These are supported. The Centaur C6 (WinChip) has 8 MCRs, allowing write-combining. These are supported. Saying Y here also fixes a problem with buggy SMP BIOSes which only set the MTRRs for the boot CPU and not the secondary CPUs. This can lead to all sorts of problems. You can safely say Y even if your machine doesn't have MTRRs, you'll just add about 3k to your kernel. See Documentation/mtrr.txt for more information. Main CPU frequency, only for DEC alpha machine CONFIG_FT_ALPHA_CLOCK On some DEC Alpha machines the CPU clock frequency cannot be determined automatically, so you need to specify it here ONLY if running a DEC Alpha, otherwise this setting has no effect. Zilog serial support CONFIG_SUN_ZS This driver does not exist at this point, so you might as well say N. Double Talk PC internal speech card support CONFIG_DTLK This driver is for the DoubleTalk PC, a speech synthesizer manufactured by RC Systems (http://www.rcsys.com/). It is also called the `internal DoubleTalk'. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called dtlk.o. Advanced Power Management CONFIG_APM APM is a BIOS specification for saving power using several different techniques. This is mostly useful for battery powered laptops with APM compliant BIOSes. If you say Y here, the system time will be reset after a RESUME operation, the /proc/apm device will provide battery status information, and user-space programs will receive notification of APM "events" (e.g. battery status change). If you select "Y" here, you can disable actual use of the APM BIOS by passing the "apm=off" option to the kernel at boot time. Note that the APM support is almost completely disabled for machines with more than one CPU. Supporting software is available; for more information, read the Battery Powered Linux mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. This driver does not spin down disk drives (see the hdparm(8) manpage ("man 8 hdparm") for that), and it doesn't turn off VESA-compliant "green" monitors. This driver does not support the TI 4000M TravelMate and the ACER 486/DX4/75 because they don't have compliant BIOSes. Many "green" desktop machines also don't have compliant BIOSes, and this driver may cause those machines to panic during the boot phase. If you are running Linux on a laptop, you may also want to read the Linux Laptop home page on the WWW at http://www.cs.utexas.edu/users/kharker/linux-laptop/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Generally, if you don't have a battery in your machine, there isn't much point in using this driver and you should say N. If you get random kernel OOPSes or reboots that don't seem to be related to anything, try disabling/enabling this option (or disabling/enabling APM in your BIOS). Some other things you should try when experiencing seemingly random, "weird" problems: 1) make sure that you have enough swap space and that it is enabled. 2) pass the "no-hlt" option to the kernel 3) switch on floating point emulation in the kernel and pass the "no387" option to the kernel 4) pass the "floppy=nodma" option to the kernel 5) pass the "mem=4M" option to the kernel (thereby disabling all but the first 4 MB of RAM) 6) make sure that the CPU is not over clocked. 7) read the sig11 FAQ at http://www.bitwizard.nl/sig11/ 8) disable the cache from your BIOS settings 9) install a fan for the video card or exchange video RAM 10) install a better fan for the CPU 11) exchange RAM chips 12) exchange the motherboard. Ignore USER SUSPEND CONFIG_APM_IGNORE_USER_SUSPEND This option will ignore USER SUSPEND requests. On machines with a compliant APM BIOS, you want to say N. However, on the NEC Versa M series notebooks, it is necessary to say Y because of a BIOS bug. Enable APM at boot time CONFIG_APM_DO_ENABLE Enable APM features at boot time. From page 36 of the APM BIOS specification: "When disabled, the APM BIOS does not automatically power manage devices, enter the Standby State, enter the Suspend State, or take power saving steps in response to CPU Idle calls." This driver will make CPU Idle calls when Linux is idle (unless this feature is turned off -- see "Do CPU IDLE calls", below). This should always save battery power, but more complicated APM features will be dependent on your BIOS implementation. You may need to turn this option off if your computer hangs at boot time when using APM support, or if it beeps continuously instead of suspending. Turn this off if you have a NEC UltraLite Versa 33/C or a Toshiba T400CDT. This is off by default since most machines do fine without this feature. Do CPU IDLE calls CONFIG_APM_CPU_IDLE Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop. On some machines, this can activate improved power savings, such as a slowed CPU clock rate, when the machine is idle. These idle calls are made after the idle loop has run for some length of time (e.g., 333 mS). On some machines, this will cause a hang at boot time or whenever the CPU becomes idle. (On machines with more than one CPU, this option does nothing.) Enable console blanking using APM CONFIG_APM_DISPLAY_BLANK Enable console blanking using the APM. Some laptops can use this to turn off the LCD backlight when the screen blanker of the Linux virtual console blanks the screen. Note that this is only used by the virtual console screen blanker, and won't turn off the backlight when using the X Window system. This also doesn't have anything to do with your VESA-compliant power-saving monitor. Further, this option doesn't work for all laptops -- it might not turn off your backlight at all, or it might print a lot of errors to the console, especially if you are using gpm. Power off on shutdown CONFIG_APM_POWER_OFF Enable the ability to power off the computer after the Linux kernel is halted. You will need software (e.g., a suitable version of the halt(8) command ("man 8 halt")) to cause the computer to power down. Recent versions of the sysvinit package available from ftp://metalab.unc.edu/pub/Linux/system/daemons/init/ (user: anonymous) contain support for this ("halt -p" shuts down Linux and powers off the computer, if executed from runlevel 0). As with the other APM options, this option may not work reliably with some APM BIOS implementations. Ignore multiple suspend/standby events CONFIG_APM_IGNORE_MULTIPLE_SUSPEND This option is necessary on the IBM Thinkpad 560, but should work on all other laptops. When the APM BIOS returns multiple suspend or standby events while one is already being processed they will be ignored. Without this the Thinkpad 560 has troubles with the user level daemon apmd, and with the PCMCIA package pcmcia-cs. Ignore multiple suspend/resume cycles CONFIG_APM_IGNORE_SUSPEND_BOUNCE This option is necessary on the Dell Inspiron 3200 and others, but should be safe for all other laptops. When enabled, a system suspend event that occurs within three seconds of a resume is ignored. Without this the Inspiron will shut itself off a few seconds after you open the lid, requiring you to press the power button to resume it a second time. Say Y. RTC stores time in GMT CONFIG_APM_RTC_IS_GMT Say Y here if your RTC (Real Time Clock a.k.a. hardware clock) stores the time in GMT (Greenwich Mean Time). Say N if your RTC stores localtime. It is in fact recommended to store GMT in your RTC, because then you don't have to worry about daylight savings time changes. The only reason not to use GMT in your RTC is if you also run a broken OS that doesn't understand GMT. Allow interrupts during APM BIOS calls CONFIG_APM_ALLOW_INTS Normally we disable external interrupts while we are making calls to the APM BIOS as a measure to lessen the effects of a badly behaving BIOS implementation. The BIOS should reenable interrupts if it needs to. Unfortunately, some BIOSes do not - especially those in many of the newer IBM Thinkpads. If you experience hangs when you suspend, try setting this to Y. Otherwise, say N. Watchdog Timer Support CONFIG_WATCHDOG If you say Y here (and to one of the following options) and create a character special file /dev/watchdog with major number 10 and minor number 130 using mknod ("man mknod"), you will get a watchdog, i.e.: subsequently opening the file and then failing to write to it for longer than 1 minute will result in rebooting the machine. This could be useful for a networked machine that needs to come back online as fast as possible after a lock-up. There's both a watchdog implementation entirely in software (which can sometimes fail to reboot the machine) and a driver for hardware watchdog boards, which are more robust and can also keep track of the temperature inside your computer. For details, read Documentation/watchdog.txt in the kernel source. The watchdog is usually used together with the watchdog daemon which is available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/linux/system/daemons/watchdog. This daemon can check a larger part of the system. For instance it can monitor NFS connections and reboot the machine when the process table is full or the workload exceeds a predefined value. If unsure, say N. Disable watchdog shutdown on close CONFIG_WATCHDOG_NOWAYOUT The default watchdog behaviour (which you get if you say N here) is to stop the timer if the process managing it closes the file /dev/watchdog. It's always remotely possible that this process might get killed. If you say Y here, the watchdog cannot be stopped once it has been started. WDT Watchdog timer CONFIG_WDT If you have a WDT500P or WDT501P watchdog board, say Y here, otherwise N. It is not possible to probe for this board, which means that you have to set the IO port and IRQ it uses in the kernel source at the top of drivers/char/wdt.c. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called wdt.o. WDT501 features CONFIG_WDT_501 Saying Y here and creating a character special file /dev/temperature with major number 10 and minor number 131 ("man mknod") will give you a thermometer inside your computer: reading from /dev/temperature yields one byte, the temperature in degrees Fahrenheit. This works only if you have a WDT501P watchdog board installed. Fan Tachometer CONFIG_WDT_501_FAN Enable the Fan Tachometer on the WDT501. Only do this if you have a fan tachometer actually set up. Software Watchdog CONFIG_SOFT_WATCHDOG A software monitoring watchdog. This will fail to reboot your system from some situations that the hardware watchdog will recover from. Equally it's a lot cheaper to install. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called softdog.o. Berkshire Products PC Watchdog CONFIG_PCWATCHDOG This is the driver for the Berkshire Products PC Watchdog card. This card simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. This driver is like the WDT501 driver but for different hardware. Please read Documentation/pcwd-watchdog.txt. The PC watchdog cards can be ordered from http://www.berkprod.com. Some example rc.local files are available from ftp://ftp.bitgate.com. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called pcwd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Most people will say N. Acquire SBC Watchdog Timer CONFIG_ACQUIRE_WDT This is the driver for the hardware watchdog on the PSC-6x86 Single Board Computer produced by Acquire Inc (and others). This watchdog simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. This driver is like the WDT501 driver but for different hardware. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called pscwdt.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Most people will say N. Enhanced Real Time Clock Support CONFIG_RTC If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you will get access to the real time clock built into your computer. Every PC has such a clock built in. It can be used to generate signals from as low as 1Hz up to 8192Hz, and can also be used as a 24 hour alarm. It reports status information via the file /proc/rtc and its behaviour is set by various ioctls on /dev/rtc. If you run Linux on a multiprocessor machine and said Y to "Symmetric Multi Processing" above, you should say Y here to read and set the RTC clock in an SMP compatible fashion. If you think you have a use for such a device (such as periodic data sampling), then say Y here, and read Documentation/rtc.txt for details. Tadpole ANA H8 Support CONFIG_H8 The Hitachi H8/337 is a microcontroller used to deal with the power and thermal environment. If you say Y here, you will be able to communicate with it via a character special device. If unsure, say N. /dev/nvram support CONFIG_NVRAM If you say Y here and create a character special file /dev/nvram with major number 10 and minor number 144 using mknod ("man mknod"), you get read and write access to the 50 bytes of non-volatile memory in the real time clock (RTC), which is contained in every PC and most Ataris. This memory is conventionally called "CMOS RAM" on PCs and "NVRAM" on Ataris. /dev/nvram may be used to view settings there, or to change them (with some utility). It could also be used to frequently save a few bits of very important data that may not be lost over power-off and for which writing to disk is too insecure. Note however that most NVRAM space in a PC belongs to the BIOS and you should NEVER idly tamper with it. See Ralf Brown's interrupt list for a guide to the use of CMOS bytes by your BIOS. On Atari machines, /dev/nvram is always configured and does not need to be selected. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called nvram.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atomwide Serial Support CONFIG_ATOMWIDE_SERIAL If you have an Atomwide Serial card for an Acorn system, say Y to this option. The driver can handle 1, 2, or 3 port cards. If unsure, say N The Serial Port Dual Serial Port CONFIG_DUALSP_SERIAL If you have the Serial Port's dual serial card for an Acorn system, say Y to this option. If unsure, say N Joystick support CONFIG_JOYSTICK If you have a joystick, 6dof controller, gamepad, steering wheel, weapon control system or something like that you can say Y here to enable generic support for these controllers. You will also need to say Y or M to at least one of the hardware specific drivers. This will make the controllers available as /dev/jsX devices. Please read the file Documentation/joystick.txt which contains more information and the location of the joystick package that you'll need. Classic PC analog CONFIG_JOY_ANALOG Say Y here if you have a controller that connects to the PC gameport. This supports many different types, including joysticks with throttle control, with rudders, or with extensions like additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. For more information on how to use the driver please read Documentation/joystick.txt FPGaming and MadCatz A3D CONFIG_JOY_ASSASSIN Say Y here if you have an FPGaming or MadCatz controller using the A3D protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Gravis GrIP CONFIG_JOY_GRAVIS Say Y here if you have a Gravis controller using the GrIP protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Logitech ADI CONFIG_JOY_LOGITECH Say Y here if you have a Logitech controller using the ADI protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Microsoft SideWinder CONFIG_JOY_SIDEWINDER Say Y here if you have a Microsoft controller using the Digital Overdrive protocol over PC gameport. For more information on how to use the driver please read Documentation/joystick.txt ThrustMaster DirectConnect CONFIG_JOY_THRUSTMASTER Say Y here if you have a ThrustMaster controller using the DirectConnect (BSP) protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Creative Labs Blaster CONFIG_JOY_CREATIVE Say Y here if you have a Creative Labs controller using the Blaster protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt PDPI Lightning 4 card CONFIG_JOY_LIGHTNING Say Y here if you have a PDPI Lightning 4 gamecard and an analog joystick or gamepad connected to it. For more information on how to use the driver please read Documentation/joystick.txt Trident 4DWave and Aureal Vortex gameport CONFIG_JOY_PCI Say Y here if you have a Trident 4DWave DX/NX or Aureal Vortex 1/2 card and want to use its gameport in its enhanced digital mode with and ordinary analog joystick. For more information on how to use the driver please read Documentation/joystick.txt Magellan and Space Mouse CONFIG_JOY_MAGELLAN Say Y here if you have a Magellan or Space Mouse 6DOF controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt SpaceTec SpaceOrb 360 and SpaceBall Avenger CONFIG_JOY_SPACEORB Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt SpaceTec SpaceBall 4000 FLX CONFIG_JOY_SPACEBALL Say Y here if you have a SpaceTec SpaceBall 4000 FLX controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt Logitech WingMan Warrior CONFIG_JOY_WARRIOR Say Y here if you have a Logitech WingMan Warrior controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt NES, SNES, N64, PSX, Multi CONFIG_JOY_CONSOLE Say Y here if you have a Nintendo Entertainment System gamepad, Super Nintendo Entertainment System gamepad, Nintendo 64 gamepad, Sony PlayStation gamepad or a Multisystem -- Atari, Amiga, Commodore, Amstrad CPC joystick connected to your parallel port. For more information on how to use the driver please read Documentation/joystick.txt and Documentation/joystick-parport.txt Sega, Multi CONFIG_JOY_DB9 Say Y here if you have a Sega Master System gamepad, Sega Genesis gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga, Commodore, Amstrad CPC joystick connected to your parallel port. For more information on how to use the driver please read Documentation/joystick.txt and Documentation/joystick-parport.txt TurboGraFX interface CONFIG_JOY_TURBOGRAFX Say Y here if you have the TurboGraFX interface by Steffen Schwenke, and want to use it with Multiststem -- Atari, Amiga, Commodore, Amstrad CPC joystick. For more information on how to use the driver please read Documentation/joystick.txt and Documentation/joystick-parport.txt Amiga joysticks CONFIG_JOY_AMIGA Say Y here if you have an Amiga with a digital joystick connected to it. For more information on how to use the driver please read Documentation/joystick.txt Atomwide Serial Support CONFIG_ATOMWIDE_SERIAL If you have an Atomwide Serial card for an Acorn system, say Y to this option. The driver can handle 1, 2, or 3 port cards. If unsure, say N The Serial Port Dual Serial Port CONFIG_DUALSP_SERIAL If you have the Serial Port's dual serial card for an Acorn system, say Y to this option. If unsure, say N NetWinder Button CONFIG_NWBUTTON If you enable this driver and create a character device node /dev/nwbutton with major and minor numbers 10 and 158 ("man mknod"), then every time the orange button is pressed a number of times, the number of times the button was pressed will be written to that device. This is most useful for applications, as yet unwritten, which perform actions based on how many times the button is pressed in a row. Do not hold the button down for too long, as the driver does not alter the behaviour of the hardware reset circuitry attached to the button; it will still execute a hard reset if the button is held down for longer than approximately five seconds. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called nwbutton.o. Most people will answer Y to this question and "Reboot Using Button" below to be able to initiate a system shutdown from the button. Reboot Using Button CONFIG_NWBUTTON_REBOOT If you enable this option, then you will be able to initiate a system shutdown and reboot by pressing the orange button a number of times. The number of presses to initiate the shutdown is two by default, but this can be altered by modifying the value of NUM_PRESSES_REBOOT in nwbutton.h and recompiling the driver or, if you compile the driver as a module, you can specify the number of presses at load time with "insmod button reboot_count=". Sound card support CONFIG_SOUND If you have a sound card in your computer, i.e. if it can say more than an occasional beep, say Y. Be sure to have all the information about your sound card and its configuration down (I/O port, interrupt and DMA channel), because you will be asked for it. You want to read the Sound-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. General information about the modular sound system is contained in the files Documentation/sound/Introduction. The file Documentation/sound/README.OSS contains some slightly outdated but still useful information as well. If you have a PnP sound card and you want to configure it at boot time using the ISA PnP tools (read http://www.roestock.demon.co.uk/isapnptools/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)), then you need to compile the sound card support as a module ( = code which can be inserted in and removed from the running kernel whenever you want) and load that module after the PnP configuration is finished. To do this, say M here and read Documentation/modules.txt as well as Documentation/sound/README.modules; the module will be called soundcore.o. I'm told that even without a sound card, you can make your computer say more than an occasional beep, by programming the PC speaker. Kernel patches and supporting utilities to do that are in the pcsp package, available at ftp://ftp.infradead.org/pub/pcsp/. OSS sound modules CONFIG_SOUND_OSS OSS is the Open Sound System suite of sound card drivers. They make sound programming easier since they provide a common API. Say Y or M here (the module will be called sound.o) if you haven't found a driver for your sound card above, then pick your driver from the list below. Persistent DMA buffers CONFIG_SOUND_DMAP Linux can often have problems allocating DMA buffers for ISA sound cards on machines with more than 16MB of RAM. This is because ISA DMA buffers must exist below the 16MB boundary and it is quite possible that a large enough free block in this region cannot be found after the machine has been running for a while. If you say Y here the DMA buffers (64Kb) will be allocated at boot time and kept until the shutdown. This option is only useful if you said Y to "OSS sound modules", above. If you said M to "OSS sound modules" then you can get the persistent DMA buffer functionality by passing the command-line argument "dmabuf=1" to the sound.o module. Say Y unless you have 16MB or less RAM or a PCI sound card. Support for Aztech Sound Galaxy (non-PnP) cards CONFIG_SOUND_SGALAXY This module initializes the older non Plug and Play sound galaxy cards from Aztech. It supports the Waverider Pro 32 - 3D and the Galaxy Washington 16. Support for AD1816(A) based cards (EXPERIMENTAL) CONFIG_SOUND_AD1816 Say M here if you have a sound card based on the Analog Devices AD1816(A) chip. NOTE: This driver is still EXPERIMENTAL. See Documentation/sound/AD1816 for further information. Yamaha OPL3-SA1 audio controller CONFIG_SOUND_OPL3SA1 Say Y or M if you have a Yamaha OPL3-SA1 sound chip, which is usually built into motherboards. Read Documentation/sound/OPL3-SA for details. ProAudioSpectrum 16 support CONFIG_SOUND_PAS Answer Y only if you have a Pro Audio Spectrum 16, ProAudio Studio 16 or Logitech SoundMan 16 sound card. Don't answer Y if you have some other card made by Media Vision or Logitech since they are not PAS16 compatible. 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support CONFIG_SOUND_SB Answer Y if you have an original Sound Blaster card made by Creative Labs or a 100% hardware compatible clone (like the Thunderboard or SM Games). For an unknown card you may answer Y if the card claims to be Sound Blaster-compatible. Please read the file Documentation/sound/Soundblaster. You should also say Y here for cards based on the Avance Logic ALS-007 chip (read Documentation/sound/ALS007) and for cards based on ESS chips (read Documentation/sound/ESS1868 and Documentation/sound/ESS). If you have an SB AWE 32 or SB AWE 64, say Y here and also to "Additional lowlevel drivers" and to "SB32/AWE support" below and read Documentation/sound/INSTALL.awe. If you have an IBM Mwave card, say Y here and read Documentation/sound/mwave. You can say M here to compile this driver as a module; the module is called sb.o. #Loopback MIDI device support #CONFIG_SOUND_VMIDI ### ### somebody please fill this in. ### # Gravis Ultrasound support CONFIG_SOUND_GUS Say Y here for any type of Gravis Ultrasound card, including the GUS or GUS MAX. See also Documentation/sound/ultrasound for more information on configuring this card with modules. MPU-401 support (NOT for SB16) CONFIG_SOUND_MPU401 Be careful with this question. The MPU401 interface is supported by all sound cards. However, some natively supported cards have their own driver for MPU401. Enabling this MPU401 option with these cards will cause a conflict. Also, enabling MPU401 on a system that doesn't really have a MPU401 could cause some trouble. If your card was in the list of supported cards, look at the card specific instructions in the drivers/sound/Readme.cards file. It's safe to answer Y if you have a true MPU401 MIDI interface card. 6850 UART support CONFIG_SOUND_UART6850 This option enables support for MIDI interfaces based on the 6850 UART chip. This interface is rarely found on sound cards. It's safe to answer N to this question. VIDC Sound CONFIG_VIDC_SOUND Say Y here for ARM systems with the VIDC video controller and 16-bit Linear sound DACs. If unsure, say N. PSS (AD1848, ADSP-2115, ESC614) support CONFIG_SOUND_PSS Answer Y or M if you have an Orchid SW32, Cardinal DSP16, Beethoven ADSP-16 or some other card based on the PSS chipset (AD1848 codec + ADSP-2115 DSP chip + Echo ESC614 ASIC CHIP). For more information on how to compile it into the kernel or as a module see the file Documentation/sound/PSS. Enable PSS mixer (Beethoven ADSP-16 and other compatible) CONFIG_PSS_MIXER Answer Y for Beethoven ADSP-16. You may try to say Y also for other cards if they have master volume, bass, treble, and you can't control it under Linux. If you answer N for Beethoven ADSP-16, you can't control master volume, bass, treble and synth volume. If you said M to "PSS support" above, you may enable or disable this PSS mixer with the module parameter pss_mixer. For more information see the file Documentation/sound/PSS. Have DSPxxx.LD firmware file CONFIG_PSS_HAVE_BOOT If you have the DSPxxx.LD file or SYNTH.LD file for you card, say Y to include this file. Without this file the synth device (OPL) may not work. Full pathname of DSPxxx.LD firmware file CONFIG_PSS_BOOT_FILE Enter the full pathname of your DSPxxx.LD file or SYNTH.LD file, starting from /. 16 bit sampling option of GUS (_NOT_ GUS MAX) CONFIG_SOUND_GUS16 Answer Y if you have installed the 16 bit sampling daughtercard on your GUS. Answer N if you have a GUS MAX, since saying Y here disables GUS MAX support. GUS MAX support CONFIG_SOUND_GUSMAX Answer Y only if you have a Gravis Ultrasound MAX. Microsoft Sound System support CONFIG_SOUND_MSS Again think carefully before answering Y to this question. It's safe to answer Y if you have the original Windows Sound System card made by Microsoft or Aztech SG 16 Pro (or NX16 Pro). Also you may say Y in case your card is NOT among these: ATI Stereo F/X, AdLib, Audio Excell DSP16, Cardinal DSP16, Ensoniq SoundScape (and compatibles made by Reveal and Spea), Gravis Ultrasound, Gravis Ultrasound ACE, Gravis Ultrasound Max, Gravis Ultrasound with 16 bit option, Logitech Sound Man 16, Logitech SoundMan Games, Logitech SoundMan Wave, MAD16 Pro (OPTi 82C929), Media Vision Jazz16, MediaTriX AudioTriX Pro, Microsoft Windows Sound System (MSS/WSS), Mozart (OAK OTI-601), Orchid SW32, Personal Sound System (PSS), Pro Audio Spectrum 16, Pro Audio Studio 16, Pro Sonic 16, Roland MPU-401 MIDI interface, Sound Blaster 1.0, Sound Blaster 16, Sound Blaster 16ASP, Sound Blaster 2.0, Sound Blaster AWE32, Sound Blaster Pro, TI TM4000M notebook, ThunderBoard, Turtle Beach Tropez, Yamaha FM synthesizers (OPL2, OPL3 and OPL4), 6850 UART MIDI Interface. For cards having native support in VoxWare, consult the card specific instructions in drivers/sound/Readme.cards. Some drivers have their own MSS support and saying Y to this option will cause a conflict. SoundPro chip support CONFIG_SOUND_SPRO If you have a (usually Taiwanese) motherboard with the SoundPro chip on board, say Y here. Otherwise say N. Ensoniq Soundscape support CONFIG_SOUND_SSCAPE Answer Y if you have a sound card based on the Ensoniq SoundScape chipset. Such cards are being manufactured at least by Ensoniq, Spea and Reveal (Reveal makes also other cards). MediaTriX AudioTriX Pro support CONFIG_SOUND_TRIX Answer Y if you have the AudioTriX Pro sound card manufactured by MediaTrix. Have TRXPRO.HEX firmware file CONFIG_TRIX_HAVE_BOOT The MediaTrix AudioTrix Pro has an on-board microcontroller which needs to be initialized by downloading the code from the file TRXPRO.HEX in the DOS driver directory. If you don't have the TRXPRO.HEX file handy you may skip this step. However, the SB and MPU-401 modes of AudioTrix Pro will not work without this file! Full pathname of TRXPRO.HEX firmware file CONFIG_TRIX_BOOT_FILE Enter the full pathname of your TRXPRO.HEX file, starting from /. Support for OPTi MAD16 and/or Mozart based cards CONFIG_SOUND_MAD16 Answer Y if your card has a Mozart (OAK OTI-601) or MAD16 (OPTi 82C928 or 82C929 or 82C931) audio interface chip. For the 82C931, please read drivers/sound/README.C931. These chips are currently quite common so it's possible that many no-name cards have one of them. In addition the MAD16 chip is used in some cards made by known manufacturers such as Turtle Beach (Tropez), Reveal (some models) and Diamond (latest ones). Note however that the Tropez sound cards have their own driver; if you have one of those, say N here and Y or M to "Full support for Turtle Beach WaveFront", below. See also Documentation/sound/Opti and Documentation/sound/MAD16 for more information on setting these cards up as modules. VIA 82Cxxx audio support CONFIG_SOUND_VIA82CXXX Answer Y if you have a VIA82C686 chip, typically found built onto a motherboard. Full support for Turtle Beach WaveFront synth/sound cards CONFIG_SOUND_WAVEFRONT Answer Y or M if you have a Tropez Plus, Tropez or Maui sound card and read the files Documentation/sound/Wavefront and Documentation/sound/Tropez+. Support MIDI in older MAD16 based cards (requires SB) CONFIG_MAD16_OLDCARD Answer Y (or M) if you have an older card based on the C928 or Mozart chipset and you want to have MIDI support. If you enable this option you also need to enable support for Sound Blaster. Support for Crystal CS4232 based (PnP) cards CONFIG_SOUND_CS4232 Say Y here if you have a card based on the Crystal CS4232 chip set, which uses its own Plug and Play protocol. See Documentation/sound/CS4232 for more information on configuring this card. Support for Yamaha OPL3-SA2, SA3, and SAx based PnP cards CONFIG_SOUND_OPL3SA2 Say Y or M if you have a card based on one of these Yamaha sound chipsets. Read Documentation/sound/OPL3-SA2 for more information on configuring these cards. Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers CONFIG_SOUND_MAUI Say Y here if you have a Turtle Beach Wave Front, Maui, or Tropez sound card. Have OSWF.MOT firmware file CONFIG_MAUI_HAVE_BOOT Turtle Beach Maui and Tropez sound cards have a microcontroller which needs to be initialized prior to use. OSWF.MOT is a file distributed with the card's DOS/Windows drivers. Answer Y if you have this file. Full pathname of OSWF.MOT firmware file CONFIG_MAUI_BOOT_FILE Enter the full pathname of your OSWF.MOT file, starting from /. Support for Turtle Beach MultiSound Classic, Tahiti, Monterey CONFIG_SOUND_MSNDCLAS Say M here if you have a Turtle Beach MultiSound Classic, Tahiti or Monterey (not for the Pinnacle or Fiji). See Documentation/sound/MultiSound for important information about this driver. Full pathname of MSNDINIT.BIN firmware file CONFIG_MSNDCLAS_INIT_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. Full pathname of MSNDPERM.BIN firmware file CONFIG_MSNDCLAS_PERM_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. Support for Turtle Beach MultiSound Pinnacle, Fiji CONFIG_SOUND_MSNDPIN Say M here if you have a Turtle Beach MultiSound Pinnacle or Fiji. See Documentation/sound/MultiSound for important information about this driver. Full pathname of PNDSPINI.BIN firmware file CONFIG_MSNDPIN_INIT_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. Full pathname of PNDSPERM.BIN firmware file CONFIG_MSNDPIN_PERM_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. MSND Pinnacle have S/PDIF I/O CONFIG_MSNDPIN_DIGITAL If you have the S/PDIF daughter board for the Pinnacle or Fiji, answer Y here; otherwise, say N. If you have this, you will be able to play and record from the S/PDIF port (digital signal). See Documentation/sound/MultiSound for information on how to make use of this capability. MSND Pinnacle non-PnP Mode CONFIG_MSNDPIN_NONPNP The Pinnacle and Fiji card resources can be configured either with PnP, or through a configuration port. Say Y here if your card is NOT in PnP mode. For the Pinnacle, configuration in non-PnP mode allows use of the IDE and joystick peripherals on the card as well; these do not show up when the card is in PnP mode. Specifying zero for any resource of a device will disable the device. If you are running the card in PnP mode, you must say N here and use isapnptools to configure the card's resources. MSND Pinnacle config port CONFIG_MSNDPIN_CFG This is the port which the Pinnacle and Fiji uses to configure the card's resources when not in PnP mode. If your card is in PnP mode, then be sure to say N to the previous option, "MSND Pinnacle Non-PnP Mode". MSND buffer size (kB) CONFIG_MSND_FIFOSIZE Configures the size of each audio buffer, in kilobytes, for recording and playing in the MultiSound drivers (both the Classic and Pinnacle). Larger values reduce the chance of data overruns at the expense of overall latency. If unsure, use the default. /dev/dsp and /dev/audio support CONFIG_SOUND_AUDIO If you say Y here, you will get the /dev/dsp and /dev/audio devices; these are the analog-digital and digital-analog converter devices and are very useful, so say Y. MIDI interface support CONFIG_SOUND_MIDI Answering N disables /dev/midixx devices and access to any MIDI ports using /dev/sequencer and /dev/music. This option also affects any MPU401 and/or General MIDI compatible devices. Answer Y. FM synthesizer (YM3812/OPL-3) support CONFIG_SOUND_YM3812 Answer Y if your card has a FM chip made by Yamaha (OPL2/OPL3/OPL4). Answering Y is usually a safe and recommended choice, however some cards may have software (TSR) FM emulation. Enabling FM support with these cards may cause trouble (I don't currently know of any such cards, however). Please read the file Documentation/sound/OPL3 if your card has an OPL3 chip. If unsure, say Y. Sun Audio support CONFIG_SUN_AUDIO This is support for the sound cards on Sun workstations. The code does not exist yet, so you might as well say N here. Additional low level drivers CONFIG_LOWLEVEL_SOUND If you need additional low level sound drivers which have not yet appeared, say Y. The answer to this question does not directly affect the kernel; saying Y will simply cause this configure script to present you with more options. If unsure, say Y. ACI mixer (miroPCM12/PCM20) CONFIG_ACI_MIXER ACI (Audio Command Interface) is a protocol used to communicate with the microcontroller on some sound cards produced by miro, e.g. the miroSOUND PCM12 and PCM20. The main function of the ACI is to control the mixer and to get a product identification. This Voxware ACI driver currently only supports the ACI functions on the miroSOUND PCM12 and PCM20 cards. On the PCM20, ACI also controls the radio tuner. This is supported in the video4linux radio-miropcm20 driver. SB32/AWE support CONFIG_AWE32_SYNTH Say Y here if you have a Sound Blaster SB32, AWE32-PnP, SB AWE64 or similar sound card. See Documentation/sound/README.awe, Documentation/sound/AWE32 and the Soundblaster-AWE mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini for more info. Gallant's Audio Excel DSP 16 support (SC-6000 and SC-6600) CONFIG_AEDSP16 Answer Y if you have a Gallant's Audio Excel DSP 16 card. This driver supports Audio Excel DSP 16 but not the III nor PnP versions of this card. The Gallant's Audio Excel DSP 16 card can emulate either an SBPro or a Microsoft Sound System card, so you should have said Y to either "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support" or "Microsoft Sound System support", above, and you need to answer the "MSS emulation" and "SBPro emulation" questions below accordingly. You should say Y to one and only one of these two questions. Read the drivers/sound/lowlevel/README.aedsp16 file and the head of drivers/sound/lowlevel/aedsp16.c as well as Documentation/sound/AudioExcelDSP16 to get more information about this driver and its configuration. I/O base for Audio Excel DSP 16 CONFIG_AEDSP16_BASE This is the base I/O address of the Audio Excel DSP 16 card. It must be 220 or 240. If you compiled aedsp16.o as a module you can specify this parameter as 'io=0xNNN'. Audio Excel DSP 16 (SBPro emulation) CONFIG_AEDSP16_SBPRO Answer Y if you want your audio card to emulate Sound Blaster Pro. You should then say Y to "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support" and N to "Audio Excel DSP 16 (MSS emulation)". Audio Excel DSP 16 IRQ CONFIG_AEDSP16_SB_IRQ This is the IRQ of the Audio Excel DSP 16 card. It must be 5, 7, 9, 10 or 11. If you compiled aedsp16.o as a module you can specify this parameter as 'irq=NN'. Audio Excel DSP 16 DMA CONFIG_AEDSP16_SB_DMA This is the IRQ of the Audio Excel DSP 16 card. It must be 0, 1 or 3. If you compiled aedsp16.o as a module you can specify this parameter as 'dma=NN'. Audio Excel DSP 16 (MSS emulation) CONFIG_AEDSP16_MSS Answer Y if you want your audio card to emulate Microsoft Sound System. You should then say Y to "Microsoft Sound System support" and say N to "Audio Excel DSP 16 (SBPro emulation)". Audio Excel DSP 16 IRQ CONFIG_AEDSP16_MSS_IRQ This is the IRQ of the Audio Excel DSP 16 card. It must be 5, 7, 9, 10 or 11. If you compiled aedsp16.o as a module you can specify this parameter as 'irq=NN'. Audio Excel DSP 16 DMA CONFIG_AEDSP16_MSS_DMA This is the IRQ of the Audio Excel DSP 16 card. It must be 0, 1 or 3. If you compiled aedsp16.o as a module you can specify this parameter as 'dma=NN'. SC-6600 based audio cards (new Audio Excel DSP 16) CONFIG_SC6600 The SC6600 is the new version of DSP mounted on the Audio Excel DSP 16 cards. Find in the manual the FCC ID of your audio card and answer Y if you have an SC6600 DSP. SC-6600 Joystick Interface CONFIG_SC6600_JOY Say Y here in order to use the joystick interface of the Audio Excel DSP 16 card. SC-6600 CDROM Interface CONFIG_SC6600_CDROM This is used to activate the the CDROM interface of the Audio Excel DSP 16 card. Enter: 0 for Sony, 1 for Panasonic, 2 for IDE, 4 for no CDROM present. Audio Excel DSP 16 (MPU401 emulation) CONFIG_AEDSP16_MPU401 Answer Y if you want your audio card to emulate the MPU-401 midi interface. You should then also say Y to "MPU-401 support". Note that the I/O base for MPU-401 support of aedsp16 is the same you have selected for "MPU-401 support". If you are using this driver as a module you have to specify the MPU I/O base address with the parameter 'mpu_base=0xNNN'. MPU401 IRQ for Audio Excel DSP 16 CONFIG_AEDSP16_MPU_IRQ This is the IRQ of the MPU-401 emulation of your Audio Excel DSP 16 card. It must be 5, 7, 9, 10 or 0 (to disable MPU-401 interface). If you compiled aedsp16.o as a module you can specify this parameter as 'mpu_irq=NN'. SGI Visual Workstation on-board audio CONFIG_SOUND_VWSND Say Y or M if you have an SGI Visual Workstation and you want to be able to use its on-board audio. Read Documentation/sound/visws for more info on this driver's capabilities. Ensoniq ES1370 based PCI sound cards CONFIG_SOUND_ES1370 Say Y or M if you have a PCI sound card utilizing the Ensoniq ES1370 chipset, such as Ensoniq's AudioPCI (non-97). To find out if your sound card uses an ES1370 without removing your computer's cover, use lspci -n and look for the PCI ID 1274:5000. Since Ensoniq was bought by Creative Labs, Sound Blaster 64/PCI models are either ES1370 or ES1371 based. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/es1370. Joystick support at boot time CONFIG_SOUND_ES1370_JOYPORT_BOOT Say Y here to use the joystick port of your sound card. Ensoniq ES1371 based PCI sound cards CONFIG_SOUND_ES1371 Say Y or M if you have a PCI sound card utilizing the Ensoniq ES1371 chipset, such as Ensoniq's AudioPCI97. To find out if your sound card uses an ES1371 without removing your computer's cover, use lspci -n and look for the PCI ID 1274:1371. Since Ensoniq was bought by Creative Labs, Sound Blaster 64/PCI models are either ES1370 or ES1371 based. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/es1371. Joystick support at boot time CONFIG_SOUND_ES1371_JOYPORT_BOOT Say Y here to use the joystick port of your sound card. Gameport I/O-range selection CONFIG_SOUND_ES1371_GAMEPORT Select the I/O-range of the gameport on a ES1371 based sound card. The card uses 8 ioports and the gameport is available at all eight ioports. Legal hexadecimal values are 200, 208, 210 and 218. The joystick driver will by default use 0x201. Leave the default 200 unless you have a joystick not attached to your sound card. ESS Solo1 based PCI sound cards (eg. SC1938) CONFIG_SOUND_ESSSOLO1 Say Y or M if you have a PCI sound card utilizing the ESS Technology Solo1 chip. To find out if your sound card uses a Solo1 chip without removing your computer's cover, use lspci -n and look for the PCI ID 125D:1969. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/solo1. S3 SonicVibes based PCI sound cards CONFIG_SOUND_SONICVIBES Say Y or M if you have a PCI sound card utilizing the S3 SonicVibes chipset. To find out if your sound card uses a SonicVibes chip without removing your computer's cover, use lspci -n and look for the PCI ID 5333:CA00. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/sonicvibes. Rockwell WaveArtist CONFIG_SOUND_WAVEARTIST Say Y here to include support for the Rockwell WaveArtist sound system. This driver is mainly for the NetWinder. NeoMagic 256AV/256ZX sound chipsets CONFIG_SOUND_NM256 Say M here to include audio support for the NeoMagic 256AV/256ZX chipsets. These are the audio chipsets found in the Sony Z505S/SX/DX, some Sony F-series, and the Dell Latitude CPi and CPt laptops. It includes support for an AC97-compatible mixer and an apparently proprietary sound engine. See Documentation/sound/NM256 for further information. ESS Maestro sound chipsets CONFIG_SOUND_MAESTRO Say Y or M if you have a sound system driven by ESS's Maestro line of PCI sound chips. These include the Maestro 1, Maestro 2, and Maestro 2E. See Documentation/sound/Maestro for more details. Are you using a crosscompiler CONFIG_CROSSCOMPILE Say Y here if you are compiling the kernel on a different architecture than the one it is intended to run on. Build fp exception handler module CONFIG_MIPS_FPE_MODULE Build the floating point exception handler module. This option is only useful for people working on the floating point exception handler. If you don't, say N. Remote GDB kernel debugging CONFIG_REMOTE_DEBUG If you say Y here, it will be possible to remotely debug the MIPS kernel using gdb. This enlarges your kernel image disk size by several megabytes and requires a machine with more than 16 MB, better 32 MB RAM to avoid excessive linking time. This is only useful for kernel hackers. If unsure, say N. Magic System Request Key support CONFIG_MAGIC_SYSRQ If you say Y here, you will have some control over the system even if the system crashes for example during kernel debugging (e.g., you will be able to flush the buffer cache to disk, reboot the system immediately or dump some status information). This is accomplished by pressing various keys while holding SysRq (Alt+PrintScreen). The keys are documented in Documentation/sysrq.txt. Don't say Y unless you really know what this hack does. ISDN subsystem CONFIG_ISDN ISDN ("Integrated Services Digital Networks", called RNIS in France) is a special type of fully digital telephone service; it's mostly used to connect to your Internet service provider (with SLIP or PPP). The main advantage is that the speed is higher than ordinary modem/telephone connections, and that you can have voice conversations while downloading stuff. It only works if your computer is equipped with an ISDN card and both you and your service provider purchased an ISDN line from the phone company. For details, read http://alumni.caltech.edu/~dank/isdn/ on the WWW. This driver allows you to use an ISDN-card for networking connections and as dialin/out device. The isdn-tty's have a built in AT-compatible modem emulator. Network devices support autodial, channel-bundling, callback and caller-authentication without having a daemon running. A reduced T.70 protocol is supported with tty's suitable for German BTX. On D-Channel, the protocols EDSS1 (Euro-ISDN) and 1TR6 (German style) are supported. See Documentation/isdn/README for more information. If you want to compile the ISDN code as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called isdn.o. If unsure, say N. Support synchronous PPP CONFIG_ISDN_PPP Over digital connections such as ISDN, there is no need to synchronize sender and recipient's clocks with start and stop bits as is done over analog telephone lines. Instead, one can use "synchronous PPP". Saying Y here will include this protocol. This protocol is used by Cisco and Sun for example. So you want to say Y here if the other end of your ISDN connection supports it. You will need a special version of pppd (called ipppd) for using this feature. See Documentation/isdn/README.syncppp and Documentation/isdn/syncPPP.FAQ for more information. Support generic MP (RFC 1717) CONFIG_ISDN_MPP With synchronous PPP enabled, it is possible to increase throughput by bundling several ISDN-connections, using this protocol. See Documentation/isdn/README.syncppp for more information. Use VJ-compression with synchronous PPP CONFIG_ISDN_PPP_VJ This enables Van Jacobson header compression for synchronous PPP. Say Y if the other end of the connection supports it. Support audio via ISDN CONFIG_ISDN_AUDIO If you say Y here, the modem-emulator will support a subset of the EIA Class 8 Voice commands. Using a getty with voice-support (mgetty+sendfax by gert@greenie.muc.de with an extension, available with the ISDN utility package for example), you will be able to use your Linux box as an ISDN-answering machine. Of course, this must be supported by the lowlevel driver also. Currently, the HiSax driver is the only voice-supporting driver. See Documentation/isdn/README.audio for more information. X.25 PLP on top of ISDN CONFIG_ISDN_X25 This feature provides the X.25 protocol over ISDN connections. See Documentation/isdn/README.x25 for more information if you are thinking about using this. ISDN diversion services support CONFIG_ISDN_DIVERSION This option allows you to use some supplementary diversion services in conjunction with the HiSax driver on an EURO/DSS1 line. Supported options are CD (call deflection), CFU (Call forward unconditional), CFB (Call forward when busy) and CFNR (call forward not reachable). Additionally the actual CFU, CFB and CFNR state may be interrogated. The use of CFU, CFB, CFNR and interrogation may be limited to some countries. The keypad protocol is still not implemented. CD should work in all countries if the service has been subscribed to. Please read the file Documentation/isdn/README.diversion. ICN 2B and 4B support CONFIG_ISDN_DRV_ICN This enables support for two kinds of ISDN-cards made by a German company called ICN. 2B is the standard version for a single ISDN line with two B-channels, 4B supports two ISDN lines. For running this card, additional firmware is necessary, which has to be downloaded into the card using a utility which is distributed separately. See Documentation/isdn/README and README.icn for more information. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called icn.o. isdnloop support CONFIG_ISDN_DRV_LOOP This driver provides a virtual ISDN card. Its primary purpose is testing of linklevel features or configuration without getting charged by your service-provider for lots of phone calls. You need will need the loopctrl utility from the latest isdn4k-utils package to set up this driver. HiSax SiemensChipSet driver support CONFIG_ISDN_DRV_HISAX This is a driver supporting the Siemens chipset on various ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles S0-16.3, Teles S0-8, Teles/Creatix PnP, ITK micro ix1 and many compatibles). HiSax is just the name of this driver, not the name of any hardware. If you have a card with such a chipset, you should say Y here and also to the configuration option of the driver for your particular card, below. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called hisax.o. See Documentation/isdn/README.HiSax for more information on using this driver. HiSax Support for EURO/DSS1 CONFIG_HISAX_EURO Enable this if you have a EURO ISDN line. Support for german chargeinfo CONFIG_DE_AOC If you have german AOC, you can enable this to get the charginfo. Disable sending complete CONFIG_HISAX_NO_SENDCOMPLETE If you have trouble with some ugly exchanges or you live in Australia select this option. Disable sending low layer compatibility CONFIG_HISAX_NO_LLC If you have trouble with some ugly exchanges try to select this option. HiSax Support for german 1TR6 CONFIG_HISAX_1TR6 Enable this if you have a old german 1TR6 line. HiSax Support for Teles 16.0/8.0 CONFIG_HISAX_16_0 This enables HiSax support for the Teles ISDN-cards S0-16.0, S0-8 and many compatibles. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port/shmem settings. HiSax Support for Teles 16.3 or PNP or PCMCIA CONFIG_HISAX_16_3 This enables HiSax support for the Teles ISDN-cards S0-16.3 the Teles/Creatix PnP and the Teles PCMCIA. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Teles PCI CONFIG_HISAX_TELESPCI This enables HiSax support for the Teles PCI. See Documentation/isdn/README.HiSax on how to configure it. HiSax Support for Teles S0Box CONFIG_HISAX_S0BOX This enables HiSax support for the Teles/Creatix parallel port S0BOX. See Documentation/isdn/README.HiSax on how to configure it. HiSax Support for AVM A1 (Fritz) CONFIG_HISAX_AVM_A1 This enables HiSax support for the AVM A1 (aka "Fritz"). See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for AVM PnP/PCI (Fritz!PNP/PCI) CONFIG_HISAX_FRITZPCI This enables HiSax support for the AVM "Fritz!PnP" and "Fritz!PCI". See Documentation/isdn/README.HiSax on how to configure it. HiSax Support for AVM A1 PCMCIA (Fritz) CONFIG_HISAX_AVM_A1_PCMCIA This enables HiSax support for the AVM A1 "Fritz!PCMCIA"). See Documentation/isdn/README.HiSax on how to configure it. HiSax Support for Elsa cards CONFIG_HISAX_ELSA This enables HiSax support for the Elsa Mircolink ISA cards, for the Elsa Quickstep series cards and Elsa PCMCIA. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for ITK ix1-micro Revision 2 CONFIG_HISAX_IX1MICROR2 This enables HiSax support for the ITK ix1-micro Revision 2 card. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Eicon.Diehl Diva cards CONFIG_HISAX_DIEHLDIVA This enables HiSax support for the Eicon.Diehl Diva none PRO versions passive ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for ASUSCOM cards CONFIG_HISAX_ASUSCOM This enables HiSax support for the AsusCom and their OEM versions passive ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for TELEINT cards CONFIG_HISAX_TELEINT This enables HiSax support for the TELEINT SA1 semiactiv ISDN card. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for HFC-S based cards CONFIG_HISAX_HFCS This enables HiSax support for the HFC-S 2BDS0 based cards, like teles 16.3c. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Sedlbauer cards CONFIG_HISAX_SEDLBAUER This enables HiSax support for the Sedlbauer passive ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for USR Sportster internal TA CONFIG_HISAX_SPORTSTER This enables HiSax support for the USR Sportster internal TA card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for MIC card CONFIG_HISAX_MIC This enables HiSax support for the ITH MIC card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for NETjet card CONFIG_HISAX_NETJET This enables HiSax support for the NetJet from Traverse Technologies. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Niccy PnP/PCI card CONFIG_HISAX_NICCY This enables HiSax support for the Dr. Neuhaus Niccy PnP or PCI. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Siemens I-Surf card CONFIG_HISAX_ISURF This enables HiSax support for the Siemens I-Talk/I-Surf card with ISAR chip. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for HST Saphir card CONFIG_HISAX_HSTSAPHIR This enables HiSax support for the HST Saphir card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Telekom A4T card CONFIG_HISAX_BKM_A4T This enables HiSax support for the Telekom A4T card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Scitel Quadro card CONFIG_HISAX_SCT_QUADRO This enables HiSax support for the Scitel Quadro card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Gazel cards CONFIG_HISAX_GAZEL This enables HiSax support for the Gazel cards. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for HFC PCI-Bus cards CONFIG_HISAX_HFC_PCI This enables HiSax support for the HFC-S PCI 2BDS0 based cards. For more informations see under Documentation/isdn/README.hfc-pci. HiSax Support for Winbond W6692 based cards CONFIG_HISAX_W6692 This enables HiSax support for Winbond W6692 based PCI ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HiSax Support for Am7930 (EXPERIMENTAL) CONFIG_HISAX_AMD7930 This enables HiSax support for the AMD7930 chips on some SPARCs. This code is not finished yet. PCBIT-D support CONFIG_ISDN_DRV_PCBIT This enables support for the PCBIT ISDN-card. This card is manufactured in Portugal by Octal. For running this card, additional firmware is necessary, which has to be downloaded into the card using a utility which is distributed separately. See Documentation/isdn/README and Documentation/isdn/README.pcbit for more information. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called pcbit.o. Spellcaster support (EXPERIMENTAL) CONFIG_ISDN_DRV_SC This enables support for the Spellcaster BRI ISDN boards. This driver currently builds only in a modularized version ( = code which can be inserted in and removed from the running kernel whenever you want, details in Documentation/modules.txt); the module will be called sc.o. See Documentation/isdn/README.sc and http://www.spellcast.com for more information. Eicon.Diehl active card support CONFIG_ISDN_DRV_EICON Say Y here if you have an Eicon active ISDN card. In order to use this card, additional firmware is necessary, which has to be loaded into the card using the eiconctrl utility which is part of the latest isdn4k-utils package. Please read the file Documentation/isdn/README.eicon for more information. Eicon old-type card support CONFIG_ISDN_DRV_EICON_ISA Say Y here if you have an old-type Eicon active ISDN card. In order to use this card, additional firmware is necessary, which has to be loaded into the card using the eiconctrl utility which is part of the latest isdn4k-utils package. Please read the file Documentation/isdn/README.eicon for more information. Support AT-Fax Class 2 commands CONFIG_ISDN_TTY_FAX If you say Y here, the modem-emulator will support a subset of the Fax Class 2 commands. Using a getty with fax-support (mgetty+sendfax, hylafax), you will be able to use your Linux box as an ISDN-fax-machine. This must be supported by the lowlevel driver also. See Documentation/isdn/README.fax for more information. AVM CAPI2.0 support CONFIG_ISDN_DRV_AVMB1 This enables support for the AVM B1/T1 ISDN networking cards.In addition, a CAPI (Common ISDN Application Programming Interface, a standard making it easy for programs to access ISDN hardware, see http://www.capi.org/; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) interface for this card is provided. In order to use this card, additional firmware is necessary, which has to be downloaded into the card using a utility which is distributed separately. Please read the file Documentation/isdn/README.avmb1. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called avmb1.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AVM B1 ISA support CONFIG_ISDN_DRV_AVMB1_B1ISA Enable support for the ISA version of the AVM B1 card. AVM B1 PCI support CONFIG_ISDN_DRV_AVMB1_B1PCI Enable support for the PCI version of the AVM B1 card. AVM T1/T1-B ISA support CONFIG_ISDN_DRV_AVMB1_T1ISA Enable support for the AVM T1 T1B card. Note: This is a PRI card and handle 30 B-channels. AVM B1/M1/M2 PCMCIA support CONFIG_ISDN_DRV_AVMB1_B1PCMCIA Enable support for the PCMCIA version of the AVM B1 card. AVM T1/T1-B PCI support CONFIG_ISDN_DRV_AVMB1_T1PCI Enable support for the AVM T1 T1B card. Note: This is a PRI card and handle 30 B-channels. Verbose reason code reporting (kernel size +=7K) CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON If you say Y here, the AVM B1 driver will give verbose reasons for disconnecting. This will increase the size of the kernel by 7 KB. If unsure, say Y. IBM Active 2000 support (EXPERIMENTAL) CONFIG_ISDN_DRV_ACT2000 Say Y here if you have an IBM Active 2000 ISDN card. In order to use this card, additional firmware is necessary, which has to be loaded into the card using a utility which is part of the latest isdn4k-utils package. Please read the file Documentation/isdn/README.act2000 for more information. Support for AP1000 multicomputer CONFIG_AP1000 This enables support for a SPARC based parallel multi-computer called AP1000+. For details on our efforts to port Linux to this machine see http://cap.anu.edu.au/cap/projects/linux (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) or mail to hackers@cafe.anu.edu.au Support for Sun4 architecture CONFIG_SUN4 Say Y here if, and only if, your machine is a Sun4. Note that a kernel compiled with this option will run only on Sun4. (And the current version will probably work only on sun4/330.) SPARC ESP SCSI support CONFIG_SCSI_SUNESP This is the driver for the Sun ESP SCSI host adapter. The ESP chipset is present in most SPARC-based computers. SPARC /dev/openprom compatibility driver CONFIG_SUN_OPENPROMIO This driver provides user programs with an interface to the SPARC PROM device tree. The driver implements a SunOS-compatible interface and a NetBSD-compatible interface. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M and read Documentation/modules.txt. If unsure, say Y. Mostek real time clock support CONFIG_SUN_MOSTEK_RTC The Mostek RTC chip is used on all knows Sun computers except some JavaStation-s. For a JavaStation you need to say Y both here and to CONFIG_RTC. Say Y here unless you are building a special purpose kernel. # #Siemens SAB82532 serial support #CONFIG_SAB82532 ### ### Please someone fill these in. ### # # m68k-specific kernel options # Documented by Chris Lawrence et al. # Amiga support CONFIG_AMIGA This option enables support for the Amiga series of computers. If you plan to use this kernel on an Amiga, say Y here and browse the material available in Documentation/m68k; otherwise say N. Atari support CONFIG_ATARI This option enables support for the 68000-based Atari series of computers (including the TT, Falcon and Medusa). If you plan to use this kernel on an Atari, say Y here and browse the material available in Documentation/m68k; otherwise say N. Hades support CONFIG_HADES This option enables support for the Hades Atari clone. If you plan to use this kernel on a Hades, say Y here; otherwise say N. Macintosh support CONFIG_MAC This option enables support for the Apple Macintosh series of computers (yes, there is experimental support now, at least for part of the series). Say N unless you're willing to code the remaining necessary support. ;) HP9000/300 support CONFIG_HP300 This option enables support for the HP9000/300 series of workstations. Support for these machines is still very experimental. If you plan to try to use the kernel on such a machine say Y here. Everybody else says N. 68020 support CONFIG_M68020 If you anticipate running this kernel on a computer with a MC68020 processor, say Y. Otherwise, say N. Note that the 68020 requires a 68851 MMU (Memory Management Unit) to run Linux/m68k. 68030 support CONFIG_M68030 If you anticipate running this kernel on a computer with a MC68030 processor, say Y. Otherwise, say N. Note that a MC68EC030 will not work, as it does not include an MMU (Memory Management Unit). 68040 support CONFIG_M68040 If you anticipate running this kernel on a computer with a MC68LC040 or MC68040 processor, say Y. Otherwise, say N. Note that an MC68EC040 will not work, as it does not include an MMU (Memory Management Unit). 68060 support CONFIG_M68060 If you anticipate running this kernel on a computer with a MC68060 processor, say Y. Otherwise, say N. Advanced processor options CONFIG_ADVANCED_CPU This gives you access to some advanced options for the CPU. The defaults should be fine for most users, but these options may make it possible for you to improve performance somewhat if you know what you are doing. Most users should say N to this question. Use read-modify-write instructions CONFIG_RMW_INSNS This allows to use certain instructions that work with indivisible read-modify-write bus cycles. While this is faster than the workaround of disabling interrupts, it can conflict with DMA ( = direct memory access) on many Amiga systems, and it is also said to destabilize other machines. It is very likely that this will cause serious problems on any Amiga or Atari Medusa if set. The only configuration where it should work are 68030-based Ataris, where it apparently improves performance. But you've been warned! Unless you really know what you are doing, say N. Try Y only if you're quite adventurous. Amiga AutoConfig Identification CONFIG_ZORRO This enables support for automatic identification of Amiga expansion cards that obey the AutoConfig(tm) specification. Say Y if you want your expansion cards to be identified on bootup; it will enlarge your kernel by about 10 KB. The identification information is also available through /proc/zorro (say Y to "/proc filesystem support"!). Note that even if you say N here, you can still use your expansion cards. If in doubt, say Y. Amiga 1200/600 PCMCIA support CONFIG_AMIGA_PCMCIA Include support in the kernel for pcmcia on Amiga 1200 and Amiga 600. If you intend to use pcmcia cards say Y; otherwise say N. Amiga GSP (TMS340x0) support CONFIG_AMIGA_GSP Include support for Amiga graphics cards that use the Texas Instruments TMS340x0 GSP (Graphics Signal Processor) chips. Say Y if you want to use a DMI Resolver or Commodore A2410 (Lowell) graphics card on an Amiga; otherwise, say N. DMI Resolver support CONFIG_GSP_RESOLVER Include support in the kernel for the DMI Resolver graphics card. If you have one, say Y; otherwise, say N. A2410 support CONFIG_GSP_A2410 Include support in the kernel for the Commodore/University of Lowell A2410 graphics card. If you have one, say Y; otherwise, say N. Amiga Zorro II ramdisk support CONFIG_AMIGA_Z2RAM This enables support for using Chip RAM and Zorro II RAM as a ramdisk or as a swap partition. Say Y if you want to include this driver in the kernel. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called z2ram.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari ST-RAM swap support CONFIG_STRAM_SWAP This enables support for using (parts of) ST-RAM as swap space, instead of as normal system memory. This can first enhance system performance if you have lots of alternate RAM (compared to the size of ST-RAM), because executable code always will reside in faster memory. ST-RAM will remain as ultra-fast swap space. On the other hand, it allows much improved dynamic allocations of ST-RAM buffers for device driver modules (e.g. floppy, ACSI, SLM printer, DMA sound). The probability that such allocations at module load time fail is drastically reduced. Atari ACSI support CONFIG_ATARI_ACSI This enables support for the Atari ACSI interface. The driver supports hard disks and CD-ROMs, which have 512-byte sectors, or can be switched to that mode. Due to the ACSI command format, only disks up to 1 GB are supported. Special support for certain ACSI to SCSI adapters, which could relax that, isn't included yet. The ACSI driver is also the basis for certain other drivers for devices attached to the ACSI bus: Atari SLM laser printer, BioNet-100 Ethernet, and PAMsNet Ethernet. If you want to use one of these devices, you need ACSI support, too. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called acsi.o. Probe all LUNs on each ACSI device CONFIG_ACSI_MULTI_LUN If you have a ACSI device that supports more than one LUN (Logical Unit Number), e.g. a CD jukebox, you should say Y here so that all will be found by the ACSI driver. An ACSI device with multiple LUNs acts logically like multiple ACSI devices. The vast majority of ACSI devices have only one LUN, and so most people can say N here and should in fact do so, because it is safer. Atari SLM laser printer support CONFIG_ATARI_SLM If you have an Atari SLM laser printer, say Y to include support for it in the kernel. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called acsi_slm.o. Be warned: the driver needs much ST-RAM and can cause problems due to that fact! A3000 WD33C93A support CONFIG_A3000_SCSI If you have an Amiga 3000 and have SCSI devices connected to the built-in SCSI controller, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called wd33c93.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. A2091 WD33C93A support CONFIG_A2091_SCSI If you have a Commodore A2091 SCSI controller, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called wd33c93.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. GVP Series II WD33C93A support CONFIG_GVP11_SCSI If you have a Great Valley Products Series II SCSI controller, answer Y. Also say Y if you have a later model of GVP SCSI controller (such as the GVP A4008 or a Combo board). Otherwise, answer N. This driver does NOT work for the T-Rex series of accelerators from TekMagic and GVP-M. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called gvp11.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Cyberstorm SCSI support CONFIG_CYBERSTORM_SCSI If you have an Amiga with an original (MkI) Phase5 Cyberstorm accelerator board and the optional Cyberstorm SCSI controller, answer Y. Otherwise, say N. Cyberstorm II SCSI support CONFIG_CYBERSTORMII_SCSI If you have an Amiga with a Phase5 Cyberstorm MkII accelerator board and the optional Cyberstorm SCSI controller, say Y. Otherwise, answer N. Blizzard 2060 SCSI support CONFIG_BLZ2060_SCSI If you have an Amiga with a Phase5 Blizzard 2060 accelerator board and want to use the onboard SCSI controller, say Y. Otherwise, answer N. Blizzard 1230IV/1260 SCSI support CONFIG_BLZ1230_SCSI If you have an Amiga 1200 with a Phase5 Blizzard 1230IV or Blizzard 1260 accelerator, and the optional SCSI module, say Y. Otherwise, say N. Blizzard PowerUP 603e+ SCSI support CONFIG_BLZ603EPLUS_SCSI If you have an Amiga 1200 with a Phase5 Blizzard PowerUP 603e+ accelerator, say Y. Otherwise, say N. Fastlane SCSI support CONFIG_FASTLANE_SCSI If you have the Phase5 Fastlane Z3 SCSI controller, or plan to use one in the near future, say Y to this question. Otherwise, say N. Atari native SCSI support CONFIG_ATARI_SCSI If you have an Atari with built-in NCR5380 SCSI controller (TT, Falcon, ...) say Y to get it supported. Of course also, if you have a compatible SCSI controller (e.g. for Medusa). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called atari_scsi.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. This driver supports both styles of NCR integration into the system: the TT style (separate DMA), and the Falcon style (via ST-DMA, replacing ACSI). It does NOT support other schemes, like in the Hades (without DMA). Long delays for Toshiba CD-ROMs CONFIG_ATARI_SCSI_TOSHIBA_DELAY This option increases the delay after a SCSI arbitration to accommodate some flaky Toshiba CD-ROM drives. Say Y if you intend to use a Toshiba CD-ROM drive; otherwise, the option is not needed and would impact performance a bit, so say N. Hades SCSI DMA emulator (EXPERIMENTAL) CONFIG_TT_DMA_EMUL This option enables code which emulates the TT SCSI DMA chip on the Hades. This increases the SCSI transfer rates at least ten times compared to PIO transfers. Note that this code is experimental and has only been tested on a Hades with a 68060 processor. Before you use this, make backups of your entire hard disk. Ariadne support CONFIG_ARIADNE If you have a Village Tronic Ariadne Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called ariadne.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Ariadne II support CONFIG_ARIADNE2 If you have a Village Tronic Ariadne II Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called ariadne2.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. A2065 support CONFIG_A2065 If you have a Commodore A2065 Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called a2065.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Hydra support CONFIG_HYDRA If you have a Hydra Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called hydra.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Pcmcia NE2000 compatible support CONFIG_APNE If you have a pcmcia ne2000 compatible adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called apne.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari Lance support CONFIG_ATARILANCE Say Y to include support for several Atari Ethernet adapters based on the AMD Lance chipset: RieblCard (with or without battery), or PAMCard VME (also the version by Rhotron, with different addresses). BioNet-100 support CONFIG_ATARI_BIONET Say Y to include support for BioData's BioNet-100 Ethernet adapter for the ACSI port. The driver works (has to work...) with a polled I/O scheme, so it's rather slow :-( PAMsNet support CONFIG_ATARI_PAMSNET Say Y to include support for the PAMsNet Ethernet adapter for the ACSI port ("ACSI node"). The driver works (has to work...) with a polled I/O scheme, so it's rather slow :-( Multiface Card III parallel support CONFIG_MULTIFACE_III_LP If you have a Multiface III card for your Amiga, and want to use its parallel port in Linux, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called lp_m68k.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Amiga mouse support CONFIG_AMIGAMOUSE If you want to be able to use an Amiga mouse in Linux, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called amigamouse.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Amiga Copper Console CONFIG_COPCON This configures the console to use the Amiga's graphics coprocessor for scrolling, instead of using the CPU. This option markedly improves response times in the high color modes (5 bitplanes and up). If you would like to use this, say Y; otherwise, say N. Atari mouse support CONFIG_ATARIMOUSE If you want to be able to use an Atari mouse in Linux, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called atarimouse.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari MFP serial support CONFIG_ATARI_MFPSER If you like to use the MFP serial ports ("Modem1", "Serial1") under Linux, say Y. The driver equally supports all kinds of MFP serial ports and automatically detects whether Serial1 is available. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Note for Falcon users: You also have an MFP port, it's just not wired to the outside... But you could use the port under Linux. Atari SCC serial support CONFIG_ATARI_SCC If you have serial ports based on a Zilog SCC chip (Modem2, Serial2, LAN) and like to use them under Linux, say Y. All built-in SCC's are supported (TT, MegaSTE, Falcon), and also the ST-ESCC. If you have two connectors for channel A (Serial2 and LAN), they are visible as two separate devices. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari SCC serial DMA support CONFIG_ATARI_SCC_DMA This enables DMA support for receiving data on channel A of the SCC. If you have a TT you may say Y here and read drivers/char/atari_SCC.README. All other users should say N here, because only the TT has SCC-DMA, even if your machine keeps claiming so at boot time. Atari MIDI serial support CONFIG_ATARI_MIDI If you want to use your Atari's MIDI port in Linux, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari DSP56k Digital Signal Processor support CONFIG_ATARI_DSP56K If you want to be able to use the DSP56001 in Falcons, say Y. This driver is still experimental, and if you don't know what it is, or if you don't have this processor, just say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Amiga builtin serial support CONFIG_AMIGA_BUILTIN_SERIAL If you want to use your Amiga's built-in serial port in Linux, answer Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. GVP IO-Extender support CONFIG_GVPIOEXT If you want to use a GVP IO-Extender serial card in Linux, say Y. Otherwise, say N. Multiface Card III serial support CONFIG_MULTIFACE_III_TTY If you want to use a Multiface III card's serial port in Linux, answer Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Amiga or Atari DMA sound support CONFIG_DMASOUND If you want to use the internal audio of your Atari or Amiga in Linux, answer Y to this question. This will provide a Sun-like /dev/audio, compatible with the Linux/i386 sound system. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. HP DCA serial support CONFIG_HPDCA If you want to use the internal "DCA" serial ports on an HP300 machine, say Y here. HP on-board LANCE support CONFIG_HPLANCE If you want to use the builtin "LANCE" Ethernet controller on an HP300 machine, say Y here. DIO bus support CONFIG_DIO Say Y here to enable support for the "DIO" expansion bus used in HP300 machines. If you are using such a system you almost certainly want this. MSDOS partition support CONFIG_MSDOS_PARTITION This option enables support for using hard disks that were partitioned on an MS-DOS system. This may be useful if you are sharing a hard disk between i386 and m68k Linux boxes, for example. Say Y if you need this feature; users who are only using their system-native partitioning scheme can say N here. Processor Type CONFIG_6xx There are two types of PowerPC chips supported. The more common types (601,603,604,740,750) and the embedded versions (821 and 860). Unless you are building a kernel for one of the embedded boards using the 821 or 860 choose 6xx. Machine Type CONFIG_PMAC Linux currently supports several different kinds of PowerPC-based machines: Apple Power Macintoshes and clones (such as the Motorola Starmax series), PReP (PowerPC Reference Platform) machines such as the Motorola PowerStack, Amiga Power-Up systems (APUS), CHRP and the embedded MBX boards from Motorola. Currently, a single kernel binary only supports one type or the other. However, there is very early work on support for CHRP, PReP and PowerMac's from a single binary. Support for Open Firmware device tree in /proc CONFIG_PROC_DEVICETREE This option adds a device-tree directory under /proc which contains an image of the device tree that the kernel copies from Open Firmware. If unsure, say Y here. MESH (Power Mac internal SCSI) support CONFIG_SCSI_MESH Many Power Macintoshes and clones have a MESH (Macintosh Enhanced SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the other Power Macintoshes do). Say Y to include support for this SCSI adaptor. This driver is also available as a module called mesh.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Maximum synchronous transfer rate CONFIG_SCSI_MESH_SYNC_RATE On Power Macintoshes (and clones) where the MESH SCSI bus adaptor drives a bus which is entirely internal to the machine (such as the 7500, 7600, 8500, etc.), the MESH is capable of synchronous operation at up to 10 MB/s. On machines where the SCSI bus controlled by the MESH can have external devices connected, it is usually rated at 5 MB/s. 5 is a safe value here unless you know the MESH SCSI bus is internal only; in that case you can say 10. Say 0 to disable synchronous operation. 53C94 (Power Mac external SCSI) support CONFIG_SCSI_MAC53C94 On Power Macintoshes (and clones) with two SCSI buses, the external SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older machines which only have one SCSI bus, such as the 7200, also use the 53C94. Say Y to include support for the 53C94. This driver is also available as a module called mac53c94.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. MACE (Power Mac Ethernet) support CONFIG_MACE Power Macintoshes and clones with Ethernet built-in on the motherboard will usually use a MACE (Medium Access Control for Ethernet) interface. Say Y to include support for the MACE chip. This driver is also available as a module called mace.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. BMAC (G3 ethernet) support CONFIG_BMAC Say Y for support of BMAC Ethernet interfaces. These are used on G3 computers. This driver is also available as a module called bmac.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Video For Linux CONFIG_VIDEO_DEV Support for audio/video capture and overlay devices and FM radio cards. The exact capabilities of each device vary. User tools for this are available from ftp://ftp.uk.linux.org/pub/linux/video4linux. If you are interested in writing a driver for such an audio/video device or user software interacting with such a driver, please read the file Documentation/video4linux/API.html. This driver is also available as a module called videodev.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. AIMSlab RadioTrack (aka RadioReveal) support CONFIG_RADIO_RTRACK Choose Y here if you have one of these FM radio cards, and then fill in the port address below. Note that newer AIMSlab RadioTrack cards have a different chipset and are not supported by this driver. For these cards, use the RadioTrack II driver below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. More information is contained in the file Documentation/video4linux/radiotrack.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-aimslab.o. RadioTrack i/o port CONFIG_RADIO_RTRACK_PORT Enter either 0x30f or 0x20f here. The card default is 0x30f, if you haven't changed the jumper setting on the card. AIMSlab RadioTrack II support CONFIG_RADIO_RTRACK2 Choose Y here if you have this FM radio card, and then fill in the port address below. If you have GemTeks combined (PnP) sound- and radio card you must use this driver as a module and setup the card with isapnptools. You must also pass the module a suitable io parameter, 0x248 has been reported to be used by these cards. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-rtrack2.o. RadioTrack II i/o port CONFIG_RADIO_RTRACK2_PORT Enter either 0x30c or 0x20c here. The card default is 0x30c, if you haven't changed the jumper setting on the card. Aztech/Packard Bell Radio CONFIG_RADIO_AZTECH Choose Y here if you have one of these FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-aztech.o. Aztech/Packard Bell radio card i/o port CONFIG_RADIO_AZTECH_PORT Enter either 0x350 or 0x358 here. The card default is 0x350, if you haven't changed the setting of jumper JP3 on the card. Removing the jumper sets the card to 0x358. ADS Cadet AM/FM Radio Tuner Card CONFIG_RADIO_CADET Choose Y here if you have one of these AM/FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. Further documentation on this driver can be found on the WWW at http://linux.blackhawke.net/cadet.html. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-cadet.o. ADS Cadet AM/FM Radio Tuner Card I/O Port CONFIG_RADIO_CADET_PORT Enter the I/O address of the card here (most commonly 330). SF16FMI Radio CONFIG_RADIO_SF16FMI Choose Y here if you have one of these FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-sf16fmi.o SF16FMI I/O port (0x284 or 0x384) CONFIG_RADIO_SF16FMI_PORT Enter the I/O port of your SF16FMI radio card. Typhoon Radio CONFIG_RADIO_TYPHOON Choose Y here if you have one of these FM radio cards, and then fill in the port address and the frequency used for muting below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-typhoon.o Support for /proc/radio-typhoon CONFIG_RADIO_TYPHOON_PROC_FS Say Y here if you want the typhoon radio card driver to write status information (frequency, volume, muted, mute frequency, base address) to /proc/radio-typhoon. The file can be viewed with your favorite pager (i.e. use "more /proc/radio-typhoon" or "less /proc/radio-typhoon" or simply "cat /proc/radio-typhoon"). Typhoon I/O port (0x316 or 0x336) CONFIG_RADIO_TYPHOON_PORT Enter the I/O port of your Typhoon or EcoRadio radio card. Typhoon frequency set when muting the device (kHz) CONFIG_RADIO_TYPHOON_MUTEFREQ Enter the frequency used for muting the radio. The device is never completely silent. If the volume is just turned down, you can still hear silent voices and music. For that reason, the frequency of the radio device is set to the frequency you can enter here whenever the device is muted. There should be no local radio station at that frequency. Zoltrix Radio CONFIG_RADIO_ZOLTRIX Choose Y here if you have one of these FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-zoltrix.o ZOLTRIX I/O port (0x20c or 0x30c) CONFIG_RADIO_ZOLTRIX_PORT Enter the I/O port of your Zoltrix radio card. ADS Cadet AM/FM Tuner CONFIG_RADIO_CADET Say Y here if this is your AM/FM radio card. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-cadet.o Miro PCM20 Radio CONFIG_RADIO_MIROPCM20 Choose Y here if you have this FM radio card. You also need to say Y to "ACI mixer (miroPCM12/PCM20)" (in "additional low level sound drivers") for this to work. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-miropcm20.o GemTek Radio Card CONFIG_RADIO_GEMTEK Choose Y here if you have this FM radio card, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-gemtek.o. GemTek i/o port CONFIG_RADIO_GEMTEK_PORT Enter either 0x20c, 0x30c, 0x24c or 0x34c here. The card default is 0x34c, if you haven't changed the jumper setting on the card. Trust FM Radio Card CONFIG_RADIO_TRUST Choose Y here if you have this FM radio card, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found at http://roadrunner.swansea.uk.linux.org/v4l.shtml. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-trust.o. Trust FM Radio I/O port CONFIG_RADIO_TRUST_PORT Enter the I/O port of your card (usually 0x350 or 0x358). BT848 Video For Linux CONFIG_VIDEO_BT848 Support for BT848 based frame grabber/overlay boards. This includes the Miro, Hauppauge and STB boards. Please read the material in Documentation/video4linux/bttv for more information. This driver is also available as a module called bttv.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. SAA5249 Teletext processor CONFIG_VIDEO_SAA5249 Support for I2C bus based teletext using the SAA5249 chip. At the moment this is only useful on some European WinTV cards. This driver is also available as a module called saa5249.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Quickcam BW Video For Linux CONFIG_VIDEO_BWQCAM Say Y have if you the black and white version of the QuickCam camera. See the next option for the color version. This driver is also available as a module called bw-qcam.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Colour QuickCam Video For Linux CONFIG_VIDEO_CQCAM This is the video4linux driver for the colour version of the Connectix Quickcam. If you have one of these cameras, say Y here, otherwise say N. This driver does not work with the original monochrome Quickcam, Quickcam VC or QuickClip. It is also available as a module (c-qcam.o). Mediavision Pro Movie Studio Video For Linux CONFIG_VIDEO_PMS Say Y if you have such a thing. This driver is also available as a module called pms.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. PlanB Video-In for PowerMacs CONFIG_VIDEO_PLANB PlanB is the V4L driver for the PowerMac 7x00/8x00 series video input hardware. If you want to experiment with this, say Y. Otherwise, or if you don't understand a word, say N. See http://www.cpu.lu/~mlan/planb.html for more info. Saying M will compile this driver as a module (planb.o). # # ARM options # CPU Optimization CONFIG_CPU_ARM2 This selects the processor type of your CPU. This is only used to determine C compiler optimization options, and can affect the compatibility of the kernel on other processors. If you specify ARM6, the kernel should work on all 32-bit processors. If you specify ARM2, ARM250 or ARM3, it should work on all 26-bit processors. If you're not sure, set it to "None". ARM System type CONFIG_ARCH_ARC This selects what ARM system you wish to build the kernel for. It also selects to some extent the CPU type. If you are unsure what to set this option to, please consult any information supplied with your system. Include support for Chalice CATS boards CONFIG_CATS Say Y here if you intend to run this kernel on a CATS system. Include support for Intel EBSA285 CONFIG_ARCH_EBSA285 Say Y here if you intend to run this kernel on an EBSA-285 evaluation board. Include support for the NetWinder CONFIG_ARCH_NETWINDER Say Y here if you intend to run this kernel on the NetWinder. Math emulation CONFIG_NWFPE Say Y to include the NWFPE floating point emulator in the kernel. This is necessary to run most binaries. Linux does not currently support floating point hardware so you need to say Y here even if your machine has an FPA or floating point co-processor podule. It is also possible to say M to build the emulator as a module (nwfpe.o) or indeed to leave it out altogether. However, unless you know what you are doing this can easily render your machine unbootable. Saying Y is the safe option. You may say N here if you are going to load the Acorn FPEmulator early in the bootup. DS1620 Thermometer support CONFIG_DS1620 Say Y here to include support for the thermal management hardware found in the NetWinder. This driver allows the user to control the temperature set points and to read the current temperature. It is also possible to say M here to build it as a module (ds1620.o) It is recommended to be used on a NetWinder, but it is not a necessity. Verbose kernel error messages CONFIG_DEBUG_ERRORS This option controls verbose debugging information which can be printed when the kernel detects an internal error. This debugging information is useful to kernel hackers when tracking down problems, but mostly meaningless to other people. It's safe to say Y unless you are concerned with the code size or don't want to see these messages. Compile kernel with frame pointer CONFIG_FRAME_POINTER If you say Y here, the resulting kernel will be slightly larger and slower, but it will give useful debugging information. If you don't debug the kernel, you can say N. User fault debugging CONFIG_DEBUG_USER When a user program crashes due to an exception, the kernel can print a brief message explaining what the problem was. This is sometimes helpful for debugging but serves no purpose on a production system. Most people should say N here. Include gdb debugging information in kernel binary CONFIG_DEBUG_INFO Say Y here to include source-level debugging information in the `vmlinux' binary image. This is handy if you want to use gdb or addr2line to debug the kernel. It has no impact on the in-memory footprint of the running kernel but it can increase the amount of time and disk space needed for compilation. If in doubt say N. Split initialisation functions into discardable section CONFIG_TEXT_SECTIONS Normally code that is only used during initialisation is collected into a special area of the kernel so that it can be discarded and the memory reclaimed when initialisation is complete. In addition, if the kernel you wish to build is able to run on multiple architectures, it allows the unused code to be discarded. Some versions of binutils, however, have a bug that causes the kernel to crash during startup when this option is enabled. Say Y unless you experience problems that you suspect may be caused by this. Disable pgtable cache CONFIG_NO_PGT_CACHE Normally the kernel maintains a `quicklist' of preallocated pagetable structures in order to increase performance. On machines with very few pages this may however be a loss. Say Y here to disable the pgtable cache. RISC OS personality CONFIG_ARTHUR Say Y here to include the kernel code necessary if you want to run Acorn RISC OS/Arthur binaries under Linux. This code is still very experimental; if this sounds frightening, say N and sleep in peace. You can also say M here to compile this support as a module (which will be called arthur.o). Initial kernel command line CONFIG_CMDLINE On some architectures (EBSA110 and CATS), there is currently no way for the boot loader to pass arguments to the kernel. For these architectures, you should supply some command-line options at build time by entering them here. As a minimum, you should specify the memory size and the root device (eg, mem=64M root=/dev/nfs) Hardware alignment trap CONFIG_ALIGNMENT_TRAP ARM processors can not fetch/store information which is not naturally aligned on the bus, ie, a 4 byte fetch must start at an address divisable by 4. On 32-bit ARM processors, these instructions can be emulated in software with a severe performance impact. This is necessary for correct operation of some network protocols. With an IP-only configuration it is safe to say N, otherwise say Y. 21285 serial port support CONFIG_SERIAL_21285 If you have a machine based on a 21285 (Footbridge) StrongARM/PCI bridge you can enable its onboard serial port by enabling this option. The device has major ID 4, minor 64. Console on 21285 serial port CONFIG_SERIAL_21285_CONSOLE If you have enabled the serial port on the 21285 footbridge you can make it the console by answering 'Y' to this option. Footbridge Mode CONFIG_HOST_FOOTBRIDGE The 21285 Footbridge chip can operate in either `host mode' or `add-in' mode. Say Y if your 21285 is in host mode, and therefore is the configuration master, otherwise say N. MFM harddisk support CONFIG_BLK_DEV_MFM Support the MFM hard drives on the Acorn Archimedes both on-board the A4x0 motherboards and via the Acorn MFM podules. Drives upto 64MB are supported. If you haven't got one of these machines or drives just say 'N'. Old Archimedes floppy (1772) support CONFIG_BLK_DEV_FD1772 Support the floppy drive on the Acorn Archimedes (A300, A4x0, A540, R140 and R260) series of computers; it supports only 720K floppies at the moment. If you don't have one of these machines just answer 'N'. Autodetect hard drive geometry CONFIG_BLK_DEV_MFM_AUTODETECT If you answer 'Y' the MFM code will attempt to automatically detect the cylinders/heads/sectors count on your hard drive. WARNING: This sometimes doesn't work and it also does some dodgy stuff which potentially might damage your drive. IrDA Protocols CONFIG_IRDA Say Y here if you want to build support for the IrDA (TM) protocols. The Infrared Data Associations (tm) specifies standards for wireless infrared communication and is supported by most laptops and PDA's. To use Linux support for the IrDA (tm) protocols, you will also need some user-space utilities like the irmanager and probably irattach as well. For more information, see the file Documentation/networking/irda.txt. You also want to read the IR-HOWTO, available from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This support is also available as a module. If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called IrDA Cache last LSAP CONFIG_IRDA_CACHE_LAST_LSAP Say Y here if you want IrLMP to cache the last LSAP used. This makes sense since most frames will be sent/received on the same connection. Enabling this option will save a hash-lookup per frame. If unsure, say Y. IrDA Fast RR's CONFIG_IRDA_FAST_RR Say Y here is you want IrLAP to send fast RR (Receive Ready) frames when acting as a primary station. This will make IrLAP send out a RR frame immediately when receiving a frame if its own transmit queue is currently empty. This will give a lot of speed improvement when receiving much data since the secondary station will not have to wait the max. turn around time before it is allowed to transmit the next time. If the transmit queue of the secondary is also empty the primary will back off waiting longer for sending out the RR frame until the timeout reaches the normal value. Enabling this option will make the IR-diode burn more power and thus reduce your battery life. If unsure, say N. IrDA Debug CONFIG_IRDA_DEBUG Say Y here if you want the IrDA subsystem to write debug information to your syslog. You can change the debug level in /proc/sys/net/irda/debug If unsure, say Y (since it makes it easier to find the bugs). IrLAP Compression support CONFIG_IRDA_COMPRESSION Compression is _not_ part of the IrDA(tm) protocol specification, but it's working great! Linux is the first to try out compression support at the IrLAP layer. This means that you will only benefit from compression if you are running a Linux <-> Linux configuration. If you say Y here, you also need to say Y or M to a compression protocol below. IrLAP Deflate Compression Protocol CONFIG_IRDA_DEFLATE Say Y here if you want to build support for the Deflate compression protocol. The deflate compression (GZIP) is exactly the same as the one used by the PPP protocol. If you want to compile this compression support as a module, say M here and read Documentation/modules.txt. The module will be called irda_deflate.o. IrLAN Protocol CONFIG_IRLAN Say Y here if you want to build support for the IrLAN protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrLAN emulates an Ethernet and makes it possible to put up a wireless LAN using infrared beams. The IrLAN protocol can be used to talk with infrared access points like the HP NetbeamIR, or the ESI JetEye NET. You can also connect to another Linux machine running the IrLAN protocol for ad-hoc networking! IrCOMM Protocol CONFIG_IRCOMM Say Y here if you want to build support for the IrCOMM protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrCOMM implements serial port emulation, and makes it possible to use all existing applications that understands TTY's with an infrared link. Thus you should be able to use application like PPP, minicom and others. Enabling this option will create two modules called ircomm and ircomm_tty. For more information go to http://www.pluto.dti.ne.jp/~thiguchi/irda/ IrLPT Protocol CONFIG_IRLPT Say Y here if you want to build support for the IrLPT protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrLPT makes it possible to print documents to IrDA capable printers. IrLPT Client Protocol CONFIG_IRLPT_CLIENT Say Y here if you want to build support for the IrLPT client protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. The IrLPT client protocol can be used to print documents to IrDA compatible printers like the HP-5MP, or IrLPT printer adapters like the ACTiSYS IR-100M. IrLPT Server Protocol CONFIG_IRLPT_SERVER Say Y here if you want to build support for the IrLPT server protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. The IrLPT server protocol makes it possible to use a Linux machine as an infrared printer server for other laptops. So if your Linux machine has a cable connection to a printer, then other laptops can use the Linux machine to print out documents using infrared communication. IrTTY IrDA Device Driver CONFIG_IRTTY_SIR Say Y here if you want to build support for the IrTTY line discipline. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrTTY makes it possible to use Linux's own serial driver for all IrDA ports that are 16550 compatible. Most IrDA chips are 16550 compatible so you should probably say Y to this option. Using IrTTY will however limit the speed of the connection to 115200 bps (IrDA SIR mode) If unsure, say Y. IrPORT IrDA Device Driver CONFIG_IRPORT_SIR Say Y here if you want to build support for the IrPORT IrDA device driver. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrPORT can be used instead of IrTTY and sometimes this can be better. One example is if your IrDA port does not have echo-canceling, which will work OK with IrPORT since this driver is working in half-duplex mode only. You don't need to use irattach with IrPORT, but you just insert it the same way as FIR drivers (insmod irport io=0x3e8 irq=11). Notice that IrPORT is a SIR device driver which means that speed is limited to 115200 bps. If unsure, say Y. Winbond W83977AF IrDA Device Driver CONFIG_WINBOND_FIR Say Y here if you want to build IrDA support for the Winbond W83977AF super-io chipset. If you want to compile it as a module, say M here and read Documentation/modules.txt. This driver should be used for the IrDA chipset in the Corel NetWinder. The driver supports SIR, MIR and FIR (4Mbps) speeds. NSC PC87108 IrDA Device Driver CONFIG_NSC_FIR Say Y here if you want to build support for the NSC PC87108 IrDA chipset. If you want to compile it as a module, say M here and read Documentation/modules.txt. This drivers currently only supports the ACTiSYS IR2000B ISA card and supports SIR, MIR and FIR (4Mbps) speeds. Sharp UIRCC IrDA Device Driver CONFIG_SHARP_FIR Say Y here if you want to build support for the Sharp UIRCC IrDA chipset. If you want to compile it as a module, say M here and read Documentation/modules.txt. This chipset is used by the Toshiba Tecra laptops. Toshiba Type-O IR Port Device Driver CONFIG_TOSHIBA_FIR Say Y here if you want to build support for the Toshiba Type-O IR chipset. If you want to compile it as a module, say M here and read Documentation/modules.txt. This chipset is used by the Toshiba Libretto 100CT, and many more laptops. ESI JetEye PC Dongle CONFIG_ESI_DONGLE Say Y here if you want to build support for the Extended Systems JetEye PC dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The ESI dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for ESI dongles you will have to insert "irattach -d esi" in the /etc/irda/drivers script. ACTiSYS IR-220L and IR220L+ dongle CONFIG_ACTISYS_DONGLE Say Y here if you want to build support for the ACTiSYS IR-220L and IR220L+ dongles. If you want to compile it as a module, say M here and read Documentation/modules.txt. The ACTiSYS dongles attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for ACTiSYS dongles you will have to insert "irattach -d actisys" or "irattach -d actisys_plus" in the/etc/irda/drivers script. Tekram IrMate 210B dongle CONFIG_TEKRAM_DONGLE Say Y here if you want to build support for the Tekram IrMate 210B dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Tekram dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for Tekram dongles you will have to insert "irattach -d tekram" in the /etc/irda/drivers script. Greenwich GIrBIL dongle CONFIG_GIRBIL_DONGLE Say Y here if you want to build support for the Greenwich GIrBIL dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Greenwich dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for Greenwich dongles you will have to insert "irattach -d girbil" in the /etc/irda/drivers script. Parallax Litelink dongle CONFIG_LITELINK_DONGLE Say Y here if you want to build support for the Parallax Litelink dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Parallax dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for Parallax dongles you will have to insert "irattach -d litelink" in the /etc/irda/drivers script. VME (Motorola and BVM) support CONFIG_VME Say Y here if you want to build a kernel for a 680x0 based VME board. Boards currently supported include Motorola boards MVME162, MVME166, MVME167, MVME172, and MVME177. BVME4000 and BVME6000 boards from BVM Ltd are also supported. MVME162, 166 and 167 support CONFIG_MVME16x Say Y to include support for Motorola VME boards. This will build a kernel which can run on MVME162, MVME166, MVME167, MVME172, and MVME177 boards. If you select this option you will have to select the appropriate drivers for SCSI, Ethernet and serial ports later on. BVME4000 and BVME6000 support CONFIG_BVME6000 Say Y to include support for VME boards from BVM Ltd. This will build a kernel which can run on BVME4000 and BVME6000 boards. If you select this option you will have to select the appropriate drivers for SCSI, Ethernet and serial ports later on. Use write-through caching for 68060 supervisor accesses CONFIG_060_WRITETHROUGH The 68060 generally uses copyback caching of recently accessed data. Copyback caching means that memory writes will be held in an on-chip cache and only written back to memory some time later. Saying Y here will force supervisor (kernel) accesses to use writethrough caching. Writethrough caching means that data is written to memory straight away, so that cache and memory data always agree. Writethrough caching is less efficient, but is needed for some drivers on 68060 based systems where the 68060 bus snooping signal is hardwired on. The 53c710 SCSI driver is known to suffer from this problem. NCR53C710 SCSI driver for MVME16x CONFIG_MVME16x_SCSI The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710 SCSI controller chip. Almost everyone using one of these boards will want to say Y to this question. NCR53C710 SCSI driver for BVME6000 CONFIG_BVME6000_SCSI The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710 SCSI controller chip. Almost everyone using one of these boards will want to say Y to this question. Simple 53c710 SCSI support (Compaq, NCR machines) CONFIG_SCSI_SIM710 This is a driver for the NCR53C710 chip commonly found in Compaq and NCR machines. If you are looking for 53C710 support for an Amiga or some 680x0 based VME card then you probably want the other NCR53C710 driver. MVME16x Ethernet support CONFIG_MVME16x_NET This is the driver for the Ethernet interface on the Motorola MVME162, 166, 167, 172 and 177 boards. Say Y here to include the driver for this chip in your kernel. If you want to compile it as a module, say M here and read Documentation/modules.txt. BVME6000 Ethernet support CONFIG_BVME6000_NET This is the driver for the Ethernet interface on BVME4000 and BVME6000 VME boards. Say Y here to include the driver for this chip in your kernel. If you want to compile it as a module, say M here and read Documentation/modules.txt. CD2401 support for MVME166/7 serial ports CONFIG_SERIAL167 This is the driver for the serial ports on the Motorola MVME166, 167, and 172 boards. Everyone using one of these boards should say Y here. SCC support for MVME162 serial ports CONFIG_MVME162_SCC This is the driver for the serial ports on the Motorola MVME162 and 172 boards. Everyone using one of these boards should say Y here. SCC support for BVME6000 serial ports CONFIG_BVME6000_SCC This is the driver for the serial ports on the BVME4000 and BVME6000 boards from BVM Ltd. Everyone using one of these boards should say Y here. IBM's S/390 architecture CONFIG_ARCH_S390 Select this option, if you want to run the Kernel on one of IBM's mainframes of the S/390 generation. You should have installed the s390-compiler released by IBM (based on gcc-2.95.1) before. Merge some code into the kernel to make the image IPLable CONFIG_IPLABLE If you want to use the produced kernel to IPL directly from a device, you have to merge a bootsector specific to the device into the first bytes of the kernel. You will have to select the IPL device on another question, that pops up, when you select CONFIG_IPLABE. IPL from a S/390 tape unit CONFIG_IPL_TAPE Select this option if you want to IPL the image from a tape. IPL from a virtual card reader emulated by VM/ESA CONFIG_IPL_RDR_VM Select this option if you are running under VM/ESA and want to IPL the image from the emulated card reader. IPL from a real card reader CONFIG_IPL_RDR Select this option if you want to IPL the image from a real card reader. Maybe you still got one and want to try. We didn't test. IBMs S/390 Harddisks (DASDs) CONFIG_DASD Enable this option if you want to access DASDs directly utilizing S/390s channel subsystem commands. This is necessary for running natively on a single image or an LPAR. Enable DASD fast write CONFIG_DASD_FAST_IO Enable fast I/O for DASDs. That means that the next I/O command is already issued at interrupt time, if an I/O request is pending. This option gives significant speedup of I/O, because we don't schedule the bottom-halves as often as Intel. Support for IBM-style disk-labels (S/390) CONFIG_S390_PARTITION Enable this option to assure standard IBM labels on the DASDs. You must enable it, if you are planning to access DASDs also attached to another IBM mainframe operation system (OS/390, VM/ESA, VSE/ESA). ECKD devices CONFIG_DASD_ECKD ECKD devices are the most commonly used devices. you should enable this option unless you are very sure to have no ECKD device. CKD devices CONFIG_DASD_CKD CKD devices are currently unsupported. FBA devices CONFIG_DASD_FBA FBA devices are currently unsupported. Compaq SMART2 support CONFIG_BLK_CPQ_DA This is the driver for Compaq Smart Array controllers. Everyone using these boards should say Y here. See "linux/Documentation/cpqarray.txt" for the current list of boards supported by this driver, and for further information on the use of this driver. QuickNet Internet LineJack/PhoneJack support CONFIG_PHONE_IXJ Say M if you have a telephony card manufactured by Quicknet Technologies, Inc. These include the Internet PhoneJACK and Internet LineJACK Telephony Cards. For the ISA versions of these products, you can configure the cards using the isapnp tools (pnpdump/isapnp) or you can use the backported isapnp module. Please read: /usr/src/linux/Documentation/telephony/ixj.txt. For more information on these cards, see Quicknet's website at: http://www.quicknet.net/ If you do not have any Quicknet telephony cards, you can safely ignore this option. # # A couple of things I keep forgetting: # capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet, # Intel, IRQ, Linux, MSDOS, NetWare, NetWinder, NFS, # PCI, SCSI, SPARC # two words: hard drive, hard disk, sound card, home page # other: it's safe to save; daemon; use --, not - or --- # # # This is used by Emacs' spell checker ispell.el: # # LocalWords: CONFIG coprocessor DX Pentium SX lilo loadlin HOWTO ftp metalab # LocalWords: unc edu docs emu README kB BLK DEV FD Thinkpad fd MFM RLL IDE gz # LocalWords: cdrom diskless netboot nfs xzvf ATAPI MB ide pavia rubini pl pd # LocalWords: HD CDROMs IDECD NEC MITSUMI filesystem XT XD PCI BIOS cezar ATEN # LocalWords: ISA EISA Microchannel VESA BIOSes IPC SYSVIPC ipc Ctrl dmesg hlt # LocalWords: BINFMT Linkable http ac uk jo html GCC SPARC AVANTI CABRIOLET EB # LocalWords: netscape gcc LD CC toplevel MODVERSIONS insmod rmmod modprobe IP # LocalWords: genksyms INET loopback gatewaying ethernet PPP ARP Arp MEMSIZE # LocalWords: howto multicasting MULTICAST MBONE firewalling ipfw ACCT resp ip # LocalWords: proc acct IPIP encapsulator decapsulator klogd PCTCP RARP EXT PS # LocalWords: telnetting subnetted NAGLE rlogin NOSR ttyS TGA techinfo mbone nl # LocalWords: Mb SKB IPX Novell dosemu Appletalk DDP ATALK vmalloc visar ehome # LocalWords: SD CHR scsi thingy SG CD LUNs LUN jukebox Adaptec BusLogic EATA # LocalWords: buslogic DMA DPT ATT eata dma PIO UltraStor fdomain umsdos ext # LocalWords: QLOGIC qlogic TMC seagate Trantor ultrastor FASST wd NETDEVICES # LocalWords: unix BBS linux CSLIP PLIP Kirch's LDP CSlip SL SCC IRQ csustan # LocalWords: Turbo Laplink plip NCSA port's ReQuest IRQs EQL SMC AMD PCnet NE # LocalWords: COM ELPLUS Com EtherLinkIII VLB Arcnet Cabletron DEPCA DE carlos # LocalWords: depca EtherWorks EWRK ewrk SEEQ EtherExpress EEXPRESS NI xxx dia # LocalWords: EtherExpress WaveLAN wavelan PCLAN HPLAN VG SK Ansel Xen de ZNET # LocalWords: PCMCIA cb stanford LAN TEC RealTek ATP atp DLINK NetTools VISWS # LocalWords: TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA # LocalWords: Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech # LocalWords: Okano Wearnes AZTCD CDD SE aztcd sonycd Goldstar GSCD Philips fs # LocalWords: LMS OPTCD Sanyo SJCD minix faqs xiafs XIA msdos mtools Cichocki # LocalWords: std softlinks umssync NetworkFileSharing nfsd mountd CDs HPFS TI # LocalWords: hpfs SYSV SCO iBCS Wyse WordPerfect tsx mit unixes sysv NR irisa # LocalWords: SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST # LocalWords: PSMOUSE Compaq trackballs Travelmate Inport ATIXL ATI busmice ld # LocalWords: gpm config QIC DYNCONF FTAPE Stor Ftape ftape pcsndrv manpage NT # LocalWords: readprofile diskdrives org com masq EtherTalk tcp netrom sunacm # LocalWords: misc AIC aic pio scc Portmaster eql GIS PhotoCDs MCDX Perell PG # LocalWords: mcdx gscd optcd sjcd ISP hdparm Workgroups Lan samba PARIDE PCD # LocalWords: filesystems smbfs ATA ppp PCTech RZ www powerquest txt CMD ESDI # LocalWords: chipset FB multicast MROUTE appletalk ifconfig IBMTR multiport # LocalWords: Multisession STALDRV EasyIO EC EasyConnection ISTALLION ONboard # LocalWords: Brumby pci TNC cis ohio faq usenet NETLINK dev hydra ca Tyne mem # LocalWords: carleton Deskstation DECstation SUNFD JENSEN Noname XXXM SLiRP # LocalWords: pppd Zilog ZS SRM bootloader ez mainmenu rarp ipfwadm paride pcd # LocalWords: RTNETLINK mknod xos MTU lwared Macs mac netatalk macs cs Wolff # LocalWords: dartmouth flowerpt MultiMaster FlashPoint tudelft etherexpress # LocalWords: ICL EtherTeam ETH IDESCSI TXC SmartRAID SmartCache httpd sjc dlp # LocalWords: thesphere TwoServers BOOTP DHCP ncpfs BPQETHER BPQ MG HIPPI cern # LocalWords: bsd comp SPARCstation le SunOS ie Gracilis PackeTwin PT pt LU FX # LocalWords: FX TEAC CR LCS mS ramdisk IDETAPE cmd fperllo encis tcfs unisa # LocalWords: Vertos Genoa Funai hsfs NCP NetWare tgz APM apm ioctls UltraLite # LocalWords: TravelMate CDT LCD backlight VC RPC Mips AXP barlow cdrecord pg # LocalWords: PMAX MILO Alphas Multia Tseng linuxelf endian mipsel mips drv HT # LocalWords: kerneld callouts AdvanSys advansys Admin WDT DataStor EP verden # LocalWords: wdt hdb hdc bugfix SiS vlb Acculogic CSA DTC dtc Holtek ht QDI # LocalWords: QD qd UMC umc ALI ali lena fnet fr azstarnet cdr fb MDA ps esdi # LocalWords: Avanti XL AlphaStations Jensen DECpc AXPpci UDB Cabriolet MCA RC # LocalWords: AlphaPC mca AOUT OUTput PPro sipx gwdg lo nwe FourPort Boca unm # LocalWords: Keepalive linefill RELCOM keepalive analogue CDR conf CDI INIT # LocalWords: OPTi isp irq noisp VFAT vfat NTFS losetup dmsdosfs dosfs ISDN MP # LocalWords: NOWAYOUT behaviour dialin isdn callback BTX Teles ICN EDSS Cisco # LocalWords: ipppd syncppp RFC MPP VJ downloaded icn NICCY Creatix shmem ufr # LocalWords: ibp md ARCnet ether encap NDIS arcether ODI Amigas AmiTCP NetBSD # LocalWords: initrd tue util DES funet des OnNet BIOSP smc Travan Iomega CMS # LocalWords: FC DC dc PPA IOMEGA's ppa RNFS FMV Fujitsu ARPD arpd loran layes # LocalWords: FRAD indiana framerelay DLCI DCLIs Sangoma SDLA mrouted sync sec # LocalWords: Starmode Metricom MosquitoNet mosquitonet kbit nfsroot Digiboard # LocalWords: DIGI Xe Xeve digiboard UMISC touchscreens mtu ethernets HBAs MEX # LocalWords: Shifflett netcom js jshiffle WIC DECchip ELCP EtherPower dst RTC # LocalWords: rtc SMP lp Digi Intl RightSwitch DGRS dgrs AFFS Amiga UFS SDL AP # LocalWords: Solaris RISCom riscom syncPPP PCBIT pcbit sparc anu au artoo MFB # LocalWords: hitchcock Crynwr cnam pktdrvr NCSA's CyDROM CyCDROM FreeBSD NeXT # LocalWords: NeXTstep disklabel disklabels SMD FFS tm AmigaOS diskfiles Un IQ # LocalWords: Bernd informatik rwth aachen uae affs multihosting bytecode java # LocalWords: applets applet JDK ncsa cabi SNI Alphatronix readme LANs scarab # LocalWords: winsock RNIS caltech OSPF honour Honouring Mbit LocalTalk DEFRAG # LocalWords: localtalk download Packetwin Baycom baycom interwork ASCII JNT # LocalWords: Camtec proxying indyramp defragment defragmented UDP FAS FASXX # LocalWords: FastSCSI SIO FDC qlogicfas QLogic qlogicisp setbaycom ife ee LJ # LocalWords: ethz ch Travelmates ProAudioSpectrum ProAudio SoundMan SB SBPro # LocalWords: Thunderboard SM OPL FM ADLIB TSR Gravis MPU PSS ADI SW DSP codec # LocalWords: ADSP ESC ASIC daughtercard GUSMAX MSS NX AdLib Excell Ensoniq YM # LocalWords: SoundScape Spea MediaTriX AudioTriX WSS OTI ThunderBoard VoxWare # LocalWords: Soundscape SSCAPE TRIX MediaTrix PnP Maui dsp midixx EIA getty # LocalWords: mgetty sendfax gert greenie muc lowlevel Lasermate LanManager io # LocalWords: OOPSes trackball binghamton mobileip ncr IOMAPPED settags ns ser # LocalWords: setsync NEGO MPARITY autotuning prefetch PIIX cdwrite utils rc # LocalWords: PCWATCHDOG berkprod bitgate boldt ucsb jf kyoto jp euc Tetsuyasu # LocalWords: YAMADA tetsu cauchy nslab ntt nevod perm su doc kaf kheops wsc # LocalWords: traduc Bourgin dbourgin menuconfig kfill READMEs HOWTOs Virge WA # LocalWords: IDEDISK IDEFLOPPY EIDE firewalls QMAGIC ZMAGIC LocalWords opti # LocalWords: SVGATextMode vga svga Xkernel syr jmwobus comfaqs dhcp flakey GD # LocalWords: IPv IPng interoperability ipng ipv radio's tapr pkthome PLP nano # LocalWords: Ses Mhz sethdlc SOUNDMODEM WindowsSoundSystem smdiag pcf inka ES # LocalWords: smmixer ptt circ soundmodem MKISS FDDI DEFEA DEFPA DEFXX redhat # LocalWords: HyperNews khg mconv sed lina wuftpd MicroChannel netlink irc cum # LocalWords: raudio RealAudio PPROP NETBIOS GUI IBMMCA ELMC Racal Interlan fi # LocalWords: eth shapecfg src esp PCWD PREVSTAT bootparam sig bitwizard SBC # LocalWords: downloads AFSK TCM FP Karn KA FSK RUH LinkSys cron mouseman LLC # LocalWords: SyQuest SyQuest's CCITT MicroSolutions BPCD bpcd ESPSERIAL PROM # LocalWords: SUNESP openprom OPENPROMIO quango themall al TT MC MMU LC RMW AA # LocalWords: INSNS Ataris AutoConfig ZORRO OCS AMIFB Agnus Denise ECS CDTV GB # LocalWords: AGA Cybervision CYBER GSP TMS DMI Zorro ACSI ROMs SLM BioNet GVP # LocalWords: PAMsNet TekMagic Cyberstorm MkI CYBERSTORMII MkII BLZ onboard cx # LocalWords: Village Tronic ATARILANCE RieblCard PAMCard VME MFP sangoma LAPB # LocalWords: Rhotron BioData's Multiface AMIGAMOUSE COPCON Amiga's bitplanes # LocalWords: ATARIMOUSE MFPSER SCC's MegaSTE ESCC Atari's GVPIOEXT DMASOUND # LocalWords: fdutils cisco univercd rpcg htm iface lapb LAPBETHER tpqic qic # LocalWords: SYNTH xd en binfmt aout ipip terra ipx sd sr sg wic framebuffer # LocalWords: ibmmca lapbether mkiss dlci sdla fmv eepro eexpress ni hp ne es # LocalWords: ibmtr isofs ROMFS romfs pcxx cyclades istallion psaux msbusmouse # LocalWords: atixlmouse sbin softdog pcwd USS Lite ACI miroSOUND PCM miroPCM # LocalWords: microcontroller miro Voxware downloading teles acsi slm gvp ltpc # LocalWords: atari ariadne amigamouse atarimouse builtin IPDDP maths bradford # LocalWords: AppleTalk Farallon PhoneNet Zubkoff lnz SCCB HAPN WANs vesafb nt # LocalWords: wanrouter WANPIPE multiprotocol Mbps wanpipe EtherWORKS nodma SC # LocalWords: smp HiSax SiemensChipSet Siemens AVM Elsa ITK hisax PCC MICROR # LocalWords: Mircolink EURO DSS Spellcaster BRI sc spellcast Digiboards GPIO # LocalWords: SYMBIOS COMPAT SDMS rev ASUS Tekram HX VX API ibmmcascsi ASY asy # LocalWords: loader's PCnetPCI automounter AUTOFS amd autofs VT Gallant's Pnp # LocalWords: AEDSP aedsp enskip tik Sysctl sysctl PARPORT parport pnp IDs EPP # LocalWords: Autoprobe bart patrickr HDLS READBACK AB usr DAMA DS SparQ aten # LocalWords: Symbios PCscsi tmscsim RoamAbout GHz Hinds contrib mathematik ok # LocalWords: darmstadt okir DIGIEPCA International's Xem digiepca epca bootup # LocalWords: zorro CAPI AVMB capi avmb VP SYN syncookies EM em pc Ethertalk # LocalWords: Dayna DL Daynatalk LT PhoneNET ATB Daystar queueing CMDS SCBs ls # LocalWords: SCB STATS Thinnet ThunderLAN TLAN Netelligent NetFlex tlan james # LocalWords: caldera Preload Preloading slowdowns schoebel uni NBD nbd prog # LocalWords: stuttgart rdist TRANS hostnames mango jukeboxes ESS userland PD # LocalWords: hardlinked NAMETRANS env mtab fstab umount nologin runlevel gid # LocalWords: transname filespace adm Nodename hostname uname Kernelname bootp # LocalWords: KERNNAME kname ktype kernelname Kerneltype KERNTYPE Alt RX mdafb # LocalWords: dataless kerneltype SYSNAME Comtrol Rocketport palmtop fbset EGS # LocalWords: nvram SYSRQ SysRq PrintScreen sysrq NVRAMs NvRAM Shortwave RTTY # LocalWords: HFMODEM shortwave Sitor Amtor Pactor GTOR hfmodem hayes TX TMOUT # LocalWords: IDEPCI IDEDMA idedma PDC pdc TRM trm raidtools luthien nuclecu # LocalWords: unam mx miguel koobera uic EMUL solaris pp ieee lpsg co DMAs TOS # LocalWords: BLDCONFIG preloading jumperless BOOTINIT modutils multipath GRE # LocalWords: misconfigured autoconfiguration IPGRE ICMP tracert ipautofw PIM # LocalWords: netis rlynch autofw ipportfw monmouth ipsubs portforwarding pimd # LocalWords: portfw PIMSM netweb usc pim pf EUI aggregatable PB decapsulate # LocalWords: ipddp Decapsulation DECAP bool HAMRADIO tcpdump af CDs tx FBCON # LocalWords: ethertap multisession PPC MMIO GDT GDTH ICP gdth hamradio bpp # LocalWords: lmh weejock AIMSlab RadioTrack RTRACK HZP OptoSCC TRX rx TRXECHO # LocalWords: DMASCC paccomm dmascc addr cfg oevsv oe kib picpar FDX baudrate # LocalWords: baudrates fdx HDX hdx PSK kanren frforum QoS SCHED CBQ SCH sched # LocalWords: sch cbq CSZ Shenker Zhang csz SFQ sfq TBF tbf PFIFO fifo PRIO RW # LocalWords: prio Micom xIO dwmw rimi OMIRR omirr omirrd unicode ntfs cmu NIC # LocalWords: Braam braam Schmidt's freiburg nls codepages codepage Romanian # LocalWords: Slovak Slovenian Sorbian Nordic iso Catalan Faeroese Galician SZ # LocalWords: Valencian Slovene Esperanto Estonian Latvian Byelorussian KOI mt # LocalWords: charset Inuit Greenlandic Sami Lappish koi SOFTCURSOR softcursor # LocalWords: Specialix specialix DTR RTS RTSCTS cycladesZ Exabyte ftape's inr # LocalWords: Iomega's LBFM claus ZFTAPE VFS zftape zft William's lzrw DFLT kb # LocalWords: MTSETBLK MTIOCTOP qft setblk zftape's tar's afio's setdrvbuffer # LocalWords: Procfs Exabyte's THR FCD sysvinit init PSC pscwdt VMIDI Euro SAB # LocalWords: Mostek Fastlane PowerMac PReP PMAC PowerPC Macintoshes Starmax # LocalWords: PowerStack Starmaxes MCOMMON DEVICETREE ATY IMS IMSTT videodev # LocalWords: BT Hauppauge STB bttv Quickcam BW BWQCAM bw qcam Mediavision PMS # LocalWords: pms Avatar Freecom Imation Superdisk BPCK bpck COMM comm DSTR ru # LocalWords: dstr EPAT EPEZ epat EPIA epia FreeCom FRPW frpw KingByte KBIC HW # LocalWords: KingByte's kbic OnSpec ValuStore FASTROUTE fastroute FLOWCONTROL # LocalWords: struct APIC realtime OSs LynxOS CNC tmp cvf HFS hfs ADFS Risc os # LocalWords: adfs ncpmount namespace SUBDIR reexport NDS kcore FT SPX spx DAT # LocalWords: interserver BLKSZ NUMBUFFERS apmd Tadpole ANA roestock QuickCam # LocalWords: isapnptools Colour CQCAM colour Connectix QuickClip prive mentre # LocalWords: KMOD kmod conformant utexas kharker UnixWare Mwave cgi cl ts ibm # LocalWords: eXchange threepio oakland simtel pre ULTRAMCA EtherLink isa luik # LocalWords: EtherLink OpenBSD pts DEVPTS devpts ptmx ttyp glibc readback SA # LocalWords: mwave OLDCARD isdnloop linklevel loopctrl Eicon Diehl DIEHLDIVA # LocalWords: ASUSCOM AsusCom TELEINT semiactiv Sedlbauer Sportster TA MIC ITH # LocalWords: NETjet NetJet Niccy Neuhaus sparcs AOC AOCD AOCE Microlink SAA # LocalWords: teletext WinTV saa iproute tc Quadra Performa PowerBook tor AUN # LocalWords: setserial compsoc steve Econet econet AUNUDP psched TEQL TLE CLS # LocalWords: teql FW Ingres TwistedPair MTRR MTRRs mtrr cfs crypto TD ktti KT # LocalWords: PHd ICS ipchains adelaide rustcorp syslog Cumana steganography # LocalWords: AcornSCSI EcoSCSI EESOX EESOXSCSI Powertec POWERTECSCSI dec SF # LocalWords: RadioReveal gatekeeper aimslab aztech FMI sf fmi RTL rtl cesdis # LocalWords: Yellowfin gsfc nasa gov yellowfin pcnet Mylex LNE lne EtherH hs # LocalWords: EBSA chattr RiscOS Winmodem AGP Atomwide DUALSP pcsp robinson CT # LocalWords: SGALAXY Waverider DSPxxx TRXPRO AudioTrix OSWF MOT CFB DSY kbps # LocalWords: tuwien kkudielk LVD mega lun MAXTAGS Gbps arcnet Olicom SKTR SNA # LocalWords: SysKonnect sktr sna etherboot ufs NetBEUI MultiSound MSNDCLAS GX # LocalWords: MSNDINIT MSNDPERM MSNDPIN PNDSPINI PNDSPERM Ensoniq's RetinaZ SS # LocalWords: AudioPCI lspci SonicVibes sonicvibes SPARCs roadrunner CLgen UPA # LocalWords: swansea shtml Zoltrix zoltrix BINUTILS EGCS binutils VIDC DACs # LocalWords: CyberVision Cirrus PowerBooks Topcat SBUS CGsix TurboGX BWtwo SS # LocalWords: CGthree TCX unswapable vfb fbcon hicolor truecolor AFB ILBM SOC # LocalWords: IPLAN gracilis Fibre SBus SparcSTORAGE SV jnewbigin swin QNX qnx # LocalWords: PTY PTYS ptyxx ttyxx PTYs ssh sb Avance ALS pss pvv kerneli hd # LocalWords: synth WaveFront MSND NONPNP AudioExcelDSP STRAM APUS CHRP MBX Nx # LocalWords: PowerMac's BMAC radiotrack rtrack miropcm OFFBOARD HPT UDMA DVD # LocalWords: hpt fokus gmd Cyrix DXL SLC DLC NexGen MediaGX GXm IDT WinChip # LocalWords: MMX MII valkyrie mdacon vdolive VDOLive cuseeme CU hippi rrunner # LocalWords: SeeMe ipmasqadm juanjox ipmarkfw markfw TNCs Microdyne rhine lib # LocalWords: libc jsX gamepad gameport CHF FCS FPGaming MadCatz ASSASIN GrIP # LocalWords: Assasin gamepads GamePad PDPI gamecards gamecard WingMan BSP WCS # LocalWords: ThunderPad CyberMan SideWinder ThrustMaster DirectConnect NES XF # LocalWords: Millenium SNES PSX Multisystem Nintendo PlayStation Amstrad CPC # LocalWords: Sega TurboGraFX Steffen Schwenke Multiststem PDIF FIFOSIZE EPLUS # LocalWords: PowerUP RoadRunner tahallah dos functionkey setterm imladris Woz # LocalWords: PowerMacs Winbond Algorithmics ALGOR algor ECOFF IRIX SGI SGI's # LocalWords: gfx virtualized Xpmac mklinux XFree FBDev Woodhouse mvhi Seeq fp # LocalWords: SGISEEQ HIgh ADB ADBMOUSE crosscompiler CROSSCOMPILE FPE GDB gdb # LocalWords: JOYPORT rp spoofing DawiControl NOGENSUPP EEPROM HSSI Alessandro # LocalWords: singleprocessor tex MATHEMU FRIQ Maxell friq Alcor XLT AlphaBook # LocalWords: AlphaPCI DP LX Miata Mikasa Noritake RPX UX BX Takara EV PRIMO # LocalWords: TSC Matrox Productiva matroxfb matrox multihead ia linuxhq MFW # LocalWords: mfw AAA MCS Initio XXU initio imm AutoDetect IZIP CTR usec HDLC # LocalWords: COSA SRP muni cz kas cosa Alteon AceNIC acenic VTOC OSes GMT SAx # LocalWords: Inspiron localtime INTS Thinkpads Ralf Brown's Flightstick NNN # LocalWords: Xterminator Blackhawk NN mpu ioports DCA HPDCA HPLANCE DIO Corel # LocalWords: GemTek gemtek CMDLINE IrDA PDA's irmanager irattach RR AVA DN rg # LocalWords: uit dagb irda LSAP IrLMP RR's IrLAP IR alloc skb's kfree skb's # LocalWords: GZIP IrLAN NetbeamIR ESI JetEye IrOBEX IrCOMM TTY's minicom dti # LocalWords: ircomm ircomm pluto thiguchi IrTTY Linux's bps NetWinder MIR NSC # LocalWords: ACTiSYS Dongle dongle dongles esi actisys IrMate tekram BVM MVME # LocalWords: BVME BVME WRITETHROUGH copyback writethrough fwmark syncookie tu # LocalWords: alphalinux GOBIOS csn chemnitz nat ACARD AMI MegaRAID megaraid # LocalWords: QNXFS ISI isicom xterms Apollos VPN RCPCI rcpci sgi visws pcmcia # LocalWords: IrLPT UIRCC Tecra This driver is for Compaq's SMART2 Intellegent Disk Array Controllers. Supported Cards: ---------------- This driver is known to work with the following cards: * SMART (EISA) * SMART-2/E (EISA) * SMART-2/P * SMART-2DH * SMART-2SL * SMART-221 * SMART-3100ES * SMART-3200 * Integrated Smart Array Controller * SA 4200 * SA 4250ES * SA 431 It should also work with some really old Disk array adapters, but I am unable to test against these cards: * IDA * IDA-2 * IAES Installing: ----------- You need to build a new kernel to use this device, even if you want to use a loadable module. Apply the patch to a 2.2.x kernel: # cd linux # patch -p1 Last revised: December 21, 1999 This list is the Linux Device List, the official registry of allocated device numbers and /dev directory nodes for the Linux operating system. The latest version of this list is included with the Linux kernel sources. It is also available separately from http://www.kernel.org/pub/linux/docs/device-list/ or ftp://ftp.kernel.org/pub/linux/docs/device-list/. The LaTeX version of this document is no longer maintained. This document is included by reference into the Filesystem Hierarchy Standard (FHS). The FHS is available from http://www.pathname.com/fhs/. Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga platform only. Allocations marked (68k/Atari) apply to Linux/68k on the Atari platform only. This document is in the public domain. The author requests, however, that semantically altered versions are not distributed without permission of the author, assuming the author can be contacted without an unreasonable effort. In particular, please don't sent patches for this list to Linus, at least not without contacting me first. I do not have any information about these devices beyond what appears on this list. Any such information requests will be deleted without reply. **** PLEASE READ THIS BEFORE SUBMITTING A DEVICE ENTRY **** To have a major number allocated, or a minor number in situations where that applies (e.g. busmice), please contact me with the appropriate device information. Also, if you have additional information regarding any of the devices listed below, or if I have made a mistake, I would greatly appreciate a note. I do, however, make two requests about the nature of your report. This is necessary for me to be able to keep this list up to date and correct in a timely manner. First of all, *please* include the word "device" in the subject so your mail won't accidentally get buried! I receive hundreds of email messages a day, so mail sent with other subjects may very well get lost in the avalanche. Second, please include a description of the device *in the same format as this list*. The reason for this is that it is the only way I have found to ensure I have all the requisite information to publish your device and avoid conflicts. Finally, sometimes I have to play "namespace police." Please don't be offended. I often get submissions for /dev names that would be bound to cause conflicts down the road. I am trying to avoid getting in a situation where we would have to suffer an incompatible forward change. Your cooperation is appreciated. 0 Unnamed devices (e.g. non-device mounts) 0 = reserved as null device number 1 char Memory devices 1 = /dev/mem Physical memory access 2 = /dev/kmem Kernel virtual memory access 3 = /dev/null Null device 4 = /dev/port I/O port access 5 = /dev/zero Null byte source 6 = /dev/core OBSOLETE - replaced by /proc/kcore 7 = /dev/full Returns ENOSPC on write 8 = /dev/random Nondeterministic random number gen. 9 = /dev/urandom Faster, less secure random number gen. block RAM disk 0 = /dev/ram0 First RAM disk ... 7 = /dev/ram7 Eighth RAM disk 250 = /dev/initrd Initial RAM disk Older kernels had /dev/ramdisk (1, 1) here. /dev/initrd refers to a RAM disk which was preloaded by the boot loader. 2 char Pseudo-TTY masters 0 = /dev/ptyp0 First PTY master 1 = /dev/ptyp1 Second PTY master ... 255 = /dev/ptyef 256th PTY master Pseudo-tty's are named as follows: * Masters are "pty", slaves are "tty"; * the fourth letter is one of pqrstuvwxyzabcde indicating the 1st through 16th series of 16 pseudo-ttys each, and * the fifth letter is one of 0123456789abcdef indicating the position within the series. These are the old-style (BSD) PTY devices; Unix98 devices are on major 128 and above and use the PTY master multiplex (/dev/ptmx) to acquire a PTY on demand. block Floppy disks 0 = /dev/fd0 Controller 0, drive 0, autodetect 1 = /dev/fd1 Controller 0, drive 1, autodetect 2 = /dev/fd2 Controller 0, drive 2, autodetect 3 = /dev/fd3 Controller 0, drive 3, autodetect 128 = /dev/fd4 Controller 1, drive 0, autodetect 129 = /dev/fd5 Controller 1, drive 1, autodetect 130 = /dev/fd6 Controller 1, drive 2, autodetect 131 = /dev/fd7 Controller 1, drive 3, autodetect To specify format, add to the autodetect device number: 0 = /dev/fd? Autodetect format 4 = /dev/fd?d360 5.25" 360K in a 360K drive(1) 20 = /dev/fd?h360 5.25" 360K in a 1200K drive(1) 48 = /dev/fd?h410 5.25" 410K in a 1200K drive 64 = /dev/fd?h420 5.25" 420K in a 1200K drive 24 = /dev/fd?h720 5.25" 720K in a 1200K drive 80 = /dev/fd?h880 5.25" 880K in a 1200K drive(1) 8 = /dev/fd?h1200 5.25" 1200K in a 1200K drive(1) 40 = /dev/fd?h1440 5.25" 1440K in a 1200K drive(1) 56 = /dev/fd?h1476 5.25" 1476K in a 1200K drive 72 = /dev/fd?h1494 5.25" 1494K in a 1200K drive 92 = /dev/fd?h1600 5.25" 1600K in a 1200K drive(1) 12 = /dev/fd?u360 3.5" 360K Double Density(2) 16 = /dev/fd?u720 3.5" 720K Double Density(1) 120 = /dev/fd?u800 3.5" 800K Double Density(2) 52 = /dev/fd?u820 3.5" 820K Double Density 68 = /dev/fd?u830 3.5" 830K Double Density 84 = /dev/fd?u1040 3.5" 1040K Double Density(1) 88 = /dev/fd?u1120 3.5" 1120K Double Density(1) 28 = /dev/fd?u1440 3.5" 1440K High Density(1) 124 = /dev/fd?u1600 3.5" 1600K High Density(1) 44 = /dev/fd?u1680 3.5" 1680K High Density(3) 60 = /dev/fd?u1722 3.5" 1722K High Density 76 = /dev/fd?u1743 3.5" 1743K High Density 96 = /dev/fd?u1760 3.5" 1760K High Density 116 = /dev/fd?u1840 3.5" 1840K High Density(3) 100 = /dev/fd?u1920 3.5" 1920K High Density(1) 32 = /dev/fd?u2880 3.5" 2880K Extra Density(1) 104 = /dev/fd?u3200 3.5" 3200K Extra Density 108 = /dev/fd?u3520 3.5" 3520K Extra Density 112 = /dev/fd?u3840 3.5" 3840K Extra Density(1) 36 = /dev/fd?CompaQ Compaq 2880K drive; obsolete? (1) Autodetectable format (2) Autodetectable format in a Double Density (720K) drive only (3) Autodetectable format in a High Density (1440K) drive only NOTE: The letter in the device name (d, q, h or u) signifies the type of drive: 5.25" Double Density (d), 5.25" Quad Density (q), 5.25" High Density (h) or 3.5" (any model, u). The use of the capital letters D, H and E for the 3.5" models have been deprecated, since the drive type is insignificant for these devices. 3 char Pseudo-TTY slaves 0 = /dev/ttyp0 First PTY slave 1 = /dev/ttyp1 Second PTY slave ... 255 = /dev/ttyef 256th PTY slave These are the old-style (BSD) PTY devices; Unix98 devices are on major 136 and above. block First MFM, RLL and IDE hard disk/CD-ROM interface 0 = /dev/hda Master: whole disk (or CD-ROM) 64 = /dev/hdb Slave: whole disk (or CD-ROM) For partitions, add to the whole disk device number: 0 = /dev/hd? Whole disk 1 = /dev/hd?1 First partition 2 = /dev/hd?2 Second partition ... 63 = /dev/hd?63 63rd partition For Linux/i386, partitions 1-4 are the primary partitions, and 5 and above are logical partitions. Other versions of Linux use partitioning schemes appropriate to their respective architectures. 4 char TTY devices 0 = /dev/tty0 Current virtual console 1 = /dev/tty1 First virtual console ... 63 = /dev/tty63 63rd virtual console 64 = /dev/ttyS0 First UART serial port ... 255 = /dev/ttyS191 192nd UART serial port Older versions of the Linux kernel used this major number for BSD PTY devices. As of Linux 2.1.115, this is no longer supported. Use major numbers 2 and 3. 5 char Alternate TTY devices 0 = /dev/tty Current TTY device 1 = /dev/console System console 2 = /dev/ptmx PTY master multiplex 64 = /dev/cua0 Callout device for ttyS0 ... 255 = /dev/cua191 Callout device for ttyS191 (5,1) is /dev/console starting with Linux 2.1.71. See the section on terminal devices for more information on /dev/console. 6 char Parallel printer devices 0 = /dev/lp0 Parallel printer on parport0 1 = /dev/lp1 Parallel printer on parport1 ... Current Linux kernels no longer have a fixed mapping between parallel ports and I/O addresses. Instead, they are redirected through the parport multiplex layer. 7 char Virtual console capture devices 0 = /dev/vcs Current vc text contents 1 = /dev/vcs1 tty1 text contents ... 63 = /dev/vcs63 tty63 text contents 128 = /dev/vcsa Current vc text/attribute contents 129 = /dev/vcsa1 tty1 text/attribute contents ... 191 = /dev/vcsa63 tty63 text/attribute contents NOTE: These devices permit both read and write access. block Loopback devices 0 = /dev/loop0 First loopback device 1 = /dev/loop1 Second loopback device ... The loopback devices are used to mount filesystems not associated with block devices. The binding to the loopback devices is handled by mount(8) or losetup(8). 8 block SCSI disk devices (0-15) 0 = /dev/sda First SCSI disk whole disk 16 = /dev/sdb Second SCSI disk whole disk 32 = /dev/sdc Third SCSI disk whole disk ... 240 = /dev/sdp Sixteenth SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 9 char SCSI tape devices 0 = /dev/st0 First SCSI tape, mode 0 1 = /dev/st1 Second SCSI tape, mode 0 ... 32 = /dev/st0l First SCSI tape, mode 1 33 = /dev/st1l Second SCSI tape, mode 1 ... 64 = /dev/st0m First SCSI tape, mode 2 65 = /dev/st1m Second SCSI tape, mode 2 ... 96 = /dev/st0a First SCSI tape, mode 3 97 = /dev/st1a Second SCSI tape, mode 3 ... 128 = /dev/nst0 First SCSI tape, mode 0, no rewind 129 = /dev/nst1 Second SCSI tape, mode 0, no rewind ... 160 = /dev/nst0l First SCSI tape, mode 1, no rewind 161 = /dev/nst1l Second SCSI tape, mode 1, no rewind ... 192 = /dev/nst0m First SCSI tape, mode 2, no rewind 193 = /dev/nst1m Second SCSI tape, mode 2, no rewind ... 224 = /dev/nst0a First SCSI tape, mode 3, no rewind 225 = /dev/nst1a Second SCSI tape, mode 3, no rewind ... "No rewind" refers to the omission of the default automatic rewind on device close. The MTREW or MTOFFL ioctl()'s can be used to rewind the tape regardless of the device used to access it. block Metadisk (RAID) devices 0 = /dev/md0 First metadisk group 1 = /dev/md1 Second metadisk group ... The metadisk driver is used to span a filesystem across multiple physical disks. 10 char Non-serial mice, misc features 0 = /dev/logibm Logitech bus mouse 1 = /dev/psaux PS/2-style mouse port 2 = /dev/inportbm Microsoft Inport bus mouse 3 = /dev/atibm ATI XL bus mouse 4 = /dev/jbm J-mouse 4 = /dev/amigamouse Amiga mouse (68k/Amiga) 5 = /dev/atarimouse Atari mouse 6 = /dev/sunmouse Sun mouse 7 = /dev/amigamouse1 Second Amiga mouse 8 = /dev/smouse Simple serial mouse driver 9 = /dev/pc110pad IBM PC-110 digitizer pad 10 = /dev/adbmouse Apple Desktop Bus mouse 11 = /dev/vrtpanel Vr41xx embedded touch panel 128 = /dev/beep Fancy beep device 129 = /dev/modreq Kernel module load request 130 = /dev/watchdog Watchdog timer port 131 = /dev/temperature Machine internal temperature 132 = /dev/hwtrap Hardware fault trap 133 = /dev/exttrp External device trap 134 = /dev/apm_bios Advanced Power Management BIOS 135 = /dev/rtc Real Time Clock 139 = /dev/openprom SPARC OpenBoot PROM 140 = /dev/relay8 Berkshire Products Octal relay card 141 = /dev/relay16 Berkshire Products ISO-16 relay card 142 = /dev/msr x86 model-specific registers 143 = /dev/pciconf PCI configuration space 144 = /dev/nvram Non-volatile configuration RAM 145 = /dev/hfmodem Soundcard shortwave modem control 146 = /dev/graphics Linux/SGI graphics device 147 = /dev/opengl Linux/SGI OpenGL pipe 148 = /dev/gfx Linux/SGI graphics effects device 149 = /dev/input/mouse Linux/SGI Irix emulation mouse 150 = /dev/input/keyboard Linux/SGI Irix emulation keyboard 151 = /dev/led Front panel LEDs 153 = /dev/mergemem Memory merge device 154 = /dev/pmu Macintosh PowerBook power manager 155 = /dev/isictl MultiTech ISICom serial control 156 = /dev/lcd Front panel LCD display 157 = /dev/ac Applicom Intl Profibus card 158 = /dev/nwbutton Netwinder external button 159 = /dev/nwdebug Netwinder debug interface 160 = /dev/nwflash Netwinder flash memory 161 = /dev/userdma User-space DMA access 162 = /dev/smbus System Management Bus 163 = /dev/lik Logitech Internet Keyboard 164 = /dev/ipmo Intel Intelligent Platform Management 165 = /dev/vmmon VMWare virtual machine monitor 166 = /dev/i2o/ctl I2O configuration manager 167 = /dev/specialix_sxctl Specialix serial control 168 = /dev/tcldrv Technology Concepts serial control 169 = /dev/specialix_rioctl Specialix RIO serial control 170 = /dev/smapi IBM Thinkpad SMAPI 171 = /dev/srripc QNX4 API IPC manager 172 = /dev/usemaclone Semaphore clone device 173 = /dev/ipmikcs Intelligent Platform Management 174 = /dev/uctrl SPARCbook 3 microcontroller 175 = /dev/agpgart AGP Graphics Address Remapping Table 176 = /dev/gtrsc Gorgy Timing radio clock 177 = /dev/cbm Serial CBM bus 178 = /dev/jsflash JavaStation OS flash SIMM 179 = /dev/xsvc High-speed shared-mem/semaphore service 180 = /dev/vrbuttons Vr41xx button input device 240-255 Reserved for local use 11 char Raw keyboard device 0 = /dev/kbd Raw keyboard device The raw keyboard device is used on Linux/SPARC only. block SCSI CD-ROM devices 0 = /dev/sr0 First SCSI CD-ROM 1 = /dev/sr1 Second SCSI CD-ROM ... The prefix /dev/scd instead of /dev/sr has been used as well, and might make more sense. 12 char QIC-02 tape 2 = /dev/ntpqic11 QIC-11, no rewind-on-close 3 = /dev/tpqic11 QIC-11, rewind-on-close 4 = /dev/ntpqic24 QIC-24, no rewind-on-close 5 = /dev/tpqic24 QIC-24, rewind-on-close 6 = /dev/ntpqic120 QIC-120, no rewind-on-close 7 = /dev/tpqic120 QIC-120, rewind-on-close 8 = /dev/ntpqic150 QIC-150, no rewind-on-close 9 = /dev/tpqic150 QIC-150, rewind-on-close The device names specified are proposed -- if there are "standard" names for these devices, please let me know. block MSCDEX CD-ROM callback support 0 = /dev/dos_cd0 First MSCDEX CD-ROM 1 = /dev/dos_cd1 Second MSCDEX CD-ROM ... 13 char PC speaker (OBSOLETE) 0 = /dev/pcmixer Emulates /dev/mixer 1 = /dev/pcsp Emulates /dev/dsp (8-bit) 4 = /dev/pcaudio Emulates /dev/audio 5 = /dev/pcsp16 Emulates /dev/dsp (16-bit) The current PC speaker driver uses the Open Sound System interface, and these devices are obsolete. block 8-bit MFM/RLL/IDE controller 0 = /dev/xda First XT disk whole disk 64 = /dev/xdb Second XT disk whole disk Partitions are handled in the same way as IDE disks (see major number 3). 14 char Open Sound System (OSS) 0 = /dev/mixer Mixer control 1 = /dev/sequencer Audio sequencer 2 = /dev/midi00 First MIDI port 3 = /dev/dsp Digital audio 4 = /dev/audio Sun-compatible digital audio 6 = /dev/sndstat Sound card status information 7 = /dev/audioctl SPARC audio control device 8 = /dev/sequencer2 Sequencer -- alternate device 16 = /dev/mixer1 Second soundcard mixer control 17 = /dev/patmgr0 Sequencer patch manager 18 = /dev/midi01 Second MIDI port 19 = /dev/dsp1 Second soundcard digital audio 20 = /dev/audio1 Second soundcard Sun digital audio 33 = /dev/patmgr1 Sequencer patch manager 34 = /dev/midi02 Third MIDI port 50 = /dev/midi03 Fourth MIDI port block BIOS harddrive callback support 0 = /dev/dos_hda First BIOS harddrive whole disk 64 = /dev/dos_hdb Second BIOS harddrive whole disk 128 = /dev/dos_hdc Third BIOS harddrive whole disk 192 = /dev/dos_hdd Fourth BIOS harddrive whole disk Partitions are handled in the same way as IDE disks (see major number 3). 15 char Joystick 0 = /dev/js0 First analog joystick 1 = /dev/js1 Second analog joystick ... 128 = /dev/djs0 First digital joystick 129 = /dev/djs1 Second digital joystick ... block Sony CDU-31A/CDU-33A CD-ROM 0 = /dev/sonycd Sony CDU-31a CD-ROM 16 char Non-SCSI scanners 0 = /dev/gs4500 Genius 4500 handheld scanner block GoldStar CD-ROM 0 = /dev/gscd GoldStar CD-ROM 17 char Chase serial card 0 = /dev/ttyH0 First Chase port 1 = /dev/ttyH1 Second Chase port ... block Optics Storage CD-ROM 0 = /dev/optcd Optics Storage CD-ROM 18 char Chase serial card - alternate devices 0 = /dev/cuh0 Callout device for ttyH0 1 = /dev/cuh1 Callout device for ttyH1 ... block Sanyo CD-ROM 0 = /dev/sjcd Sanyo CD-ROM 19 char Cyclades serial card 0 = /dev/ttyC0 First Cyclades port ... 31 = /dev/ttyC31 32nd Cyclades port block "Double" compressed disk 0 = /dev/double0 First compressed disk ... 7 = /dev/double7 Eighth compressed disk 128 = /dev/cdouble0 Mirror of first compressed disk ... 135 = /dev/cdouble7 Mirror of eighth compressed disk See the Double documentation for the meaning of the mirror devices. 20 char Cyclades serial card - alternate devices 0 = /dev/cub0 Callout device for ttyC0 ... 31 = /dev/cub31 Callout device for ttyC31 block Hitachi CD-ROM (under development) 0 = /dev/hitcd Hitachi CD-ROM 21 char Generic SCSI access 0 = /dev/sg0 First generic SCSI device 1 = /dev/sg1 Second generic SCSI device ... Most distributions name these /dev/sga, /dev/sgb...; this sets an unnecessary limit of 26 SCSI devices in the system and is counter to standard Linux device-naming practice. block Acorn MFM hard drive interface 0 = /dev/mfma First MFM drive whole disk 64 = /dev/mfmb Second MFM drive whole disk This device is used on the ARM-based Acorn RiscPC. Partitions are handled the same way as for IDE disks (see major number 3). 22 char Digiboard serial card 0 = /dev/ttyD0 First Digiboard port 1 = /dev/ttyD1 Second Digiboard port ... block Second IDE hard disk/CD-ROM interface 0 = /dev/hdc Master: whole disk (or CD-ROM) 64 = /dev/hdd Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 23 char Digiboard serial card - alternate devices 0 = /dev/cud0 Callout device for ttyD0 1 = /dev/cud1 Callout device for ttyD1 ... block Mitsumi proprietary CD-ROM 0 = /dev/mcd Mitsumi CD-ROM 24 char Stallion serial card 0 = /dev/ttyE0 Stallion port 0 card 0 1 = /dev/ttyE1 Stallion port 1 card 0 ... 64 = /dev/ttyE64 Stallion port 0 card 1 65 = /dev/ttyE65 Stallion port 1 card 1 ... 128 = /dev/ttyE128 Stallion port 0 card 2 129 = /dev/ttyE129 Stallion port 1 card 2 ... 192 = /dev/ttyE192 Stallion port 0 card 3 193 = /dev/ttyE193 Stallion port 1 card 3 ... block Sony CDU-535 CD-ROM 0 = /dev/cdu535 Sony CDU-535 CD-ROM 25 char Stallion serial card - alternate devices 0 = /dev/cue0 Callout device for ttyE0 1 = /dev/cue1 Callout device for ttyE1 ... 64 = /dev/cue64 Callout device for ttyE64 65 = /dev/cue65 Callout device for ttyE65 ... 128 = /dev/cue128 Callout device for ttyE128 129 = /dev/cue129 Callout device for ttyE129 ... 192 = /dev/cue192 Callout device for ttyE192 193 = /dev/cue193 Callout device for ttyE193 ... block First Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd0 Panasonic CD-ROM controller 0 unit 0 1 = /dev/sbpcd1 Panasonic CD-ROM controller 0 unit 1 2 = /dev/sbpcd2 Panasonic CD-ROM controller 0 unit 2 3 = /dev/sbpcd3 Panasonic CD-ROM controller 0 unit 3 26 char Quanta WinVision frame grabber 0 = /dev/wvisfgrab Quanta WinVision frame grabber block Second Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd4 Panasonic CD-ROM controller 1 unit 0 1 = /dev/sbpcd5 Panasonic CD-ROM controller 1 unit 1 2 = /dev/sbpcd6 Panasonic CD-ROM controller 1 unit 2 3 = /dev/sbpcd7 Panasonic CD-ROM controller 1 unit 3 27 char QIC-117 tape 0 = /dev/qft0 Unit 0, rewind-on-close 1 = /dev/qft1 Unit 1, rewind-on-close 2 = /dev/qft2 Unit 2, rewind-on-close 3 = /dev/qft3 Unit 3, rewind-on-close 4 = /dev/nqft0 Unit 0, no rewind-on-close 5 = /dev/nqft1 Unit 1, no rewind-on-close 6 = /dev/nqft2 Unit 2, no rewind-on-close 7 = /dev/nqft3 Unit 3, no rewind-on-close 16 = /dev/zqft0 Unit 0, rewind-on-close, compression 17 = /dev/zqft1 Unit 1, rewind-on-close, compression 18 = /dev/zqft2 Unit 2, rewind-on-close, compression 19 = /dev/zqft3 Unit 3, rewind-on-close, compression 20 = /dev/nzqft0 Unit 0, no rewind-on-close, compression 21 = /dev/nzqft1 Unit 1, no rewind-on-close, compression 22 = /dev/nzqft2 Unit 2, no rewind-on-close, compression 23 = /dev/nzqft3 Unit 3, no rewind-on-close, compression 32 = /dev/rawqft0 Unit 0, rewind-on-close, no file marks 33 = /dev/rawqft1 Unit 1, rewind-on-close, no file marks 34 = /dev/rawqft2 Unit 2, rewind-on-close, no file marks 35 = /dev/rawqft3 Unit 3, rewind-on-close, no file marks 36 = /dev/nrawqft0 Unit 0, no rewind-on-close, no file marks 37 = /dev/nrawqft1 Unit 1, no rewind-on-close, no file marks 38 = /dev/nrawqft2 Unit 2, no rewind-on-close, no file marks 39 = /dev/nrawqft3 Unit 3, no rewind-on-close, no file marks block Third Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd8 Panasonic CD-ROM controller 2 unit 0 1 = /dev/sbpcd9 Panasonic CD-ROM controller 2 unit 1 2 = /dev/sbpcd10 Panasonic CD-ROM controller 2 unit 2 3 = /dev/sbpcd11 Panasonic CD-ROM controller 2 unit 3 28 char Stallion serial card - card programming 0 = /dev/staliomem0 First Stallion card I/O memory 1 = /dev/staliomem1 Second Stallion card I/O memory 2 = /dev/staliomem2 Third Stallion card I/O memory 3 = /dev/staliomem3 Fourth Stallion card I/O memory char Atari SLM ACSI laser printer (68k/Atari) 0 = /dev/slm0 First SLM laser printer 1 = /dev/slm1 Second SLM laser printer ... block Fourth Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd12 Panasonic CD-ROM controller 3 unit 0 1 = /dev/sbpcd13 Panasonic CD-ROM controller 3 unit 1 2 = /dev/sbpcd14 Panasonic CD-ROM controller 3 unit 2 3 = /dev/sbpcd15 Panasonic CD-ROM controller 3 unit 3 block ACSI disk (68k/Atari) 0 = /dev/ada First ACSI disk whole disk 16 = /dev/adb Second ACSI disk whole disk 32 = /dev/adc Third ACSI disk whole disk ... 240 = /dev/adp 16th ACSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15, like SCSI. 29 char Universal frame buffer 0 = /dev/fb0 First frame buffer 32 = /dev/fb1 Second frame buffer ... 224 = /dev/fb7 Eighth frame buffer All additional minor numbers are reserved. block Aztech/Orchid/Okano/Wearnes CD-ROM 0 = /dev/aztcd Aztech CD-ROM 30 char iBCS-2 compatibility devices 0 = /dev/socksys Socket access 1 = /dev/spx SVR3 local X interface 2 = /dev/inet/arp Network access 2 = /dev/inet/icmp Network access 2 = /dev/inet/ip Network access 2 = /dev/inet/udp Network access 2 = /dev/inet/tcp Network access Additionally, iBCS-2 requires /dev/nfsd to be a link to /dev/socksys, and /dev/X0R to be a link to /dev/null. block Philips LMS CM-205 CD-ROM 0 = /dev/cm205cd Philips LMS CM-205 CD-ROM /dev/lmscd is an older name for this device. This driver does not work with the CM-205MS CD-ROM. 31 char MPU-401 MIDI 0 = /dev/mpu401data MPU-401 data port 1 = /dev/mpu401stat MPU-401 status port block ROM/flash memory card 0 = /dev/rom0 First ROM card (rw) ... 7 = /dev/rom7 Eighth ROM card (rw) 8 = /dev/rrom0 First ROM card (ro) ... 15 = /dev/rrom7 Eighth ROM card (ro) 16 = /dev/flash0 First flash memory card (rw) ... 23 = /dev/flash7 Eighth flash memory card (rw) 24 = /dev/rflash0 First flash memory card (ro) ... 31 = /dev/rflash7 Eighth flash memory card (ro) The read-write (rw) devices support back-caching written data in RAM, as well as writing to flash RAM devices. The read-only devices (ro) support reading only. 32 char Specialix serial card 0 = /dev/ttyX0 First Specialix port 1 = /dev/ttyX1 Second Specialix port ... block Philips LMS CM-206 CD-ROM 0 = /dev/cm206cd Philips LMS CM-206 CD-ROM 33 char Specialix serial card - alternate devices 0 = /dev/cux0 Callout device for ttyX0 1 = /dev/cux1 Callout device for ttyX1 ... block Third IDE hard disk/CD-ROM interface 0 = /dev/hde Master: whole disk (or CD-ROM) 64 = /dev/hdf Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 34 char Z8530 HDLC driver 0 = /dev/scc0 First Z8530, first port 1 = /dev/scc1 First Z8530, second port 2 = /dev/scc2 Second Z8530, first port 3 = /dev/scc3 Second Z8530, second port ... In a previous version these devices were named /dev/sc1 for /dev/scc0, /dev/sc2 for /dev/scc1, and so on. block Fourth IDE hard disk/CD-ROM interface 0 = /dev/hdg Master: whole disk (or CD-ROM) 64 = /dev/hdh Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 35 char tclmidi MIDI driver 0 = /dev/midi0 First MIDI port, kernel timed 1 = /dev/midi1 Second MIDI port, kernel timed 2 = /dev/midi2 Third MIDI port, kernel timed 3 = /dev/midi3 Fourth MIDI port, kernel timed 64 = /dev/rmidi0 First MIDI port, untimed 65 = /dev/rmidi1 Second MIDI port, untimed 66 = /dev/rmidi2 Third MIDI port, untimed 67 = /dev/rmidi3 Fourth MIDI port, untimed 128 = /dev/smpte0 First MIDI port, SMPTE timed 129 = /dev/smpte1 Second MIDI port, SMPTE timed 130 = /dev/smpte2 Third MIDI port, SMPTE timed 131 = /dev/smpte3 Fourth MIDI port, SMPTE timed block Slow memory ramdisk 0 = /dev/slram Slow memory ramdisk 36 char Netlink support 0 = /dev/route Routing, device updates, kernel to user 1 = /dev/skip enSKIP security cache control 3 = /dec/fwmonitor Firewall packet copies 16 = /dev/tap0 First Ethertap device ... 31 = /dev/tap15 16th Ethertap device block MCA ESDI hard disk 0 = /dev/eda First ESDI disk whole disk 64 = /dev/edb Second ESDI disk whole disk ... Partitions are handled in the same way as IDE disks (see major number 3). 37 char IDE tape 0 = /dev/ht0 First IDE tape 1 = /dev/ht1 Second IDE tape ... 128 = /dev/nht0 First IDE tape, no rewind-on-close 129 = /dev/nht1 Second IDE tape, no rewind-on-close ... Currently, only one IDE tape drive is supported. block Zorro II ramdisk 0 = /dev/z2ram Zorro II ramdisk 38 char Myricom PCI Myrinet board 0 = /dev/mlanai0 First Myrinet board 1 = /dev/mlanai1 Second Myrinet board ... This device is used for status query, board control and "user level packet I/O." This board is also accessible as a standard networking "eth" device. block Reserved for Linux/AP+ 39 char ML-16P experimental I/O board 0 = /dev/ml16pa-a0 First card, first analog channel 1 = /dev/ml16pa-a1 First card, second analog channel ... 15 = /dev/ml16pa-a15 First card, 16th analog channel 16 = /dev/ml16pa-d First card, digital lines 17 = /dev/ml16pa-c0 First card, first counter/timer 18 = /dev/ml16pa-c1 First card, second counter/timer 19 = /dev/ml16pa-c2 First card, third counter/timer 32 = /dev/ml16pb-a0 Second card, first analog channel 33 = /dev/ml16pb-a1 Second card, second analog channel ... 47 = /dev/ml16pb-a15 Second card, 16th analog channel 48 = /dev/ml16pb-d Second card, digital lines 49 = /dev/ml16pb-c0 Second card, first counter/timer 50 = /dev/ml16pb-c1 Second card, second counter/timer 51 = /dev/ml16pb-c2 Second card, third counter/timer ... block Reserved for Linux/AP+ 40 char Matrox Meteor frame grabber 0 = /dev/mmetfgrab Matrox Meteor frame grabber block Syquest EZ135 parallel port removable drive 0 = /dev/eza Parallel EZ135 drive, whole disk This device is obsolete and will be removed in a future version of Linux. It has been replaced with the parallel port IDE disk driver at major number 45. Partitions are handled in the same way as IDE disks (see major number 3). 41 char Yet Another Micro Monitor 0 = /dev/yamm Yet Another Micro Monitor block MicroSolutions BackPack parallel port CD-ROM 0 = /dev/bpcd BackPack CD-ROM This device is obsolete and will be removed in a future version of Linux. It has been replaced with the parallel port ATAPI CD-ROM driver at major number 46. 42 Demo/sample use This number is intended for use in sample code, as well as a general "example" device number. It should never be used for a device driver that is being distributed; either obtain an official number or use the local/experimental range. The sudden addition or removal of a driver with this number should not cause ill effects to the system (bugs excepted.) IN PARTICULAR, ANY DISTRIBUTION WHICH CONTAINS A DEVICE DRIVER USING MAJOR NUMBER 42 IS NONCOMPLIANT. 43 char isdn4linux virtual modem 0 = /dev/ttyI0 First virtual modem ... 63 = /dev/ttyI63 64th virtual modem block Network block devices 0 = /dev/nb0 First network block device 1 = /dev/nb1 Second network block device ... Network Block Device is somehow similar to loopback devices: If you read from it, it sends packet accross network asking server for data. If you write to it, it sends packet telling server to write. It could be used to mounting filesystems over the net, swapping over the net, implementing block device in userland etc. 44 char isdn4linux virtual modem - alternate devices 0 = /dev/cui0 Callout device for ttyI0 ... 63 = /dev/cui63 Callout device for ttyI63 block Flash Translatio Layer (FTL) filesystems 0 = /dev/ftla FTL on first Memory Technology Device 16 = /dev/ftlb FTL on second Memory Technology Device 32 = /dev/ftlc FTL on third Memory Technology Device ... 240 = /dev/ftlp FTL on 16th Memory Technology Device Partitions are handled in the same way as for IDE disks (see major number 3) expect that the partition limit is 15 rather than 63 per disk (same as SCSI.) 45 char isdn4linux ISDN BRI driver 0 = /dev/isdn0 First virtual B channel raw data ... 63 = /dev/isdn63 64th virtual B channel raw data 64 = /dev/isdnctrl0 First channel control/debug ... 127 = /dev/isdnctrl63 64th channel control/debug 128 = /dev/ippp0 First SyncPPP device ... 191 = /dev/ippp63 64th SyncPPP device 255 = /dev/isdninfo ISDN monitor interface block Parallel port IDE disk devices 0 = /dev/pda First parallel port IDE disk 16 = /dev/pdb Second parallel port IDE disk 32 = /dev/pdc Third parallel port IDE disk 48 = /dev/pdd Fourth parallel port IDE disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the partition limit is 15 rather than 63 per disk. 46 char Comtrol Rocketport serial card 0 = /dev/ttyR0 First Rocketport port 1 = /dev/ttyR1 Second Rocketport port ... block Parallel port ATAPI CD-ROM devices 0 = /dev/pcd0 First parallel port ATAPI CD-ROM 1 = /dev/pcd1 Second parallel port ATAPI CD-ROM 2 = /dev/pcd2 Third parallel port ATAPI CD-ROM 3 = /dev/pcd3 Fourth parallel port ATAPI CD-ROM 47 char Comtrol Rocketport serial card - alternate devices 0 = /dev/cur0 Callout device for ttyR0 1 = /dev/cur1 Callout device for ttyR1 ... block Parallel port ATAPI disk devices 0 = /dev/pf0 First parallel port ATAPI disk 1 = /dev/pf1 Second parallel port ATAPI disk 2 = /dev/pf2 Third parallel port ATAPI disk 3 = /dev/pf3 Fourth parallel port ATAPI disk This driver is intended for floppy disks and similar devices and hence does not support partitioning. 48 char SDL RISCom serial card 0 = /dev/ttyL0 First RISCom port 1 = /dev/ttyL1 Second RISCom port ... block Reserved for Mylex DAC960 PCI RAID controller 49 char SDL RISCom serial card - alternate devices 0 = /dev/cul0 Callout device for ttyL0 1 = /dev/cul1 Callout device for ttyL1 ... block Reserved for Mylex DAC960 PCI RAID controller 50 char Reserved for GLINT block Reserved for Mylex DAC960 PCI RAID controller 51 char Baycom radio modem 0 = /dev/bc0 First Baycom radio modem 1 = /dev/bc1 Second Baycom radio modem ... block Reserved for Mylex DAC960 PCI RAID controller 52 char Spellcaster DataComm/BRI ISDN card 0 = /dev/dcbri0 First DataComm card 1 = /dev/dcbri1 Second DataComm card 2 = /dev/dcbri2 Third DataComm card 3 = /dev/dcbri3 Fourth DataComm card block Reserved for Mylex DAC960 PCI RAID controller 53 char BDM interface for remote debugging MC683xx microcontrollers 0 = /dev/pd_bdm0 PD BDM interface on lp0 1 = /dev/pd_bdm1 PD BDM interface on lp1 2 = /dev/pd_bdm2 PD BDM interface on lp2 4 = /dev/icd_bdm0 ICD BDM interface on lp0 5 = /dev/icd_bdm1 ICD BDM interface on lp1 6 = /dev/icd_bdm2 ICD BDM interface on lp2 This device is used for the interfacing to the MC683xx microcontrollers via Background Debug Mode by use of a Parallel Port interface. PD is the Motorola Public Domain Interface and ICD is the commercial interface by P&E. block Reserved for Mylex DAC960 PCI RAID controller 54 char Electrocardiognosis Holter serial card 0 = /dev/holter0 First Holter port 1 = /dev/holter1 Second Holter port 2 = /dev/holter2 Third Holter port A custom serial card used by Electrocardiognosis SRL to transfer data from Holter 24-hour heart monitoring equipment. block Reserved for Mylex DAC960 PCI RAID controller 55 char DSP56001 digital signal processor 0 = /dev/dsp56k First DSP56001 block Reserved for Mylex DAC960 PCI RAID controller 56 char Apple Desktop Bus 0 = /dev/adb ADB bus control Additional devices will be added to this number, all starting with /dev/adb. block Fifth IDE hard disk/CD-ROM interface 0 = /dev/hdi Master: whole disk (or CD-ROM) 64 = /dev/hdj Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 57 char Hayes ESP serial card 0 = /dev/ttyP0 First ESP port 1 = /dev/ttyP1 Second ESP port ... block Sixth IDE hard disk/CD-ROM interface 0 = /dev/hdk Master: whole disk (or CD-ROM) 64 = /dev/hdl Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 58 char Hayes ESP serial card - alternate devices 0 = /dev/cup0 Callout device for ttyP0 1 = /dev/cup1 Callout device for ttyP1 ... block Reserved for logical volume manager 59 char sf firewall package 0 = /dev/firewall Communication with sf kernel module block Generic PDA filesystem device 0 = /dev/pda0 First PDA device 1 = /dev/pda1 Second PDA device ... The pda devices are used to mount filesystems on remote pda's (basically slow handheld machines with proprietary OS's and limited memory and storage running small fs translation drivers) through serial / IRDA / parallel links. 60-63 LOCAL/EXPERIMENTAL USE Allocated for local/experimental use. For devices not assigned official numbers, these ranges should be used, in order to avoid conflicting with future assignments. 64 char ENskip kernel encryption package 0 = /dev/enskip Communication with ENskip kernel module 65 char Sundance "plink" Transputer boards 0 = /dev/plink0 First plink device 1 = /dev/plink1 Second plink device 2 = /dev/plink2 Third plink device 3 = /dev/plink3 Fourth plink device 64 = /dev/rplink0 First plink device, raw 65 = /dev/rplink1 Second plink device, raw 66 = /dev/rplink2 Third plink device, raw 67 = /dev/rplink3 Fourth plink device, raw 128 = /dev/plink0d First plink device, debug 129 = /dev/plink1d Second plink device, debug 130 = /dev/plink2d Third plink device, debug 131 = /dev/plink3d Fourth plink device, debug 192 = /dev/rplink0d First plink device, raw, debug 193 = /dev/rplink1d Second plink device, raw, debug 194 = /dev/rplink2d Third plink device, raw, debug 195 = /dev/rplink3d Fourth plink device, raw, debug This is a commercial driver; contact James Howes for information. block SCSI disk devices (16-31) 0 = /dev/sdq 16th SCSI disk whole disk 16 = /dev/sdr 17th SCSI disk whole disk 32 = /dev/sds 18th SCSI disk whole disk ... 240 = /dev/sdaf 32nd SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 66 char YARC PowerPC PCI coprocessor card 0 = /dev/yppcpci0 First YARC card 1 = /dev/yppcpci1 Second YARC card ... block SCSI disk devices (32-47) 0 = /dev/sdag 33th SCSI disk whole disk 16 = /dev/sdah 34th SCSI disk whole disk 32 = /dev/sdai 35th SCSI disk whole disk ... 240 = /dev/sdav 48nd SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 67 char Coda network file system 0 = /dev/cfs0 Coda cache manager See http://www.coda.cs.cmu.edu for information about Coda. block SCSI disk devices (48-63) 0 = /dev/sdaw 49th SCSI disk whole disk 16 = /dev/sdax 50th SCSI disk whole disk 32 = /dev/sday 51st SCSI disk whole disk ... 240 = /dev/sdbl 64th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 68 char CAPI 2.0 interface 0 = /dev/capi20 Control device 1 = /dev/capi20.00 First CAPI 2.0 application 2 = /dev/capi20.01 Second CAPI 2.0 application ... 20 = /dev/capi20.19 19th CAPI 2.0 application ISDN CAPI 2.0 driver for use with CAPI 2.0 applications; currently supports the AVM B1 card. block SCSI disk devices (64-79) 0 = /dev/sdbm 64th SCSI disk whole disk 16 = /dev/sdbn 65th SCSI disk whole disk 32 = /dev/sdbo 66th SCSI disk whole disk ... 240 = /dev/sdcb 80th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 69 char MA16 numeric accelerator card 0 = /dev/ma16 Board memory access block SCSI disk devices (80-95) 0 = /dev/sdcc 81st SCSI disk whole disk 16 = /dev/sdcd 82nd SCSI disk whole disk 32 = /dev/sdce 83th SCSI disk whole disk ... 240 = /dev/sdcr 96th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 70 char SpellCaster Protocol Services Interface 0 = /dev/apscfg Configuration interface 1 = /dev/apsauth Authentication interface 2 = /dev/apslog Logging interface 3 = /dev/apsdbg Debugging interface 64 = /dev/apsisdn ISDN command interface 65 = /dev/apsasync Async command interface 128 = /dev/apsmon Monitor interface block SCSI disk devices (96-111) 0 = /dev/sdcs 97th SCSI disk whole disk 16 = /dev/sdct 98th SCSI disk whole disk 32 = /dev/sdcu 99th SCSI disk whole disk ... 240 = /dev/sddh 112nd SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 71 char Computone IntelliPort II serial card 0 = /dev/ttyF0 IntelliPort II board 0, port 0 1 = /dev/ttyF1 IntelliPort II board 0, port 1 ... 63 = /dev/ttyF63 IntelliPort II board 0, port 63 64 = /dev/ttyF64 IntelliPort II board 1, port 0 65 = /dev/ttyF65 IntelliPort II board 1, port 1 ... 127 = /dev/ttyF127 IntelliPort II board 1, port 63 128 = /dev/ttyF128 IntelliPort II board 2, port 0 129 = /dev/ttyF129 IntelliPort II board 2, port 1 ... 191 = /dev/ttyF191 IntelliPort II board 2, port 63 192 = /dev/ttyF192 IntelliPort II board 3, port 0 193 = /dev/ttyF193 IntelliPort II board 3, port 1 ... 255 = /dev/ttyF255 IntelliPort II board 3, port 63 block SCSI disk devices (112-127) 0 = /dev/sddi 113th SCSI disk whole disk 16 = /dev/sddj 114th SCSI disk whole disk 32 = /dev/sddk 115th SCSI disk whole disk ... 240 = /dev/sddx 128th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 72 char Computone IntelliPort II serial card - alternate devices 0 = /dev/cuf0 Callout device for ttyF0 1 = /dev/cuf1 Callout device for ttyF1 ... 63 = /dev/cuf63 Callout device for ttyF63 64 = /dev/cuf64 Callout device for ttyF64 65 = /dev/cuf65 Callout device for ttyF65 ... 127 = /dev/cuf127 Callout device for ttyF127 128 = /dev/cuf128 Callout device for ttyF128 129 = /dev/cuf129 Callout device for ttyF129 ... 191 = /dev/cuf191 Callout device for ttyF191 192 = /dev/cuf192 Callout device for ttyF192 193 = /dev/cuf193 Callout device for ttyF193 ... 255 = /dev/cuf255 Callout device for ttyF255 73 char Computone IntelliPort II serial card - control devices 0 = /dev/ip2ipl0 Loadware device for board 0 1 = /dev/ip2stat0 Status device for board 0 4 = /dev/ip2ipl1 Loadware device for board 1 5 = /dev/ip2stat1 Status device for board 1 8 = /dev/ip2ipl2 Loadware device for board 2 9 = /dev/ip2stat2 Status device for board 2 12 = /dev/ip2ipl3 Loadware device for board 3 13 = /dev/ip2stat3 Status device for board 3 74 char SCI bridge 0 = /dev/SCI/0 SCI device 0 1 = /dev/SCI/1 SCI device 1 ... Currently for Dolphin Interconnect Solutions' PCI-SCI bridge. 75 char Specialix IO8+ serial card 0 = /dev/ttyW0 First IO8+ port, first card 1 = /dev/ttyW1 Second IO8+ port, first card ... 8 = /dev/ttyW8 First IO8+ port, second card ... 76 char Specialix IO8+ serial card - alternate devices 0 = /dev/cuw0 Callout device for ttyW0 1 = /dev/cuw1 Callout device for ttyW1 ... 8 = /dev/cuw8 Callout device for ttyW8 ... 77 char ComScire Quantum Noise Generator 0 = /dev/qng ComScire Quantum Noise Generator 78 char PAM Software's multimodem boards 0 = /dev/ttyM0 First PAM modem 1 = /dev/ttyM1 Second PAM modem ... 79 char PAM Software's multimodem boards - alternate devices 0 = /dev/cum0 Callout device for ttyM0 1 = /dev/cum1 Callout device for ttyM1 ... 80 char Photometrics AT200 CCD camera 0 = /dev/at200 Photometrics AT200 CCD camera block I2O hard disk 0 = /dev/i2o/hda First I2O hard disk, whole disk 16 = /dev/i2o/hdb Second I2O hard disk, whole disk ... 240 = /dev/i2o/hdp 16th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 81 char video4linux 0 = /dev/video0 Video capture/overlay device ... 63 = /dev/video63 Video capture/overlay device 64 = /dev/radio0 Radio device ... 127 = /dev/radio63 Radio device 192 = /dev/vtx0 Teletext device ... 223 = /dev/vtx31 Teletext device 224 = /dev/vbi0 Vertical blank interrupt ... 255 = /dev/vbi31 Vertical blank interrupt block I2O hard disk 0 = /dev/i2o/hdq 17th I2O hard disk, whole disk 16 = /dev/i2o/hdr 18th I2O hard disk, whole disk ... 240 = /dev/i2o/hdaf 32nd I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 82 char WiNRADiO communications receiver card 0 = /dev/winradio0 First WiNRADiO card 1 = /dev/winradio1 Second WiNRADiO card ... The driver and documentation may be obtained from http://www.proximity.com.au/~brian/winradio/ block I2O hard disk 0 = /dev/i2o/hdag 33rd I2O hard disk, whole disk 16 = /dev/i2o/hdah 34th I2O hard disk, whole disk ... 240 = /dev/i2o/hdav 48th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 83 char Teletext/videotext interfaces 0 = /dev/vtx Teletext decoder 16 = /dev/vttuner TV tuner on teletext interface Devices for the driver contained in the VideoteXt package. More information on http://home.pages.de/~videotext/ block I2O hard disk 0 = /dev/i2o/hdaw 49th I2O hard disk, whole disk 16 = /dev/i2o/hdax 50th I2O hard disk, whole disk ... 240 = /dev/i2o/hdbl 64th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 84 char Ikon 1011[57] Versatec Greensheet Interface 0 = /dev/ihcp0 First Greensheet port 1 = /dev/ihcp1 Second Greensheet port block I2O hard disk 0 = /dev/i2o/hdbm 65th I2O hard disk, whole disk 16 = /dev/i2o/hdbn 66th I2O hard disk, whole disk ... 240 = /dev/i2o/hdcb 80th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 85 char Linux/SGI shared memory input queue 0 = /dev/shmiq Master shared input queue 1 = /dev/qcntl0 First device pushed 2 = /dev/qcntl1 Second device pushed ... block I2O hard disk 0 = /dev/i2o/hdcc 81st I2O hard disk, whole disk 16 = /dev/i2o/hdcd 82nd I2O hard disk, whole disk ... 240 = /dev/i2o/hdcr 96th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 86 char SCSI media changer 0 = /dev/sch0 First SCSI media changer 1 = /dev/sch1 Second SCSI media changer ... block I2O hard disk 0 = /dev/i2o/hdcs 97th I2O hard disk, whole disk 16 = /dev/i2o/hdct 98th I2O hard disk, whole disk ... 240 = /dev/i2o/hddh 112th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 87 char Sony Control-A1 stereo control bus 0 = /dev/controla0 First device on chain 1 = /dev/controla1 Second device on chain ... block I2O hard disk 0 = /dev/i2o/hddi 113rd I2O hard disk, whole disk 16 = /dev/i2o/hddj 114th I2O hard disk, whole disk ... 240 = /dev/i2o/hddx 128th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 88 char COMX synchronous serial card 0 = /dev/comx0 COMX channel 0 1 = /dev/comx1 COMX channel 1 ... block Seventh IDE hard disk/CD-ROM interface 0 = /dev/hdm Master: whole disk (or CD-ROM) 64 = /dev/hdn Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 89 char I2C bus interface 0 = /dev/i2c-0 First I2C adapter 1 = /dev/i2c-1 Second I2C adapter ... block Eighth IDE hard disk/CD-ROM interface 0 = /dev/hdo Master: whole disk (or CD-ROM) 64 = /dev/hdp Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 90 char Memory Technology Device (RAM, ROM, Flash) 0 = /dev/mtd0 First MTD (rw) 1 = /dev/mtdr0 First MTD (ro) ... 30 = /dev/mtd15 16th MTD (rw) 31 = /dev/mtdr15 16th MTD (ro) block Ninth IDE hard disk/CD-ROM interface 0 = /dev/hdq Master: whole disk (or CD-ROM) 64 = /dev/hdr Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 91 char CAN-Bus devices 0 = /dev/can0 First CAN-Bus controller 1 = /dev/can1 Second CAN-Bus controller ... block Tenth IDE hard disk/CD-ROM interface 0 = /dev/hds Master: whole disk (or CD-ROM) 64 = /dev/hdt Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 92 char Reserved for ith Kommunikationstechnik MIC ISDN card block PPDD encrypted disk driver 0 = /dev/ppdd0 First encrypted disk 1 = /dev/ppdd1 Second encrypted disk ... Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 93 char IBM Smart Capture Card frame grabber 0 = /dev/iscc0 First Smart Capture Card 1 = /dev/iscc1 Second Smart Capture Card ... 128 = /dev/isccctl0 First Smart Capture Card control 129 = /dev/isccctl1 Second Smart Capture Card control ... block NAND Flash Translation Layer filesystem 0 = /dev/nftla First NFTL layer 16 = /dev/nftlb Second NFTL layer ... 240 = /dev/nftlp 16th NTFL layer 94 char miroVIDEO DC10/30 capture/playback device 0 = /dev/dcxx0 First capture card 1 = /dev/dcxx1 Second capture card ... 95 char IP filter 0 = /dev/ipl Filter control device/log file 1 = /dev/ipnat NAT control device/log file 2 = /dev/ipstate State information log file 3 = /dev/ipauth Authentication control device/log file block IBM S/390 DASD block storage 0 = /dev/dasd0 First DASD device, major 1 = /dev/dasd0a First DASD device, block 1 2 = /dev/dasd0b First DASD device, block 2 3 = /dev/dasd0c First DASD device, block 3 4 = /dev/dasd1 Second DASD device, major 5 = /dev/dasd1a Second DASD device, block 1 6 = /dev/dasd1b Second DASD device, block 2 7 = /dev/dasd1c Second DASD device, block 3 ... 96 char Parallel port ATAPI tape devices 0 = /dev/pt0 First parallel port ATAPI tape 1 = /dev/pt1 Second parallel port ATAPI tape ... 128 = /dev/npt0 First p.p. ATAPI tape, no rewind 129 = /dev/npt1 Second p.p. ATAPI tape, no rewind ... block IBM S/390 VM/ESA minidisk 0 = /dev/msd0 First VM/ESA minidisk 1 = /dev/msd1 Second VM/ESA minidisk ... 97 char Parallel port generic ATAPI interface 0 = /dev/pg0 First parallel port ATAPI device 1 = /dev/pg1 Second parallel port ATAPI device 2 = /dev/pg2 Third parallel port ATAPI device 3 = /dev/pg3 Fourth parallel port ATAPI device These devices support the same API as the generic SCSI devices. 98 char Control and Measurement Device (comedi) 0 = /dev/comedi0 First comedi device 1 = /dev/comedi1 Second comedi device ... See http://stm.lbl.gov/comedi or http://www.llp.fu-berlin.de/. 99 char Raw parallel ports 0 = /dev/parport0 First parallel port 1 = /dev/parport1 Second parallel port ... 100 char POTS (analogue telephone) A/B port 0 = /dev/phone0 First telephone port 1 = /dev/phone1 Second telephone port ... 101 char Motorola DSP 56xxx board 0 = /dev/mdspstat Status information 1 = /dev/mdsp1 First DSP board I/O controls ... 16 = /dev/mdsp16 16th DSP board I/O controls 102 char Philips SAA5249 Teletext signal decoder 0 = /dev/tlk0 First Teletext decoder 1 = /dev/tlk1 Second Teletext decoder 2 = /dev/tlk2 Third Teletext decoder 3 = /dev/tlk3 Fourth Teletext decoder 103 char Arla network file system 0 = /dev/xfs0 Arla XFS Arla is a free clone of the Andrew File System, AFS. Any resemblance with the Swedish milk producer is coincidental. For more information about the project, write to or subscribe to the arla announce mailing list by sending a mail to . 104 char Flash BIOS support 105 char Comtrol VS-1000 serial controller 0 = /dev/ttyV0 First VS-1000 port 1 = /dev/ttyV1 Second VS-1000 port ... 106 char Comtrol VS-1000 serial controller - alternate devices 0 = /dev/cuv0 First VS-1000 port 1 = /dev/cuv1 Second VS-1000 port ... 107 char 3Dfx Voodoo Graphics device 0 = /dev/3dfx Primary 3Dfx graphics device 108 char Device independent PPP interface 0 = /dev/ppp Device independent PPP interface 109 char Reserved for logical volume manager 110 char miroMEDIA Surround board 0 = /dev/srnd0 First miroMEDIA Surround board 1 = /dev/srnd1 Second miroMEDIA Surround board ... 111 char Philips SAA7146-based audio/video card 0 = /dev/av0 First A/V card 1 = /dev/av1 Second A/V card ... 112 char ISI serial card 0 = /dev/ttyM0 First ISI port 1 = /dev/ttyM1 Second ISI port ... There is currently a device-naming conflict between these and PAM multimodems (major 78). 113 char ISI serial card - alternate devices 0 = /dev/cum0 Callout device for ttyM0 1 = /dev/cum1 Callout device for ttyM1 ... 114 char Picture Elements ISE board 0 = /dev/ise0 First ISE board 1 = /dev/ise1 Second ISE board ... 128 = /dev/isex0 Control node for first ISE board 129 = /dev/isex1 Control node for second ISE board ... The ISE board is an embedded computer, optimized for image processing. The /dev/iseN nodes are the general I/O access to the board, the /dev/isex0 nodes command nodes used to control the board. 115 char Console driver speaker 0 = /dev/speaker Speaker device file Plays music using IBM BASIC style strings. 116 char Advanced Linux System Driver (ALSA) 117 char COSA/SRP synchronous serial card 0 = /dev/cosa0c0 1st board, 1st channel 1 = /dev/cosa0c1 1st board, 2nd channel ... 16 = /dev/cosa1c0 2nd board, 1st channel 17 = /dev/cosa1c1 2nd board, 2nd channel ... 118 char Solidum ??? 0 = /dev/solnp0 1 = /dev/solnp1 ... 128 = /dev/solnpctl0 129 = /dev/solnpctl1 ... 119 char VMware virtual network control 0 = /dev/vnet0 1st virtual network 1 = /dev/vnet1 2nd virtual network ... 120-127 LOCAL/EXPERIMENTAL USE 128-135 char Unix98 PTY masters These devices should not have corresponding device nodes; instead they should be accessed through the /dev/ptmx cloning interface. 136-143 char Unix98 PTY slaves 0 = /dev/pts/0 First Unix98 pseudo-TTY 1 = /dev/pts/1 Second Unix98 pesudo-TTY ... These device nodes are automatically generated with the proper permissions and modes by mounting the devpts filesystem onto /dev/pts with the appropriate mount options (distribution dependent, however, on *most* distributions the appropriate options are "mode=0620,gid=".) 144 char Encapsulated PPP 0 = /dev/pppox0 First PPP over Ethernet ... 63 = /dev/pppox63 64th PPP over Ethernet This is primarily used for ADSL. The SST 5136-DN DeviceNet interface driver has been relocated to major 183 due to an unfortunate conflict. 145 char SAM9407-based soundcard 0 = /dev/sam0_mixer 1 = /dev/sam0_sequencer 2 = /dev/sam0_midi00 3 = /dev/sam0_dsp 4 = /dev/sam0_audio 6 = /dev/sam0_sndstat 18 = /dev/sam0_midi01 34 = /dev/sam0_midi02 50 = /dev/sam0_midi03 64 = /dev/sam1_mixer ... 128 = /dev/sam2_mixer ... 192 = /dev/sam3_mixer ... Device functions match OSS, but offer a number of addons, which are sam9407 specific. OSS can be operated simultaneously, taking care of the codec. 146 char SYSTRAM SCRAMNet mirrored-memory network 0 = /dev/scramnet0 First SCRAMNet device 1 = /dev/scramnet1 Second SCRAMNet device ... 147 char Aueral Semiconductor Vortex Audio device 0 = /dev/aureal0 First Aureal Vortex 1 = /dev/aureal1 Second Aureal Vortex ... 148 char Technology Concepts serial card 0 = /dev/ttyT0 First TCL port 1 = /dev/ttyT1 Second TCL port ... 149 char Technology Concepts serial card - alternate devices 0 = /dev/cut0 Callout device for ttyT0 1 = /dev/cut0 Callout device for ttyT1 ... 150 char Real-Time Linux FIFOs 0 = /dev/rtf0 First RTLinux FIFO 1 = /dev/rtf1 Second RTLinux FIFO ... 151 char DPT I2O SmartRaid V controller 0 = /dev/dpti0 First DPT I2O adapter 1 = /dev/dpti1 Second DPT I2O adapter ... 154 char Specialix RIO serial card 0 = /dev/ttySR0 First RIO port ... 255 = /dev/ttySR255 256th RIO port 155 char Specialix RIO serial card - alternate devices 0 = /dev/cusr0 Callout device for ttySR0 ... 255 = /dev/cusr255 Callout device for ttySR255 156 char Specialix RIO serial card 0 = /dev/ttySR256 257th RIO port ... 255 = /dev/ttySR511 512th RIO port 157 char Specialix RIO serial card - alternate devices 0 = /dev/cusr256 Callout device for ttySR256 ... 255 = /dev/cusr511 Callout device for ttySR511 158 char Dialogic GammaLink fax driver 0 = /dev/gfax0 GammaLink channel 0 1 = /dev/gfax1 GammaLink channel 1 ... 159 char Quicknet Technologies Internet PhoneJack/LineJack 0 = /dev/ixj0 First device 1 = /dev/ixj1 Second device ... 160 char General Purpose Instrument Bus (GPIB) 0 = /dev/gpib0 First GPIB bus 1 = /dev/gpib1 Second GPIB bus ... 161 char IrCOMM devices (IrDA serial/parallel emulation) 0 = /dev/ircomm0 First IrCOMM device 1 = /dev/ircomm1 Second IrCOMM device ... 16 = /dev/irlpt0 First IrLPT device 17 = /dev/irlpt1 Second IrLPT device ... 162 char Raw block device interface 0 = /dev/raw Raw I/O control device 1 = /dev/raw1 First raw I/O device 2 = /dev/raw2 Second raw I/O device ... 163 char Radio Tech BIM-XXX-RS232 radio modem 0 = /dev/bimrt0 First BIM radio modem 1 = /dev/bimrt1 Second BIM radio modem ... 164 char Chase Research AT/PCI-Fast serial card 0 = /dev/ttyCH0 AT/PCI-Fast board 0, port 0 ... 15 = /dev/ttyCH15 AT/PCI-Fast board 0, port 15 16 = /dev/ttyCH16 AT/PCI-Fast board 1, port 0 ... 31 = /dev/ttyCH31 AT/PCI-Fast board 1, port 15 32 = /dev/ttyCH32 AT/PCI-Fast board 2, port 0 ... 47 = /dev/ttyCH47 AT/PCI-Fast board 2, port 15 48 = /dev/ttyCH48 AT/PCI-Fast board 3, port 0 ... 63 = /dev/ttyCH63 AT/PCI-Fast board 3, port 15 165 char Chase Research AT/PCI-Fast serial card - alternate devices 0 = /dev/cuch0 Callout device for ttyCH0 ... 63 = /dev/cuch63 Callout device for ttyCH63 166 char ACM USB modems 0 = /dev/ttyACM0 First ACM modem 1 = /dev/ttyACM1 Second ACM modem ... 167 char ACM USB modems - alternate devices 0 = /dev/cuacm0 Callout device for ttyACM0 1 = /dev/cuacm1 Callout device for ttyACM1 ... 168 char Eracom CSA7000 PCI encryption adaptor 0 = /dev/ecsa0 First CSA7000 1 = /dev/ecsa1 Second CSA7000 ... 169 char Eracom CSA8000 PCI encryption adaptor 0 = /dev/ecsa8-0 First CSA8000 1 = /dev/ecsa8-1 Second CSA8000 ... 170 char AMI MegaRAC remote access controller 0 = /dev/megarac0 First MegaRAC card 1 = /dev/megarac1 Second MegaRAC card ... 171 char Reserved for IEEE 1394 (Firewire) 172 char Moxa Intellio serial card 0 = /dev/ttyMX0 First Moxa port 1 = /dev/ttyMX1 Second Moxa port ... 127 = /dev/ttyMX127 128th Moxa port 128 = /dev/moxactl Moxa control port 173 char Moxa Intellio serial card - alternate devices 0 = /dev/cumx0 Callout device for ttyMX0 1 = /dev/cumx1 Callout device for ttyMX1 ... 127 = /dev/cumx127 Callout device for ttyMX127 174 char SmartIO serial card 0 = /dev/ttySI0 First SmartIO port 1 = /dev/ttySI1 Second SmartIO port ... 175 char SmartIO serial card - alternate devices 0 = /dev/cusi0 Callout device for ttySI0 1 = /dev/cusi1 Callout device for ttySI1 ... 176 char nCipher nFast PCI crypto accelerator 0 = /dev/nfastpci0 First nFast PCI device 1 = /dev/nfastpci1 First nFast PCI device ... 177 char TI PCILynx memory spaces 0 = /dev/pcilynx/aux0 AUX space of first PCILynx card ... 15 = /dev/pcilynx/aux15 AUX space of 16th PCILynx card 16 = /dev/pcilynx/rom0 ROM space of first PCILynx card ... 31 = /dev/pcilynx/rom15 ROM space of 16th PCILynx card 32 = /dev/pcilynx/ram0 RAM space of first PCILynx card ... 47 = /dev/pcilynx/ram15 RAM space of 16th PCILynx card 178 char Giganet cLAN1xxx virtual interface adapter 0 = /dev/clanvi0 First cLAN adapter 1 = /dev/clanvi1 Second cLAN adapter ... 179 char CCube DVXChip-based PCI products 0 = /dev/dvxirq0 First DVX device 1 = /dev/dvxirq1 Second DVX device ... 180 char USB devices 0 = /dev/usb/lp0 First USB printer ... 15 = /dev/usb/lp15 16th USB printer 16 = /dev/usb/mouse0 First USB mouse ... 31 = /dev/usb/mouse15 16th USB mouse 32 = /dev/usb/ez0 First USB firmware loader ... 47 = /dev/usb/ez15 16th USB firmware loader 48 = /dev/usb/scanner0 First USB scanner ... 63 = /dev/usb/scanner15 16th USB scanner 181 char Conrad Electronic parallel port radio clocks 0 = /dev/pcfclock0 First Conrad radio clock 1 = /dev/pcfclock1 Second Conrad radio clock ... 182 char Picture Elements THR2 binarizer 0 = /dev/pethr0 First THR2 board 1 = /dev/pethr1 Second THR2 board ... 183 char SST 5136-DN DeviceNet interface 0 = /dev/ss5136dn0 First DeviceNet interface 1 = /dev/ss5136dn1 Second DeviceNet interface ... This device used to be assigned to major number 144. It had to be moved due to an unfortunate conflict. 184 char Picture Elements' video simulator/sender 0 = /dev/pevss0 First sender board 1 = /dev/pevss1 Second sender board ... 185 char Reserved for InterMezzo high availability file system 186 char Object-based storage control device 0 = /dev/obd0 First obd control device 1 = /dev/obd1 Second obd control device ... See ftp://ftp.lustre.org/pub/obd for code and information. 187 char UNALLOCATED 188 char USB serial converters 0 = /dev/ttyUSB0 First USB serial converter 1 = /dev/ttyUSB1 Second USB serial converter ... 189 char USB serial converters - alternate devices 0 = /dev/cuusb0 Callout device for ttyUSB0 1 = /dev/cuusb1 Callout device for ttyUSB1 ... 190 char Kansas City tracker/tuner card 0 = /dev/kctt0 First KCT/T card 1 = /dev/kctt1 Second KCT/T card ... 191-239 UNALLOCATED 240-254 LOCAL/EXPERIMENTAL USE 255 RESERVED This major is reserved to assist the expansion to a larger number space. No device nodes with this major should ever be created on the filesystem. **** ADDITIONAL /dev DIRECTORY ENTRIES This section details additional entries that should or may exist in the /dev directory. It is preferred that symbolic links use the same form (absolute or relative) as is indicated here. Links are classified as "hard" or "symbolic" depending on the preferred type of link; if possible, the indicated type of link should be used. Compulsory links These links should exist on all systems: /dev/fd /proc/self/fd symbolic File descriptors /dev/stdin fd/0 symbolic stdin file descriptor /dev/stdout fd/1 symbolic stdout file descriptor /dev/stderr fd/2 symbolic stderr file descriptor /dev/nfsd socksys symbolic Required by iBCS-2 /dev/X0R null symbolic Required by iBCS-2 /dev/i2o* /dev/i2o/* symbolic Backward compatibility Note: /dev/X0R is --. Recommended links It is recommended that these links exist on all systems: /dev/core /proc/kcore symbolic Backward compatibility /dev/ramdisk ram0 symbolic Backward compatibility /dev/ftape qft0 symbolic Backward compatibility /dev/bttv0 video0 symbolic Backward compatibility /dev/radio radio0 symbolic Backward compatibility /dev/scd? sr? hard Alternate SCSI CD-ROM name Locally defined links The following links may be established locally to conform to the configuration of the system. This is merely a tabulation of existing practice, and does not constitute a recommendation. However, if they exist, they should have the following uses. /dev/mouse mouse port symbolic Current mouse device /dev/tape tape device symbolic Current tape device /dev/cdrom CD-ROM device symbolic Current CD-ROM device /dev/cdwriter CD-writer symbolic Current CD-writer device /dev/scanner scanner symbolic Current scanner device /dev/modem modem port symbolic Current dialout device /dev/root root device symbolic Current root filesystem /dev/swap swap device symbolic Current swap device /dev/modem should not be used for a modem which supports dialin as well as dialout, as it tends to cause lock file problems. If it exists, /dev/modem should point to the appropriate primary TTY device (the use of the alternate callout devices is deprecated). For SCSI devices, /dev/tape and /dev/cdrom should point to the ``cooked'' devices (/dev/st* and /dev/sr*, respectively), whereas /dev/cdwriter and /dev/scanner should point to the appropriate generic SCSI devices (/dev/sg*). /dev/mouse may point to a primary serial TTY device, a hardware mouse device, or a socket for a mouse driver program (e.g. /dev/gpmdata). Sockets and pipes Non-transient sockets and named pipes may exist in /dev. Common entries are: /dev/printer socket lpd local socket /dev/log socket syslog local socket /dev/gpmdata socket gpm mouse multiplexer **** TERMINAL DEVICES Terminal, or TTY devices are a special class of character devices. A terminal device is any device that could act as a controlling terminal for a session; this includes virtual consoles, serial ports, and pseudoterminals (PTYs). All terminal devices share a common set of capabilities known as line diciplines; these include the common terminal line dicipline as well as SLIP and PPP modes. All terminal devices are named similarly; this section explains the naming and use of the various types of TTYs. Note that the naming conventions include several historical warts; some of these are Linux-specific, some were inherited from other systems, and some reflect Linux outgrowing a borrowed convention. A hash mark (#) in a device name is used here to indicate a decimal number without leading zeroes. Virtual consoles and the console device Virtual consoles are full-screen terminal displays on the system video monitor. Virtual consoles are named /dev/tty#, with numbering starting at /dev/tty1; /dev/tty0 is the current virtual console. /dev/tty0 is the device that should be used to access the system video card on those architectures for which the frame buffer devices (/dev/fb*) are not applicable. Do not use /dev/console for this purpose. The console device, /dev/console, is the device to which system messages should be sent, and on which logins should be permitted in single-user mode. Starting with Linux 2.1.71, /dev/console is managed by the kernel; for previous versions it should be a symbolic link to either /dev/tty0, a specific virtual console such as /dev/tty1, or to a serial port primary (tty*, not cu*) device, depending on the configuration of the system. Serial ports Serial ports are RS-232 serial ports and any device which simulates one, either in hardware (such as internal modems) or in software (such as the ISDN driver.) Under Linux, each serial ports has two device names, the primary or callin device and the alternate or callout one. Each kind of device is indicated by a different letter. For any letter X, the names of the devices are /dev/ttyX# and /dev/cux#, respectively; for historical reasons, /dev/ttyS# and /dev/ttyC# correspond to /dev/cua# and /dev/cub#. In the future, it should be expected that multiple letters will be used; all letters will be upper case for the "tty" device (e.g. /dev/ttyDP#) and lower case for the "cu" device (e.g. /dev/cudp#). The names /dev/ttyQ# and /dev/cuq# are reserved for local use. The alternate devices provide for kernel-based exclusion and somewhat different defaults than the primary devices. Their main purpose is to allow the use of serial ports with programs with no inherent or broken support for serial ports. Their use is deprecated, and they may be removed from a future version of Linux. Arbitration of serial ports is provided by the use of lock files with the names /var/lock/LCK..ttyX#. The contents of the lock file should be the PID of the locking process as an ASCII number. It is common practice to install links such as /dev/modem which point to serial ports. In order to ensure proper locking in the presence of these links, it is recommended that software chase symlinks and lock all possible names; additionally, it is recommended that a lock file be installed with the corresponding alternate device. In order to avoid deadlocks, it is recommended that the locks are acquired in the following order, and released in the reverse: 1. The symbolic link name, if any (/var/lock/LCK..modem) 2. The "tty" name (/var/lock/LCK..ttyS2) 3. The alternate device name (/var/lock/LCK..cua2) In the case of nested symbolic links, the lock files should be installed in the order the symlinks are resolved. Under no circumstances should an application hold a lock while waiting for another to be released. In addition, applications which attempt to create lock files for the corresponding alternate device names should take into account the possibility of being used on a non-serial port TTY, for which no alternate device would exist. Pseudoterminals (PTYs) Pseudoterminals, or PTYs, are used to create login sessions or provide other capabilities requiring a TTY line dicipline (including SLIP or PPP capability) to arbitrary data-generation processes. Each PTY has a master side, named /dev/pty[p-za-e][0-9a-f], and a slave side, named /dev/tty[p-za-e][0-9a-f]. The kernel arbitrates the use of PTYs by allowing each master side to be opened only once. Once the master side has been opened, the corresponding slave device can be used in the same manner as any TTY device. The master and slave devices are connected by the kernel, generating the equivalent of a bidirectional pipe with TTY capabilities. Recent versions of the Linux kernels and GNU libc contain support for the System V/Unix98 naming scheme for PTYs, which assigns a common device, /dev/ptmx, to all the masters (opening it will automatically give you a previously unassigned PTY) and a subdirectory, /dev/pts, for the slaves; the slaves are named with decimal integers (/dev/pts/# in our notation). This removes the problem of exhausting the namespace and enables the kernel to automatically create the device nodes for the slaves on demand using the "devpts" filesystem. The Linux Digiboard Driver -------------------------- The Digiboard Driver for Linux supports the following boards: DigiBoard PC/Xi, PC/Xe, PC/Xeve(which is the newer, smaller Xe with a 8K window which is also known as PC/Xe(8K) and has no memory/irq switches) You can use up to 4 cards with this driver and it should work on other architectures than intel also. In case you have problems with this version (1.6.1) of this driver, please email directly to me as I made the last update. It you have a report about running it on other architectures than intel, email me, so I can document it here. A version of this driver has been taken by Digiboard to make a driver software package which supports also PC/Xem cards and newer PCI cards but it doesn't support the old PC/Xi cards and it isn't yet ported to linux-2.1.x and may not be usable on other architectures than intel now. It is available from ftp.digi.com/ftp.digiboard.com. You can write me if you need an patch for this driver. Bernhard Kaindl (bkaindl@netway.at) 6. April 1997. Configuring the Driver ---------------------- The driver can be built direct into the kernel or as a module. The pcxx driver can be configured using the command line feature while loading the kernel with LILO or LOADLIN or, if built as a module, with arguments to insmod and modprobe or with parameters in /etc/conf.modules for modprobe and kerneld. After configuring the driver you need to create the device special files as described in "Device file creation:" below and set the appropriate permissions for your application. As Module --------- modprobe pcxx io= \ membase= \ memsize= \ numports= \ altpin= \ verbose= or, if several cards are installed modprobe pcxx io=,,... \ membase=,,... \ memsize=,,... \ numports=,,... \ altpin=,,... \ verbose= where is the io address of the Nth card and is the memory base address of the Nth card, etc. The parameters can be specified in any order. For example, the numports parameter can precede the membase parameter, or vice versa. If several cards are installed the ordering within the comma separated parameter lists must be consistent, of course. io - I/O port address of that card. membase - Memory start address of that card. memsize - Memory size of that card, in kilobytes. If given, this value is compared against the card to verify configuration and hinder the driver from using a misconfigured card. If the parameter does not match the board it is disabled with a memory size error. numports - Number of ports on this card. This is the number of devices to assign to this card or reserve if disabled. altpin - 1: swap DCD and DSR for 8-pin RJ-45 with modems. 0: don't swap DCD and DSR. other values count as 1. verbose - 1: give nice verbose output during initialisation of the driver, possibly helpful during board configuration. 0: normal terse output. Only the parameters which differ from the defaults need to be specified. If the io= parameter is not given, the default config is used. This is io=0x200 membase=0xD0000 numports=16 altpin=0 Only applicable parameters need be specified. For example to configure 2 boards, first one at 0x200 with 8 ports, rest defaults, second one at 0x120, memory at 0xD80000, altpin enabled, rest defaults, you can do this by using these parameters: modprobe pcxx io=0x200,0x120 numports=8,8 membase=,0xD80000 altpin=,1 To disable a temporary unusable board without changing the mapping of the devices following that board, you can empty the io-value for that board: modprobe pcxx io=,0x120 numports=8,8 membase=,0xD80000 altpin=,1 The remaining board still uses ttyD8-ttyD15 and cud8-cud15. Example line for /etc/conf.modules for use with kerneld and as default parameters for modprobe: options pcxx io=0x200 numports=8 For kerneld to work you will likely need to add these two lines to your /etc/conf.modules: alias char-major-22 pcxx alias char-major-23 pcxx Boot-time configuration when linked into the kernel --------------------------------------------------- Per board to be configured, pass a digi= command-line parameter to the kernel using lilo or loadlin. It consists of a string of comma separated identifiers or integers. The 6 values in order are: Card status: Enable - use that board Disable - don't actually use that board. Card type: PC/Xi - the old ones with 64/128/256/512K RAM. PC/Xe - PC/Xe(old ones with 64k mem range). PC/Xeve - PC/Xe(new ones with 8k mem range). Note: This is for documentation only, the type is detected from the board. Altpin setting: Enable - swap DCD and DSR for 8-pin RJ-45 with modems. Disable - don't swap DCD and DSR. Number of ports: 1 ... 16 - Number of ports on this card. This is the number of devices to assign to this card. I/O port address: eg. 200 - I/O Port address where the card is configured. Memory base addr: eg. 80000 - Memory address where the board's memory starts. This is an example for a line which you can insert into you lilo.conf: append="digi=Enable,PC/Xi,Disable,4,120,D0000" there is an alternate form, in which you must use decimal values only: append="digi=1,0,0,16,512,851968" If you don't give a digi= command line, the compiled-in defaults of board 1: io=0x200, membase=0xd0000, altpin=off and numports=16 are used. If you have the resources (io&mem) free for use, configure your board to these settings and you should be set up fine even if yours has not got 16 ports. Sources of Information ---------------------- Web page: http://private.fuller.edu/clameter/digi.html Mailing list: digiboard@list.fuller.edu (Write e-mail to that address to subscribe. Common ListServ commands work. Archive of messages available) Christoph Lameter (clameter@fuller.edu) 16. April 1996. Supporting Tools ---------------- Some tools and more detailed information can be found at ftp://ftp.fuller.edu/Linux/digi The "ditty" tool described in the Digiboard Manuals for other Unixes is also available. Device file creation -------------------- Currently the Linux MAKEDEV command does not support generating the Digiboard Devices. The /dev/cud devices behave like the /dev/cua devices and the ttyD devices are like the /dev/ttyS devices. Use the following script to generate the devices: ------------------ mkdigidev begin #!/bin/sh # # Script to create Digiboard Devices # Christoph Lameter, April 16, 1996 # # Usage: # mkdigidev [] # DIGI_MAJOR=23 DIGICU_MAJOR=22 BOARDS=$1 if [ "$BOARDS" = "" ]; then BOARDS=1 fi boardnum=0 while [ $boardnum -lt $BOARDS ]; do for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do name=`expr $boardnum \* 16 + $c` mknod /dev/cud$name c $DIGICU_MAJOR $name mknod /dev/ttyD$name c $DIGI_MAJOR $name done boardnum=`expr $boardnum + 1` done ------------------ mkdigidev end or apply the following patch to /dev/MAKEDEV and do a sh /dev/MAKEDEV digi ----- MAKEDEV Patch --- /dev/MAKEDEV Sun Aug 13 15:48:23 1995 +++ MAKEDEV Tue Apr 16 17:53:27 1996 @@ -120,7 +120,7 @@ while [ $# -ne 0 ] do case "$1" in - mem|tty|ttyp|cua|cub) ;; + mem|tty|ttyp|cua|cub|cud) ;; hd) echo hda hdb hdc hdd ;; xd) echo xda xdb ;; fd) echo fd0 fd1 ;; @@ -140,6 +140,7 @@ dcf) echo dcf ;; pcmcia) ;; # taken care of by its own driver ttyC) echo cyclades ;; + ttyD) echo digi ;; *) echo "$0: don't know what \"$1\" is" >&2 ;; esac shift @@ -208,6 +209,15 @@ do makedev ttyC$i c $major1 `expr 32 + $i` $tty makedev cub$i c $major2 `expr 32 + $i` $dialout + done + ;; + digi) + major1=`Major ttyD` || continue + major2=`Major cud` || continue + for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + do + makedev ttyD$i c $major1 `expr 32 + $i` $tty + makedev cud$i c $major2 `expr 32 + $i` $dialout done ;; par[0-2]) ----- End Makedev patch ----------------------------------------------------------------------------- Changes v1.5.5: The ability to use the kernel's command line to pass in the configuration for boards. Using LILO's APPEND command, a string of comma separated identifiers or integers can be used. The 6 values in order are: Enable/Disable this card, Type of card: PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3) Enable/Disable alternate pin arrangement, Number of ports on this card, I/O Port where card is configured (in HEX if using string identifiers), Base of memory window (in HEX if using string identifiers), Samples: append="digi=E,PC/Xi,D,16,200,D0000" append="digi=1,0,0,16,512,(whatever D0000 is in base 10 :) Drivers' minor device numbers are conserved. This means that instead of each board getting a block of 16 minors pre-assigned, it gets however many it should, with the next card following directly behind it. A system with 4 2-port PC/Xi boards will use minor numbers 0-7. This conserves some memory, and removes a few hard coded constants. NOTE!! NOTE!! NOTE!! The definition of PC/Xem as a valid board type is the BEGINNING of support for this device. The driver does not currently recognise the board, nor does it want to initialize it. At least not the EISA version. Mike McLagan 5, April 1996. The Digi Intl. epca driver. ---------------------------- The Digi Intl. epca driver for Linux supports the following boards: Digi PC/Xem, PC/Xr, PC/Xe, PC/Xi, PC/Xeve Digi EISA/Xem, PCI/Xem, PCI/Xr Limitations: ------------ Currently the driver only autoprobes for supported PCI boards. The Linux MAKEDEV command does not support generating the Digiboard Devices. Users executing digiConfig to setup EISA and PC series cards will have their device nodes automatically constructed (cud?? for ~CLOCAL, and ttyD?? for CLOCAL). Users wishing to boot their board from the LILO prompt, or those users booting PCI cards may use buildDIGI to construct the necessary nodes. Notes: ------ This driver may be configured via LILO. For users who have already configured their driver using digiConfig, configuring from LILO will override previous settings. Multiple boards may be configured by issuing multiple LILO command lines. For examples see the bottom of this document. Device names start at 0 and continue up. Beware of this as previous Digi drivers started device names with 1. PCI boards are auto-detected and configured by the driver. PCI boards will be allocated device numbers (internally) beginning with the lowest PCI slot first. In other words a PCI card in slot 3 will always have higher device nodes than a PCI card in slot 1. LILO config examples: --------------------- Using LILO's APPEND command, a string of comma separated identifiers or integers can be used to configure supported boards. The six values in order are: Enable/Disable this card or Override, Type of card: PC/Xe (AccelePort) (0), PC/Xeve (1), PC/Xem or PC/Xr (2), EISA/Xem (3), PC/64Xe (4), PC/Xi (5), Enable/Disable alternate pin arrangement, Number of ports on this card, I/O Port where card is configured (in HEX if using string identifiers), Base of memory window (in HEX if using string identifiers), NOTE : PCI boards are auto-detected and configured. Do not attempt to configure PCI boards with the LILO append command. If you wish to override previous configuration data (As set by digiConfig), but you do not wish to configure any specific card (Example if there are PCI cards in the system) the following override command will accomplish this: -> append="digi=2" Samples: append="digiepca=E,PC/Xe,D,16,200,D0000" or append="digi=1,0,0,16,512,851968" Supporting Tools: ----------------- Supporting tools include digiDload, digiConfig, buildPCI, and ditty. See /usr/src/linux/Documentation/README.epca.dir/user.doc for more details. Note, this driver REQUIRES that digiDload be executed prior to it being used. Failure to do this will result in an ENODEV error. The latest version of the tool package is available at: ftp://ftp.dgii.com/drivers/linux/released/async/ Documentation: -------------- Complete documentation for this product may be found in the tool package. Sources of information and support: ----------------------------------- Digi Intl. support site for this product: -> digilnux@dgii.com Related information and information concerning other drivers supporting Digi Intl. products: -> FTP: ftp://dgii.com -> Webpage: http://www.dgii.com -> Webpage: http://private.fuller.edu/clameter/digi.html -> Mailing List: digiboard@list.fuller.edu Note write e-mail to subscribe common ListServ commands will not work. Acknowledgments: ---------------- Much of this work (And even text) was derived from a similar document supporting the original public domain DigiBoard driver Copyright (C) 1994,1995 Troy De Jongh. Many thanks to Christoph Lameter (clameter@fuller.edu) and Mike McLagan (mike.mclagan@linux.org) who authored and contributed to the original document. Kernel level exception handling in Linux 2.1.8 Commentary by Joerg Pommnitz When a process runs in kernel mode, it often has to access user mode memory whose address has been passed by an untrusted program. To protect itself the kernel has to verify this address. In older versions of Linux this was done with the int verify_area(int type, const void * addr, unsigned long size) function. This function verified that the memory area starting at address addr and of size size was accessible for the operation specified in type (read or write). To do this, verify_read had to look up the virtual memory area (vma) that contained the address addr. In the normal case (correctly working program), this test was successful. It only failed for a few buggy programs. In some kernel profiling tests, this normally unneeded verification used up a considerable amount of time. To overcome this situation, Linus decided to let the virtual memory hardware present in every Linux-capable CPU handle this test. How does this work? Whenever the kernel tries to access an address that is currently not accessible, the CPU generates a page fault exception and calls the page fault handler void do_page_fault(struct pt_regs *regs, unsigned long error_code) in arch/i386/mm/fault.c. The parameters on the stack are set up by the low level assembly glue in arch/i386/kernel/entry.S. The parameter regs is a pointer to the saved registers on the stack, error_code contains a reason code for the exception. do_page_fault first obtains the unaccessible address from the CPU control register CR2. If the address is within the virtual address space of the process, the fault probably occurred, because the page was not swapped in, write protected or something similar. However, we are interested in the other case: the address is not valid, there is no vma that contains this address. In this case, the kernel jumps to the bad_area label. There it uses the address of the instruction that caused the exception (i.e. regs->eip) to find an address where the execution can continue (fixup). If this search is successful, the fault handler modifies the return address (again regs->eip) and returns. The execution will continue at the address in fixup. Where does fixup point to? Since we jump to the contents of fixup, fixup obviously points to executable code. This code is hidden inside the user access macros. I have picked the get_user macro defined in include/asm/uaccess.h as an example. The definition is somewhat hard to follow, so let's peek at the code generated by the preprocessor and the compiler. I selected the get_user call in drivers/char/console.c for a detailed examination. The original code in console.c line 1405: get_user(c, buf); The preprocessor output (edited to become somewhat readable): ( { long __gu_err = - 14 , __gu_val = 0; const __typeof__(*( ( buf ) )) *__gu_addr = ((buf)); if (((((0 + current_set[0])->tss.segment) == 0x18 ) || (((sizeof(*(buf))) <= 0xC0000000UL) && ((unsigned long)(__gu_addr ) <= 0xC0000000UL - (sizeof(*(buf))))))) do { __gu_err = 0; switch ((sizeof(*(buf)))) { case 1: __asm__ __volatile__( "1: mov" "b" " %2,%" "b" "1\n" "2:\n" ".section .fixup,\"ax\"\n" "3: movl %3,%0\n" " xor" "b" " %" "b" "1,%" "b" "1\n" " jmp 2b\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,3b\n" ".text" : "=r"(__gu_err), "=q" (__gu_val): "m"((*(struct __large_struct *) ( __gu_addr )) ), "i"(- 14 ), "0"( __gu_err )) ; break; case 2: __asm__ __volatile__( "1: mov" "w" " %2,%" "w" "1\n" "2:\n" ".section .fixup,\"ax\"\n" "3: movl %3,%0\n" " xor" "w" " %" "w" "1,%" "w" "1\n" " jmp 2b\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,3b\n" ".text" : "=r"(__gu_err), "=r" (__gu_val) : "m"((*(struct __large_struct *) ( __gu_addr )) ), "i"(- 14 ), "0"( __gu_err )); break; case 4: __asm__ __volatile__( "1: mov" "l" " %2,%" "" "1\n" "2:\n" ".section .fixup,\"ax\"\n" "3: movl %3,%0\n" " xor" "l" " %" "" "1,%" "" "1\n" " jmp 2b\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,3b\n" ".text" : "=r"(__gu_err), "=r" (__gu_val) : "m"((*(struct __large_struct *) ( __gu_addr )) ), "i"(- 14 ), "0"(__gu_err)); break; default: (__gu_val) = __get_user_bad(); } } while (0) ; ((c)) = (__typeof__(*((buf))))__gu_val; __gu_err; } ); WOW! Black GCC/assembly magic. This is impossible to follow, so let's see what code gcc generates: > xorl %edx,%edx > movl current_set,%eax > cmpl $24,788(%eax) > je .L1424 > cmpl $-1073741825,64(%esp) > ja .L1423 > .L1424: > movl %edx,%eax > movl 64(%esp),%ebx > #APP > 1: movb (%ebx),%dl /* this is the actual user access */ > 2: > .section .fixup,"ax" > 3: movl $-14,%eax > xorb %dl,%dl > jmp 2b > .section __ex_table,"a" > .align 4 > .long 1b,3b > .text > #NO_APP > .L1423: > movzbl %dl,%esi The optimizer does a good job and gives us something we can actually understand. Can we? The actual user access is quite obvious. Thanks to the unified address space we can just access the address in user memory. But what does the .section stuff do????? To understand this we have to look at the final kernel: > objdump --section-headers vmlinux > > vmlinux: file format elf32-i386 > > Sections: > Idx Name Size VMA LMA File off Algn > 0 .text 00098f40 c0100000 c0100000 00001000 2**4 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 1 .fixup 000016bc c0198f40 c0198f40 00099f40 2**0 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 2 .rodata 0000f127 c019a5fc c019a5fc 0009b5fc 2**2 > CONTENTS, ALLOC, LOAD, READONLY, DATA > 3 __ex_table 000015c0 c01a9724 c01a9724 000aa724 2**2 > CONTENTS, ALLOC, LOAD, READONLY, DATA > 4 .data 0000ea58 c01abcf0 c01abcf0 000abcf0 2**4 > CONTENTS, ALLOC, LOAD, DATA > 5 .bss 00018e21 c01ba748 c01ba748 000ba748 2**2 > ALLOC > 6 .comment 00000ec4 00000000 00000000 000ba748 2**0 > CONTENTS, READONLY > 7 .note 00001068 00000ec4 00000ec4 000bb60c 2**0 > CONTENTS, READONLY There are obviously 2 non standard ELF sections in the generated object file. But first we want to find out what happened to our code in the final kernel executable: > objdump --disassemble --section=.text vmlinux > > c017e785 xorl %edx,%edx > c017e787 movl 0xc01c7bec,%eax > c017e78c cmpl $0x18,0x314(%eax) > c017e793 je c017e79f > c017e795 cmpl $0xbfffffff,0x40(%esp,1) > c017e79d ja c017e7a7 > c017e79f movl %edx,%eax > c017e7a1 movl 0x40(%esp,1),%ebx > c017e7a5 movb (%ebx),%dl > c017e7a7 movzbl %dl,%esi The whole user memory access is reduced to 10 x86 machine instructions. The instructions bracketed in the .section directives are not longer in the normal execution path. They are located in a different section of the executable file: > objdump --disassemble --section=.fixup vmlinux > > c0199ff5 <.fixup+10b5> movl $0xfffffff2,%eax > c0199ffa <.fixup+10ba> xorb %dl,%dl > c0199ffc <.fixup+10bc> jmp c017e7a7 And finally: > objdump --full-contents --section=__ex_table vmlinux > > c01aa7c4 93c017c0 e09f19c0 97c017c0 99c017c0 ................ > c01aa7d4 f6c217c0 e99f19c0 a5e717c0 f59f19c0 ................ > c01aa7e4 080a18c0 01a019c0 0a0a18c0 04a019c0 ................ or in human readable byte order: > c01aa7c4 c017c093 c0199fe0 c017c097 c017c099 ................ > c01aa7d4 c017c2f6 c0199fe9 c017e7a5 c0199ff5 ................ ^^^^^^^^^^^^^^^^^ this is the interesting part! > c01aa7e4 c0180a08 c019a001 c0180a0a c019a004 ................ What happened? The assembly directives .section .fixup,"ax" .section __ex_table,"a" told the assembler to move the following code to the specified sections in the ELF object file. So the instructions 3: movl $-14,%eax xorb %dl,%dl jmp 2b ended up in the .fixup section of the object file and the addresses .long 1b,3b ended up in the __ex_table section of the object file. 1b and 3b are local labels. The local label 1b (1b stands for next label 1 backward) is the address of the instruction that might fault, i.e. in our case the address of the label 1 is c017e7a5: the original assembly code: > 1: movb (%ebx),%dl and linked in vmlinux : > c017e7a5 movb (%ebx),%dl The local label 3 (backwards again) is the address of the code to handle the fault, in our case the actual value is c0199ff5: the original assembly code: > 3: movl $-14,%eax and linked in vmlinux : > c0199ff5 <.fixup+10b5> movl $0xfffffff2,%eax The assembly code > .section __ex_table,"a" > .align 4 > .long 1b,3b becomes the value pair > c01aa7d4 c017c2f6 c0199fe9 c017e7a5 c0199ff5 ................ ^this is ^this is 1b 3b c017e7a5,c0199ff5 in the exception table of the kernel. So, what actually happens if a fault from kernel mode with no suitable vma occurs? 1.) access to invalid address: > c017e7a5 movb (%ebx),%dl 2.) MMU generates exception 3.) CPU calls do_page_fault 4.) do page fault calls search_exception_table (regs->eip == c017e7a5); 5.) search_exception_table looks up the address c017e7a5 in the exception table (i.e. the contents of the ELF section __ex_table) and returns the address of the associated fault handle code c0199ff5. 6.) do_page_fault modifies its own return address to point to the fault handle code and returns. 7.) execution continues in the fault handling code. 8.) 8a) EAX becomes -EFAULT (== -14) 8b) DL becomes zero (the value we "read" from user space) 8c) execution continues at local label 2 (address of the instruction immediately after the faulting user access). The steps 8a to 8c in a certain way emulate the faulting instruction. That's it, mostly. If you look at our example, you might ask why we set EAX to -EFAULT in the exception handler code. Well, the get_user macro actually returns a value: 0, if the user access was successful, -EFAULT on failure. Our original code did not test this return value, however the inline assembly code in get_user tries to return -EFAULT. GCC selected EAX to return this value. Intro ===== This file describes some issues involved when using the "ftape" floppy tape device driver that comes with the Linux kernel. This document deals with ftape-3.04 and later. Please read the section "Changes" for the most striking differences between version 3.04 and 2.08; the latter was the version of ftape delivered with the kernel until kernel version 2.0.30 and 2.1.57. ftape-3.x developed as the re-unification of ftape-2.x and zftape. zftape was developed in parallel with the stock ftape-2.x driver sharing the same hardware support but providing an enhanced file system interface. zftape also provided user transparent block-wise on-the-fly compression (regard it as a feature or bug of zftape). ftape has a home page at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape which contains further information about ftape. Please cross check this WWW address against the address given (if any) in the MAINTAINERS file located in the top level directory of the Linux kernel source tree. Contents ======== A minus 1: Ftape documentation A. Changes 1. Goal 2. I/O Block Size 3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape) 4. MTBSF - backspace over file mark and position at its EOT side 5. Formatting 6. Interchanging cartridges with other operating systems B. Debugging Output 1. Introduction 2. Tuning the debugging output C. Boot and load time configuration 1. Setting boot time parameters 2. Module load time parameters 3. Ftape boot- and load time options 4. Example kernel parameter setting 5. Example module parameter setting D. Support and contacts ******************************************************************************* A minus 1. Ftape documentation ============================== Unluckily, the ftape-HOWTO is out of date. This really needs to be changed. Up to date documentation as well as recent development versions of ftape and useful links to related topics can be found at the ftape home page at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape ******************************************************************************* A. Changes ========== 1. Goal ~~~~ The goal of all that incompatibilities was to give ftape an interface that resembles the interface provided by SCSI tape drives as close as possible. Thus any Unix backup program that is known to work with SCSI tape drives should also work with ftape-3.04 and above. The concept of a fixed block size for read/write transfers is rather unrelated to this SCSI tape compatibility at the file system interface level. It developed out of a feature of zftape, a block wise user transparent on-the-fly compression. That compression support will not be dropped in future releases for compatibility reasons with previous releases of zftape. 2. I/O Block Size ~~~~~~~~~~~~~~ The probably most striking difference between ftape-2.x and ftape-3.x with the zftape file system interface is the concept of a fixed block size: data must be written to or read from the tape in multiples of a fixed block size. The block size defaults to 10k which is the default block size of GNU tar. While this is quite usual for SCSI tapes (block size of 32k?) and the QIC-150 driver `./drivers/char/tpqic02.c' ftape-2.x allowed data to be written in arbitrary portions to the tape. The block size can be tuned either during kernel configuration or at runtime with the MTIOCTOP ioctl using the MTSETBLK operation (i.e. do "mt -f /dev/qft0" setblk #BLKSZ). A block size of 0 switches to variable block size mode i.e. "mt setblk 0" switches off the block size restriction. However, this disables zftape's built in on-the-fly compression which doesn't work with variable block size mode. The BLKSZ parameter must be given as a byte count and must be a multiple of 32k or 0, i.e. use "mt setblk 32768" to switch to a block size of 32k. The typical symptom of a block size mismatch is an "invalid argument" error message. 3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ zftape (the file system interface of ftape-3.x) denies write access to the tape cartridge when it isn't positioned either at BOT or EOD. This inconvenience has been introduced as it was reported that the former behavior of ftape-2.x which allowed write access at arbitrary locations already has caused data loss with some backup programs. 4. MTBSF - backspace over file mark and position at its EOT side ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ftape-2.x didn't handle the MTBSF tape operation correctly. A MTBSF call (i.e. "mt -f /dev/nqft0 bsf #COUNT") should space over #COUNT file marks and then position at the EOT tape side of the file mark. This has to be taken literally, i.e. "mt -f /dev/nqft0 bsf 1" should simply position at the start of the current volume. 5. Formatting ~~~~~~~~~~ ftape-3.x DOES support formatting of floppy tape cartridges. You need the `ftformat' program that is shipped with the modules version of ftape-3.x. Please get the latest version of ftape from ftp://sunsite.unc.edu/pub/Linux/kernel/tapes or from the ftape home page at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape `ftformat' is contained in the `./contrib/' subdirectory of that separate ftape package. 6. Interchanging cartridges with other operating systems ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The internal emulation of Unix tape device file marks has changed completely. ftape-3.x now uses the volume table segment as specified by the QIC-40/80/3010/3020/113 standards to emulate file marks. As a consequence there is limited support to interchange cartridges with other operating systems. To be more precise: ftape will detect volumes written by other OS's programs and other OS's programs will detect volumes written by ftape-3.x. However, it isn't possible to extract the data dumped to the tape by some MSDOG program with ftape-3.x. This exceeds the scope of a kernel device driver. If you need such functionality, then go ahead and write a user space utility that is able to do that. ftape-3.x/zftape already provides all kernel level support necessary to do that. ******************************************************************************* B. Debugging Output ================ 1. Introduction ~~~~~~~~~~~~ The ftape driver can be very noisy in that is can print lots of debugging messages to the kernel log files and the system console. While this is useful for debugging it might be annoying during normal use and enlarges the size of the driver by several kilobytes. To reduce the size of the driver you can trim the maximal amount of debugging information available during kernel configuration. Please refer to the kernel configuration script and its on-line help functionality. The amount of debugging output maps to the "tracing" boot time option and the "ft_tracing" modules option as follows: 0 bugs 1 + errors (with call-stack dump) 2 + warnings 3 + information 4 + more information 5 + program flow 6 + fdc/dma info 7 + data flow 8 + everything else 2. Tuning the debugging output ~~~~~~~~~~~~~~~~~~~~~~~~~~~ To reduce the amount of debugging output printed to the system console you can i) trim the debugging output at run-time with mt -f /dev/nqft0 setdensity #DBGLVL where "#DBGLVL" is a number between 0 and 9 ii) trim the debugging output at module load time with insmod ftape.o ft_tracing=#DBGLVL Of course, this applies only if you have configured ftape to be compiled as a module. iii) trim the debugging output during system boot time. Add the following to the kernel command line: ftape=#DBGLVL,tracing Please refer also to the next section if you don't know how to set boot time parameters. ******************************************************************************* C. Boot and load time configuration ================================ 1. Setting boot time parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Assuming that you use lilo, the LI)nux LO)ader, boot time kernel parameters can be set by adding a line append some_kernel_boot_time_parameter to `/etc/lilo.conf' or at real boot time by typing in the options at the prompt provided by LILO. I can't give you advice on how to specify those parameters with other loaders as I don't use them. For ftape, each "some_kernel_boot_time_parameter" looks like "ftape=value,option". As an example, the debugging output can be increased with ftape=4,tracing NOTE: the value precedes the option name. 2. Module load time parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Module parameters can be specified either directly when invoking the program 'insmod' at the shell prompt: insmod ftape.o ft_tracing=4 or by editing the file `/etc/conf.modules' in which case they take effect each time when the module is loaded with `modprobe' (please refer to the modules documentation, i.e. `modules.txt' and the respective manual pages). Thus, you should add a line options ftape ft_tracing=4 to `/etc/conf.modules` if you intend to increase the debugging output of the driver. 3. Ftape boot- and load time options ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ i. Controlling the amount of debugging output DBGLVL has to be replaced by a number between 0 and 8. module | kernel command line -----------------------|---------------------- ft_tracing=DBGLVL | ftape=DBGLVL,tracing ii. Hardware setup BASE is the base address of your floppy disk controller, IRQ and DMA give its interrupt and DMA channel, respectively. BOOL is an integer, "0" means "no"; any other value means "yes". You don't need to specify anything if connecting your tape drive to the standard floppy disk controller. All of these values have reasonable defaults. The defaults can be modified during kernel configuration, i.e. while running "make config", "make menuconfig" or "make xconfig" in the top level directory of the Linux kernel source tree. Please refer also to the on line documentation provided during that kernel configuration process. module | kernel command line -----------------------|---------------------- ft_fdc_base=BASE | ftape=BASE,ioport ft_fdc_irq=IRQ | ftape=IRQ,irq ft_fdc_dma=DMA | ftape=DMA,dma ft_probe_fc10=BOOL | ftape=BOOL,fc10 ft_mach2=BOOL | ftape=BOOL,mach2 ft_fdc_threshold=THR | ftape=THR,threshold ft_fdc_rate_limit=RATE | ftape=RATE,datarate 4. Example kernel parameter setting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To configure ftape to probe for a Colorado FC-10/FC-20 controller and to increase the amount of debugging output a little bit, add the following line to `/etc/lilo.conf': append ftape=1,fc10 ftape=4,tracing 5. Example module parameter setting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To do the same, but with ftape compiled as a loadable kernel module, add the following line to `/etc/conf.modules': options ftape ft_probe_fc10=1 ft_tracing=4 ******************************************************************************* D. Support and contacts ==================== Ftape is distributed under the GNU General Public License. There is absolutely no warranty for this software. However, you can reach the current maintainer of the ftape package under the email address given in the MAINTAINERS file which is located in the top level directory of the Linux kernel source tree. There you'll find also the relevant mailing list to use as a discussion forum and the web page to query for the most recent documentation, related work and development versions of ftape. LocalWords: ftape Linux zftape http www rwth aachen LBFM claus EOD config LocalWords: datarate LocalWords BOT MTBSF EOT HOWTO QIC tpqic menuconfig LocalWords: MTIOCTOP MTSETBLK mt dev qft setblk BLKSZ bsf zftape's xconfig LocalWords: nqft ftformat ftp sunsite unc edu contrib ft MSDOG fdc LocalWords: dma setdensity DBGLVL insmod lilo LI nux ader conf txt LocalWords: modprobe IRQ BOOL ioport irq fc mach THR HAYES ESP DRIVER VERSION 2.1 A big thanks to the people at Hayes, especially Alan Adamson. Their support has enabled me to provide enhancements to the driver. Please report your experiences with this driver to me (arobinso@nyx.net). I am looking for both positive and negative feedback. *** IMPORTANT CHANGES FOR 2.1 *** Support for PIO mode. Five situations will cause PIO mode to be used: 1) A multiport card is detected. PIO mode will always be used. (8 port cards do not support DMA). 2) The DMA channel is set to an invalid value (anything other than 1 or 3). 3) The DMA buffer/channel could not be allocated. The port will revert to PIO mode until it is reopened. 4) Less than a specified number of bytes need to be transferred to/from the FIFOs. PIO mode will be used for that transfer only. 5) A port needs to do a DMA transfer and another port is already using the DMA channel. PIO mode will be used for that transfer only. Since the Hayes ESP seems to conflict with other cards (notably sound cards) when using DMA, DMA is turned off by default. To use DMA, it must be turned on explicitly, either with the "dma=" option described below or with setserial. A multiport card can be forced into DMA mode by using setserial; however, most multiport cards don't support DMA. The latest version of setserial allows the enhanced configuration of the ESP card to be viewed and modified. *** This package contains the files needed to compile a module to support the Hayes ESP card. The drivers are basically a modified version of the serial drivers. Features: - Uses the enhanced mode of the ESP card, allowing a wider range of interrupts and features than compatibility mode - Uses DMA and 16 bit PIO mode to transfer data to and from the ESP's FIFOs, reducing CPU load - Supports primary and secondary ports If the driver is compiled as a module, the IRQs to use can be specified by using the irq= option. The format is: irq=[0x100],[0x140],[0x180],[0x200],[0x240],[0x280],[0x300],[0x380] The address in brackets is the base address of the card. The IRQ of nonexistent cards can be set to 0. If an IRQ of a card that does exist is set to 0, the driver will attempt to guess at the correct IRQ. For example, to set the IRQ of the card at address 0x300 to 12, the insmod command would be: insmod esp irq=0,0,0,0,0,0,12,0 The custom divisor can be set by using the divisor= option. The format is the same as for the irq= option. Each divisor value is a series of hex digits, with each digit representing the divisor to use for a corresponding port. The divisor value is constructed RIGHT TO LEFT. Specifying a nonzero divisor value will automatically set the spd_cust flag. To calculate the divisor to use for a certain baud rate, divide the port's base baud (generally 921600) by the desired rate. For example, to set the divisor of the primary port at 0x300 to 4 and the divisor of the secondary port at 0x308 to 8, the insmod command would be: insmod esp divisor=0,0,0,0,0,0,0x84,0 The dma= option can be used to set the DMA channel. The channel can be either 1 or 3. Specifying any other value will force the driver to use PIO mode. For example, to set the DMA channel to 3, the insmod command would be: insmod esp dma=3 The rx_trigger= and tx_trigger= options can be used to set the FIFO trigger levels. They specify when the ESP card should send an interrupt. Larger values will decrease the number of interrupts; however, a value too high may result in data loss. Valid values are 1 through 1023, with 768 being the default. For example, to set the receive trigger level to 512 bytes and the transmit trigger level to 700 bytes, the insmod command would be: insmod esp rx_trigger=512 tx_trigger=700 The flow_off= and flow_on= options can be used to set the hardware flow off/ flow on levels. The flow on level must be lower than the flow off level, and the flow off level should be higher than rx_trigger. Valid values are 1 through 1023, with 1016 being the default flow off level and 944 being the default flow on level. For example, to set the flow off level to 1000 bytes and the flow on level to 935 bytes, the insmod command would be: insmod esp flow_off=1000 flow_on=935 The rx_timeout= option can be used to set the receive timeout value. This value indicates how long after receiving the last character that the ESP card should wait before signalling an interrupt. Valid values are 0 though 255, with 128 being the default. A value too high will increase latency, and a value too low will cause unnecessary interrupts. For example, to set the receive timeout to 255, the insmod command would be: insmod esp rx_timeout=255 The pio_threshold= option sets the threshold (in number of characters) for using PIO mode instead of DMA mode. For example, if this value is 32, transfers of 32 bytes or less will always use PIO mode. insmod esp pio_threshold=32 Multiple options can be listed on the insmod command line by separating each option with a space. For example: insmod esp dma=3 trigger=512 The esp module can be automatically loaded when needed. To cause this to happen, add the following lines to /etc/conf.modules (replacing the last line with options for your configuration): alias char-major-57 esp alias char-major-58 esp options esp irq=0,0,0,0,0,0,3,0 divisor=0,0,0,0,0,0,0x4,0 You may also need to run 'depmod -a'. Devices must be created manually. To create the devices, note the output from the module after it is inserted. The output will appear in the location where kernel messages usually appear (usually /var/adm/messages). Create two devices for each 'tty' mentioned, one with major of 57 and the other with major of 58. The minor number should be the same as the tty number reported. The commands would be (replace ? with the tty number): mknod /dev/ttyP? c 57 ? mknod /dev/cup? c 58 ? For example, if the following line appears: Oct 24 18:17:23 techno kernel: ttyP8 at 0x0140 (irq = 3) is an ESP primary port ...two devices should be created: mknod /dev/ttyP8 c 57 8 mknod /dev/cup8 c 58 8 You may need to set the permissions on the devices: chmod 666 /dev/ttyP* chmod 666 /dev/cup* The ESP module and the serial module should not conflict (they can be used at the same time). After the ESP module has been loaded the ports on the ESP card will no longer be accessible by the serial driver. If I/O errors are experienced when accessing the port, check for IRQ and DMA conflicts ('cat /proc/interrupts' and 'cat /proc/dma' for a list of IRQs and DMAs currently in use). Enjoy! Andrew J. Robinson ide.txt -- Information regarding the Enhanced IDE drive in Linux 2.1/2.2 =============================================================================== +-----------------------------------------------------------------+ | The hdparm utility for controlling various IDE features is | | packaged separately. Look for it on popular linux FTP sites. | +-----------------------------------------------------------------+ See description later on below for handling BIG IDE drives with >1024 cyls. Major features of the 2.1/2.2 IDE driver ("NEW!" marks changes since 2.0.xx): NEW! - support for IDE ATAPI *floppy* drives - support for IDE ATAPI *tape* drives, courtesy of Gadi Oxman (re-run MAKEDEV.ide to create the tape device entries in /dev/) - support for up to *four* IDE interfaces on one or more IRQs - support for any mix of up to *eight* IDE drives - support for reading IDE ATAPI cdrom drives (NEC,MITSUMI,VERTOS,SONY) - support for audio functions - auto-detection of interfaces, drives, IRQs, and disk geometries - "single" drives should be jumpered as "master", not "slave" (both are now probed for) - support for BIOSs which report "more than 16 heads" on disk drives - uses LBA (slightly faster) on disk drives which support it - support for lots of fancy (E)IDE drive functions with hdparm utility - optional (compile time) support for 32-bit VLB data transfers - support for IDE multiple (block) mode (same as hd.c) - support for interrupt unmasking during I/O (better than hd.c) - improved handshaking and error detection/recovery - can co-exist with hd.c controlling the first interface - run-time selectable 32bit interface support (using hdparm-2.3) - support for reliable operation of buggy RZ1000 interfaces - PCI support is automatic when rz1000 support is configured - support for reliable operation of buggy CMD-640 interfaces - PCI support is automatic when cmd640 support is configured - for VLB, use kernel command line option: ide0=cmd640_vlb - this support also enables the secondary i/f when needed - interface PIO timing & prefetch parameter support - experimental support for UMC 8672 interfaces - support for secondary interface on the FGI/Holtek HT-6560B VLB i/f - use kernel command line option: ide0=ht6560 - experimental support for various IDE chipsets - use appropriate kernel command line option from list below - support for drives with a stuck WRERR_STAT bit - support for removable devices, including door lock/unlock - transparent support for DiskManager 6.0x and "Dynamic Disk Overlay" - works with Linux fdisk, LILO, loadlin, bootln, etc.. - mostly transparent support for EZ-Drive disk translation software - to use LILO with EZ, install LILO on the linux partition rather than on the master boot record, and then mark the linux partition as "bootable" or "active" using fdisk. (courtesy of Juha Laiho ). - auto-detect of disk translations by examining partition table - ide-cd.c now compiles separate from ide.c - ide-cd.c now supports door locking and auto-loading. - Also preliminary support for multisession and direct reads of audio data. - experimental support for Promise DC4030VL caching interface card - email thanks/problems to: peterd@pnd-pc.demon.co.uk - the hdparm-3.1 package can be used to set PIO modes for some chipsets. NEW! - support for setting PIO modes with the OPTi 82C621, courtesy of Jaromir Koutek. NEW! - support for loadable modules NEW! - optional SCSI host adapter emulation for ATAPI devices NEW! - generic PCI Bus-Master DMA support NEW! - works with most Pentium PCI systems, chipsets, add-on cards NEW! - works with regular DMA as well as Ultra DMA NEW! - automatically probes for all PCI IDE interfaces NEW! - generic support for using BIOS-configured Ultra-DMA (UDMA) transfers *** IMPORTANT NOTICES: BUGGY IDE CHIPSETS CAN CORRUPT DATA!! *** ================= *** PCI versions of the CMD640 and RZ1000 interfaces are now detected *** automatically at startup when PCI BIOS support is configured. *** *** Linux disables the "prefetch" ("readahead") mode of the RZ1000 *** to prevent data corruption possible due to hardware design flaws. *** *** For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any *** drive for which the "prefetch" mode of the CMD640 is turned on. *** If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be *** used again. *** *** For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive *** for which the "prefetch" mode of the CMD640 is turned off. *** If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be *** used again. *** *** The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT* *** automatically detected by Linux. For safe, reliable operation with such *** interfaces, one *MUST* use the "ide0=cmd640_vlb" kernel option. *** *** Use of the "serialize" option is no longer necessary. This is the multiple IDE interface driver, as evolved from hd.c. It supports up to six IDE interfaces, on one or more IRQs (usually 14 & 15). There can be up to two drives per interface, as per the ATA-2 spec. Primary: ide0, port 0x1f0; major=3; hda is minor=0; hdb is minor=64 Secondary: ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64 Tertiary: ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64 Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64 fifth.. ide4, usually PCI, probed sixth.. ide5, usually PCI, probed To access devices on interfaces > ide0, device entries must first be created in /dev for them. To create such entries, simply run the included shell script: /usr/src/linux/scripts/MAKEDEV.ide Apparently many older releases of Slackware had incorrect entries in /dev for hdc* and hdd* -- this can also be corrected by running MAKEDEV.ide ide.c automatically probes for most IDE interfaces (including all PCI ones), for the drives/geometries attached to those interfaces, and for the IRQ numbers being used by the interfaces (normally 14, 15 for ide0/ide1). For special cases, interfaces may be specified using kernel "command line" options. For example, ide3=0x168,0x36e,10 /* ioports 0x168-0x16f,0x36e, irq 10 */ Normally the irq number need not be specified, as ide.c will probe for it: ide3=0x168,0x36e /* ioports 0x168-0x16f,0x36e */ The standard port, and irq values are these: ide0=0x1f0,0x3f6,14 ide1=0x170,0x376,15 ide2=0x1e8,0x3ee,11 ide3=0x168,0x36e,10 Note that the first parameter reserves 8 contiguous ioports, whereas the second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'. In all probability the device uses these ports and IRQs if it is attached to the appropriate ide channel. Pass the parameter for the correct ide channel to the kernel, as explained above. Any number of interfaces may share a single IRQ if necessary, at a slight performance penalty, whether on separate cards or a single VLB card. The IDE driver automatically detects and handles this. However, this may or may not be harmful to your hardware.. two or more cards driving the same IRQ can potentially burn each other's bus driver, though in practice this seldom occurs. Be careful, and if in doubt, don't do it! Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. For really weird situations, the apparent (fdisk) geometry can also be specified on the kernel "command line" using LILO. The format of such lines is: hdx=cyls,heads,sects,wpcom,irq or hdx=cdrom where hdx can be any of hda through hdh, Three values are required (cyls,heads,sects). For example: hdc=1050,32,64 hdd=cdrom either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may override the physical geometry/irq specified, though the "original" geometry may be retained as the "logical" geometry for partitioning purposes (fdisk). If the auto-probing during boot time confuses a drive (ie. the drive works with hd.c but not with ide.c), then an command line option may be specified for each drive for which you'd like the drive to skip the hardware probe/identification sequence. For example: hdb=noprobe or hdc=768,16,32 hdc=noprobe Note that when only one IDE device is attached to an interface, it should be jumpered as "single" or "master", *not* "slave". Many folks have had "trouble" with cdroms because of this requirement, so ide.c now probes for both units, though success is more likely when the drive is jumpered correctly. Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives such as the NEC-260 and the new MITSUMI triple/quad speed drives. Such drives will be identified at boot time, just like a hard disk. If for some reason your cdrom drive is *not* found at boot time, you can force the probe to look harder by supplying a kernel command line parameter via LILO, such as: hdc=cdrom /* hdc = "master" on second interface */ or hdd=cdrom /* hdd = "slave" on second interface */ For example, a GW2000 system might have a hard drive on the primary interface (/dev/hda) and an IDE cdrom drive on the secondary interface (/dev/hdc). To mount a CD in the cdrom drive, one would use something like: ln -sf /dev/hdc /dev/cdrom mkdir /cd mount /dev/cdrom /cd -t iso9660 -o ro If, after doing all of the above, mount doesn't work and you see errors from the driver (with dmesg) complaining about `status=0xff', this means that the hardware is not responding to the driver's attempts to read it. One of the following is probably the problem: - Your hardware is broken. - You are using the wrong address for the device, or you have the drive jumpered wrong. Review the configuration instructions above. - Your IDE controller requires some nonstandard initialization sequence before it will work properly. If this is the case, there will often be a separate MS-DOS driver just for the controller. IDE interfaces on sound cards usually fall into this category. Such configurations can often be made to work by first booting MS-DOS, loading the appropriate drivers, and then warm-booting linux (without powering off). This can be automated using loadlin in the MS-DOS autoexec. If you always get timeout errors, interrupts from the drive are probably not making it to the host. Check how you have the hardware jumpered and make sure it matches what the driver expects (see the configuration instructions above). If you have a PCI system, also check the BIOS setup; I've had one report of a system which was shipped with IRQ 15 disabled by the BIOS. The kernel is able to execute binaries directly off of the cdrom, provided it is mounted with the default block size of 1024 (as above). Please pass on any feedback on any of this stuff to the maintainer, whose address can be found in linux/MAINTAINERS. Note that if BOTH hd.c and ide.c are configured into the kernel, hd.c will normally be allowed to control the primary IDE interface. This is useful for older hardware that may be incompatible with ide.c, and still allows newer hardware to run on the 2nd/3rd/4th IDE ports under control of ide.c. To have ide.c also "take over" the primary IDE port in this situation, use the "command line" parameter: ide0=0x1f0 The IDE driver is partly modularized. The high level disk/cdrom/tape/floppy drivers can always be compiled as loadable modules, the chipset drivers can only be compiled into the kernel, and the core code (ide.c) can be compiled as a loadable module provided no chipset support and no special partition table translations are needed. When using ide.c/ide-tape.c as modules in combination with kerneld, add: alias block-major-3 ide-probe alias char-major-37 ide-tape respectively to /etc/conf.modules. When ide.c is used as a module, you can pass command line parameters to the driver using the "options=" keyword to insmod, while replacing any ',' with ';'. For example: insmod ide.o options="ide0=serialize ide2=0x1e8;0x3ee;11" ================================================================================ Summary of ide driver parameters for kernel "command line": ---------------------------------------------------------- "hdx=" is recognized for all "x" from "a" to "h", such as "hdc". "idex=" is recognized for all "x" from "0" to "3", such as "ide1". "hdx=noprobe" : drive may be present, but do not probe for it "hdx=none" : drive is NOT present, ignore cmos and do not probe "hdx=nowerr" : ignore the WRERR_STAT bit on this drive "hdx=cdrom" : drive is present, and is a cdrom drive "hdx=cyl,head,sect" : disk drive is present, with specified geometry "hdx=autotune" : driver will attempt to tune interface speed to the fastest PIO mode supported, if possible for this drive only. Not fully supported by all chipset types, and quite likely to cause trouble with older/odd IDE drives. "hdx=slow" : insert a huge pause after each access to the data port. Should be used only as a last resort. "hdx=swapdata" : when the drive is a disk, byte swap all data "idebus=xx" : inform IDE driver of VESA/PCI bus speed in MHz, where "xx" is between 20 and 66 inclusive, used when tuning chipset PIO modes. For PCI bus, 25 is correct for a P75 system, 30 is correct for P90,P120,P180 systems, and 33 is used for P100,P133,P166 systems. If in doubt, use idebus=33 for PCI. As for VLB, it is safest to not specify it. Bigger values are safer than smaller ones. "idex=noprobe" : do not attempt to access/use this interface "idex=base" : probe for an interface at the addr specified, where "base" is usually 0x1f0 or 0x170 and "ctl" is assumed to be "base"+0x206 "idex=base,ctl" : specify both base and ctl "idex=base,ctl,irq" : specify base, ctl, and irq number "idex=autotune" : driver will attempt to tune interface speed to the fastest PIO mode supported, for all drives on this interface. Not fully supported by all chipset types, and quite likely to cause trouble with older/odd IDE drives. "idex=noautotune" : driver will NOT attempt to tune interface speed This is the default for most chipsets, except the cmd640. "idex=serialize" : do not overlap operations on idex and ide(x^1) "idex=reset" : reset interface after probe "idex=dma" : automatically configure/use DMA if possible. The following are valid ONLY on ide0, and the defaults for the base,ctl ports must not be altered. "ide0=dtc2278" : probe/support DTC2278 interface "ide0=ht6560b" : probe/support HT6560B interface "ide0=cmd640_vlb" : *REQUIRED* for VLB cards with the CMD640 chip (not for PCI -- automatically detected) "ide0=qd6580" : probe/support qd6580 interface "ide0=ali14xx" : probe/support ali14xx chipsets (ALI M1439/M1445) "ide0=umc8672" : probe/support umc8672 chipsets There may be more options than shown -- use the source, Luke! Everything else is rejected with a "BAD OPTION" message. ================================================================================ Some Terminology ---------------- IDE = Integrated Drive Electronics, meaning that each drive has a built-in controller, which is why an "IDE interface card" is not a "controller card". IDE drives are designed to attach almost directly to the ISA bus of an AT-style computer. The typical IDE interface card merely provides I/O port address decoding and tri-state buffers, although several newer localbus cards go much beyond the basics. When purchasing a localbus IDE interface, avoid cards with an onboard BIOS and those which require special drivers. Instead, look for a card which uses hardware switches/jumpers to select the interface timing speed, to allow much faster data transfers than the original 8MHz ISA bus allows. ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American National Standard for connecting hard drives to PCs. This is the official name for "IDE". The latest standards define some enhancements, known as the ATA-2 spec, which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations. ATAPI = ATA Packet Interface, a new protocol for controlling the drives, similar to SCSI protocols, created at the same time as the ATA2 standard. ATAPI is currently used for controlling CDROM and TAPE devices, and will likely also soon be used for Floppy drives, removable R/W cartridges, and for high capacity hard disk drives. How To Use *Big* ATA/IDE drives with Linux ------------------------------------------ The ATA Interface spec for IDE disk drives allows a total of 28 bits (8 bits for sector, 16 bits for cylinder, and 4 bits for head) for addressing individual disk sectors of 512 bytes each (in "Linear Block Address" (LBA) mode, there is still only a total of 28 bits available in the hardware). This "limits" the capacity of an IDE drive to no more than 128GB (Giga-bytes). All current day IDE drives are somewhat smaller than this upper limit, and within a few years, ATAPI disk drives will raise the limit considerably. All IDE disk drives "suffer" from a "16-heads" limitation: the hardware has only a four bit field for head selection, restricting the number of "physical" heads to 16 or less. Since the BIOS usually has a 63 sectors/track limit, this means that all IDE drivers larger than 504MB (528Meg) must use a "physical" geometry with more than 1024 cylinders. (1024cyls * 16heads * 63sects * 512bytes/sector) / (1024 * 1024) == 504MB (Some BIOSs (and controllers with onboard BIOS) pretend to allow "32" or "64" heads per drive (discussed below), but can only do so by playing games with the real (hidden) geometry, which is always limited to 16 or fewer heads). This presents two problems to most systems: 1. The INT13 interface to the BIOS only allows 10-bits for cylinder addresses, giving a limit of 1024cyls for programs which use it. 2. The physical geometry fields of the disk partition table only allow 10-bits for cylinder addresses, giving a similar limit of 1024 cyls for operating systems that do not use the "sector count" fields instead of the physical Cyl/Head/Sect (CHS) geometry fields. Neither of these limitations affects Linux itself, as it (1) does not use the BIOS for disk access, and it (2) is clever enough to use the "sector count" fields of the partition table instead of the physical CHS geometry fields. a) Most folks use LILO to load linux. LILO uses the INT13 interface to the BIOS to load the kernel at boot time. Therefore, LILO can only load linux if the files it needs (usually just the kernel images) are located below the magic 1024 cylinder "boundary" (more on this later). b) Many folks also like to have bootable DOS partitions on their drive(s). DOS also uses the INT13 interface to the BIOS, not only for booting, but also for operation after booting. Therefore, DOS can normally only access partitions which are contained entirely below the magic 1024 cylinder "boundary". There are at least seven commonly used schemes for kludging DOS to work around this "limitation". In the long term, the problem is being solved by introduction of an alternative BIOS interface that does not have the same limitations as the INT13 interface. New versions of DOS are expected to detect and use this interface in systems whose BIOS provides it. But in the present day, alternative solutions are necessary. The most popular solution in newer systems is to have the BIOS shift bits between the cylinder and head number fields. This is activated by entering a translated logical geometry into the BIOS/CMOS setup for the drive. Thus, if the drive has a geometry of 2100/16/63 (CHS), then the BIOS could present a "logical" geometry of 525/64/63 by "shifting" two bits from the cylinder number into the head number field for purposes of the partition table, CMOS setup, and INT13 interfaces. Linux kernels 1.1.39 and higher detect and "handle" this translation automatically, making this a rather painless solution for the 1024 cyls problem. If for some reason Linux gets confused (unlikely), then use the kernel command line parameters to pass the *logical* geometry, as in: hda=525,64,63 If the BIOS does not support this form of drive translation, then several options remain, listed below in order of popularity: - use a partition below the 1024 cyl boundary to hold the linux boot files (kernel images and /boot directory), and place the rest of linux anywhere else on the drive. These files can reside in a DOS partition, or in a tailor-made linux boot partition. - use DiskManager software from OnTrack, supplied free with many new hard drive purchases. - use EZ-Drive software (similar to DiskManager). Note though, that LILO must *not* use the MBR when EZ-Drive is present. Instead, install LILO on the first sector of your linux partition, and mark it as "active" or "bootable" with fdisk. - boot from a floppy disk instead of the hard drive (takes 10 seconds). If you cannot use drive translation, *and* your BIOS also restricts you to entering no more than 1024 cylinders in the geometry field in the CMOS setup, then just set it to 1024. As of v3.5 of this driver, Linux automatically determines the *real* number of cylinders for fdisk to use, allowing easy access to the full disk capacity without having to fiddle around. Regardless of what you do, all DOS partitions *must* be contained entirely within the first 1024 logical cylinders. For a 1Gig WD disk drive, here's a good "half and half" partitioning scheme to start with: geometry = 2100/16/63 /dev/hda1 from cyl 1 to 992 dos /dev/hda2 from cyl 993 to 1023 swap /dev/hda3 from cyl 1024 to 2100 linux To ensure that LILO can boot linux, the boot files (kernel and /boot/*) must reside within the first 1024 cylinders of the drive. If your linux root partition is *not* completely within the first 1024 cyls (quite common), then you can use LILO to boot linux from files on your DOS partition by doing the following after installing Slackware (or whatever): 0. Boot from the "boot floppy" created during the installation 1. Mount your DOS partition as /dos (and stick it in /etc/fstab) 2. Move /boot to /dos/boot with: cp -a /boot /dos ; rm -r /boot 3. Create a symlink for LILO to use with: ln -s /dos/boot /boot 4. Move your kernel (/vmlinuz) to /boot/vmlinuz: mv /vmlinuz /boot 5. Edit /etc/lilo.conf to change /vmlinuz to /boot/vmlinuz 6. Re-run LILO with: lilo A danger with this approach is that whenever an MS-DOS "defragmentation" program is run (like Norton "speeddisk"), it may move the Linux boot files around, confusing LILO and making the (Linux) system unbootable. Be sure to keep a kernel "boot floppy" at hand for such circumstances. A possible workaround is to mark the Linux files as S+H+R (System, Hidden, Readonly), to prevent most defragmentation programs from moving the files around. If you "don't do DOS", then partition as you please, but remember to create a small partition to hold the /boot directory (and vmlinuz) as described above such that they stay within the first 1024 cylinders. Note that when creating partitions that span beyond cylinder 1024, Linux fdisk will complain about "Partition X has different physical/logical endings" and emit messages such as "This is larger than 1024, and may cause problems with some software". Ignore this for linux partitions. The "some software" refers to DOS, the BIOS, and LILO, as described previously. Western Digital ships a "DiskManager 6.03" diskette with all of their big hard drives. Use BIOS translation instead of this if possible, as it is a more generally compatible method of achieving the same results (DOS access to the entire disk). However, if you must use DiskManager, it now works with Linux 1.3.x in most cases. Let me know if you still have trouble. My recommendations to anyone who asks about NEW systems are: - buy a motherboard that uses the Intel Triton chipset -- very common. - use IDE for the first two drives, placing them on separate interfaces. - very fast 7200rpm drives are now available (though many problems have been reported with Seagate ones). - place the IDE cdrom drive as slave on either interface. - if additional disks are to be connected, consider your needs: - fileserver? Buy a SC200 SCSI adaptor for the next few drives. - personal system? Use IDE for the next two drives. - still not enough? Keep adding SC200 SCSI cards as needed. Most manufacturers make both IDE and SCSI versions of each of their drives. The IDE ones are usually as fast and cheaper, due to lower command overhead and the higher data transfer speed of UDMA2. But fast/ultrawide/superlative SCSI is still king of the heap, especially for servers, if you've got the bucks. mlord@pobox.com -- For current maintainers of this stuff, see the linux/MAINTAINERS file. Using the initial RAM disk (initrd) =================================== Written 1996 by Werner Almesberger and Hans Lermen initrd adds the capability to load a RAM disk by the boot loader. This RAM disk can then be mounted as the root file system and programs can be run from it. Afterwards, a new root file system can be mounted from a different device. The previous root (from initrd) is then either moved to the directory /initrd or it is unmounted. initrd is mainly designed to allow system startup to occur in two phases, where the kernel comes up with a minimum set of compiled-in drivers, and where additional modules are loaded from initrd. Operation --------- When using initrd, the system boots as follows: 1) the boot loader loads the kernel and the initial RAM disk 2) the kernel converts initrd into a "normal" RAM disk and frees the memory used by initrd 3) initrd is mounted read-write as root 4) /linuxrc is executed (this can be any valid executable, including shell scripts; it is run with uid 0 and can do basically everything init can do) 5) when linuxrc terminates, the "real" root file system is mounted 6) if a directory /initrd exists, the initrd is moved there otherwise, initrd is unmounted 7) the usual boot sequence (e.g. invocation of /sbin/init) is performed on the root file system Note that moving initrd from / to /initrd does not involve unmounting it. It is therefore possible to leave processes running on initrd (or leave file systems mounted, but see below) during that procedure. However, if /initrd doesn't exist, initrd can only be unmounted if it is not used by anything. If it can't be unmounted, it will stay in memory. Also note that file systems mounted under initrd continue to be accessible, but their /proc/mounts entries are not updated. Also, if /initrd doesn't exist, initrd can't be unmounted and will "disappear" and take those file systems with it, thereby preventing them from being re-mounted. It is therefore strongly suggested to generally unmount all file systems (except of course for the root file system, but including /proc) before switching from initrd to the "normal" root file system. In order to deallocate the memory used for the initial RAM disk, you have to execute freeramdisk (see 'Resources' below) after unmounting /initrd. Boot command-line options ------------------------- initrd adds the following new options: initrd= (LOADLIN only) Loads the specified file as the initial RAM disk. When using LILO, you have to specify the RAM disk image file in /etc/lilo.conf, using the INITRD configuration variable. noinitrd initrd data is preserved but it is not converted to a RAM disk and the "normal" root file system is mounted. initrd data can be read from /dev/initrd. Note that the data in initrd can have any structure in this case and doesn't necessarily have to be a file system image. This option is used mainly for debugging. Note that /dev/initrd is read-only and that it can only be used once. As soon as the last process has closed it, all data is freed and /dev/initrd can't be opened any longer. root=/dev/ram initrd is mounted as root, and /linuxrc is started. If no /linuxrc exists, the normal boot procedure is followed, with the RAM disk still mounted as root. This option is mainly useful when booting from a floppy disk. Compared to directly mounting an on-disk file system, the intermediate step of going via initrd adds a little speed advantage and it allows the use of a compressed file system. Also, together with LOADLIN you may load the RAM disk directly from CDROM or disk, hence having a floppyless boot from CD, e.g.: E:\loadlin E:\bzImage root=/dev/ram initrd=E:\rdimage Installation ------------ First, the "normal" root file system has to be prepared as follows: # mknod /dev/initrd b 1 250 # chmod 400 /dev/initrd # mkdir /initrd If the root file system is created during the boot procedure (i.e. if you're creating an install floppy), the root file system creation procedure should perform these operations. Note that neither /dev/initrd nor /initrd are strictly required for correct operation of initrd, but it is a lot easier to experiment with initrd if you have them, and you may also want to use /initrd to pass data to the "real" system. Second, the kernel has to be compiled with RAM disk support and with support for the initial RAM disk enabled. Also, at least all components needed to execute programs from initrd (e.g. executable format and file system) must be compiled into the kernel. Third, you have to create the RAM disk image. This is done by creating a file system on a block device and then by copying files to it as needed. With recent kernels, at least three types of devices are suitable for that: - a floppy disk (works everywhere but it's painfully slow) - a RAM disk (fast, but allocates physical memory) - a loopback device (the most elegant solution, but currently requires a modified mount) We'll describe the RAM disk method: 1) make sure you have a RAM disk device /dev/ram (block, major 1, minor 0) 2) create an empty file system of the appropriate size, e.g. # mke2fs -m0 /dev/ram 300 (if space is critical, you may want to use the Minix FS instead of Ext2) 3) mount the file system on an appropriate directory, e.g. # mount -t ext2 /dev/ram /mnt 4) create the console device: # mkdir /mnt/dev # mknod /mnt/dev/tty1 c 4 1 5) copy all the files that are needed to properly use the initrd environment. Don't forget the most important file, /linuxrc Note that /linuxrc's permissions must include "x" (execute). 6) unmount the RAM disk # umount /dev/ram 7) copy the image to a file # dd if=/dev/ram bs=1k count=300 of=/boot/initrd 8) deallocate the RAM disk # freeramdisk /dev/ram For experimenting with initrd, you may want to take a rescue floppy (e.g. rescue.gz from Slackware) and only add a symbolic link from /linuxrc to /bin/sh, e.g. # gunzip /dev/ram # mount -t minix /dev/ram /mnt # ln -s /bin/sh /mnt/linuxrc # umount /dev/ram # dd if=/dev/ram bs=1k count=1440 of=/boot/initrd # freeramdisk /dev/ram Finally, you have to boot the kernel and load initrd. Currently, preliminary versions of LOADLIN 1.6 and LILO 18 support initrd (see below for where to get them). With LOADLIN, you simply execute LOADLIN initrd= e.g. LOADLIN C:\LINUX\VMLINUZ initrd=C:\LINUX\INITRD With LILO, you add the option INITRD= to either the global section or to the section of the respective kernel in /etc/lilo.conf, e.g. image = /vmlinuz initrd = /boot/initrd and run /sbin/lilo Now you can boot and enjoy using initrd. Setting the root device ----------------------- By default, the standard settings in the kernel are used for the root device, i.e. the default compiled in or set with rdev, or what was passed with root=xxx on the command line, or, with LILO, what was specified in /etc/lilo.conf It is also possible to use initrd with an NFS-mounted root; you have to use the nfs_root_name and nfs_root_addrs boot options for this. It is also possible to change the root device from within the initrd environment. In order to do so, /proc has to be mounted. Then, the following files are available: /proc/sys/kernel/real-root-dev /proc/sys/kernel/nfs-root-name /proc/sys/kernel/nfs-root-addrs real-root-dev can be changed by writing the number of the new root FS device to it, e.g. # echo 0x301 >/proc/sys/kernel/real-root-dev for /dev/hda1. When using an NFS-mounted root, nfs-root-name and nfs-root-addrs have to be set accordingly and then real-root-dev has to be set to 0xff, e.g. # echo /var/nfsroot >/proc/sys/kernel/nfs-root-name # echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \ >/proc/sys/kernel/nfs-root-addrs # echo 255 >/proc/sys/kernel/real-root-dev If the root device is set to the RAM disk, the root file system is not moved to /initrd, but the boot procedure is simply continued by starting init on the initial RAM disk. Usage scenarios --------------- The main motivation for implementing initrd was to allow for modular kernel configuration at system installation. The procedure would work as follows: 1) systems boots from floppy or other media with a minimal kernel (e.g. support for RAM disks, initrd, a.out, and the ext2 FS) and loads initrd 2) /linuxrc determines what is needed to (1) mount the "real" root FS (i.e. device type, device drivers, file system) and (2) the distribution media (e.g. CD-ROM, network, tape, ...). This can be done by asking the user, by auto-probing, or by using a hybrid approach. 3) /linuxrc loads the necessary modules 4) /linuxrc creates and populates the root file system (this doesn't have to be a very usable system yet) 5) /linuxrc unmounts the root file system and possibly any other file systems it has mounted, sets /proc/sys/kernel/..., and terminates 6) the root file system is mounted 7) now that we're sure that the file system is accessible and intact, the boot loader can be installed 8) the boot loader is configured to load an initrd with the set of modules that was used to bring up the system (e.g. /initrd can be modified, then unmounted, and finally, the image is written from /dev/ram to a file) 9) now the system is bootable and additional installation tasks can be performed The key role of initrd here is to re-use the configuration data during normal system operation without requiring the use of a bloated "generic" kernel or re-compilation or re-linking of the kernel. A second scenario is for installations where Linux runs on systems with different hardware configurations in a single administrative domain. In such cases, it is desirable to generate only a small set of kernels (ideally only one) and to keep the system-specific part of configuration information as small as possible. In this case, a common initrd could be generated with all the necessary modules. Then, only /linuxrc or a file read by it would have to be different. A third scenario are more convenient recovery disks, because information like the location of the root FS partition doesn't have to be provided at boot time, but the system loaded from initrd can use a user-friendly dialog and it can also perform some sanity checks (or even some form of auto-detection). Last not least, CDROM distributors may use it for better installation from CD, either using a LILO boot floppy and bootstrapping a bigger RAM disk via initrd from CD, or using LOADLIN to directly load the RAM disk from CD without need of floppies. Since initrd is a fairly generic mechanism, it is likely that additional uses will be found. Resources --------- The bzImage+initrd patch (bzImage is an extension to load kernels directly above 1 MB, which allows kernels sizes of up to approximately 2 MB) can be found at ftp://lrcftp.epfl.ch/pub/people/almesber/lilo/bzImage+initrd-1.3.71.patch.gz and ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/bzImage+initrd-1.3.71.patch.gz A preliminary version of LOADLIN 1.6 is available on ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/loadlin-1.6-pre8-bin.tgz A preliminary version of LILO 18 is available on ftp://lrcftp.epfl.ch/pub/people/almesber/lilo/lilo.18dev3.tar.gz A very simple example for building an image for initrd, also including the program 'freeramdisk', can be found on ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz Most (all) Intel SMP boards have the so-called 'IO-APIC', which is an enhanced interrupt controller, able to route hardware interrupts to multiple CPUs, or to CPU groups. Linux supports the IO-APIC, but unfortunately there are broken boards out there which make it unsafe to enable the IO-APIC unconditionally. The Linux policy thus is to enable the IO-APIC only if it's 100% safe, ie.: - the board is on the 'whitelist' or - the board does not have PCI pins connected to the IO-APIC or - the user has overridden blacklisted settings with the pirq= boot option line. Kernel messages tell you whether the board is 'safe'. If your box boots with enabled IO-APIC IRQs, then you have nothing else to do. Your /proc/interrupts will look like this one: ----------------------------> hell:~> cat /proc/interrupts CPU0 CPU1 0: 90782 0 XT PIC timer 1: 4135 2375 IO-APIC keyboard 2: 0 0 XT PIC cascade 3: 851 807 IO-APIC serial 9: 6 22 IO-APIC ncr53c8xx 11: 307 154 IO-APIC NE2000 13: 4 0 XT PIC fpu 14: 56000 30610 IO-APIC ide0 NMI: 0 IPI: 0 <---------------------------- some interrupts will still be 'XT PIC', but this is not a problem, none of those IRQ sources is 'heavy'. If one of your boot messages says 'unlisted/blacklisted board, DISABLING IO-APIC IRQs', then you should do this to get multi-CPU IO-APIC IRQs running: A) if your board is unlisted, then mail to linux-smp to get it into either the white or the blacklist B) if your board is blacklisted, then figure out the appropriate pirq= option to get your system to boot pirq= lines look like the following in /etc/lilo.conf: append="pirq=15,11,10" the actual numbers depend on your system, on your PCI cards and on their PCI slot position. Usually PCI slots are 'daisy chained' before they are connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4 lines): ,-. ,-. ,-. ,-. ,-. PIRQ4 ----| |-. ,-| |-. ,-| |-. ,-| |--------| | |S| \ / |S| \ / |S| \ / |S| |S| PIRQ3 ----|l|-. `/---|l|-. `/---|l|-. `/---|l|--------|l| |o| \/ |o| \/ |o| \/ |o| |o| PIRQ2 ----|t|-./`----|t|-./`----|t|-./`----|t|--------|t| |1| /\ |2| /\ |3| /\ |4| |5| PIRQ1 ----| |- `----| |- `----| |- `----| |--------| | `-' `-' `-' `-' `-' every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD: ,-. INTD--| | |S| INTC--|l| |o| INTB--|t| |x| INTA--| | `-' These INTA-D PCI IRQs are always 'local to the card', their real meaning depends on which slot they are in. If you look at the daisy chaining diagram, a card in slot4, issuing INTA IRQ, it will end up as a signal on PIRQ2 of the PCI chipset. Most cards issue INTA, this creates optimal distribution between the PIRQ lines. (distributing IRQ sources properly is not a necessity, PCI IRQs can be shared at will, but it's a good for performance to have non shared interrupts). Slot5 should be used for videocards, they do not use interrupts normally, thus they are not daisy chained either. so if you have your SCSI card (IRQ11) in Slot1, Tulip card (IRQ9) in Slot2, then you'll have to specify this pirq= line: append="pirq=11,9" the following script tries to figure out such a default pirq= line from your PCI configuration: echo -n pirq=; echo `scanpci | grep T_L | cut -c56-` | sed 's/ /,/g' note that this script wont work if you have skipped a few slots or if your board does not do default daisy-chaining. (or the IO-APIC has the PIRQ pins connected in some strange way). E.g. if in the above case you have your SCSI card (IRQ11) in Slot3, and have Slot1 empty: append="pirq=0,9,11" [value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting) slots.] generally, it's always possible to find out the correct pirq= settings, just permute all IRQ numbers properly ... it will take some time though. An 'incorrect' pirq line will cause the booting process to hang, or a device won't function properly (if it's inserted as eg. a module). If you have 2 PCI buses, then you can use up to 8 pirq values. Although such boards tend to have a good configuration and will be included in the whitelist. Be prepared that it might happen that you need some strange pirq line: append="pirq=0,0,0,0,0,0,9,11" use smart try-and-err techniques to find out the correct pirq line ... the following pirq line can be used to force a board into the whitelist: append="pirq=0" [if your system works with no problems after this, then it should be added to the official whitelist, contact us] good luck and mail to linux-smp@vger.rutgers.edu or linux-kernel@vger.rutgers.edu if you have any problems that are not covered by this document. -- mingo [ This is a mail message in response to a query on IO mapping, thus the strange format for a "document" ] The AHA-1542 is a bus-master device, and your patch makes the driver give the controller the physical address of the buffers, which is correct on x86 (because all bus master devices see the physical memory mappings directly). However, on many setups, there are actually _three_ different ways of looking at memory addresses, and in this case we actually want the third, the so-called "bus address". Essentially, the three ways of addressing memory are (this is "real memory", that is, normal RAM--see later about other details): - CPU untranslated. This is the "physical" address. Physical address 0 is what the CPU sees when it drives zeroes on the memory bus. - CPU translated address. This is the "virtual" address, and is completely internal to the CPU itself with the CPU doing the appropriate translations into "CPU untranslated". - bus address. This is the address of memory as seen by OTHER devices, not the CPU. Now, in theory there could be many different bus addresses, with each device seeing memory in some device-specific way, but happily most hardware designers aren't actually actively trying to make things any more complex than necessary, so you can assume that all external hardware sees the memory the same way. Now, on normal PCs the bus address is exactly the same as the physical address, and things are very simple indeed. However, they are that simple because the memory and the devices share the same address space, and that is not generally necessarily true on other PCI/ISA setups. Now, just as an example, on the PReP (PowerPC Reference Platform), the CPU sees a memory map something like this (this is from memory): 0-2 GB "real memory" 2 GB-3 GB "system IO" (inb/out and similar accesses on x86) 3 GB-4 GB "IO memory" (shared memory over the IO bus) Now, that looks simple enough. However, when you look at the same thing from the viewpoint of the devices, you have the reverse, and the physical memory address 0 actually shows up as address 2 GB for any IO master. So when the CPU wants any bus master to write to physical memory 0, it has to give the master address 0x80000000 as the memory address. So, for example, depending on how the kernel is actually mapped on the PPC, you can end up with a setup like this: physical address: 0 virtual address: 0xC0000000 bus address: 0x80000000 where all the addresses actually point to the same thing. It's just seen through different translations.. Similarly, on the Alpha, the normal translation is physical address: 0 virtual address: 0xfffffc0000000000 bus address: 0x40000000 (but there are also Alphas where the physical address and the bus address are the same). Anyway, the way to look up all these translations, you do #include phys_addr = virt_to_phys(virt_addr); virt_addr = phys_to_virt(phys_addr); bus_addr = virt_to_bus(virt_addr); virt_addr = bus_to_virt(bus_addr); Now, when do you need these? You want the _virtual_ address when you are actually going to access that pointer from the kernel. So you can have something like this: /* * this is the hardware "mailbox" we use to communicate with * the controller. The controller sees this directly. */ struct mailbox { __u32 status; __u32 bufstart; __u32 buflen; .. } mbox; unsigned char * retbuffer; /* get the address from the controller */ retbuffer = bus_to_virt(mbox.bufstart); switch (retbuffer[0]) { case STATUS_OK: ... on the other hand, you want the bus address when you have a buffer that you want to give to the controller: /* ask the controller to read the sense status into "sense_buffer" */ mbox.bufstart = virt_to_bus(&sense_buffer); mbox.buflen = sizeof(sense_buffer); mbox.status = 0; notify_controller(&mbox); And you generally _never_ want to use the physical address, because you can't use that from the CPU (the CPU only uses translated virtual addresses), and you can't use it from the bus master. So why do we care about the physical address at all? We do need the physical address in some cases, it's just not very often in normal code. The physical address is needed if you use memory mappings, for example, because the "remap_page_range()" mm function wants the physical address of the memory to be remapped (the memory management layer doesn't know about devices outside the CPU, so it shouldn't need to know about "bus addresses" etc). NOTE NOTE NOTE! The above is only one part of the whole equation. The above only talks about "real memory", that is, CPU memory (RAM). There is a completely different type of memory too, and that's the "shared memory" on the PCI or ISA bus. That's generally not RAM (although in the case of a video graphics card it can be normal DRAM that is just used for a frame buffer), but can be things like a packet buffer in a network card etc. This memory is called "PCI memory" or "shared memory" or "IO memory" or whatever, and there is only one way to access it: the readb/writeb and related functions. You should never take the address of such memory, because there is really nothing you can do with such an address: it's not conceptually in the same memory space as "real memory" at all, so you cannot just dereference a pointer. (Sadly, on x86 it _is_ in the same memory space, so on x86 it actually works to just deference a pointer, but it's not portable). For such memory, you can do things like - reading: /* * read first 32 bits from ISA memory at 0xC0000, aka * C000:0000 in DOS terms */ unsigned int signature = readl(0xC0000); - remapping and writing: /* * remap framebuffer PCI memory area at 0xFC000000, * size 1MB, so that we can access it: We can directly * access only the 640k-1MB area, so anything else * has to be remapped. */ char * baseptr = ioremap(0xFC000000, 1024*1024); /* write a 'A' to the offset 10 of the area */ writeb('A',baseptr+10); /* unmap when we unload the driver */ iounmap(baseptr); - copying and clearing: /* get the 6-byte Ethernet address at ISA address E000:0040 */ memcpy_fromio(kernel_buffer, 0xE0040, 6); /* write a packet to the driver */ memcpy_toio(0xE1000, skb->data, skb->len); /* clear the frame buffer */ memset_io(0xA0000, 0, 0x10000); OK, that just about covers the basics of accessing IO portably. Questions? Comments? You may think that all the above is overly complex, but one day you might find yourself with a 500 MHz Alpha in front of you, and then you'll be happy that your driver works ;) Note that kernel versions 2.0.x (and earlier) mistakenly called the ioremap() function "vremap()". ioremap() is the proper name, but I didn't think straight when I wrote it originally. People who have to support both can do something like: /* support old naming sillyness */ #if LINUX_VERSION_CODE < 0x020100 #define ioremap vremap #define iounmap vfree #endif at the top of their source files, and then they can use the right names even on 2.0.x systems. And the above sounds worse than it really is. Most real drivers really don't do all that complex things (or rather: the complexity is not so much in the actual IO accesses as in error handling and timeouts etc). It's generally not hard to fix drivers, and in many cases the code actually looks better afterwards: unsigned long signature = *(unsigned int *) 0xC0000; vs unsigned long signature = readl(0xC0000); I think the second version actually is more readable, no? Linus Ioctl Numbers 18 Feb 1998 Michael Chastain If you are adding new ioctl's to the kernel, you should use the _IO macros defined in : _IO an ioctl with no parameters _IOW an ioctl with write parameters (from user's point of view) _IOR an ioctl with read parameters (from user's point of view) _IOWR an ioctl with both write and read parameters. 'Write' and 'read' are from the user's point of view. This is like the system calls 'write' and 'read'. For example, a SET_FOO ioctl would be _IOW, although the kernel would actually read data from user space; a GET_FOO ioctl would be _IOR, although the kernel would actually write data to user space. The first argument to _IO, _IOW, _IOR, or _IOWR is an identifying letter or number from the table below. If you are writing a driver for a new device and need a letter, pick an unused letter. You can register the letter by patching this file and submitting the patch to Linus Torvalds. Or you can e-mail me at and I'll register one for you. The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number to distinguish ioctls from each other. The third argument is the size of the structure going into the kernel or coming out of the kernel. Some devices use their major number as the identifier; this is not recommended. Some devices are even more irregular and don't follow the convention at all. Following the convention is good because: (1) Keeping the ioctl's globally unique helps error checking: if a program calls an ioctl on the wrong device, it will get an error rather than some unexpected behaviour. (2) The 'strace' build procedure automatically finds ioctl numbers defined with _IO, _IOW, _IOR, or _IOWR. (3) 'strace' can decode numbers back into useful names when the numbers are unique. (4) People looking for ioctls can grep for them more easily when the convention is used to define the ioctl numbers. (5) When following the convention, the driver code can use generic code to call verify_area to validate parameters. This table lists ioctls visible from user land for Linux/i386. It is current to Linux 2.1.15. Code Seq# Include File Comments ======================================================== 0x00 01-02 linux/fs.h conflict! 0x00 01-04 scsi/scsi_ioctl.h conflict! 0x02 all linux/fd.h 0x03 all linux/hdreg.h 0x04 all linux/umsdos_fs.h 0x06 all linux/lp.h 0x09 all linux/md.h 0x12 all linux/fs.h 0x20 all linux/cm206.h 0x22 all scsi/sg.h 'A' all linux/apm_bios.h 'C' all linux/soundcard.h 'F' all linux/fb.h 'I' all linux/isdn.h 'K' all linux/kd.h 'L' all linux/loop.h 'M' all linux/soundcard.h 'P' all linux/soundcard.h 'Q' all linux/soundcard.h 'R' all linux/random.h 'S' 00-7F linux/cdrom.h 'S' 80-81 scsi/scsi_ioctl.h 'S' 82-FF scsi/scsi.h 'T' all linux/soundcard.h conflict! 'T' all asm-i386/ioctls.h conflict! 'V' all linux/vt.h 'W' 00-1F linux/router.h conflict [Please reallocate] 'W' 00-1F linux/watchdog.h 'W' 20-27 linux/octal-relay.h in development 'W' 28-2F linux/iso16-relay.h in development 'Y' all linux/cyclades.h 'a' all various, see http://lrcwww.epfl.ch/linux-atm/magic.html 'b' 00-FF bit3 vme host bridge in development: 'c' all linux/comstats.h 'f' all linux/ext2_fs.h 'j' 00-3F linux/joystick.h 'k' all asm-sparc/kbio.h, asm-sparc64/kbio.h 'l' 00-3F linux/tcfs_fs.h in development: 'm' all linux/mtio.h conflict! 'm' all linux/soundcard.h conflict! 'n' all linux/ncp_fs.h 'p' 00-3F linux/mc146818rtc.h 'p' 40-7F linux/nvram.h 'p' 80-9F user-space parport in development: 'r' all linux/msdos_fs.h 's' all linux/cdk.h 't' 00-7F linux/if_ppp.h 't' 80-8F linux/isdn_ppp.h 'u' all linux/smb_fs.h 'v' all linux/ext2_fs.h 'w' all CERN SCI driver in development 'z' 00-3F CAN bus card in development: 'z' 40-7F CAN bas card in development: 0x89 00-0F asm-i386/sockios.h 0x89 10-DF linux/sockios.h 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range 0x8B all linux/wireless.h 0x8C 00-3F WiNRADiO driver in development: 0x90 00 linux/sbpcd.h 0x93 60-7F linux/auto_fs.h 0x99 00-0F 537-Addinboard driver in development: 0xA0 all Small Device Project in development: 0xA3 80-8F Port ACL in development: 0xA3 90-9F DoubleTalk driver in development: 0xAB 00-06 Network block device Java(tm) Binary Kernel Support for Linux v1.02 ---------------------------------------------- Linux beats them ALL! While all other OS's are TALKING about direct support of Java Binaries in the OS, Linux is doing it! You can execute Java applications and Java Applets just like any other program after you have done the following: 1) You MUST FIRST install the Java Developers Kit for Linux. The Java on Linux HOWTO gives the details on getting and installing this. This HOWTO can be found at: ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Java-HOWTO You should also set up a reasonable CLASSPATH environment variable to use Java applications that make use of any nonstandard classes (not included in the same directory as the application itself). 2) You have to compile BINFMT_MISC either as a module or into the kernel (CONFIG_BINFMT_MISC) and set it up properly. If you choose to compile it as a module, you will have to insert it manually with modprobe/insmod, as kerneld can not easy be supported with binfmt_misc. Read the file 'binfmt_misc.txt' in this directory to know more about the configuration process. 3) Add the following configuration items to binfmt_misc (you should really have read binfmt_misc.txt now): support for Java applications: ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' support for Java Applets: ':Applet:E::html::/usr/local/java/bin/appletviewer:' or the following, if you want to be more selective: ':Applet:M:: in the first line ('<' has to be the first character!) to let this work! For the compiled Java programs you need a wrapper script like the following (this is because Java is broken in case of the filename handling), again fix the path names, both in the script and in the above given configuration string: ====================== Cut here =================== #!/bin/bash # /usr/local/java/bin/javawrapper - the wrapper for binfmt_misc/java CLASS=$1 # if classname is a link, we follow it (this could be done easier - how?) if [ -L "$1" ] ; then CLASS=`ls --color=no -l $1 | tr -s '\t ' ' ' | cut -d ' ' -f 11` fi CLASSN=`basename $CLASS .class` CLASSP=`dirname $CLASS` FOO=$PATH PATH=$CLASSPATH if [ -z "`type -p -a $CLASSN.class`" ] ; then # class is not in CLASSPATH if [ -e "$CLASSP/$CLASSN.class" ] ; then # append dir of class to CLASSPATH if [ -z "${CLASSPATH}" ] ; then export CLASSPATH=$CLASSP else export CLASSPATH=$CLASSP:$CLASSPATH fi else # uh! now we would have to create a symbolic link - really # ugly, i.e. print a message that one has to change the setup echo "Hey! This is not a good setup to run $1 !" exit 1 fi fi PATH=$FOO shift /usr/local/java/bin/java $CLASSN "$@" ====================== Cut here =================== Now simply chmod +x the .class and/or .html files you want to execute. To add a Java program to your path best put a symbolic link to the main .class file into /usr/bin (or another place you like) omitting the .class extension. The directory containing the original .class file will be added to your CLASSPATH during execution. To test your new setup, enter in the following simple Java app, and name it "HelloWorld.java": class HelloWorld { public static void main(String args[]) { System.out.println("Hello World!"); } } Now compile the application with: javac HelloWorld.java Set the executable permissions of the binary file, with: chmod 755 HelloWorld.class And then execute it: ./HelloWorld.class To execute Java Applets, simple chmod the *.html files to include the execution bit, then just do ./Applet.html originally by Brian A. Lantz, brian@lantz.com heavily edited for binfmt_misc by Richard Gnther. Linux Joystick driver v1.2.15 (c) 1996-1999 Vojtech Pavlik Sponsored by SuSE ---------------------------------------------------------------------------- 0. Disclaimer ~~~~~~~~~~~~~ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Should you need to contact me, the author, you can do so either by e-mail - mail your message to , or by paper mail: Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic For your convenience, the GNU General Public License version 2 is included in the package: See the file COPYING. 1. Intro ~~~~~~~~ The joystick driver for Linux provides support for a variety of joysticks and similar devices. These currently include various analog joysticks and gamepads (both variable resistor based and microswitch+resistor based), following IBM PC joystick standard, with extensions like additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. In addition to these it also supports some of the new PC joysticks that use proprietary digital protocols to communicate over the gameport, currently by FPGaming, Gravis, Logitech, MadCatz, Microsoft, Creative and ThrustMaster. Saitek protocol support is still to be done. The driver also includes support for many gamepads and joysticks that were used by various non-PC computers and game consoles. These include Multi system joysticks (Atari, Amiga, Commodore, Amstrad), Sega gamepads (Master System, Genesis, Saturn), Nintendo gamepads (NES, SNES, N64), Sony gamepads (PSX). Support for Atari Jaguar, Atari 2600, NES FourScore, SNES MultiTap and others might be added later. Last, but not least there is also native Amiga joystick support for the Amiga Linux port. Should you encounter any problems while using the driver, or joysticks this driver can't make complete use of, I'm very interested in hearing about them. Bug reports and success stories are also welcome. The joystick package is available at the following FTP sites: ftp://ftp.suse.cz/pub/development/joystick/ ftp://atrey.karlin.mff.cuni.cz/pub/linux/joystick/ ftp://ftp.gts.cz/pub/linux/joystick/ And a homepage of the driver is at: http://www.suse.cz/development/joystick/ http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/ http://www.trylinux.com/projects/joystick/ http://www.linuxgames.com/joystick/ There is also a mailing list for the driver at: listproc@atrey.karlin.mff.cuni.cz send "subscribe linux-joystick Your Name" to subscribe to it. 2. Usage ~~~~~~~~ You could have obtained this driver in two different ways - either in the joystick package or in the kernel. Because, for successful usage of the joysticks, the utilities in the package are useful, maybe necessary, and definitely recommended, I suggest you getting the package at some of the above mentioned locations. The rest of this file assumes you have it. 2.1 Compiling the driver package ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To compile the utilities in the joystick package, and the driver itself, as a standalone module, you first unpack the package, and then edit the Makefile to meet your needs (namely whether are you using versioned modules). You will also need an unpacked and configured make config kernel in /usr/src/linux Furthermore, if you're using versioned modules, you'll also need make dep done on the kernel, to create some needed files. After that, you compile the joystick driver make And after that you install it make install In case you have not used the driver before, you'll need to create the joystick device files in /dev so that applications can use them: make devs For manual creation of the joystick devices, check the Documentation/devices.txt file in the Linux source tree. Should you not want to mess with the kernel, and just use the driver standalone, as modules, skip the next two sections, proceeding right to 2.4, because all you need is already done. 2.2 Patching the kernel ~~~~~~~~~~~~~~~~~~~~~~~ If you already have the most recent joystick driver in your kernel, skip this section. If not, you need to patch the kernel, so that it contains the current driver version. You do that with a command: patch -Esp1 < /usr/src/joystick-1.2.x/kernel-2.x.y.diff in /usr/src/linux 2.3 Compiling the kernel ~~~~~~~~~~~~~~~~~~~~~~~~ To compile joystick support into the kernel, use the kernel configuration scripts, and answer 'Y' to Joystick support and also to at least one of the hardware specific options. After doing something like make bzlilo you are done with the driver installation. Just reboot and the driver should find all the connected joysticks. Read the notes about the hardware specific drivers later in this file, though. You can also compile the driver as modules, answering 'M' to all joystick support you want to have modules for. It is possible to have the main joystick driver compiled into the kernel and the hardware dependent drivers as modules. After you compile the modules make modules And install them make modules_install you're set, and can proceed to the next step. 2.4 Inserting the modules into the kernel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ After installing the modules you'll first need to insert the generic joystick driver module into the kernel insmod joystick and then one or more of the hardware specific modules insmod joy-something where 'something' is the type of your joystick. See below for more precise explanation. Alternately you can add the lines alias char-major-15 joy-something options joy-something js_xx=x,x,x,x,... to the /etc/conf.modules file, so that the joystick module will be loaded automatically when the /dev/js devices are accessed. 2.5 Verifying that it works ~~~~~~~~~~~~~~~~~~~~~~~~~~~ For testing the joystick driver functionality, there is the jstest program. You run it by typing: jstest /dev/js0 And it should show a line with the joystick values, which update as you move the stick, and press its buttons. The axes should all be zero when the joystick is in the center position. They should not jitter by themselves to other close values, and they also should be steady in any other position of the stick. They should have the full range from -32767 to 32767. If all this is met, then it's all fine, and you can play the games. :) If it's not, then there might be a problem. Try to calibrate the joystick, and if it still doesn't work, read the drivers section of this file, the troubleshooting section, and the FAQ. 2.6. Calibration ~~~~~~~~~~~~~~~~ For most joysticks you won't need any manual calibration, since the joystick should be autocalibrated by the driver automagically. However, with some analog joysticks, that either do not use linear resistors, or if you want better precision, you can use the jscal program jscal -c /dev/js0 included in the joystick package to set better correction coefficients than what the driver would choose itself. After calibrating the joystick you can verify if you like the new calibration using the jstest command, and if you do, you then can save the correction coefficients into a file jscal -p /dev/js0 > /etc/joystick.cal And add a line to your rc script executing that file source /etc/joystick.cal This way, after the next reboot your joystick will remain calibrated. You can also add the jscal -p line to your shutdown script. 3. HW specific driver information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In this section each of the separate hardware specific drivers is described. 3.1 Analog joysticks ~~~~~~~~~~~~~~~~~~~~ The joy-analog.c uses the standard analog inputs of the gameport, and thus supports all standard joysticks and gamepads. It also supports extensions like additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. However the only types that can be autodetected are: * 2-axis, 4-button joystick * 3-axis, 4-button joystick * 4-axis, 4-button joystick For other joystick types (more/less axes, hats, and buttons) support you'll need to specify the types either on the kernel command line or on the module command line, when inserting joy-analog.o into the kernel. The parameters are: js_an=p0,m0,n0,p1,m1,n1 ... Where 'p' is the port number, eg. 0x201, which is the standard address. 'm' and 'n' are joystick 0 and joystick 1 bitmasks for the specified joystick port. The bits in the bitmasks mean: Bit | 2^n | Meaning ---------------------------------- 0 | 1 | Axis X1 1 | 2 | Axis Y1 2 | 4 | Axis X2 3 | 8 | Axis Y2 4 | 16 | Button A 5 | 32 | Button B 6 | 64 | Button C 7 | 128 | Button D 8 | 256 | CHF Buttons X and Y 9 | 512 | CHF Hat 1 10 | 1024 | CHF Hat 2 11 | 2048 | FCS Hat 12 | 4096 | Pad Button X 13 | 8192 | Pad Button Y 14 | 16384 | Pad Button U 15 | 32768 | Pad Button V (CHF = CH Flightstick Pro, FCS = ThrustMaster FCS) Following is a table of joysticks for which the 'm' values are known. If you have any additions/corrections to it, e-mail me. Joystick | 'm' value ---------------------------------------------------- Simple 2-button 2-axis joystick | 0x0033 Second simple joystick on Y-cable | 0x00cc Genius Flight2000 F-12 | 0x00f3 Genius Flight2000 F-21 | 0x08f7 Genius Flight2000 F-22 | 0x02ff Genius GameHunter G-06 | 0xf0f3 Genius MaxFire G-07 | 0xf0f3 Genius PowerStation | 0xf0f3 Laing #1 PC SuperPad | 0xf0f3 Logitech Wingman | 0x003b Microsoft SideWinder Standard | 0x003b QuickShot QS-201 SuperWarrior | 0x00fb Saitek Megapad XII | 0x30f3 PC Powerpad Pro | 0x30f3 In case you have one of the joystick in the table below, and it doesn't work with a specific driver in digital mode for some reason, you can use them in analog mode with the joy-analog driver as well. However, digital operation is always better. Joystick | 'm' value ---------------------------------------------------- Gravis GamePad Pro - analog mode | 0x00f3 Genius Flight2000 F-23 | 0x02ff Microsoft SideWinder 3D Pro - CHF mode | 0x02ff Microsoft SideWinder 3D Pro - FCS mode | 0x08f7 An example that would configure the driver to use two two axis, two button joysticks connected to port 0x201, a single four button four axis joystick connected to port 0x202, a four axis, six button and two hat CHF compatible joystick on 0x203, and a two axis four button FCS compatible joystick with a single hat on 0x207: js_an=0x201,0x33,0xcc,0x202,0xff,0,0x203,0x7ff,0,0x207,0x8f3,0 If you can't sum bits into hex numbers in your head easily, you can simply sum the values in the 2^n column decimally and use that number instead. Using this method you'd get a command line: js_an=0x201,51,204,0x202,255,0,0x203,2047,0,0x207,2291,0 And it would do the same as the above explained command line. Use whichever way you like best. 3.2 Microsoft SideWinder joysticks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Microsoft 'Digital Overdrive' protocol is supported by the joy-sidewinder.c module. All currently supported joysticks: * SideWinder 3D Pro * SideWinder Force Feedback Pro * SideWinder Force Feedback Wheel * SideWinder FreeStyle Pro * SideWinder GamePad (up to four, chained together) * SideWinder Precision Pro are autodetected, and thus no module parameters are needed. There is one caveat with the 3D Pro. There are 9 buttons reported, although the joystick has only 8. The 9th button is the mode switch on the rear side of the joystick. However, moving it, you'll reset the joystick, and make it unresponsive for about a one third of a second. Furthermore, the joystick will also re-center itself, taking the position it was in during this time as a new center position. Use it if you want, but think first. The SideWinder Standard is not a digital joystick, and thus is supported by the analog driver described above. 3.3 Logitech ADI devices ~~~~~~~~~~~~~~~~~~~~~~~~ Logitech ADI protocol is supported by the joy-logitech.c module. It should support any Logitech device using this protocol. This includes, but is not limited to: * Logitech CyberMan 2 * Logitech ThunderPad Digital * Logitech WingMan Extreme Digital * Logitech WingMan Formula * Logitech WingMan Interceptor * Logitech WingMan GamePad * Logitech WingMan GamePad USB * Logitech WingMan GamePad Extreme * Logitech WingMan Extreme Digital 3D ADI devices are autodetected, and the driver supports up to two (any combination of) devices on a single gameport, using an Y-cable or chained together. Logitech WingMan Joystick, Logitech WingMan Attack, Logitech WingMan Extreme and Logitech WingMan ThunderPad are not digital joysticks and are handled by the analog driver described above. Logitech WingMan Warrior and Logitech Magellan are supported by serial drivers described below. Logitech CyberMan, Logitech WingMan Force and Logitech WingMan Formula Force are not supported yet. 3.4 Gravis GrIP ~~~~~~~~~~~~~~~ Gravis GrIP protocol is supported by the joy-gravis.c module. It currently supports: * Gravis GamePad Pro * Gravis Xterminator * Gravis BlackHawk Digital All these devices are autodetected, and you can even use any combination of up to two of these pads either chained together or using an Y-cable on a single gameport. GrIP MultiPort and Gravis Xterminator DualControl aren't supported yet. Gravis Stinger is a serial device and hopefully will be supported in the future. Other Gravis joysticks are supported by the joy-analog driver. 3.5 FPGaming A3D and MadCatz A3D ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Assassin 3D protocol created by FPGaming, is used both by FPGaming themselves and is licensed to MadCatz. A3D devices are supported by the joy-assassin.c module. It currently supports: * FPGaming Assassin 3D * MadCatz Panther * MadCatz Panther XL All these devices are autodetected. Because the Assassin 3D and the Panther allow connecting analog joysticks to them, these are supported in this driver, too. The driver uses the js_as parameter for the analog joysticks, which has the same syntax as js_an for the analog driver. The trackball support is far from perfect at this stage of development, but should be well usable. 3.6 ThrustMaster DirectConnect (BSP) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The TM DirectConnect (BSP) protocol is supported by the joy-thrustmaster.c module. This includes, but is not limited to: * ThrustMaster Millenium 3D Inceptor * ThrustMaster 3D Rage Pad * ThrustMaster Fusion Digital Game Pad Devices not directly supported, but hopefully working are: * ThrustMaster FragMaster * ThrustMaster Attack Throttle If you have one of these, contact me. BSP devices are autodetected, and thus no parameters to the module are needed. 3.7 Creative Labs Blaster ~~~~~~~~~~~~~~~~~~~~~~~~~ The Blaster protocol is supported by the joy-creative.c module. It currently supports only the: * Creative Blaster GamePad Cobra Up to two of these can be used on a single gameport, using an Y-cable. 3.8 PDPI Lightning 4 gamecards ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PDPI Lightning 4 gamecards are supported by the joy-lightning.c module. This driver is only for analog joysticks connected to the card - if you want to use some of the digital devices, you need to use its specific driver. The card will work in legacy mode with them, though. Since all features of analog joysticks can't be detected, this driver needs a command line: js_l4=p0,m0,n0,p1,m1,n1,.... As you can see, it's very similar to the analog drivers command line. Actually it is the same except for the meaning of p0. p0 in this case is the port the joystick is attached to: p | Port ---------------------------- 0 | Primary card, port 1 1 | Primary card, port 2 2 | Primary card, port 3 3 | Primary card, port 4 4 | Secondary card, port 1 5 | Secondary card, port 2 6 | Secondary card, port 3 7 | Secondary card, port 4 Two cards maximum are allowed in one system, because of the card's design. See the description of analog joystick driver for explanations of m0 and n0 values. 3.9 Trident 4DWave / Aureal Vortex ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Soundcards with a Trident 4DWave DX/NX or Aureal Vortex chipset provide an "Enhanced Game Port" mode where the soundcard handles polling the joystick. This mode is supported by the joy-pci module. If no module parameters are given, the joy-pci module will set all the soundcards it finds to "enhanced" mode, and will try to autodetect the type of attached joystick. It can only detect the same types of joysticks that the joy-analog module can. This module accepts parameters in the form: js_pci=t0,i0,m0,n0,t1,i1,m1,n1,.... The "t" value specifies the type of card, as follows: t | Card Type ---------------------------- 0 | Trident 4DWave DX 1 | Trident 4DWave NX 2 | Aureal Vortex1 (Au8820 chipset) 3 | Aureal Vortex2 (Au8830 chipset) If you have more than one card of the same type, the "i" parameter lets you choose which card to apply the "m" and "n" values to. It counts from "0". (The driver detects cards in the order listed in the above table.) The "m" and "n" values have the same meaning as for the analog module, with the exception that the value m=0, n=0 indicates that joy-pci should completely ignore that port. This can be useful to reserve a certain port for purely MIDI operation. For example, let's say you have 3 sound cards - a 4Dwave DX, a 4DWave NX, and a Vortex 2. You have a three-axis, four-button, one-hat CHF- compatible joystick on the DX. You use the NX to interface to an external MIDI device. Finally, you have two two-axis, two-button joysticks on the Vortex. Your command line might look like: js_pci=0,0,0x207,0,1,1,0,0,3,0,0x33,0xcc 3.10 Amiga ~~~~~~~~~~ Amiga joysticks, connected to an Amiga, are supported by the joy-amiga.c driver. Since they can't be autodetected, the driver has a command line. js_am=a,b a and b define the joysticks connected to the JOY0DAT and JOY1DAT ports of the Amiga. Value | Joystick type --------------------- 0 | None 1 | 1-button digital joystick No more joystick types are supported now, but that should change in the future if I get an Amiga in the reach of my fingers. 3.11 Game console and 8-bit pads and joysticks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ See joystick-parport.txt for more info. 3.12 SpaceTec/LabTec devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SpaceTec serial devices communicate using the SpaceWare protocol. It is supported by the joy-spaceorb and joy-spaceball drivers. The devices currently supported by joy-spaceorb are: * SpaceTec SpaceBall Avenger * SpaceTec SpaceOrb 360 Devices currently supported by joy-spaceball are: * SpaceTec SpaceBall 4000 FLX In addition to having the joy-spaceorb/spaceball module in the kernel, you also need to attach a serial port to it. to do that, run the jsattach program: jsattach --spaceorb /dev/ttySx & or jsattach --sball4 /dev/ttySx & where /dev/ttySx is the serial port which the device is connected to. After doing this, the device will be reported and will start working. There is one caveat with the SpaceOrb. The button #6, the on the bottom side of the orb, although reported as an ordinary button, causes internal recentering of the spaceorb, moving the zero point to the position in which the ball is at the moment of pressing the button. So, think first before you bind it to some other function. SpaceTec SpaceBall 2003 FLX and 3003 FLX are not supported yet. 3.13 Logitech SWIFT devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~ The SWIFT serial protocol is supported by the joy-warrior module. It currently supports only the: * Logitech WingMan Warrior but in the future, Logitech CyberMan (the original one, not CM2) could be supported as well. To use the module, you need to run jsattach after you insert/compile the module into your kernel: jsattach --warrior /dev/ttySx & ttySx is the serial port your Warrior is attached to. 3.14 Magellan / Space Mouse ~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Magellan (or Space Mouse), manufactured by LogiCad3d (formerly Space Systems), for many other companies (Logitech, HP, ...) is supported by the joy-magellan module. It currently supports only the: * Magellan 3D * Space Mouse models, the additional buttons on the 'Plus' versions are not supported yet. To use it, you need to attach the serial port to the driver using the jsattach --magellan /dev/ttySx & command. After that the Magellan will be detected, initialized, will beep, and the /dev/jsX device should become useable. 4. Troubleshooting ~~~~~~~~~~~~~~~~~~ There is quite a high probability that you run into some problems. For testing whether the driver works, if in doubt, use the jstest utility in some of its modes. The most useful modes are "normal" - for the 1.x interface, and "old" for the "0.x" interface. You run it by typing: jstest --normal /dev/js0 jstest --old /dev/js0 If your trouble stems from the fact the drivers can't detect the joystick attached to your gameport, and you decide you need my help (which I will gladly provide), please use the joydump utility first. It's created just by typing make joydump.o in the directory where you unpacked the joystick package. It is run then by typing insmod joydump.o in the same directory. It will return a 'device busy' or 'initialization failed' error. This is perfectly okay. It has already done it's job. The results can be found in the system log or in the output of the dmesg command. Please send me the results along with your problem report. Oh, and read the FAQ! :) 5. FAQ ~~~~~~ Q: The driver doesn't find any joysticks connected to my soundcard with the message "joy-something: no joysticks found" and "joy-something.o: init_module: Device or resource busy." or "Initialization of joy-something failed" What could be the cause? A: The most common cause is that the joystick port on your soundcard is not enabled. If it is an ISA PnP card, you'll need isapnptools to configure the gameport. Non-PnP cards usually use some option to the sound driver - see the sound driver docs and source and enable the port. Note that in case of a PnP card you have to load the joystick driver as a module after running the isapnp command, it will not work in the opposite order. Q: Any access to the joystick devices gives me "Operation not supported by device". What am I doing wrong? A: You're running a 2.0 kernel and you forgot to insmod the hardware specific module. You not only need the joystick.o, but also one of the other joy-*.o files (most usually joy-analog.o), as described in this document, section 2. If you are not using modules, then you didn't say 'Y' to any of the hardware-specific questions. Again, see section 2. If you did select the specific support, and you still get this message, check that you selected the right one, and if it still doesn't work, go to the previous FAQ. Q: Everything is fine, except I get "No such device" error when I try to do anything with /dev/js0. What's the cause? A: You're running a 2.1 or 2.2. kernel and you want to read the previous FAQ. Q: Upon 'insmod joystick.o' I get a LOT of unresolved symbols, including 'printk' and others. Why? A: You either don't have your kernel compiled with module support. If that's the cause, re-compile your kernel with module support switched on. Or, you use versioned symbols, and don't have -DMODVERSIONS in the joystick driver Makefile, or vice versa. Correct the situation by either removing or adding -DMODVERSIONS to the Makefile. Q: Upon 'insmod joy-something' I get a bunch of unresolved symbols, like 'js_register_port, js_unregister device' and others. What's wrong? A: You need to 'insmod joystick.o' first. Q: Running 'jstest 1' or 'jscal 1' doesn't work, and returns with "File not found" error. What is the problem? A: The command line interface for these tools is different from what version 0.8.0 used. You have to specify the whole device name, eg. 'jstest /dev/js0'. Q: Running 'jstest /dev/js0' results in "File not found" error. What's the cause? A: The device files don't exist. Run 'make devs'. Q: Is it possible to connect my old Atari/Commodore/Amiga/console joystick or pad that uses a 9-pin D-type cannon connector to the serial port of my PC? A: Yes, it is possible, but it'll burn your serial port or the pad. It won't work, of course. Q: My joystick doesn't work with Quake / Quake 2. What's the cause? A: Quake / Quake 2 don't support joystick. Use joy2key to simulate keypresses for them. 6. Programming Interface ~~~~~~~~~~~~~~~~~~~~~~~~ The 1.0 driver uses a new, event based approach to the joystick driver. Instead of the user program polling for the joystick values, the joystick driver now reports only any changes of its state. See joystick-api.txt, joystick.h and jstest.c included in the joystick package for more information. The joystick device can be used in either blocking or nonblocking mode and supports select() calls. For backward compatibility the old (v0.x) interface is still included. Any call to the joystick driver using the old interface will return values that are compatible to the old interface. This interface is still limited to 2 axes, and applications using it usually decode only 2 buttons, although the driver provides up to 32. 7. Credits ~~~~~~~~~~ Thanks to the following people who contributed code, ideas or specifications to the joystick driver development: Arthur C. Smith Eyal Lebedinsky Jeff Tranter Carlos Puchol Matt Rhoten Dan Fandrich Sverker Wilberg Hal Maney Bernd Schmidt Alan Cox John Markus Bjorndalen Boris Muehmer Robert W. Grubbs Pete Chown Benji York Leslie F. Donaldson Eng-Jon Ong Ragnar Hojland Espinosa Brian Gerst Andree Borrmann Martin Giguere David Thompson Justin Wake Benoit Triquet John Dahlstrom Dan Gohman Joe Krahn David Kuder Raymond Ingles If you think you should be in this list and are not, it's possible that I forgot to include you - contact me and I'll correct the error. :) Thanks to KYE Systems Europe, who provided me with driver sources for the Genius Flight2000 Digital F-23, which happens to be identical (in software) to Microsoft SideWinder 3D Pro. Thanks to ThrustMaster Inc. who provided me with docs for their digital protocol specifications, and to Trystan A Larey-Williams , who wrote an attempt of a driver for them. Thanks to Creative Labs Europe, and Ifor Powell , who provided me with docs for their first generation Blaster GamePad. Special thanks go to FP-Gaming, Inc. and James C Barnes , who provided me with help and detailed information about the Assassin 3D protocol and devices, and even sent me a Panther and Panther XL for testing, along with cool T-shirts. Special thanks to PDPI, Mike Pelkey and Brand Kvavle , for providing me with documentation and example code for their L4 gamecard, and sending me the card to test my driver with it. Thanks to LogiCad3D for their support, for having the specifications online and for the nice music on their telephone. Special thanks to Logitech, Jerry de Raad , Thomas Burgel , Avinash Shinde for providing me with a lot of documentation for their devices, and also for a big box, containing a CyberMan2, Wingman Extreme, Magellan, Wingman Warrior, two MouseMan mice, and a NewTouch keyboard. Thanks to everyone else who helped me develop this package of drivers! No thanks to Microsoft and Gravis, who don't release a word about their hardware .... :( 8. ChangeLog ~~~~~~~~~~~~ See the ChangeLog file for the log of changes. 9. To do ~~~~~~~~ See the TODO file for the list of things planned. Joystick API Documentation -*-Text-*- Ragnar Hojland Espinosa 7 Aug 1998 1. Initialization ~~~~~~~~~~~~~~~~~ Open the joystick device following the usual semantics (that is, with open). Since the driver now reports events instead of polling for changes, immediately after the open it will issue a series of synthetic events (JS_EVENT_INIT) that you can read to check the initial state of the joystick. By default, the device is opened in blocking mode. int fd = open ("/dev/js0", O_RDONLY); 2. Event Reading ~~~~~~~~~~~~~~~~ struct js_event e; read (fd, &e, sizeof(struct js_event)); where js_event is defined as struct js_event { __u32 time; /* event timestamp in miliseconds */ __s16 value; /* value */ __u8 type; /* event type */ __u8 number; /* axis/button number */ }; If the read is successfull, it will return sizeof(struct js_event), unless you wanted to read more than one event per read as described in section 3.1. 2.1 js_event.type ~~~~~~~~~~~~~~~~~ The possible values of ``type'' are #define JS_EVENT_BUTTON 0x01 /* button pressed/released */ #define JS_EVENT_AXIS 0x02 /* joystick moved */ #define JS_EVENT_INIT 0x80 /* initial state of device */ As mentioned above, the driver will issue synthetic JS_EVENT_INIT ORed events on open. That is, if it's issuing a INIT BUTTON event, the current type value will be int type = JS_EVENT_BUTTON | JS_EVENT_INIT; /* 0x81 */ If you choose not to differentiate between synthetic or real events you can turn off the JS_EVENT_INIT bits type &= ~JS_EVENT_INIT; /* 0x01 */ 2.2 js_event.number ~~~~~~~~~~~~~~~~~~~ The values of ``number'' correspond to the axis or button that generated the event. Note that they carry separate numeration (that is, you have both an axis 0 and a button 0). Generally, number 1st Axis X 0 1st Axis Y 1 2nd Axis X 2 2nd Axis Y 3 ...and so on Hats vary from one joystick type to another. Some can be moved in 8 directions, some only in 4, The driver, however, always reports a hat as two independent axis, even if the hardware doesn't allow independent movement. 2.3 js_event.value ~~~~~~~~~~~~~~~~~~ For an axis, ``value'' is a signed integer between -32767 and +32767 representing the position of the joystick along that axis. If you don't read a 0 when the joystick is `dead', or if it doesn't span the full range, you should recalibrate it (with, for example, jscal). For a button, ``value'' for a press button event is 1 and for a release button event is 0. Though this if (js_event.type == JS_EVENT_BUTTON) { buttons_state ^= (1 << js_event.number); } may work well if you handle JS_EVENT_INIT events separately, if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) { if (js_event.value) buttons_state |= (1 << js_event.number); else buttons_state &= ~(1 << js_event.number); } is much safer since it can't lose sync with the driver. As you would have to write a separate handler for JS_EVENT_INIT events in the first snippet, this ends up being shorter. 2.4 js_event.time ~~~~~~~~~~~~~~~~~ The time an event was generated is stored in ``js_event.time''. It's a time in miliseconds since ... well, since sometime in the past. This eases the task of detecting double clicks, figuring out if movement of axis and button presses happened at the same time, and similar. 3. Reading ~~~~~~~~~~ If you open the device in blocking mode, a read will block (that is, wait) forever until an event is generated and effectively read. There are two alternatives if you can't afford to wait forever (which is, admittedly, a long time;) a) use select to wait until there's data to be read on fd, or until it timeouts. There's a good example on the select(2) man page. b) open the device in non-blocking mode (O_NONBLOCK) 3.1 O_NONBLOCK ~~~~~~~~~~~~~~ If read returns -1 when reading in O_NONBLOCK mode, this isn't necessarily a "real" error (check errno(3)); it can just mean there are no events pending to be read on the driver queue. You should read all events on the queue (that is, until you get a -1). For example, while (1) { while (read (fd, &e, sizeof(struct js_event)) > 0) { process_event (e); } /* EAGAIN is returned when the queue is empty */ if (errno != EAGAIN) { /* error */ } /* do something interesting with processed events */ } One reason for emptying the queue is that if it gets full you'll start missing events since the queue is finite, and older events will get overwritten. The other reason is that you want to know all what happened, and not delay the processing till later. Why can get the queue full? Because you don't empty the queue as mentioned, or because too much time elapses from one read to another and too many events to store in the queue get generated. Note that high system load may contribute to space those reads even more. If time between reads is enough to fill the queue and loose an event, the driver will switch to startup mode and next time you read it, synthetic events (JS_EVENT_INIT) will be generated to inform you of the actual state of the joystick. [As for version 1.2.8, the queue is circular and able to hold 64 events. You can increment this size bumping up JS_BUFF_SIZE in joystick.h and recompiling the driver.] In the above code, you might as well want to read more than one event at a time using the typical read(2) functionality. For that, you would replace the read above with something like struct js_event mybuffer[0xff]; int i = read (fd, mybuffer, sizeof(struct mybuffer)); In this case, read would return -1 if the queue was empty, or some other value in which the number of events read would be i / sizeof(js_event) Again, if the buffer was full, it's a good idea to process the events and keep reading it until you empty the driver queue. 4. IOCTLs ~~~~~~~~~ The joystick driver defines the following ioctl(2) operations. /* function 3rd arg */ #define JSIOCGAXES /* get number of axes char */ #define JSIOCGBUTTONS /* get number of buttons char */ #define JSIOCGVERSION /* get driver version int */ #define JSIOCGNAME(len) /* get identifier string char */ #define JSIOCSCORR /* set correction values &js_corr */ #define JSIOCGCORR /* get correction values &js_corr */ For example, to read the number of axes char number_of_axes; ioctl (fd, JSIOCGAXES, &number_of_axes); 4.1 JSIOGCVERSION ~~~~~~~~~~~~~~~~~ JSIOGCVERSION is a good way to check in run-time whether the running driver is 1.0+ and supports the event interface. If it is not, the IOCTL will fail. For a compile-time decision, you can test the JS_VERSION symbol #ifdef JS_VERSION #if JS_VERSION > 0xsomething 4.2 JSIOCGNAME ~~~~~~~~~~~~~~ JSIOCGNAME(len) allows you to get the name string of the joystick - the same as is being printed at boot time. The 'len' argument is the lenght of the buffer provided by the application asking for the name. It is used to avoid possible overrun should the name be too long. char name[128]; if (ioctl(fd, JSIOCGNAME(sizeof(name)), name) < 0) strncpy(name, "Unknown", sizeof(name)); printf("Name: %s\n", name); 4.3 JSIOC[SG]CORR ~~~~~~~~~~~~~~~~~ For usage on JSIOC[SG]CORR I suggest you to look into jscal.c They are not needed in a normal program, only in joystick calibration software such as jscal or kcmjoy. These IOCTLs and data types aren't considered to be in the stable part of the API, and therefore may change without warning in following releases of the driver. Both JSIOCSCORR and JSIOCGCORR expect &js_corr to be able to hold information for all axis. That is, struct js_corr corr[MAX_AXIS]; struct js_corr is defined as struct js_corr { __s32 coef[8]; __u16 prec; __u16 type; }; and ``type'' #define JS_CORR_NONE 0x00 /* returns raw values */ #define JS_CORR_BROKEN 0x01 /* broken line */ 5. Backward compatibility ~~~~~~~~~~~~~~~~~~~~~~~~~ The 0.x joystick driver API is quite limited and its usage is deprecated. The driver offers backward compatibility, though. Here's a quick summary: struct JS_DATA_TYPE js; while (1) { if (read (fd, &js, JS_RETURN) != JS_RETURN) { /* error */ } usleep (1000); } As you can figure out from the example, the read returns immediately, with the actual state of the joystick. struct JS_DATA_TYPE { int buttons; /* immediate button state */ int x; /* immediate x axis value */ int y; /* immediate y axis value */ }; and JS_RETURN is defined as #define JS_RETURN sizeof(struct JS_DATA_TYPE) To test the state of the buttons, first_button_state = js.buttons & 1; second_button_state = js.buttons & 2; The axis values do not have a defined range in the original 0.x driver, except for that the values are non-negative. The 1.2.8+ drivers use a fixed range for reporting the values, 1 being the minimum, 128 the center, and 255 maximum value. The v0.8.0.2 driver also had an interface for 'digital joysticks', (now called Multisystem joysticks in this driver), under /dev/djsX. This driver doesn't try to be compatible with that interface. 6. Final Notes ~~~~~~~~~~~~~~ ____/| Comments, additions, and specially corrections are welcome. \ o.O| Documentation valid for at least version 1.2.8 of the joystick =(_)= driver and as usual, the ultimate source for documentation is U to "Use The Source Luke" or, at your convenience, Vojtech ;) - Ragnar EOF Linux Joystick parport drivers v1.2 BETA (c) 1998-1999 Vojtech Pavlik (c) 1998 Andree Borrmann Sponsored by SuSE ---------------------------------------------------------------------------- 0. Disclaimer ~~~~~~~~~~~~~ Any information in this file is provided as-is, without any guarantee that it will be true. So, use it at your own risk. The possible damages that can happen include burning your parallel port, and/or the sticks and joystick and maybe even more. Like when a lightning kills you it is not our problem. 1. Intro ~~~~~~~~ The joystick parport drivers are used for joysticks and gamepads not originally designed for PCs and other computers Linux runs on. Because of that, PCs usually lack the right ports to connect these devices to. Parallel port, because of its ability to change single bits at will, and providing both output and input bits is the most suitable port on the PC for connecting such devices. 2. Devices supported ~~~~~~~~~~~~~~~~~~~~ Many console and 8-bit coputer gamepads and joysticks are supported. The following subsections discuss usage of each. 2.1 NES and SNES ~~~~~~~~~~~~~~~~ The Nintendo Entertainment System and Super Nintendo Entertainment System gamepads are widely available, and easy to get. Also, they are quite easy to connect to a PC, and don't need much processing speed (108 us for NES and 165 us for SNES, compared to about 1000 us for PC gamepads) to communicate with them. All NES and SNES use the same synchronous serial protocol, clocked from the computer's side (and thus timing insensitive). To allow up to 5 NES and/or SNES gamepads connected to the parallel port at once, the output lines of the parallel port are shared, while one of 5 available input lines is assigned to each gamepad. This protocol is handled by the joy-console.c driver, so that's the one you'll use for NES and SNES gamepads. The main problem with PC parallel ports is that they don't have +5V power source on any of their pins. So, if you want a reliable source of power for your pads, use either keyboard or joystick port, and make a pass-through cable. You can also pull the power directly from the power supply (the red wire is +5V). If you want to use the parallel port only, you can take the power is from some data pin. For most gamepad and parport implementations only one pin is needed, and I'd recommend pin 9 for that, the highest data bit. On the other hand, if you are not planning to use anything else than NES / SNES on the port, anything between and including pin 4 and pin 9 will work. (pin 9) -----> Power Unfortunately, there are pads that need a lot more of power, and parallel ports that can't give much current through the data pins. If this is your case, you'll need to use diodes (as a prevention of destroying your parallel port), and combine the currents of two or more data bits together. Diodes (pin 9) ----|>|-------+------> Power | (pin 8) ----|>|-------+ | (pin 7) ----|>|-------+ | : | (pin 4) ----|>|-------+ Ground is quite easy. On PC's parallel port the ground is on any of the pins from pin 18 to pin 25. So use any pin of these you like for the ground. (pin 18) -----> Ground NES and SNES pads have two input bits, Clock and Latch, which drive the serial transfer. These are connected to pins 2 and 3 of the parallel port, respectively. (pin 2) -----> Clock (pin 3) -----> Latch And the last thing is the NES / SNES data wire. Only that isn't shared and each pad needs its own data pin. The parallel port pins are: (pin 10) -----> Pad 1 data (pin 11) -----> Pad 2 data (pin 12) -----> Pad 3 data (pin 13) -----> Pad 4 data (pin 15) -----> Pad 5 data Note that pin 14 is not used, since it is not an input pin on the parallel port. This is everything you need on the PC's side of the connection, now on to the gamepads side. The NES and SNES have different connectors. Also, there are quite a lot of NES clones, and because Nintendo used proprietary connectors for their machines, the cloners couldn't and used standard D-Cannon connectors. Anyway, if you've got a gamepad, and it has buttons A, B, Turbo A, Turbo B, Select and Start, and is connected through 5 wires, then it is either a NES or NES clone and will work with this connection. SNES gamepads also use 5 wires, but have more buttons. They will work as well, of course. Pinout for NES gamepads Pinout for SNES gamepads +----> Power +-----------------------\ | 7 | o o o o | x x o | 1 5 +---------+ 7 +-----------------------/ | x x o \ | | | | | | o o o o | | | | | +-> Ground 4 +------------+ 1 | | | +------------> Data | | | | | | +---------------> Latch | | | +-> Ground | +------------------> Clock | | +----> Clock +---------------------> Power | +-------> Latch +----------> Data Pinout for NES clone (db9) gamepads Pinout for NES clone (db15) gamepads +---------> Clock +-----------------> Data | +-------> Latch | +---> Ground | | +-----> Data | | | | | ___________________ _____________ 8 \ o x x x x x x o / 1 5 \ x o o o x / 1 \ o x x o x x o / \ x o x o / 15 `~~~~~~~~~~~~~' 9 9 `~~~~~~~' 6 | | | | | | | +----> Clock | +----> Power | +----------> Latch +--------> Ground +----------------> Power 2.2 Multisystem joysticks ~~~~~~~~~~~~~~~~~~~~~~~~~ In the era of 8-bit machines, there was something like de-facto standard for joystick ports. They were all digital, and all used D-Cannon 9 pin connectors (db9). Because of that, a single joystick could be used without hassle on Atari (130, 800XE, 800XL, 2600, 7200), Amiga, Commodore C64, Amstrad CPC, Sinclair ZX Spectrum and many other machines. That's why these joysticks are called "Multisystem". Now their pinout: +---------> Right | +-------> Left | | +-----> Down | | | +---> Up | | | | _____________ 5 \ x o o o o / 1 \ x o x o / 9 `~~~~~~~' 6 | | | +----> Button +--------> Ground However, as time passed, extension to this standard developed, and these were not compatible with each other: Atari 130, 800(XL/XE) MSX +-----------> Power +---------> Right | +---------> Right | +-------> Left | | +-------> Left | | +-----> Down | | | +-----> Down | | | +---> Up | | | | +---> Up | | | | | | | | | _____________ _____________ 5 \ x o o o o / 1 5 \ o o o o o / 1 \ x o o o / \ o o o o / 9 `~~~~~~~' 6 9 `~~~~~~~' 6 | | | | | | | | | +----> Button | | | +----> Button 1 | +------> Power | | +------> Button 2 +--------> Ground | +--------> Output 3 +----------> Ground Amstrad CPC Commodore C64 +-----------> Analog Y +---------> Right | +---------> Right | +-------> Left | | +-------> Left | | +-----> Down | | | +-----> Down | | | +---> Up | | | | +---> Up | | | | | | | | | _____________ _____________ 5 \ x o o o o / 1 5 \ o o o o o / 1 \ x o o o / \ o o o o / 9 `~~~~~~~' 6 9 `~~~~~~~' 6 | | | | | | | | | +----> Button 1 | | | +----> Button | +------> Button 2 | | +------> Power +--------> Ground | +--------> Ground +----------> Analog X And there were many others. 2.2.1 Multisystem joysticks using joy-db9.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For the Multisystem joysticks, and their derivatives, the joy-db9.c driver was written. It allows only one joystick / gamepad per parallel port, but the interface is easy to build and works with almost anything. For the basic 1-button Multisystem joystick you connect its wires to the parallel port like this: (pin 1) -----> Power (pin 18) -----> Ground (pin 2) -----> Up (pin 3) -----> Down (pin 4) -----> Left (pin 5) -----> Right (pin 6) -----> Button 1 However, if the joystick is switch based (eg. clicks when you move it), you might or might not, depending on your parallel port, need 10 kOhm pullup resistors on each of the direction and button signals, like this: (pin 2) ------------+------> Up Resistor | (pin 1) --[10kOhm]--+ Try without, and if it doesn't work, add them. For TTL based joysticks / gamepads the pullups are not needed. For joysticks with two buttons you connect the second button to pin 7 on the parallel port. (pin 7) -----> Button 2 And that's it. On a side note, if you have already built a different adapter for use with the digital joystick driver 0.8.0.2, this is also supported by the joy-db9.c driver, as device type 8. (See section 3.2) 2.2.2 Multisystem joysticks using joy-console.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For some people just one joystick per parallel port is not enough, and/or want to use them on one parallel port together with NES/SNES/PSX pads. This is possible using the joy-console.c. It supports up to 5 devices of the above types, including 1 and 2 buttons Multisystem joysticks. However, there is nothing for free. To allow more sticks to be used at once, you need the sticks to be purely switch based (that is non-TTL), and not to need power. Just a plain simple six switches inside. If your joystick can do more (eg. turbofire) you'll need to disable it totally first if you want to use joy-console.c. Also, the connection is a bit more complex. You'll need a bunch of diodes, and one pullup resistor. First, you connect the Directions and the button the same as for joy-db9, however with the diodes inbetween. Diodes (pin 2) -----|<|----> Up (pin 3) -----|<|----> Down (pin 4) -----|<|----> Left (pin 5) -----|<|----> Right (pin 6) -----|<|----> Button 1 For two button sticks you also connect the other button. (pin 7) -----|<|----> Button 2 And finally, you connect the Ground wire of the joystick, like done in this little schematic to Power and Data on the parallel port, as described for the NES / SNES pads in section 2.1 of this file - that is, one data pin for each joystick. The power source is shared. Data ------------+-----> Ground Resistor | Power --[10kOhm]--+ And that's all, here we go! 2.2.3 Multisystem joysticks using joy-turbografx.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The TurboGraFX interface, designed by Steffen Schwenke allows up to 7 Multisystem joysticks connected to the parallel port. In Steffen's version, there is support for up to 5 buttons per joystick. However, since this doesn't work reliably on all parallel ports, the joy-turbografx.c driver supports only one button per joystick. For more information on how to build the interface, see http://www2.burg-halle.de/~schwenke/parport.html 2.3 Sony Playstation ~~~~~~~~~~~~~~~~~~~~ WARNING: PSX support is experimental, and at the moment doesn't seem to work for most people. If you like adventure, you can try yourself. The PSX controller is supported by the joy-console.c. Pinout of the PSX controller (compatible with DirectPadPro): +---------+---------+---------+ 9 | o o o | o o o | o o o | 1 parallel \________|_________|________/ port pins | | | | | | | | | | | +--------> Clock --- (4) | | | | +------------> Select --- (3) | | | +---------------> Power --- (5-9) | | +------------------> Ground --- (18-25) | +-------------------------> Command --- (2) +----------------------------> Data --- (10,11,12,13,15) one only... You may have to add pull up/down resistors. Maybe your pad also won't like the 5V (PSX uses 3.7V). Currently the driver supports only one psx pad per parallel port, and these controllers: * Standard PSX Pad * NegCon PSX Pad * Analog PSX Pad (red mode) * Analog PSX Pad (green mode) 2.4 Sega ~~~~~~~~ All the Sega controllers are more or less based on the standard 2-button Multisystem joystick. However, since they don't use switches and use TTL logic, the only driver useable with them is the joy-db9.c driver. 2.4.1 Sega Master System ~~~~~~~~~~~~~~~~~~~~~~~~ The SMS gamepads are almost exactly the same as normal 2-button Multisystem joysticks. Set the driver to Multi2 mode, use the corresponding parallel port pins, and the following schematic: +-----------> Power | +---------> Right | | +-------> Left | | | +-----> Down | | | | +---> Up | | | | | _____________ 5 \ o o o o o / 1 \ o o x o / 9 `~~~~~~~' 6 | | | | | +----> Button 1 | +--------> Ground +----------> Button 2 2.4.2 Sega Genesis aka MegaDrive ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Sega Genesis (in Europe sold as Sega MegaDrive) pads are an extension to the Sega Master System pads. They use more buttons (3+1, 5+1, 6+1). Use the following schematic: +-----------> Power | +---------> Right | | +-------> Left | | | +-----> Down | | | | +---> Up | | | | | _____________ 5 \ o o o o o / 1 \ o o o o / 9 `~~~~~~~' 6 | | | | | | | +----> Button 1 | | +------> Select | +--------> Ground +----------> Button 2 The Select pin goes to pin 14 on the parallel port. (pin 14) -----> Select The rest is the same as for Multi2 joysticks using joy-db9.c 2.4.3 Sega Saturn ~~~~~~~~~~~~~~~~~ Sega Saturn has eight buttons, and to transfer that, without hacks like Genesis 6 pads use, it needs one more select pin. Anyway, it is still handled by the joy-db9.c driver. Its pinout is very different from anything else. Use this schematic: +-----------> Select 1 | +---------> Power | | +-------> Up | | | +-----> Down | | | | +---> Ground | | | | | _____________ 5 \ o o o o o / 1 \ o o o o / 9 `~~~~~~~' 6 | | | | | | | +----> Select 2 | | +------> Right | +--------> Left +----------> Power Select 1 is pin 14 on the parallel port, Select 2 is pin 16 on the parallel port. (pin 14) -----> Select 1 (pin 16) -----> Select 2 The other pins (Up, Down, Right, Left, Power, Ground) are the same as for Multi joysticks using joy-db9.c 3. The drivers ~~~~~~~~~~~~~~ There are three drivers for the parallel port interfaces. Each, as described above, allows to connect a different group of joysticks and pads. Here are described their command lines: 3.1 joy-console.c ~~~~~~~~~~~~~~~~~ Using joy-console.c you can connect up to five devices to one parallel port. It uses the following kernel/module command line: js_console=port,pad1,pad2,pad3,pad4,pad5 Where 'port' is either the address of the parallel port the joystick/pad is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+ Linux kernels, the number of the parport interface (eg. 0 for parport0). And 'pad1' to 'pad5' are pad types connected to different data input pins (10,11,12,13,15), as described in section 2.1 of this file. The types are: Type | Joystick/Pad -------------------- 0 | None 1 | SNES pad 2 | NES pad 4 | Multisystem 1-button joystick 5 | Multisystem 2-button joystick 6 | Sony PSX controller 7 | N64 pad 8 | N64 pad with direction pad as buttons (DirectPadPro style) The exact type of the PSX controller type is autoprobed, so you must have your controller plugged in before initializing. Should you want to use more than one of parallel ports at once, you can use js_console_2 and js_console_3 as additional command line parameters for two more parallel ports. Changes: v0.1 : First version (SNES only) v0.2 : X/Y directions were exchanged... v0.3 : Adaptation for kernel 2.1 v0.4 : Adaptation for joystick-1.2.6 - added open/close callbacks v0.5 : Renamed to "joy-console" because I have added PSX controller support. v0.6 : NES support v0.7V : Added "multi system" support v0.8 : Bugfixed PSX driver... v0.9V : Changed multi system support Added Multi2 support Fixed parport handling Cleaned up v0.10 : Fixed PSX buttons 8 and 9 v0.11V: Switched to EXCL mode Removed wakeup v0.12V: Added N64 support v0.13V: Updated N64 support v0.14V: Fixed N64 axis/button counts 3.2 joy-db9.c ~~~~~~~~~~~~~ Apart from making an interface, there is nothing difficult on using the joy-db9.c driver. It uses the following kernel/module command line: js_db9=port,type Where 'port' is either the address of the parallel port the joystick/pad is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+ Linux kernels, the number of the parport interface (eg. 0 for parport0). Caveat here: This driver only works on bidirectional parallel ports. If your parallel port is recent enough, you should have no trouble with this. Old parallel ports may not have this feature. 'Type' is the type of joystick or pad attached: Type | Joystick/Pad -------------------- 0 | None 1 | Multisystem 1-button joystick 2 | Multisystem 2-button joystick 3 | Genesis pad (3+1 buttons) 5 | Genesis pad (5+1 buttons) 6 | Genesis pad (6+2 buttons) 7 | Saturn pad (8 buttons) 8 | Multisystem 1-button joystick (v0.8.0.2 pin-out) 9 | Two Multiststem 1-button joysticks (v0.8.0.2 pin-out) Should you want to use more than one of these joysticks/pads at once, you can use js_db9_2 and js_db9_3 as additional command line parameters for two more joysticks/pads. Changes: v0.1 : First version v0.2 : Changed kernel parameter format v0.3V: Added Sega Saturn support Fixed parport and PS/2 mode handling Cleaned up v0.4V: Switched to EXCL mode Removed wakeup v0.5V: Added 0.8.0.2 HW compatibility for Multi sticks v0.6V: Better timing for Genesis 6 v0.7V: Added 0.8.0.2 second joystick support 3.3 joy-turbografx.c ~~~~~~~~~~~~~~~~~~~~ The joy-turbografx.c driver uses a very simple kernel/module command line: js_tg=port,js1,js2,js3,js4,js5,js6,js7 Where 'port' is either the address of the parallel port the interface is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+ Linux kernels, the number of the parport interface (eg. 0 for parport0). 'jsX' is the number of buttons the Multisystem joysticks connected to the interface ports 1-7 have. For a standard multisystem joystick, this is 1. Should you want to use more than one of these interfaces at once, you can use js_tg_2 and js_tg_3 as additional command line parameters for two more interfaces. 3.4 PC parallel port pinout ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .----------------------------------------. At the PC: \ 13 12 11 10 9 8 7 6 5 4 3 2 1 / \ 25 24 23 22 21 20 19 18 17 16 15 14 / ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pin | Name | Description ~~~~~~|~~~~~~~~~|~~~~~~~~~~ 1 | /STROBE | Strobe 2-9 | D0-D7 | Data Bit 0-7 10 | /ACK | Acknowledge 11 | BUSY | Busy 12 | PE | Paper End 13 | SELIN | Select In 14 | /AUTOFD | Autofeed 15 | /ERROR | Error 16 | /INIT | Initialize 17 | /SEL | Select 18-25 | GND | Signal Ground 3.5 End ~~~~~~~ That's all, folks! Have fun! Index of Documentation for People Interested in Writing and/or Understanding the Linux Kernel. Juan-Mariano de Goyeneche < jmseyas@dit.upm.es> /* * The latest version of this document may be found at: * http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html */ The need for a document like this one became apparent in the linux-kernel mailing list as the same questions, asking for pointers to information, appeared again and again. Fortunately, as more and more people get to GNU/Linux, more and more get interested in the Kernel. But reading the sources is not always enough. It is easy to understand the code, but miss the concepts, the philosophy and design decisions behind this code. Unfortunately, not many documents are available for beginners to start. And, even if they exist, there was no "well-known" place which kept track of them. These lines try to cover this lack. All documents available on line known by the author are listed, while some reference books are also mentioned. PLEASE, if you know any paper not listed here or write a new document, send me an e-mail, and I'll include a reference to it here. Any corrections, ideas or comments are also welcomed. The papers that follow are listed in no particular order. All are cataloged with the following fields: the document's "Title", the "Author"/s, the "URL" where they can be found, some "Keywords" helpful when searching for specific topics, and a brief "Description" of the Document. Enjoy! ON-LINE DOCS: * Title: "The Linux Kernel" Author: David A. Rusling. URL: http://sunsite.unc.edu/linux/LDP/tlk/tlk.html Keywords: everything!, book. Description: On line, 200 pages book describing most aspects of the Linux Kernel. Probably, the first reference for beginners. Lots of illustrations explaining data structures use and relationships in the purest Richard W. Stevens' style. Contents: "1.-Hardware Basics, 2.-Software Basics, 3.-Memory Management, 4.-Processes, 5.-Interprocess Communication Mechanisms, 6.-PCI, 7.-Interrupts and Interrupt Handling, 8.-Device Drivers, 9.-The File system, 10.-Networks, 11.-Kernel Mechanisms, 12.-Modules, 13.-The Linux Kernel Sources, A.-Linux Data Structures, B.-The Alpha AXP Processor, C.-Useful Web and FTP Sites, D.-The GNU General Public License, Glossary". In short: a must have. * Title: "The Linux Kernel Hackers' Guide" Author: Michael K.Johnson and others. URL: http://khg.redhat.com/HyperNews/get/khg.html Keywords: everything! Description: No more Postscript book-like version. Only HTML now. Many people have contributed. The interface is similar to web available mailing lists archives. You can find some articles and then some mails asking questions about them and/or complementing previous contributions. A little bit anarchic in this aspect, but with some valuable information in some cases. * Title: "Conceptual Architecture of the Linux Kernel" Author: Ivan T. Bowman. URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a1.html Keywords: conceptual software arquitecture, extracted design, reverse engineering, system structure. Description: Conceptual software arquitecture of the Linux kernel, automatically extracted from the source code. Very detailed. Good figures. Gives good overall kernel understanding. * Title: "Concrete Architecture of the Linux Kernel" Author: Ivan T. Bowman, Saheem Siddiqi, and Meyer C. Tanuan. URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a2.html Keywords: concrete arquitecture, extracted design, reverse engineering, system structure, dependencies. Description: Concrete arquitecture of the Linux kernel, automatically extracted from the source code. Very detailed. Good figures. Gives good overall kernel understanding. This papers focus on lower details than its predecessor (files, variables...). * Title: "Linux as a Case Study: Its Extracted Software Architecture" Author: Ivan T. Bowman, Richard C. Holt and Neil V. Brewster. URL: http://plg.uwaterloo.ca/~itbowman/papers/linuxcase.html Keywords: software architecture, architecture recovery, redocumentation. Description: Paper appeared at ICSE'99, Los Angeles, May 16-22, 1999. A mixture of the previous two documents from the same author. * Title: "Overview of the Virtual File System" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/vfs.txt Keywords: VFS, File System, mounting filesystems, opening files, dentries, dcache. Description: Brief introduction to the Linux Virtual File System. What is it, how it works, operations taken when opening a file or mounting a file system and description of important data structures explaining the purpose of each of their entries. * Title: "The Linux RAID-1, 4, 5 Code" Author: Ingo Molnar, Gadi Oxman and Miguel de Icaza. URL: http://www.ssc.com/lj/issue44/2391.html Keywords: RAID, MD driver. Description: Linux Journal Kernel Korner article. Here is it's abstract: "A description of the implementation of the RAID-1, RAID-4 and RAID-5 personalities of the MD device driver in the Linux kernel, providing users with high performance and reliable, secondary-storage capability using software". * Title: "Dynamic Kernels: Modularized Device Drivers" Author: Alessandro Rubini. URL: http://www.ssc.com/lj/issue23/1219.html Keywords: device driver, module, loading/unloading modules, allocating resources. Description: Linux Journal Kernel Korner article. Here is it's abstract: "This is the first of a series of four articles co-authored by Alessandro Rubini and Georg Zezchwitz which present a practical approach to writing Linux device drivers as kernel loadable modules. This installment presents an introduction to the topic, preparing the reader to understand next month's installment". * Title: "Dynamic Kernels: Discovery" Author: Alessandro Rubini. URL: http://www.ssc.com/lj/issue24/kk24.html Keywords: character driver, init_module, clean_up module, autodetection, mayor number, minor number, file operations, open(), close(). Description: Linux Journal Kernel Korner article. Here is it's abstract: "This article, the second of four, introduces part of the actual code to create custom module implementing a character device driver. It describes the code for module initialization and cleanup, as well as the open() and close() system calls". * Title: "The Devil's in the Details" Author: Georg v. Zezschwitz and Alessandro Rubini. URL: http://www.ssc.com/lj/issue25/kk25.html Keywords: read(), write(), select(), ioctl(), blocking/non blocking mode, interrupt handler. Description: Linux Journal Kernel Korner article. Here is it's abstract: "This article, the third of four on writing character device drivers, introduces concepts of reading, writing, and using ioctl-calls". * Title: "Dissecting Interrupts and Browsing DMA" Author: Alessandro Rubini and Georg v. Zezschwitz. URL: http://www.ssc.com/lj/issue26/interrupt.html Keywords: interrupts, irqs, DMA, bottom halves, task queues. Description: Linux Journal Kernel Korner article. Here is it's abstract: "This is the fourth in a series of articles about writing character device drivers as loadable kernel modules. This month, we further investigate the field of interrupt handling. Though it is conceptually simple, practical limitations and constraints make this an ``interesting'' part of device driver writing, and several different facilities have been provided for different situations. We also investigate the complex topic of DMA". * Title: "Network Buffers And Memory Management" Author: Alan Cox. URL: http://www.ssc.com/lj/issue30/kk30.html Keywords: sk_buffs, network devices, protocol/link layer variables, network devices flags, transmit, receive, configuration, multicast. Description: Linux Journal Kernel Korner. Here is the abstract: "Writing a network device driver for Linux is fundamentally simple---most of the complexity (other than talking to the hardware) involves managing network packets in memory". * Title: "An Introduction to the Linux 1.3.x Networking Code" Author: Vipul Gupta. URL: http://anchor.cs.binghamton.edu/courses/cs628/linux-net.html Keywords: files, sk_buffs. Description: A short description of files under the net/ directory. Each file has a one or two lines paragraph description. sk_buffs explained, too, with some beautiful pictures. A little bit outdated. * Title: "Linux ioctl() Primer" Author: Vipul Gupta. URL: http://anchor.cs.binghamton.edu/courses/cs628/ioctl.html Keywords: ioctl, socket. Description: Little description and examples on the use and implementation of the ioctl() system call. A little bit biased towards sockets. * Title: "Writing Linux Device Drivers" Author: Michael K. Johnson. URL: http://www.redhat.com/~johnsonm/devices.html Keywords: files, VFS, file operations, kernel interface, character vs block devices, I/O access, hardware interrupts, DMA, access to user memory, memory allocation, timers. Description: Introductory 50-minutes (sic) tutorial on writing device drivers. 12 pages written by the same author of the "Kernel Hackers' Guide" which give a very good overview of the topic. * Title: "The Venus kernel interface" Author: Peter J. Braam. URL: http://www.coda.cs.cmu.edu/doc/html/kernel-venus-protocol.html Keywords: coda, filesystem, venus, cache manager. Description: "This document describes the communication between Venus and kernel level file system code needed for the operation of the Coda filesystem. This version document is meant to describe the current interface (version 1.0) as well as improvements we envisage". * Title: "Programming PCI-Devices under Linux" Author: Claus Schroeter. URL: ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/pcip.ps .gz Keywords: PCI, device, busmastering. Description: 6 pages tutorial on PCI programming under Linux. Gives the basic concepts on the architecture of the PCI subsystem, as long as basic functions and macros to read/write the devices and perform busmastering. * Title: "Writing Character Device Driver for Linux" Author: R. Baruch and C. Schroeter. URL: ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/drivers .ps.gz Keywords: character device drivers, I/O, signals, DMA, accesing ports in user space, kernel environment. Description: 68 pages paper on writing character drivers. A little bit old (1.993, 1.994) although still useful. * Title: "The Second Extended Filesystem" Author: Matthew Wilcox. URL: http://pocket.fluff.org/~mrw/linux/ext2.txt Keywords: ext2, filesystem. Description: Description of ext2's blocks, directories, inodes ... * Title: "Analysis of the Ext2fs structure" Author: Louis-Dominique Dubeau. URL: http://step.polymtl.ca/~ldd/ext2fs/ext2fs_toc.html Keywords: ext2, filesystem, ext2fs. Description: Description of ext2's blocks, directories, inodes, bitmaps, invariants ... * Title: "Kernel API changes from 2.0 to 2.2" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html Keywords: 2.2, changes. Description: Kernel functions/structures/variables which changed from 2.0.x to 2.2.x. * Title: "Kernel API changes from 2.2 to 2.3" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html Keywords: 2.3, changes. Description: Kernel functions/structures/variables which changed from 2.2.x to 2.3.x. * Title: "Linux Kernel Module Programming Guide" Author: Ori Pomerantz. URL: http://www.linuxdoc.org/LDP/lkmpg/mpg.html Keywords: modules, GPL book, /proc, ioctls, system calls, interrupt handlers . Description: Very nice 92 pages GPL book on the topic of modules programming. Lots of examples. * Title: "Device File System (devfs) Overview" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.txt Keywords: filesystem, /dev, devfs, dynamic devices, major/minor allocation, device management. Description: Document describing Richard Gooch's controversial devfs, which allows for dynamic devices, only shows present devices in /dev, gets rid of major/minor numbers allocation problems, and allows for hundreds of identical devices (which some USB systems might demand soon). * Title: "I/O Event Handling Under Linux" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/io-events.html Keywords: IO, I/O, select(2), poll(2), FDs, aio_read(2), readiness event queues. Description: From the Introduction: "I/O Event handling is about how your Operating System allows you to manage a large number of open files (file descriptors in UNIX/POSIX, or FDs) in your application. You want the OS to notify you when FDs become active (have data ready to be read or are ready for writing). Ideally you want a mechanism that is scalable. This means a large number of inactive FDs cost very little in memory and CPU time to manage". BOOKS: (Not on-line) * Title: "Linux Device Drivers" Author: Alessandro Rubini. Publisher: O'Reilly &Associates. Date: 1998. ISBN: 1-56592-292-1 * Title: "Linux Kernel Internals" Author: Michael Beck. Publisher: Addison-Wesley. Date: 1997. ISBN: 0-201-33143-8 (second edition) * Title: "The Design of the UNIX Operating System" Author: Maurice J. Bach. Publisher: Prentice Hall. Date: 1986. Pages: 471. ISBN: 0-13-201757-1 * Title: "The Design and Implementation of the 4.3 BSD UNIX Operating System" Author: Samuel J. Leffler, Marshall Kirk McKusick, Michael J. Karels, John S. Quarterman. Publisher: Addison-Wesley. Date: 1989 (reprinted with corrections on October, 1990). ISBN: 0-201-06196-1 * Title: "The Design and Implementation of the 4.4 BSD UNIX Operating System" Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, John S. Quarterman. Publisher: Addison-Wesley. Date: 1996. ISBN: 0-201-54979-4 * Title: "Programmation Linux 2.0 API systeme et fonctionnement du noyau" Author: Remy Card, Eric Dumas, Franck Mevel. Publisher: Eyrolles. Date: 1997. Pages: 520. ISBN: 2-212-08932-5 Notes: French. * Title: "The Linux Kernel Book" Author: Remy Card, Eric Dumas, Franck Mevel. Publisher: John Wiley & Sons. Date: 1998. ISBN: 0-471-98141-9 Notes: English translation. * Title: "Linux 2.0" Author: Remy Card, Eric Dumas, Franck Mevel. Publisher: Gestin 2000. Date: 1997. Pages: 501. ISBN: 8-480-88208-5 Notes: Spanish translation. * Title: "Unix internals -- the new frontiers" Author: Uresh Vahalia. Publisher: Prentice Hall. Date: 1996. Pages: 600. ISBN: 0-13-101908-2 * Title: "Linux Core Kernel Commentary. Guide to Insider's Knowledge on the Core Kernel od the Linux Code" Author: Scott Maxwell. Publisher: ???. Date: 1999. Pages: 592. ISBN: 1-57610-469-9 Notes: CD-ROM included. MISCELLANEOUS: * Name: Linux Source Driver. URL: http://lsd.linux.cz Keywords: Browsing source code. Description: "Linux Source Driver (LSD) is an application, which can make browsing source codes of Linux kernel easier than you can imagine. You can select between multiple versions of kernel (e.g. 0.01, 1.0.0, 2.0.33, 2.0.34pre13, 2.0.0, 2.1.101 etc.). With LSD you can search Linux kernel (fulltext, macros, types, functions and variables) and LSD can generate patches for you on the fly (files, directories or kernel)". * Name: Cross-Referencing Linux. URL: http://lxr.linux.no/source/ Keywords: Browsing source code. Description: Another web-based Linux kernel source code browser. Lots of cross references to variables and functions. You can see where they are defined and where they are used. * Name: Linux Weekly News. URL: http://lwn.net Keywords: latest kernel news. Description: The title says it all. There's a fixed kernel section summarizing developers' work, bug fixes, new features and versions produced during the week. Published every Thursday. * Name: Kernel Traffic. URL: http://kt.linuxcare.com Keywords: linux-kernel mailing list, weekly kernel news. Description: Weekly newsletter covering the most relevant discussions of the linux-kernel mailing list. * Name: CuTTiNG.eDGe.LiNuX. URL: http://edge.kernelnotes.org Keywords: changelist. Description: Site which provides the changelist for every kernel release. What's new, what's better, what's changed. Myrdraal reads the patches and describes them. Pointers to the patches are there, too. * Name: New linux-kernel Mailing List FAQ. URL: Original site: http://www.altern.org/andrebalsa/doc/lkml-faq.html URL: U.S. mirror site: http://www.ececs.uc.edu/~rreilova/linux/lkml-faq.html Keywords: linux-kernel mailing list FAQ. Description: linux-kernel is a mailing list for developers to communicate. This FAQ builds on the previous linux-kernel mailing list FAQ maintained by Frohwalt Egerer, who no longer maintains it. Read it to see how to join the mailing list. Dozens of interesting questions regarding the list, Linux, developers (who is ...?), terms (what is...?) are answered here too. Just read it. * Name: "Linux Virtual File System" Author: Peter J. Braam. URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs Keywords: slides, VFS, inode, superblock, dentry, dcache. Description: Set of slides, presumably from a presentation on the Linux VFS layer. Covers version 2.1.x, with dentries and the dcache. _________________________________________________________________ Document last updated on Tue Nov 30 11:20:00 CET 1999 June 1999 Kernel Parameters v2.2.9 ~~~~~~~~~~~~~~~~~ The following is a consolidated list of the kernel parameters as defined in the file init/main.c and sorted into English Dictionary order (defined as ignoring all punctuation and sorting digits before letters in a case insensitive manner), and with descriptions where known. The text in square brackets at the beginning of the description state the restrictions on the kernel for the said kernel parameter to be valid. The restrictions referred to are that the relevant option is valid if: APIC APIC support is enabled. APM Advanced Power Management support is enabled. AX25 Appropriate AX.25 support is enabled. CD Appropriate CD support is enabled. EIDE EIDE/ATAPI support is enabled. FB The frame buffer device is enabled. HW Appropriate hardware is enabled. ISDN Appropriate ISDN support is enabled. JOY Appropriate joystick support is enabled. LPT Printer support is enabled. MCA MCA bus support is enabled. MDA The MDA console is enabled. MOUSE Appropriate mouse support is enabled. NET Appropriate network support is enabled. NFS Appropriate NFS support is enabled. PARIDE The ParIDE subsystem is enabled. PCI PCI bus support is enabled. PCMCIA The PCMCIA subsystem is enabled. PNP Plug & Play support is enabled. PS2 Appropriate PS/2 support is enabled. RAM RAMdisc support is enabled. SCSI Appropriate SCSI support is enabled. SERIAL Serial support is enabled. SMP The kernel is an SMP kernel. SOUND Appropriate sound system support is enabled. VGA The VGA console has been enabled. VT Virtual terminal support is enabled. XT IBM PC/XT MFM hard disk support is enabled. In addition, the following text indicates that the option: BUGS= Relates to possible processor bugs on the said processor. KNL Is a kernel start-up parameter. Note that ALL kernel parameters listed below are CASE SENSITIVE, and that a trailing = on the name of any parameter states that that parameter will be entered as an environment variable, whereas its absence indicates that it will appear as a kernel argument readable via /proc/cmdline by programs running once the system is up. 53c7xx= [HW,SCSI] Amiga SCSI controllers adb_buttons= [HW,MOUSE] advansys= [HW,SCSI] aha152x= [HW,SCSI] aha1542= [HW,SCSI] aic7xxx= [HW,SCSI] AM53C974= [HW,SCSI] apm= [APM] Advanced Power Management. arcrimi= [HW,NET] ataflop= [HW, M68k] atamouse= [HW,MOUSE] Atari Mouse. atascsi= [HW,SCSI] Atari SCSI. aztcd= [HW,CD] Aztec CD driver. baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem. baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Full Duplex Mode. baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Half Duplex Mode. bmouse= [HW,MOUSE,PS2] Bus mouse. BusLogic= [HW,SCSI] cdu31a= [HW,CD] cm206= [HW,CD] com20020= [HW,NET] com90io= [HW,NET] com90xx= [HW,NET] console= [KNL] output console + comm spec (speed, control, parity) cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. debug [KNL] Enable kernel debugging (events log level). decnet= [HW,NET] digi= [HW,SERIAL] io parameters + enable/disable command digiepca= [HW,SERIAL] dmascc= [HW,AX25,SERIAL] AX.25 Z80SCC driver with DMA support available. dmasound= [HW,SOUND] (sound subsystem buffers) dtc3181e= [HW,SCSI] eata= [HW,SCSI] eda= [HW,PS2] edb= [HW,PS2] ether= [HW,NET] Ethernet cards parameters (iomem,irq,dev_name). fd_mcs= [HW,SCSI] fdomain= [HW,SCSI] floppy= [HW] ftape= [HW] Floppy Tape subsystem debugging options. gdth= [HW,SCSI] gscd= [HW,CD] gvp11= [HW,SCSI] hd= [EIDE] (E)IDE hard drive subsystem geometry (Cyl/heads/sectors) or tune parameters. hfmodem= [HW,AX25] HiSax= [HW,ISDN] hisax= [HW,ISDN] ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter. icn= [HW,ISDN] ide?= [HW] (E)IDE subsystem : config (iomem/irq), tuning or debugging (serialize,reset,no{dma,tune,probe}) or chipset specific parameters idebus= [HW] (E)IDE subsystem : VLB/PCI bus speed in2000= [HW,SCSI] init= [KNL] initrd= [KNL] initial ramdisk path ip= [PNP] isp16= [HW,CD] js_14= [HW,JOY] js_am= [HW,JOY] js_an= [HW,JOY] js_as= [HW.JOY] js_console= [HW,JOY] js_console2= [HW,JOY] js_console3= [HW,JOY] js_db9= [HW,JOY] js_db9_2= [HW,JOY] js_db9_3= [HW,JOY] js_tg= [HW,JOY] js_tg_2= [HW,JOY] js_tg_3= [HW,JOY] kbd-reset [VT] load_ramdisk= [RAM] initrd loading boolean lp= [LPT] Parallel Printer. ltpc= [HW] mac5380= [HW,SCSI] maxcpus= [SMP] States the maximum number of processors that an SMP kernel should make use of. max_scsi_luns= [SCSI] mca-pentium [BUGS=ix86] mcd= [HW,CD] mcdx= [HW,CD] md= [HW] RAID subsystems devices and level mdacon= [MDA] msmouse= [HW,MOUSE] Microsoft Mouse. ncr5380= [HW,SCSI] ncr53c400= [HW,SCSI] ncr53c400a= [HW,SCSI] ncr53c406a= [HW,SCSI] ncr53c8xx= [HW,SCSI] nfsaddrs= [NFS] nfsroot= [NFS] nmi_watchdog= [KNL, BUGS=ix86] debugging features for SMP kernels no387 [BUGS=ix86] Tells the kernel to use the 387 maths emulation library even if a 387 maths coprocessor is present. noapic [SMP,APIC] Tells the kernel not to make use of any APIC that may be present on the system. noasync [HW, M68K] Disables async and sync negotiation for all devices. nodisconnect [HW,SCSI, M68K] Disables SCSI disconnects. no-halt [BUGS=ix86] noinitrd [RAM] Tells the kernel not to load any configured initial ramdisc. no-scroll [VGA] nosmp [SMP] Tells an SMP kernel to act as a UP kernel. nosync [HW, M68K] Disables sync negotiation for all devices. optcd= [HW,CD] panic= parport= [HW,LP] pas16= [HW,SCSI] pcbit= [HW,ISDN] pcd. [PARIDE] pci= [PCI] pd. [PARIDE] pf. [PARIDE] pg. [PARIDE] pirq= [SMP,APIC] mp-table plip= [LP,NET] Parallel port network link. profile= prompt_ramdisk= [RAM] Whether to prompt for ramdisk before loading its contents into memory. pt. [PARIDE] ramdisk= [RAM] ramdisk_size= [RAM] ramdisk_start= [RAM] offset of the initrd image when cohabiting with a kernel image on a floppy reboot= [BUGS=ix86] reserve= riscom8= [HW,SERIAL] multi-port serial driver (io parameters) ro [KNL] Mount root device read-only on boot. root= rw [KNL] Mount root device read-write on boot. sbpcd= [HW,CD] Soundblaster CD adapter. scsi_logging= [SCSI] sjcd= [HW,CD] sonycd535= [HW,CD] sound= [SOUND] soundmodem= [HW,AX25,SOUND] Sound cards used as AX.25 modems. specialix= [HW,SERIAL] Specialix multi-serial port adapter. st= [HW] SCSI tape parameters (buffers, ..) st0x= [HW,SCSI] stram_swap= [HW] switches= [HW, M68K] sym53c416= [HW,SCSI] sym53c8xx= [HW,SCSI] t128= [HW,SCSI] tmc8xx= [HW,SCSI] tmscsim= [HW,SCSI] tp720= [HW,PS2] u14-34f= [HW,SCSI] video= [FB] wd33c93= [HW,SCSI] wd7000= [HW,SCSI] wdt= [HW] xd= [HW,XT] Original XT 8bit disk controllers xd_geo= [HW,XT] Kmod: The Kernel Module Loader Kirk Petersen Kmod is a simple replacement for kerneld. It consists of a request_module() replacement and a kernel thread called kmod. When the kernel requests a module, the kmod wakes up and execve()s modprobe, passing it the name that was requested. If you have the /proc filesystem mounted, you can set the path of modprobe (where the kernel looks for it) by doing: echo "/sbin/modprobe" > /proc/sys/kernel/modprobe To periodically unload unused modules, put something like the following in root's crontab entry: 0-59/5 * * * * /sbin/rmmod -a Kmod only loads modules. Kerneld could do more (although nothing in the standard kernel used its other features). If you require features such as request_route, we suggest that you take a similar approach. A simple request_route function could be called, and a kroute kernel thread could be sent off to do the work. But we should probably keep this to a minimum. Kerneld also had a mechanism for storing device driver settings. This can easily be done with modprobe. When a module is unloaded, modprobe could look at a per-driver-configurable location (/proc/sys/drivers/blah) for device driver settings and save them to a file. When a module is loaded, simply cat that file back to that location in the proc filesystem. Or perhaps a script could be a setting in /etc/modules.conf. There are many user-land methods that will work (I prefer using /proc, myself). If kerneld worked, why replace it? - kerneld used SysV IPC, which can now be made into a module. Besides, SysV IPC is ugly and should therefore be avoided (well, certainly for kernel level stuff) - both kmod and kerneld end up doing the same thing (calling modprobe), so why not skip the middle man? - removing kerneld related stuff from ipc/msg.c made it 40% smaller - kmod reports errors through the normal kernel mechanisms, which avoids the chicken and egg problem of kerneld and modular Unix domain sockets This is the Linux NFS utility package version 0.1.5. It is based on knfsd 1.4.7. WARNING: The NFS servers in Linux 2.2 to 2.2.13 are not compatible with other NFS client implemenations. If you plan to use Linux 2.2.x as an NFS server for non-Linux NFS clients, you should get the Linux NFS kernel from the Linux NFS CVS server: 1. Set the environment variable, CVS_RSH, to ssh. 2. Login to the Linux NFS CVS server: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs login without password if it is your first time. 3. Check out the current Linux 2.2 NFS kernel: a. From the NFS V2 branch: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs co -r linux-2-2-nfsv2 linux-2.2 b. From the main trunk: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs co linux-2.2 4. If you don't want to use the current NFS kernel, you can find out for which kernels the NFS patch is available: # cd linux-2.2 # cvs -z 9 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs status -v Makefile Then generate the kernel patch: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs rdiff -ko -u -r linux-2-2-xx -r linux-2-2-xx-nfsv2-xxxxx linux-2.2 If there is no NFS patch for the kernel you are interested in, you have to make a patch closest to your kernel version and apply it by hand. There is a Linux NFS kernel source tree for Linux 2.3, linux-2.3, on the Linux NFS CVS server. We will need all the help we can get. To contribute to the Linux NFS project, please go to http://www.linuxnfs.sourceforge.org You register yourself. Please send an email to nfs-admin@linuxnfs.sourceforge.org with 1. Your user id on www.linuxnfs.sourceforge.org. 2. The area in NFS you'd like to work on. You will be notified when it is done. There is a Linux NFS mailing list at http://lists.sourceforge.net/mailman/listinfo/nfs/ You can subscribe it and search the mailing list archive via a web browser. The nfs-utils package is available from the CVS server: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs co nfs-utils will get the latest version. The files are ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.5.tar.gz ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.4-0.1.5.diff.gz To compile, just do # ./configure # make # make install will install the nfs-utils binaries. You have to install the NFS service scripts. There are 2 in etc/redhat provided for RedHat 6.x. They are tested on RedHat 6.1. On RedHat 6.1, you can use # rpm -ta nfs-utils-0.1.5.tar.gz to build the source and binary RPMs. If your mount from util-linux is too old, you will need 2 patches: ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/util-linux-2.9o-mount-nfsv3.patch ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/util-linux-2.9w-mount-nfsv3try.patch Thanks. H.J. hjl@lucon.org 12/19/99 File Locking Release Notes Andy Walker 12 May 1997 1. What's New? -------------- 1.1 Broken Flock Emulation -------------------------- The old flock(2) emulation in the kernel was swapped for proper BSD compatible flock(2) support in the 1.3.x series of kernels. With the release of the 2.1.x kernel series, support for the old emulation was totally removed, so that we don't need to carry this baggage forever. This should not cause problems for anybody, since everybody using a 2.1.x or 2.2.x kernel should have updated their C library to a suitable version anyway (see the file "linux/Documentation/Changes".) 1.2 Allow Mixed Locks Again --------------------------- 1.2.1 Typical Problems - Sendmail --------------------------------- Because sendmail was unable to use the old flock() emulation, many sendmail installations use fcntl() instead of flock(). This is true of Slackware 3.0 for example. This gave rise to some other subtle problems if sendmail was configured to rebuild the alias file. Sendmail tried to lock the aliases.dir file with fcntl() at the same time as the GDBM routines tried to lock this file with flock(). With kernels before 1.3.96 this could result in deadlocks that, over time or under a very heavy mail load, would eventually cause the kernel to lock solid with deadlocked processes. 1.2.2 The Solution ------------------ The solution I have chosen, after much experimentation and discussion, is to make flock() and fcntl() locks oblivious to each other. Both can exists, and neither will have any effect on the other. I wanted the two lock styles to be cooperative, but there were so many race and deadlock conditions that the current solution was the only practical one. It puts us in the same position as, for example, SunOS 4.1.x and several other commercial Unices. The only OS's that support cooperative flock()/fcntl() are those that emulate flock() using fcntl(), with all the problems that implies. 1.3 Mandatory Locking As A Mount Option --------------------------------------- Mandatory locking, as described in 'Documentation/mandatory.txt' was prior to this release a general configuration option that was valid for all mounted filesystems. This had a number of inherent dangers, not the least of which was the ability to freeze an NFS server by asking it to read a file for which a mandatory lock existed. From this release of the kernel, mandatory locking can be turned on and off on a per-file-system basis, using the mount options 'mand' and 'nomand'. The default is to disallow mandatory locking. The intention is that mandatory locking only be enabled on a local filesystem as the specific need arises. Until an updated version of mount(8) becomes available you may have to apply this patch to the mount sources (based on the version distributed with Rick Faith's util-linux-2.5 package): *** mount.c.orig Sat Jun 8 09:14:31 1996 --- mount.c Sat Jun 8 09:13:02 1996 *************** *** 100,105 **** --- 100,107 ---- { "noauto", 0, MS_NOAUTO }, /* Can only be mounted explicitly */ { "user", 0, MS_USER }, /* Allow ordinary user to mount */ { "nouser", 1, MS_USER }, /* Forbid ordinary user to mount */ + { "mand", 0, MS_MANDLOCK }, /* Allow mandatory locks on this FS */ + { "nomand", 1, MS_MANDLOCK }, /* Forbid mandatory locks on this FS */ /* add new options here */ #ifdef MS_NOSUB { "sub", 1, MS_NOSUB }, /* allow submounts */ GIF89a/pP88hH (P0xhHАP0X08д(ؤ بhhh|tXH0 rv#HߑM۰'>8( Ϳ+ >ц8I,_{1pQZ.YrxrNJ.xyw9erzZ!?IƴQ!)f[2إ 9NLI^bԹי kT{TfFb}}؞YvF'0`*^uəDQZz^:ӁJj䗡xjpyklv+lkc{l>l`2=ka6{hw&d #Iiq#rKWLv{n+mLR)W^|d䬓ٿ%:o) pm]DƆ]׬Q 0ᄶ1Q\1Ic >ѱ$v8aң j\֪Yّ:ibh!u`: gX Mdwdq>@oF!X08]0p7^yLQG8`uD1X܇Àw E2lQtׂk,zX唃CMd5uTL<$KT馗 d^N DI1 p[0F]``P#b'$0pCЅ' zY53F@#; 'ˇ$xˉ]'Yxh2E4@` wu8yDt8;2p2q'"f"X9@f9!ẇ8 7I$:yBd'P* ."3=b2nӚ1|h'6e&F3n 9@wLirUaC*ƩZ6,Պ w+ܧIc+80;5[IWRd+EU#@Cht``Q%JJƲ"@!0w5}<1d-i2Ⱥ̊C@GI2'/϶:m{҄x$GLF$ \` D@1k (%EEZ$$?"& &0@*( cptA]w%dC FG,!CL̃$BxN I`0DgBQz`XxA8pz/0:9/IN$( #"耇 ̣ O(g%TC/rI[0$%c  *#:*h "tP% ge`:HjX#%tak_((r=K (v :WaVB P$/0,v]%+VTzր=mg[A QYL$$mW AC1pA?/@<%G8<;rڼ*Z H5mnKи$]E @0dV =r;ao.t?H{>vM(P(*`))x _`riDa`,qQ/Ѯ]+b}G"4Z5~G !p Z;YT S و: P*g N*:ѣC ; @ B`J @lŦϠ*0@< ]q x 0- SpIjz*\\2̐ 3m` Z0 b%`  ѐ `v Г]9aЫ_Z#I;} lx O`  ] Xz 0GpkP@9%a#zQ\ƊSOy B kkбmO ;%$>j/? =S9 l  B kp ʍK0y  >3>,3!+P`+&_S  gm)[eyL Ѡ:$0&k#G/+ Na 'd `Pv -p0ЀC@ ;[%1 ʵ&XsGZ kz@ @ L+;$ SXsfV߫[%Cɀ plø cÑPI:uŐ$ 4FU -{Q#;>d8d lj̬$!#PlDU;kQ'P%qt%D?CPU `L$PCť;P\% 0Z: Ȱ "z, 0/1ZD|B'@#!4|mD-ڵBӺ[C[ 0]F[W DӠߏϬS1A{=PO1~ jP(㨭 +-w.<~D@hh7x0 ;H1H; PC:cp|Q~0 kU v Yf>F`S`>:FdZ~q#l0Gq.e-> _B38P̐H{ M"^Cp8cnr^Fە$*Cݣ{ ==D<,Lעpn-M!T59 ꑝ좠>ٯʾ~$$νN8xB~̷.~-M@`D!q8Kc4n;nߣL?nŕ|D nvA}mN@z>kn50AѸnrDTηǃ['‹ɫB*+AH%D@ס.^A ?%ArwT݌>dv-DFn:;8h[ƍ d(Hz-_λ˿> ,qaAN/vZB Y|9ӽ)T4)se4ō Mi?wx@#xpbQw<4 ݿy+G#j>kOޤֹ#-*:]@$;RHq"8,0D% rr0E4sid@ XÀ2q<Gt PHA2;Aht‰f;fp8D((F8pC($Srvi;A։8\pDlGH #sLAic|f Él,4u ( Ǧd:nV byw΢*QOdJԠC@8jt'iqs%lbnRCi2P+D.ZrdnB!F8aYiP 40rsL>\6Ӛ,`b>.9#J["na'Nm;7U;r1[^/F\릨 ,\J89& Q,t/Ko[ݝab7\O!kCfzkY}Diü0\aF6\0mkK∸"{Lmxg ڤV^)'0bb!,: nA)Ϋ%І@YPCKC\ ]"(Q9¼"YP@mhBZH2\̨e!e#gKgǶӍTJ W]Vs!-.״FztD)iXuև/g#֋ò4CSTjjONYXN=ܕ-7n`SY^/ !/'[6̣} ᘶI=?pFpi: r]bsyV\`n$3zkȵ>oj@`#v߭n|"- \g:wxP/:"i!:A:@"RE8WWló! *U1tw`!yN~jEgzMF|n/QJT87,[*cQX5$g 93{W4x.t{CQD>A Hb.+Əgco91 P4t^fX1E 疧TNCFheP:(Hv_;kp? ;[0,xB 9-ANxJxS€yx80tЇz-}PzЖ)?#B4DY&3S/{: Bu/-zlXhؾH m`@8<h{8i $sFlD,t0*$ F(򋘨>˲zknąv X 0BcP'Wk0x@$ȵ$xGyzzEG[˼S+p`3D˗ꐉ(;088cUDx'ȃM0ᐂ`2`UXc0vs$HC_#Uh?G@J 4D/˵`ìS/X
 Ptk@n0۱b? 6ɼ4OjK|.0%6xܤOX\XN/04XQR 6kSBkx35`X:GȤ1dDЄfpCjL]r3άHXxE\UPSJMdKPx}Ѹ\'ܵx9MQ;n8Q`,@ ; Ft9Fʵ\cƢˀ"I-J=x`9i`nPj MiWP(40UhOyy2WxiTHJc\\QNhj0VF%N6GkD[T;X]uӘDhJuO\A4/0kcȆlXG\pWw%O UH}WuӉXxD9j 6Ȁ)X B\OCLV6eZ,\EQQtSD,5tpTxPxFy "VΔ`NyhYeR8b@W\IxN>QH}e U\sD 1C0@eX NO΋tӊ5<6͝?lۏ 5PcP ԼepKscH\}hO荆ecUnUXdL*[#ؤ?7BWCOE݋VՕ[)UX؈_-HNF\}]ؠ+< H>*Tj\AcxbH?SaٚEZm b\ZAU梸3 ='7\nN5شt<t* ba"t h\PWugd8b Yb ͆TDL\6a3FPa~N-N˴,6L[7O032-t8kb˚[EI ^SiHޭnb% O;GCmIQ};Z60.as/ 1|;յGM 8E ;Fn%V8F^Uj~b7=G .=N -]5>aL[L:)8_y>c`$ϑ&Ed.b&Tԋ;;e;J&搽cVHhxPP} \smbuFȦZWm_b창X.`e@|鷳_kYkLVYƸ(_|0IKMXIUI6^N;5jgX/[\1F\j^<tm4[i36ͻow Ger0BߙFL._L ^.su5pфrMp[d.if8 ,6EPMl }ٰjhԈ׹ Z7=U.{da~ 7aW<tqMQY>aYKJ 6r|]w$鈥t3gZe_Nh=+ 6KK{ά FiGMZ&0Ve[vwɤTo [@vP\XfR6EYKJha4H}^ZUV$i[t>ab?DXlwS@N_H\UbH=/ϱe7M+KY<g;)72y9(P1}RVGi3t+H[o3P L߹OUklsc73Xvw3};[IJ/P;Ѹne'Dok80CqIa(o`})0/VI{ck2@F۶1_XvgzJe:|oμds4pEKЄ 0OT)Ax4@gOH}adWVD7iO_! @4(0pP A"'!AFNyTPԫ@Jrp&ā s2HSC{ Ž1 c8g*֬Zr|b*.D$_Ru옳jѵg'Qf,"%Ԡ_1Y3(ώ$e==:hoB=?>LXNiNjRt,0(N`w;RL(.P+vs 01];㌉AVYxreNP(G~|Hp"d͊?ڦEudRKaI :Bx+#sxђ>P^UbNWG }F_HFQN/7U*b]IbT"B1>5٢jISKLTkD%D%[3p" p5+lp՘1{cI=d@Yڞ!"PF'7$ dO|'CWDrZb=,e:W&xLҤ&`97 hA58L ]=IsרQOeڊ6XXw6IL7؉4jk?]L,2S[LdIۘe cB",45-9Xg4ƐR6Tڑ6mTtOhAZ5R;]Gn/ J_^K6N3*JxG9$f]^ # h׋UX(@c\9ѡbdi#,ӛbG'q;n$1S"H() P!ٴ8%HG:f\Pme%B2ł{=`/Ѐe#\5U&y0V-Z62O#<* R1^' 3eoAK `C-8'N#*h&MXH&lldVFfm-)I>wx;m/蘎䲆 cĠcq,/ RY+z9! D$hDU< x(3Md;=gDCQ$foOiD@Lp xzpS?J9 ȹ&V9e\ O?ZRVn, kX 怈 y9+bJ&Hqũ-K5PP ِ$%>  Ŋ @+Xt(IY2N;-jϦFw^0Ct0) #_جҍb<&d~-P*-$Ib n>P+aeSevЊYD [@$\ȅ.-z7A`%e{ce:mp=V/Y CЇVm6cnn xl47 (DɏR3_l5\RcX&p J.pSM C"P&:/(̖+h;ۙE IIMkO=1 2=p#)t*S3$`'50IiXE$0XXFaL玌`U>}2CzS=-y?eøI;D>ќ:͍q#RvӓwRBdID*70))CP8<ѐngK:vxٗa\@%`!־pn:l DQcf;b$@80ҦBAA$$ndxHpvU>*Z]6_'*$uH!bA$) AB" "#$wyׅb(>WQv".XC.RC(i5Cu(d/"V Rd# vfɭՏj/DB$,'@=}2h8Jf;d`F(sŗf:M4J8)Q!:.RB"+B"'=VR"e!֬<H,Ŷk+%Pòdd qHm4`8Vdf+,, l9\-m h!%$»"dоF*P.B ;b$BRNm.ȁB~m$ÊFN㐾.|xƭ.fJ @+X|*HϺn"Bƙ%ǰE嚚#",k"<L"A!xR*jBj#rkko+W@hD)2 FB&+Rd*.8;r*|/$~B@6  oȁ B.2df.H.fpoS L ,.N/>-BR !H,ώ0RMf,drRjh h#0󪁚 ,&1/k-h"cNrbln B \ ,rίb& 22 Sep 1997 Now it should be up to date with Linux 2.1.112. Because we are in feature freeze time it is very unlikely that something will change before 2.2.x. The entries are sorted by number field. Krzysztof G. Baranowski 29 Jul 1998 Magic Name Number Structure File =========================================================================== PG_MAGIC 'P' pg_{read,write}_hdr include/linux/pg.h MKISS_DRIVER_MAGIC 0x04bf mkiss_channel drivers/net/mkiss.h RISCOM8_MAGIC 0x0907 riscom_port drivers/char/riscom8.h APM_BIOS_MAGIC 0x4101 apm_bios_struct include/linux/apm_bios.h CYCLADES_MAGIC 0x4359 cyclades_port include/linux/cyclades.h FASYNC_MAGIC 0x4601 fasync_struct include/linux/fs.h PTY_MAGIC 0x5001 (none at the moment) drivers/char/pty.c PPP_MAGIC 0x5002 ppp include/linux/if_ppp.h SERIAL_MAGIC 0x5301 async_struct include/linux/serial.h SSTATE_MAGIC 0x5302 serial_state include/linux/serial.h SLIP_MAGIC 0x5302 slip drivers/net/slip.h STRIP_MAGIC 0x5303 strip drivers/net/strip.c X25_ASY_MAGIC 0x5303 x25_asy drivers/net/x25_asy.h SIXPACK_MAGIC 0x5304 sixpack drivers/net/hamradio/6pack.h AX25_MAGIC 0x5316 ax_disp drivers/net/mkiss.h ESP_MAGIC 0x53ee esp_struct drivers/char/esp.h TTY_MAGIC 0x5401 tty_struct include/linux/tty.h TTY_DRIVER_MAGIC 0x5402 tty_driver include/linux/tty_driver.h TTY_LDISC_MAGIC 0x5403 tty_ldisc include/linux/tty_ldisc.h SCC_MAGIC 0x8530 scc_channel include/linux/scc.h SPECIALIX_MAGIC 0x0907 specialix_port drivers/char/specialix_io8.h CG_MAGIC 0x090255 ufs_cylinder_group include/linux/ufs_fs.h RPORT_MAGIC 0x525001 r_port drivers/char/rocket_int.h GDTIOCTL_MAGIC 0x06030f07 gdth_iowr_str drivers/scsi/gdth_ioctl.h NBD_REQUEST_MAGIC 0x12560953 nbd_request include/linux/nbd.h SLAB_RED_MAGIC2 0x170fc2a5 (any) mm/slab.c BAYCOM_MAGIC 0x19730510 baycom_state drivers/net/baycom_epp.c ISDN_X25IFACE_MAGIC 0x1e75a2b9 isdn_x25iface_proto_data drivers/isdn/isdn_x25iface.h ECP_MAGIC 0x21504345 cdkecpsig include/linux/cdk.h LSMAGIC 0x2a3b4d2a ls drivers/fc4/fc.c LSOMAGIC 0x2a3c4e3c lso drivers/fc4/fc.c WANPIPE_MAGIC 0x414C4453 sdla_{dump,exec} include/linux/wanpipe.h CODA_CNODE_MAGIC 0x47114711 coda_inode_info include/linux/coda_fs_i.h ISDN_ASYNC_MAGIC 0x49344C01 modem_info include/linux/isdn.h ISDN_NET_MAGIC 0x49344C02 isdn_net_local_s include/linux/isdn.h STLI_BOARDMAGIC 0x4bc6c825 stlibrd include/linux/istallion.h SLAB_C_MAGIC 0x4f17a36d kmem_cache_s mm/slab.c ROUTER_MAGIC 0x524d4157 wan_device include/linux/wanrouter.h SLAB_RED_MAGIC1 0x5a2cf071 (any) mm/slab.c STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h LO_MAGIC 0x68797548 nbd_device include/linux/nbd.h STL_PANELMAGIC 0x7ef621a1 stlpanel include/linux/stallion.h NBD_REPLY_MAGIC 0x96744668 nbd_reply include/linux/nbd.h STL_BOARDMAGIC 0xa2267f52 stlbrd include/linux/stallion.h SLAB_MAGIC_ALLOC 0xa5c32f2b kmem_slab_s mm/slab.c SLAB_MAGIC_DESTROYED 0xb2f23c5a kmem_slab_s mm/slab.c STLI_PORTMAGIC 0xe671c7a1 stliport include/linux/istallion.h CCB_MAGIC 0xf2691ad2 ccb drivers/scsi/ncr53c8xx.c Mandatory File Locking For The Linux Operating System Andy Walker 15 April 1996 1. What is mandatory locking? ------------------------------ Mandatory locking is kernel enforced file locking, as opposed to the more usual cooperative file locking used to guarantee sequential access to files among processes. File locks are applied using the flock() and fcntl() system calls (and the lockf() library routine which is a wrapper around fcntl().) It is normally a process' responsibility to check for locks on a file it wishes to update, before applying its own lock, updating the file and unlocking it again. The most commonly used example of this (and in the case of sendmail, the most troublesome) is access to a user's mailbox. The mail user agent and the mail transfer agent must guard against updating the mailbox at the same time, and prevent reading the mailbox while it is being updated. In a perfect world all processes would use and honour a cooperative, or "advisory" locking scheme. However, the world isn't perfect, and there's a lot of poorly written code out there. In trying to address this problem, the designers of System V UNIX came up with a "mandatory" locking scheme, whereby the operating system kernel would block attempts by a process to write to a file that another process holds a "read" -or- "shared" lock on, and block attempts to both read and write to a file that a process holds a "write " -or- "exclusive" lock on. The System V mandatory locking scheme was intended to have as little impact as possible on existing user code. The scheme is based on marking individual files as candidates for mandatory locking, and using the existing fcntl()/lockf() interface for applying locks just as if they were normal, advisory locks. Note 1: In saying "file" in the paragraphs above I am actually not telling the whole truth. System V locking is based on fcntl(). The granularity of fcntl() is such that it allows the locking of byte ranges in files, in addition to entire files, so the mandatory locking rules also have byte level granularity. Note 2: POSIX.1 does not specify any scheme for mandatory locking, despite borrowing the fcntl() locking scheme from System V. The mandatory locking scheme is defined by the System V Interface Definition (SVID) Version 3. 2. Marking a file for mandatory locking --------------------------------------- A file is marked as a candidate for mandatory locking by setting the group-id bit in its file mode but removing the group-execute bit. This is an otherwise meaningless combination, and was chosen by the System V implementors so as not to break existing user programs. Note that the group-id bit is usually automatically cleared by the kernel when a setgid file is written to. This is a security measure. The kernel has been modified to recognize the special case of a mandatory lock candidate and to refrain from clearing this bit. Similarly the kernel has been modified not to run mandatory lock candidates with setgid privileges. 3. Available implementations ---------------------------- I have considered the implementations of mandatory locking available with SunOS 4.1.x, Solaris 2.x and HP-UX 9.x. Generally I have tried to make the most sense out of the behaviour exhibited by these three reference systems. There are many anomalies. All the reference systems reject all calls to open() for a file on which another process has outstanding mandatory locks. This is in direct contravention of SVID 3, which states that only calls to open() with the O_TRUNC flag set should be rejected. The Linux implementation follows the SVID definition, which is the "Right Thing", since only calls with O_TRUNC can modify the contents of the file. HP-UX even disallows open() with O_TRUNC for a file with advisory locks, not just mandatory locks. That would appear to contravene POSIX.1. mmap() is another interesting case. All the operating systems mentioned prevent mandatory locks from being applied to an mmap()'ed file, but HP-UX also disallows advisory locks for such a file. SVID actually specifies the paranoid HP-UX behaviour. In my opinion only MAP_SHARED mappings should be immune from locking, and then only from mandatory locks - that is what is currently implemented. SunOS is so hopeless that it doesn't even honour the O_NONBLOCK flag for mandatory locks, so reads and writes to locked files always block when they should return EAGAIN. I'm afraid that this is such an esoteric area that the semantics described below are just as valid as any others, so long as the main points seem to agree. 4. Semantics ------------ 1. Mandatory locks can only be applied via the fcntl()/lockf() locking interface - in other words the System V/POSIX interface. BSD style locks using flock() never result in a mandatory lock. 2. If a process has locked a region of a file with a mandatory read lock, then other processes are permitted to read from that region. If any of these processes attempts to write to the region it will block until the lock is released, unless the process has opened the file with the O_NONBLOCK flag in which case the system call will return immediately with the error status EAGAIN. 3. If a process has locked a region of a file with a mandatory write lock, all attempts to read or write to that region block until the lock is released, unless a process has opened the file with the O_NONBLOCK flag in which case the system call will return immediately with the error status EAGAIN. 4. Calls to open() with O_TRUNC, or to creat(), on a existing file that has any mandatory locks owned by other processes will be rejected with the error status EAGAIN. 5. Attempts to apply a mandatory lock to a file that is memory mapped and shared (via mmap() with MAP_SHARED) will be rejected with the error status EAGAIN. 6. Attempts to create a shared memory map of a file (via mmap() with MAP_SHARED) that has any mandatory locks in effect will be rejected with the error status EAGAIN. 5. Which system calls are affected? ----------------------------------- Those which modify a file's contents, not just the inode. That gives read(), write(), readv(), writev(), open(), creat(), mmap(), truncate() and ftruncate(). truncate() and ftruncate() are considered to be "write" actions for the purposes of mandatory locking. The affected region is usually defined as stretching from the current position for the total number of bytes read or written. For the truncate calls it is defined as the bytes of a file removed or added (we must also consider bytes added, as a lock can specify just "the whole file", rather than a specific range of bytes.) Note 3: I may have overlooked some system calls that need mandatory lock checking in my eagerness to get this code out the door. Please let me know, or better still fix the system calls yourself and submit a patch to me or Linus. 6. Warning! ----------- Not even root can override a mandatory lock, so runaway processes can wreak havoc if they lock crucial files. The way around it is to change the file permissions (remove the setgid bit) before trying to read or write to it. Of course, that might be a bit tricky if the system is hung :-( i386 Micro Channel Architecture Support ======================================= MCA support is enabled using the CONFIG_MCA define. A machine with a MCA bus will have the kernel variable MCA_bus set, assuming the BIOS feature bits are set properly (see arch/i386/boot/setup.S for information on how this detection is done). Adapter Detection ================= The ideal MCA adapter detection is done through the use of the Programmable Option Select registers. Generic functions for doing this have been added in include/linux/mca.h and arch/i386/kernel/mca.c. Everything needed to detect adapters and read (and write) configuration information is there. A number of MCA-specific drivers already use this. The typical probe code looks like the following: #include unsigned char pos2, pos3, pos4, pos5; struct device* dev; int slot; if( MCA_bus ) { slot = mca_find_adapter( ADAPTER_ID, 0 ); if( slot == MCA_NOTFOUND ) { return ENODEV; } /* optional - see below */ mca_set_adapter_name( slot, "adapter name & description" ); mca_set_adapter_procfn( slot, dev_getinfo, dev ); /* read the POS registers. Most devices only use 2 and 3 */ pos2 = mca_read_stored_pos( slot, 2 ); pos3 = mca_read_stored_pos( slot, 3 ); pos4 = mca_read_stored_pos( slot, 4 ); pos5 = mca_read_stored_pos( slot, 5 ); } else { return ENODEV; } /* extract configuration from pos[2345] and set everything up */ Loadable modules should modify this to test that the specified IRQ and IO ports (plus whatever other stuff) match. See 3c523.c for example code (actually, smc-mca.c has a slightly more complex example that can handle a list of adapter ids). Keep in mind that devices should never directly access the POS registers (via inb(), outb(), etc). While it's generally safe, there is a small potential for blowing up hardware when it's done at the wrong time. Furthermore, accessing a POS register disables a device temporarily. This is usually okay during startup, but do _you_ want to rely on it? During initial configuration, mca_init() reads all the POS registers into memory. mca_read_stored_pos() accesses that data. mca_read_pos() and mca_write_pos() are also available for (safer) direct POS access, but their use is _highly_ discouraged. mca_write_pos() is particularly dangerous, as it is possible for adapters to be put in inconsistent states (i.e. sharing IO address, etc) and may result in crashes, toasted hardware, and blindness. User level drivers (such as the AGX X server) can use /proc/mca/pos to find adapters (see below). Some MCA adapters can also be detected via the usual ISA-style device probing (many SCSI adapters, for example). This sort of thing is highly discouraged. Perfectly good information is available telling you what's there, so there's no excuse for messing with random IO ports. However, we MCA people still appreciate any ISA-style driver that will work with our hardware. You take what you can get... Level-Triggered Interrupts ========================== Because MCA uses level-triggered interrupts, a few problems arise with what might best be described as the ISA mindset and its effects on drivers. These sorts of problems are expected to become less common as more people use shared IRQs on PCI machines. In general, an interrupt must be acknowledged not only at the ICU (which is done automagically by the kernel), but at the device level. In particular, IRQ 0 must be reset after a timer interrupt (now done in arch/i386/kernel/time.c) or the first timer interrupt hangs the system. There were also problems with the 1.3.x floppy drivers, but that seems to have been fixed. IRQs are also shareable, and most MCA-specific devices should be coded with shared IRQs in mind. /proc/mca ========= /proc/mca is a directory containing various files for adapters and other stuff. /proc/mca/pos Straight listing of POS registers /proc/mca/slot[1-8] Information on adapter in specific slot /proc/mca/video Same for integrated video /proc/mca/scsi Same for integrated SCSI /proc/mca/machine Machine information See Appendix A for a sample. Device drivers can easily add their own information function for specific slots (including integrated ones) via the mca_set_adapter_procfn() call. Drivers that support this are ESDI, IBM SCSI, and 3c523. If a device is also a module, make sure that the proc function is removed in the module cleanup. This will require storing the slot information in a private structure somewhere. See the 3c523 driver for details. Your typical proc function will look something like this: static int dev_getinfo( char* buf, int slot, void* d ) { struct device* dev = (struct device*) d; int len = 0; len += sprintf( buf+len, "Device: %s\n", dev->name ); len += sprintf( buf+len, "IRQ: %d\n", dev->irq ); len += sprintf( buf+len, "IO Port: %#lx-%#lx\n", ... ); ... return len; } Some of the standard MCA information will already be printed, so don't bother repeating it. Don't try putting in more than 3K of information. Enable this function with: mca_set_adapter_procfn( slot, dev_getinfo, dev ); Disable it with: mca_set_adapter_procfn( slot, NULL, NULL ); It is also recommended that, even if you don't write a proc function, to set the name of the adapter (i.e. "PS/2 ESDI Controller") via mca_set_adapter_name( int slot, char* name ). MCA Device Drivers ================== Currently, there are a number of MCA-specific device drivers. 1) PS/2 ESDI drivers/block/ps2esdi.c include/linux/ps2esdi.h Uses major number 36, and should use /dev files /dev/eda, /dev/edb. Supports two drives, but only one controller. May use the command-line args "ed=cyl,head,sec" and "tp720". 2) PS/2 SCSI drivers/scsi/ibmmca.c drivers/scsi/ibmmca.h The driver for the IBM SCSI subsystem. Includes both integrated controllers and adapter cards. May require command-line arg "ibmmcascsi=io_port" to force detection of an adapter. If you have a machine with a front-panel display (i.e. model 95), you can use "ibmmcascsi=display" to enable a drive activity indicator. 3) 3c523 drivers/net/3c523.c drivers/net/3c523.h 3Com 3c523 Etherlink/MC ethernet driver. 4) SMC Ultra/MCA and IBM Adapter/A drivers/net/smc-mca.c drivers/net/smc-mca.h Driver for the MCA version of the SMC Ultra and various other OEM'ed and work-alike cards (Elite, Adapter/A, etc). 5) NE/2 driver/net/ne2.c driver/net/ne2.h The NE/2 is the MCA version of the NE2000. This may not work with clones that have a different adapter id than the original NE/2. 6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Aapter/A and Reply Sound Blaster/SCSI (SCSI part) Better support for these cards than the driver for ISA. Supports multiple cards with IRQ sharing. Also added boot time option of scsi-probe, which can do reordering of SCSI host adapters. This will direct the kernel on the order which SCSI adapter should be detected. Example: scsi-probe=ibmmca,fd_mcs,adaptec1542,buslogic The serial drivers were modified to support the extended IO port range of the typical MCA system (also #ifdef CONFIG_MCA). The following devices work with existing drivers: 1) Token-ring 2) Future Domain SCSI (MCS-600, MCS-700, not MCS-350, OEM'ed IBM SCSI) 3) Adaptec 1640 SCSI (using the aha1542 driver) 4) Bustek/Buslogic SCSI (various) 5) Probably all Arcnet cards. 6) Some, possibly all, MCA IDE controllers. 7) 3Com 3c529 (MCA version of 3c509) (patched) 8) Intel EtherExpressMC (patched version) You need to have CONFIG_MCA defined to have EtherExpressMC support. 9) Reply Sound Blaster/SCSI (SB part) (patched version) Bugs & Other Weirdness ====================== NMIs tend to occur with MCA machines because of various hardware weirdness, bus timeouts, and many other non-critical things. Some basic code to handle them (inspired by the NetBSD MCA code) has been added to detect the guilty device, but it's pretty incomplete. If NMIs are a persistent problem (on some model 70 or 80s, they occur every couple shell commands), the CONFIG_IGNORE_NMI flag will take care of that. Various Pentium machines have had serious problems with the FPU test in bugs.h. Basically, the machine hangs after the HLT test. This occurs, as far as we know, on the Pentium-equipped 85s, 95s, and some PC Servers. The PCI/MCA PC 750s are fine as far as I can tell. The ``mca-pentium'' boot-prompt flag will disable the FPU bug check if this is a problem with your machine. The model 80 has a raft of problems that are just too weird and unique to get into here. Some people have no trouble while others have nothing but problems. I'd suspect some problems are related to the age of the average 80 and accompanying hardware deterioration, although others are definitely design problems with the hardware. Among the problems include SCSI controller problems, ESDI controller problems, and serious screw-ups in the floppy controller. Oh, and the parallel port is also pretty flaky. There were about 5 or 6 different model 80 motherboards produced to fix various obscure problems. As far as I know, it's pretty much impossible to tell which bugs a particular model 80 has (other than triggering them, that is). Drivers are required for some MCA memory adapters. If you're suddenly short a few megs of RAM, this might be the reason. The (I think) Enhanced Memory Adapter commonly found on the model 70 is one. There's a very alpha driver floating around, but it's pretty ugly (disassembled from the DOS driver, actually). See the MCA Linux web page (URL below) for more current memory info. The Thinkpad 700 and 720 will work, but various components are either non-functional, flaky, or we don't know anything about them. The graphics controller is supposed to be some WD, but we can't get things working properly. The PCMCIA slots don't seem to work. Ditto for APM. The serial ports work, but detection seems to be flaky. Credits ======= A whole pile of people have contributed to the MCA code. I'd include their names here, but I don't have a list handy. Check the MCA Linux home page (URL below) for a perpetually out-of-date list. ===================================================================== MCA Linux Home Page: http://glycerine.itsmm.uni.edu/mca/ Christophe Beauregard chrisb@truespectra.com cpbeaure@calum.csclub.uwaterloo.ca ===================================================================== Appendix A: Sample /proc/mca This is from my model 8595. Slot 1 contains the standard IBM SCSI adapter, slot 3 is an Adaptec AHA-1640, slot 5 is a XGA-1 video adapter, and slot 7 is the 3c523 Etherlink/MC. /proc/mca/machine: Model Id: 0xf8 Submodel Id: 0x14 BIOS Revision: 0x5 /proc/mca/pos: Slot 1: ff 8e f1 fc a0 ff ff ff IBM SCSI Adapter w/Cache Slot 2: ff ff ff ff ff ff ff ff Slot 3: 1f 0f 81 3b bf b6 ff ff Slot 4: ff ff ff ff ff ff ff ff Slot 5: db 8f 1d 5e fd c0 00 00 Slot 6: ff ff ff ff ff ff ff ff Slot 7: 42 60 ff 08 ff ff ff ff 3Com 3c523 Etherlink/MC Slot 8: ff ff ff ff ff ff ff ff Video : ff ff ff ff ff ff ff ff SCSI : ff ff ff ff ff ff ff ff /proc/mca/slot1: Slot: 1 Adapter Name: IBM SCSI Adapter w/Cache Id: 8eff Enabled: Yes POS: ff 8e f1 fc a0 ff ff ff Subsystem PUN: 7 Detected at boot: Yes /proc/mca/slot3: Slot: 3 Adapter Name: Unknown Id: 0f1f Enabled: Yes POS: 1f 0f 81 3b bf b6 ff ff /proc/mca/slot5: Slot: 5 Adapter Name: Unknown Id: 8fdb Enabled: Yes POS: db 8f 1d 5e fd c0 00 00 /proc/mca/slot7: Slot: 7 Adapter Name: 3Com 3c523 Etherlink/MC Id: 6042 Enabled: Yes POS: 42 60 ff 08 ff ff ff ff Revision: 0xe IRQ: 9 IO Address: 0x3300-0x3308 Memory: 0xd8000-0xdbfff Transceiver: External Device: eth0 Hardware Address: 02 60 8c 45 c4 2a Tools that manage md devices can be found at sweet-smoke.ufr-info-p7.ibp.fr in public/Linux/md035.tar.gz. Marc ZYNGIER -- You can boot (if you selected boot support in the configuration) with your md device with the following kernel command line: md=,,,,dev0,dev1,...,devn md device no. = the number of the md device ... 0 means md0, 1 md1, 2 md2, 3 md3, 4 md4 raid level = -1 linear mode 0 striped mode other modes are currently unsupported. chunk size factor = (raid-0 and raid-1 only) Set the chunk size as PAGE_SIZE << n. fault level = (raid-1 only) Set the maximum fault number as n. Currently unsupported due to lack of boot support for raid1. dev0-devn: e.g. /dev/hda1,/dev/hdc1,/dev/sda1,/dev/sdb1 my loadlin line looks like this: e:\loadlin\loadlin e:\zimage root=/dev/md0 md=0,0,4,0,/dev/hdb2,/dev/hdc3 ro Harald Hoyer There are several classic problems related to memory on Linux systems. 1) There are some buggy motherboards which cannot properly deal with the memory above 16MB. Consider exchanging your motherboard. 2) You cannot do DMA on the ISA bus to addresses above 16M. Most device drivers under Linux allow the use of bounce buffers which work around this problem. Drivers that don't use bounce buffers will be unstable with more than 16M installed. Drivers that use bounce buffers will be OK, but may have slightly higher overhead. 3) There are some motherboards that will not cache above a certain quantity of memory. If you have one of these motherboards, your system will be SLOWER, not faster as you add more memory. Consider exchanging your motherboard. All of these problems can be addressed with the "mem=XXXM" boot option (where XXX is the size of RAM to use in megabytes). It can also tell Linux to use less memory than is actually installed. See the documentation of your boot loader (LILO, loadlin, etc.) about how to pass options to the kernel. There are other memory problems which Linux cannot deal with. Random corruption of memory is usually a sign of serious hardware trouble. Try: * Reducing memory settings in the BIOS to the most conservative timings. * Adding a cooling fan. * Not overclocking your CPU. * Having the memory tested in a memory tester or exchanged with the vendor. * Exchanging your CPU, cache, or motherboard for one that works. * Disabling the cache from the BIOS. * Try passing the "mem=4M" option to the kernel to limit Linux to using a very small amount of memory. Other tricks: * Try passing the "no-387" option to the kernel to ignore a buggy FPU. * Try passing the "no-hlt" option to disable the potentially buggy HLT instruction in your CPU. * Passing for example the "endbase=0x9F000" option to the kernel, you'll _force_ the kernel to not touch the memory between 0x9F000 and 1Mbyte. As default the kernel reads the endbase limit from the BIOS. So you need to specify this option only if the BIOS does not provide the right information to the kernel (or if you don't have a BIOS at all :). You can discover the endbase value of your running kernel with this command `dmesg | grep endbase`. #!/bin/sh # Script to create device nodes for SMART array controllers # Usage: # mkdev.ida [num controllers] [num log volumes] [num partitions] # # With no arguments, the script assumes 1 controller, 16 logical volumes, # and 16 partitions/volume, which is adequate for most configurations. # # If you had 5 controllers and were planning on no more than 4 logical volumes # each, using a maximum of 8 partitions per volume, you could say: # # mkdev.ida 5 4 8 # # Of course, this has no real benefit over "mkdev.ida 5" except that it # doesn't create so many device nodes in /dev/ida. NR_CTLR=${1-1} NR_VOL=${2-16} NR_PART=${3-16} if [ ! -d /dev/ida ]; then mkdir -p /dev/ida fi C=0; while [ $C -lt $NR_CTLR ]; do MAJ=`expr $C + 72` D=0; while [ $D -lt $NR_VOL ]; do P=0; while [ $P -lt $NR_PART ]; do MIN=`expr $D \* 16 + $P` if [ $P -eq 0 ]; then mknod /dev/ida/c${C}d${D} b $MAJ $MIN else mknod /dev/ida/c${C}d${D}p${P} b $MAJ $MIN fi P=`expr $P + 1` done D=`expr $D + 1` done C=`expr $C + 1` done This file describes the strategy for dynamically loadable modules in the Linux kernel. This is not a technical description on the internals of module, but mostly a sample of how to compile and use modules. Note: You should ensure that the modutils-X.Y.Z.tar.gz you are using is the most up to date one for this kernel. The "X.Y.Z" will reflect the kernel version at the time of the release of the modules package. Some older modules packages aren't aware of some of the newer modular features that the kernel now supports. The current required version is listed in the file linux/Documentation/Changes. * * * NOTE * * * The kernel has been changed to remove kerneld support and use the new kmod support. Keep this in mind when reading this file. Kmod does the exact same thing as kerneld, but doesn't require an external program (see Documentation/kmod.txt) In the beginning... ------------------- Anyway, your first step is to compile the kernel, as explained in the file linux/README. It generally goes like: make config make dep make clean make zImage or make zlilo In "make config", you select what you want to include in the "resident" kernel and what features you want to have available as loadable modules. You will generally select the minimal resident set that is needed to boot: The filesystem of your root partition A scsi driver, but see below for a list of SCSI modules! Normal hard drive support Net support (CONFIG_NET) TCP/IP support (CONFIG_INET), but no drivers! plus those things that you just can't live without... The set of modules is constantly increasing, and you will be able to select the option "m" in "make config" for those features that the current kernel can offer as loadable modules. You also have a possibility to create modules that are less dependent on the kernel version. This option can be selected during "make config", by enabling CONFIG_MODVERSIONS, and is most useful on "stable" kernel versions, such as the kernels from the 1.2 and 2.0 series. If you have modules that are based on sources that are not included in the official kernel sources, you will certainly like this option... Here is a sample of the available modules included in the kernel sources: Most filesystems: minix, msdos, umsdos, sysv, isofs, hpfs, smbfs, nfs Mid-level SCSI support (required by top and low level scsi drivers). Most low-level SCSI drivers: (i.e. aha1542, in2000) All SCSI high-level drivers: disk, tape, cdrom, generic. Most Ethernet drivers: (too many to list, please see the file ./Documentation/networking/net-modules.txt) Most CDROM drivers: aztcd: Aztech,Orchid,Okano,Wearnes cm206: Philips/LMS CM206 gscd: Goldstar GCDR-420 mcd, mcdx: Mitsumi LU005, FX001 optcd: Optics Storage Dolphin 8000AT sjcd: Sanyo CDR-H94A sbpcd: Matsushita/Panasonic CR52x, CR56x, CD200, Longshine LCS-7260, TEAC CD-55A sonycd535: Sony CDU-531/535, CDU-510/515 And a lot of misc modules, such as: lp: line printer binfmt_elf: elf loader binfmt_java: java loader isp16: cdrom interface serial: the serial (tty) interface When you have made the kernel, you create the modules by doing: make modules This will compile all modules and update the linux/modules directory. In this directory you will then find a bunch of symbolic links, pointing to the various object files in the kernel tree. Now, after you have created all your modules, you should also do: make modules_install This will copy all newly made modules into subdirectories under "/lib/modules/kernel_release/", where "kernel_release" is something like 2.0.1, or whatever the current kernel version is... As soon as you have rebooted the newly made kernel, you can install and remove modules at will with the utilities: "insmod" and "rmmod". After reading the man-page for insmod, you will also know how easy it is to configure a module when you do "insmod" (hint: symbol=value). Nifty features: --------------- You also have access to two utilities: "modprobe" and "depmod", where modprobe is a "wrapper" for (or extension to) "insmod". These utilities use (and maintain) a set of files that describe all the modules that are available for the current kernel in the /lib/modules hierarchy as well as their interdependencies. Using the modprobe utility, you can load any module like this: /sbin/modprobe module without paying much attention to which kernel you are running, or what other modules this module depends on. With the help of the modprobe configuration file: "/etc/conf.modules" you can tune the behaviour of modprobe in many ways, including an automatic setting of insmod options for each module. And, yes, there _are_ man-pages for all this... To use modprobe successfully, you generally place the following command in your /etc/rc.d/rc.S script. (Read more about this in the "rc.hints" file in the module utilities package, "modules-x.y.z.tar.gz".) /sbin/depmod -a This computes the dependencies between the different modules. Then if you do, for example /sbin/modprobe umsdos you will automatically load _both_ the msdos and umsdos modules, since umsdos runs piggyback on msdos. The "ultimate" utility: ----------------------- OK, you have read all of the above, and feel amply impressed... Now, we tell you to forget all about how to install and remove loadable modules... With the kerneld daemon, all of these chores will be taken care of automatically. Just answer "Y" to CONFIG_KERNELD in "make config", and make sure that /sbin/kerneld is started as soon as possible after boot and that "/sbin/depmod -a" has been executed for the current kernel. (Read more about this in the module utilities package.) Whenever a program wants the kernel to use a feature that is only available as a loadable module, and if the kernel hasn't got the module installed yet, the kernel will ask the kerneld daemon to take care of the situation and make the best of it. This is what happens: - The kernel notices that a feature is requested that is not resident in the kernel. - The kernel sends a message to kerneld, with a symbolic description of the requested feature. - The kerneld daemon asks e.g. modprobe to load a module that fits this symbolic description. - modprobe looks into its internal "alias" translation table to see if there is a match. This table can be reconfigured and expanded by having "alias" lines in "/etc/conf.modules". - insmod is then asked to insert the module(s) that modprobe has decided that the kernel needs. Every module will be configured according to the "options" lines in "/etc/conf.modules". - modprobe exits and kerneld tells the kernel that the request succeeded (or failed...) - The kernel uses the freshly installed feature just as if it had been configured into the kernel as a "resident" part. The icing of the cake is that when an automatically installed module has been unused for a period of time (usually 1 minute), the module will be automatically removed from the kernel as well. This makes the kernel use the minimal amount of memory at any given time, making it available for more productive use than as just a placeholder for unused code. Actually, this is only a side-effect from the _real_ benefit of kerneld: You only have to create a minimal kernel, that is more or less independent of the actual hardware setup. The setup of the "virtual" kernel is instead controlled by a configuration file as well as the actual usage pattern of the current machine and its kernel. This should be good news for maintainers of multiple machines as well as for maintainers of distributions. To use kerneld with the least amount of "hassle", you need modprobe from a release that can be considered "recent" w.r.t. your kernel, and also a configuration file for modprobe ("/etc/conf.modules"). Since modprobe already knows about most modules, the minimal configuration file could look something like this: alias scsi_hostadapter aha1542 # or whatever SCSI adapter you have alias eth0 3c509 # or whatever net adapter you have # you might need an "options" line for some net adapters: options 3c509 io=0x300 irq=10 # you might also need an "options" line for some other module: options cdu31a cdu31a_port=0x1f88 sony_pas_init=1 You could add these lines as well, but they are only "cosmetic": alias net-pf-3 off # no ax25 module available (yet) alias net-pf-4 off # if you don't use the ipx module alias net-pf-5 off # if you don't use the appletalk module Finally, for the "purists": You can name the modprobe configuration either "/etc/conf.modules" or "/etc/modules.conf", since modprobe knows what to do in each case... Written by: Jacques Gelinas Bjorn Ekwall ============================================================================= MOXA Smartio Family Device Driver Ver 1.1 Installation Guide for Linux Kernel 2.2.x and 2.0.3x Copyright (C) 1999, Moxa Technologies Co, Ltd. ============================================================================= Content 1. Introduction 2. System Requirement 3. Installation 4. Utilities 5. Setserial 6. Troubleshooting ----------------------------------------------------------------------------- 1. Introduction The Smartio family Linux driver, Ver. 1.1, supports following multiport boards. -C104P/H/HS, C104H/PCI, C104HS/PCI, CI-104J 4 port multiport board. -C168P/H/HS, C168H/PCI 8 port multiport board. This driver has been modified a little and cleaned up from the Moxa contributed driver code and merged into Linux 2.2.14pre. In paticular official major/minor numbers have been assigned which are different to those the original Moxa supplied driver used. This driver and installation procedure have been developed upon Linux Kernel 2.2.5 and backward compatible to 2.0.3x. This driver supports Intel x86 and Alpha hardware platform. In order to maintain compatibility, this version has also been properly tested with RedHat, OpenLinux, TurboLinux and S.u.S.E Linux. However, if compatibility problem occurs, please contact Moxa at support@moxa.com.tw. In addition to device driver, useful utilities are also provided in this version. They are - msdiag Diagnostic program for detecting installed Moxa Smartio boards. - msmon Monitor program to observe data count and line status signals. - msterm A simple terminal program which is useful in testing serial ports. - io-irq.exe Configuration program to setup ISA boards. Please note that this program can only be executed under DOS. All the drivers and utilities are published in form of source code under GNU General Public License in this version. Please refer to GNU General Public License announcement in each source code file for more detail. In Moxa's ftp sites, you may always find latest driver at ftp://ftp.moxa.com or ftp://ftp.moxa.com.tw. This version of driver can be installed as Loadable Module (Module driver) or built-in into kernel (Static driver). You may refer to following installation procedure for suitable one. Before you install the driver, please refer to hardware installation procedure in the User's Manual. We assume the user should be familiar with following documents. - Serial-HOWTO - Kernel-HOWTO ----------------------------------------------------------------------------- 2. System Requirement - Hardware platform: Intel x86 or Alpha machine - Kernel version: 2.0.3x or 2.2.x - gcc version 2.72 or later - Maximum 4 boards can be installed in combination ----------------------------------------------------------------------------- 3. Installation 3.1 Hardware installation There are two types of buses, ISA and PCI, for Smartio family multiport board. ISA board --------- You'll have to configure CAP address, I/O address, Interrupt Vector as well as IRQ before installing this driver. Please refer to hardware installation procedure in User's Manual before proceed any further. Please make sure the JP1 is open after the ISA board is set properly. PCI board --------- You may need to adjust IRQ useage in BIOS to avoid from IRQ conflict with other ISA devices. Please refer to hardware installation procedure in User's Manual in advance. IRQ Sharing ----------- Each port within the same multiport board shares the same IRQ. Up to 4 Moxa Smartio Family multiport boards can be installed together on one system and they can share the same IRQ. 3.2 Driver files and device naming convention The driver file may be obtained from ftp, CD-ROM or floppy disk. The first step, anyway, is to copy driver file "mxser.tgz" into specified directory. e.g. /moxa. The execute commands as below. # cd /moxa # tar xvf /dev/fd0 or # cd /moxa # cp /mnt/cdrom//mxser.tgz . # tar xvfz mxser.tgz You may find all the driver and utilities files in /moxa/mxser. Following installation procedure depends on the model you'd like to run the driver. If you prefer module driver, please refer to 3.3. If static driver is required, please refer to 3.4. Dialin and callout port ----------------------- This driver remains traditional serial device properties. There're two special file name for each serial port. One is dial-in port which is named "ttyMxx". For callout port, the naming convention is "cumxx". Device naming when more than 2 boards installed ----------------------------------------------- Naming convention for each Smartio multiport board is pre-defined as below. Board Num. Dial-in Port Callout port 1st board ttyM0 - ttyM7 cum0 - cum7 2nd board ttyM8 - ttyM15 cum8 - cum15 3rd board ttyM16 - ttyM23 cum16 - cum23 4th board ttyM24 - ttym31 cum24 - cum31 Board sequence -------------- This driver will activate ISA boards according to the parameter set in the driver. After all specified ISA board activated, PCI board will be installed in the system automatically driven. Therefore the board number is sorted by the CAP address of ISA boards. For PCI boards, their sequence will be after ISA boards and C168H/PCI has higher priority than C104H/PCI boards. 3.3 Module driver configuration Module driver is easiest way to install. If you prefer static driver installation, please skip this paragraph. 1. Find "Makefile" in /moxa/mxser, then run # make install The driver files "mxser.o" and utilities will be properly compiled and copied to system directories respectively.Then run # insmod mxser to activate the moduler driver. You may run "lsmod" to check if "mxser.o" is activated. 2. Create special files by executing "msmknod". # cd /moxa/mxser/driver # ./msmknod Default major numbers for dial-in device and callout device are 174, 175. Msmknod will delete any special files occuping the same device naming. 3. Up to now, you may manually execute "insmod mxser" to activate this driver and run "rmmod mxser" to remove it. However, it's better to have a boot time configuration to eliminate manual operation. Boot time configuration can be achieved by rc file. Run following command for setting rc files. # cd /moxa/mxser/driver # cp ./rc.mxser /etc/rc.d # cd /etc/rc.d You may have to modify part of the content in rc.mxser to specify parameters for ISA board. Please refer to rc.mxser for more detail. Find "rc.serial". If "rc.serial" doesn't exist, create it by vi. Add "rc.mxser" in last line. Next, open rc.local by vi and append following content. if [ -f /etc/rc.d/rc.serial ]; then sh /etc/rc.d/rc.serial fi 4. Reboot and check if mxser.o activated by "lsmod" command. 5. If you'd like to drive Smartio ISA boards in the system, you'll have to add parameter to specify CAP address of given board while activating "mxser.o". The format for parameters are as follows. insmod mxser ioaddr=0x???,0x???,0x???,0x??? | | | | | | | +- 4th ISA board | | +------ 3rd ISA board | +------------ 2nd ISA board +------------------- 1st ISA board 3.4 Static driver configuration 1. Create link # cd /usr/src/linux/drivers/char # ln -s /moxa/mxser/driver/mxser.c mxser.c 2. Add CAP address list for ISA boards In module mode, the CAP address for ISA board is given by parameter. In static driver configuration, you'll have to assign it within driver's source code. If you will not install any ISA boards, you may skip to next portion. The instructions to modify driver source code are as below. a. # cd /moxa/mxser/driver # vi mxser.c b. Find the array mxserBoardCAP[] as belows. static int mxserBoardCAP[] = {0x00, 0x00, 0x00, 0x00}; c. Change the address within this array using vi. For example, to driver 2 ISA boards with CAP address 0x280 and 0x180 as 1st and 2nd board. Just to change the source code as follows. static int mxserBoardCAP[] = {0x280, 0x180, 0x00, 0x00}; 3. Modify tty_io.c # cd /usr/src/linux/drivers/char/ # vi tty_io.c Find pty_init(), insert "mxser_init()" as pty_init(); mxser_init(); 4. Modify tty.h # cd /usr/src/linux/include/linux # vi tty.h Find extern int tty_init(void), insert "mxser_init()" as extern int tty_init(void); extern int mxser_init(void); 5. Modify Makefile # cd /usr/src/linux/drivers/char # vi Makefile Find L_OBJS := tty_io.o ...... random.o, add "mxser.o" at last of this line as L_OBJS := tty_io.o ....... mxser.o 6. Rebuild kernel The following are for Linux kernel rebuilding,for your reference only. For appropriate details, please refer to the Linux document. If 'lilo' utility is installed, please use 'make zlilo' to rebuild kernel. If 'lilo' is not installed, please follow the following steps. a. cd /usr/src/linux b. make clean /* take a few minutes */ c. make dep /* take a few minutes */ d. make bzImage /* take probably 10-20 minutes */ e. Backup original boot kernel. /* optional step */ f. cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz g. Please make sure the boot kernel (vmlinuz) is in the correct position. If you use 'lilo' utility, you should check /etc/lilo.conf 'image' item specifiedd the path which is the 'vmlinuz' path, or you will load wrong (or old) boot kernel image (vmlinuz). h. chmod 400 /vmlinuz i. lilo j. rdev -R /vmlinuz 1 k. sync Note that if the result of "make zImage" is ERROR, then you have to go back to Linux configuration Setup. Type "make config" in directory /usr/src/linux or "setup". Since system include file, /usr/src/linux/include/linux/interrupt.h, is modified each time the MOXA driver is installed, kernel rebuilding is inevitable. And it takes about 10 to 20 minutes depends on the machine. 7. Make utility # cd /moxa/mxser/utility # make install 8. Make special file # cd /moxa/mxser/driver # ./msmknod 9. Reboot 3.5 Custom configuration Although this driver already provides you default configuration, you still can change the device name and major number.The instruction to change these parameters are shown as below. Change Device name ------------------ If you'd like to use other device names instead of default naming convention, all you have to do is to modify the internal code within the shell script "msmknod". First, you have to open "msmknod" by vi. Locate each line contains "ttyM" and "cum" and change them to the device name you desired. "msmknod" creates the device names you need next time executed. Change Major number ------------------- If major number 30 and 35 had been occupied, you may have to select 2 free major numbers for this driver. There are 3 steps to change major numbers. 1. Find free major numbers In /proc/devices, you may find all the major numbers occupied in the system. Please select 2 major numbers that are available. e.g. 40, 45. 2. Create special files Run /moxa/mxser/driver/msmknod to create special files with specified major numbers. 3. Modify driver with new major number Run vi to open /moxa/mxser/driver/mxser.c. Locate the line contains "MXSERMAJOR". Change the content as below. #define MXSERMAJOR 40 #define MXSERCUMAJOR 45 4. Run # make install in /moxa/mxser/driver. 3.6 Verify driver installation You may refer to /var/log/messages to check the latest status log reported by this driver whenever it's activated. ----------------------------------------------------------------------------- 4. Utilities There are 3 utilities contained in this driver. They are msdiag, msmon and msterm. These 3 utilities are released in form of source code. They should be compiled into executable file and copied into /usr/bin. msdiag - Diagnostic -------------------- This utility provides the function to detect what Moxa Smartio multiport board exists in the system. msmon - Port Monitoring ----------------------- This utility gives the user a quick view about all the MOXA ports' activities. One can easily learn each port's total received/transmitted (Rx/Tx) character count since the time when the monitoring is started. Rx/Tx throughputs per second are also reported in interval basis (e.g. the last 5 seconds) and in average basis (since the time the monitoring is started). You can reset all ports' count by key. <+> <-> (plus/minus) keys to change the displaying time interval. Press on the port, that cursor stay, to view the port's communication parameters, signal status, and input/output queue. msterm - Terminal Emulation --------------------------- This utility provides data sending and receiving ability of all tty ports, especially for MOXA ports. It is quite useful for testing simple application, for example, sending AT command to a modem connected to the port or used as a terminal for login purpose. Note that this is only a dumb terminal emulation without handling full screen operation. ----------------------------------------------------------------------------- 5. Setserial Supported Setserial parameters are listed as below. uart set UART type(16450-->disable FIFO, 16550A-->enable FIFO) close_delay set the amount of time(in 1/100 of a second) that DTR should be kept low while being closed. closing_wait set the amount of time(in 1/100 of a second) that the serial port should wait for data to be drained while being closed, before the receiver is disable. spd_hi Use 57.6kb when the application requests 38.4kb. spd_vhi Use 115.2kb when the application requests 38.4kb. spd_normal Use 38.4kb when the application requests 38.4kb. ----------------------------------------------------------------------------- 6. Troubleshooting The boot time error mesages and solutions are stated as clearly as possible. If all the possible solutions fail, please contact our technical support team to get more help. Error msg: More than 4 Moxa Smartio family boards found. Fifth board and after are ignored. Solution: To avoid this problem, please unplug fifth and after board, because Moxa driver supports up to 4 boards. Error msg: Request_irq fail, IRQ(?) may be conflict with another device. Solution: Other PCI or ISA devices occupy the assigned IRQ. If you are not sure which device causes the situation,please check /proc/interrupts to find free IRQ and simply change another free IRQ for Moxa board. Error msg: Board #: C1xx Series(CAP=xxx) interupt number invalid. Solution: Each port within the same multiport board shares the same IRQ. Please set one IRQ (IRQ doesn't equal to zero) for one Moxa board. Error msg: No interrupt vector be set for Moxa ISA board(CAP=xxx). Solution: Moxa ISA board needs an interrupt vector.Please refer to user's manual "Hardware Installation" chapter to set interrupt vector. Error msg: Couldn't install MOXA Smartio family driver! Solution: Load Moxa driver fail, the major number may conflict with other devices. Please refer to previous section 3.5 to change a free major number for Moxa driver. Error msg: Couldn't install MOXA Smartio family callout driver! Solution: Load Moxa callout driver fail, the callout device major number may conflict with other devices. Please refer to previous section 3.5 to change a free callout device major number for Moxa driver. ----------------------------------------------------------------------------- MTRR (Memory Type Range Register) control 2 May 1998 Richard Gooch On Intel Pentium Pro/Pentium II systems the Memory Type Range Registers (MTRRs) may be used to control processor access to memory ranges. This is most useful when you have a video (VGA) card on a PCI or AGP bus. Enabling write-combining allows bus write transfers to be combined into a larger transfer before bursting over the PCI/AGP bus. This can increase performance of image write operations 2.5 times or more. The CONFIG_MTRR option creates a /proc/mtrr file which may be used to manipulate your MTRRs. Typically the X server should use this. This should have a reasonably generic interface so that similar control registers on other processors can be easily supported. There are two interfaces to /proc/mtrr: one is an ASCII interface which allows you to read and write. The other is an ioctl() interface. The ASCII interface is meant for administration. The ioctl() interface is meant for C programmes (i.e. the X server). The interfaces are described below, with sample commands and C code. =============================================================================== Reading MTRRs from the shell: % cat /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 128MB: write-back, count=1 reg01: base=0x08000000 ( 128MB), size= 64MB: write-back, count=1 =============================================================================== Creating MTRRs from the shell: # echo "base=0xf8000000 size=0x400000 type=write-combining" >! /proc/mtrr And the result thereof: % cat /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 128MB: write-back, count=1 reg01: base=0x08000000 ( 128MB), size= 64MB: write-back, count=1 reg02: base=0xf8000000 (3968MB), size= 4MB: write-combining, count=1 This is for video RAM at base address 0xf8000000 and size 4 megabytes. To find out your base address, you need to look at the output of your X server, which tells you where the linear framebuffer address is. A typical line that you may get is: (--) S3: PCI: 968 rev 0, Linear FB @ 0xf8000000 Note that you should only use the value from the X server, as it may move the framebuffer base address, so the only value you can trust is that reported by the X server. To find out the size of your framebuffer (what, you don't actually know?), the following line will tell you: (--) S3: videoram: 4096k That's 4 megabytes, which is 0x400000 bytes (in hexadecimal). A patch is being written for XFree86 which will make this automatic: in other words the X server will manipulate /proc/mtrr using the ioctl() interface, so users won't have to do anything. If you use a commercial X server, lobby your vendor to add support for MTRRs. =============================================================================== Creating overlapping MTRRs: %echo "base=0xfb000000 size=0x1000000 type=write-combining" >/proc/mtrr %echo "base=0xfb000000 size=0x1000 type=uncachable" >/proc/mtrr And the results: cat /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 64MB: write-back, count=1 reg01: base=0xfb000000 (4016MB), size= 16MB: write-combining, count=1 reg02: base=0xfb000000 (4016MB), size= 4kB: uncachable, count=1 Some cards (especially Voodoo Graphics boards) need this 4 kB area excluded from the beginning of the region because it is used for registers. NOTE: You can only create type=uncachable region, if the first region that you created is type=write-combining. =============================================================================== Removing MTRRs from the shell: % echo "disable=2" >! /proc/mtrr =============================================================================== Reading MTRRs from a C programme using ioctl()'s: /* mtrr-show.c Source file for mtrr-show (example programme to show MTRRs using ioctl()'s) Copyright (C) 1997-1998 Richard Gooch This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Richard Gooch may be reached by email at rgooch@atnf.csiro.au The postal address is: Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. */ /* This programme will use an ioctl() on /proc/mtrr to show the current MTRR settings. This is an alternative to reading /proc/mtrr. Written by Richard Gooch 17-DEC-1997 Last updated by Richard Gooch 2-MAY-1998 */ #include #include #include #include #include #include #include #define MTRR_NEED_STRINGS #include #define TRUE 1 #define FALSE 0 #define ERRSTRING strerror (errno) int main () { int fd; struct mtrr_gentry gentry; if ( ( fd = open ("/proc/mtrr", O_RDONLY, 0) ) == -1 ) { if (errno == ENOENT) { fputs ("/proc/mtrr not found: not supported or you don't have a PPro?\n", stderr); exit (1); } fprintf (stderr, "Error opening /proc/mtrr\t%s\n", ERRSTRING); exit (2); } for (gentry.regnum = 0; ioctl (fd, MTRRIOC_GET_ENTRY, &gentry) == 0; ++gentry.regnum) { if (gentry.size < 1) { fprintf (stderr, "Register: %u disabled\n", gentry.regnum); continue; } fprintf (stderr, "Register: %u base: 0x%lx size: 0x%lx type: %s\n", gentry.regnum, gentry.base, gentry.size, mtrr_strings[gentry.type]); } if (errno == EINVAL) exit (0); fprintf (stderr, "Error doing ioctl(2) on /dev/mtrr\t%s\n", ERRSTRING); exit (3); } /* End Function main */ =============================================================================== Creating MTRRs from a C programme using ioctl()'s: /* mtrr-add.c Source file for mtrr-add (example programme to add an MTRRs using ioctl()) Copyright (C) 1997-1998 Richard Gooch This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Richard Gooch may be reached by email at rgooch@atnf.csiro.au The postal address is: Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. */ /* This programme will use an ioctl() on /proc/mtrr to add an entry. The first available mtrr is used. This is an alternative to writing /proc/mtrr. Written by Richard Gooch 17-DEC-1997 Last updated by Richard Gooch 2-MAY-1998 */ #include #include #include #include #include #include #include #include #include #define MTRR_NEED_STRINGS #include #define TRUE 1 #define FALSE 0 #define ERRSTRING strerror (errno) int main (int argc, char **argv) { int fd; struct mtrr_sentry sentry; if (argc != 4) { fprintf (stderr, "Usage:\tmtrr-add base size type\n"); exit (1); } sentry.base = strtoul (argv[1], NULL, 0); sentry.size = strtoul (argv[2], NULL, 0); for (sentry.type = 0; sentry.type < MTRR_NUM_TYPES; ++sentry.type) { if (strcmp (argv[3], mtrr_strings[sentry.type]) == 0) break; } if (sentry.type >= MTRR_NUM_TYPES) { fprintf (stderr, "Illegal type: \"%s\"\n", argv[3]); exit (2); } if ( ( fd = open ("/proc/mtrr", O_WRONLY, 0) ) == -1 ) { if (errno == ENOENT) { fputs ("/proc/mtrr not found: not supported or you don't have a PPro?\n", stderr); exit (3); } fprintf (stderr, "Error opening /proc/mtrr\t%s\n", ERRSTRING); exit (4); } if (ioctl (fd, MTRRIOC_ADD_ENTRY, &sentry) == -1) { fprintf (stderr, "Error doing ioctl(2) on /dev/mtrr\t%s\n", ERRSTRING); exit (5); } fprintf (stderr, "Sleeping for 5 seconds so you can see the new entry\n"); sleep (5); close (fd); fputs ("I've just closed /proc/mtrr so now the new entry should be gone\n", stderr); } /* End Function main */ =============================================================================== Network Block Device (TCP version) Note: Network Block Device is now experimental, which approximately means, that it works on my computer, and it worked on one of school computers. What is it: With this compiled in the kernel, Linux can use a remote server as one of its block devices. So every time the client computer wants to read /dev/nd0, it sends a request over TCP to the server, which will reply with the data read. This can be used for stations with low disk space (or even diskless - if you boot from floppy) to borrow disk space from another computer. Unlike NFS, it is possible to put any filesystem on it etc. It is impossible to use NBD as a root filesystem, since it requires a user-level program to start. It also allows you to run block-device in user land (making server and client physically the same computer, communicating using loopback). Current state: It currently works. Network block device looks like being pretty stable. I originally thought that it is impossible to swap over TCP. It turned out not to be true - swapping over TCP now works and seems to be deadlock-free, but it requires heavy patches into Linux's network layer. Devices: Network block device uses major 43, minors 0..n (where n is configurable in nbd.h). Create these files by mknod when needed. After that, your ls -l /dev/ should look like: brw-rw-rw- 1 root root 43, 0 Apr 11 00:28 nd0 brw-rw-rw- 1 root root 43, 1 Apr 11 00:28 nd1 ... Protocol: Userland program passes file handle with connected TCP socket to actual kernel driver. This way, the kernel does not have to care about connecting etc. Protocol is rather simple: If the driver is asked to read from block device, it sends packet of following form "request" (all data are in network byte order): __u32 magic; must be equal to 0x12560953 __u32 from; position in bytes to read from / write at __u32 len; number of bytes to be read / written __u64 handle; handle of operation __u32 type; 0 = read 1 = write ... in case of write operation, this is immediately followed len bytes of data When operation is completed, server responds with packet of following structure "reply": __u32 magic; must be equal to __u64 handle; handle copied from request __u32 error; 0 = operation completed successfully, else error code ... in case of read operation with no error, this is immediately followed len bytes of data For more information, look at http://atrey.karlin.mff.cuni.cz/~pavel. Mounting the root filesystem via NFS (nfsroot) =============================================== Written 1996 by Gero Kuhlmann Updated 1997 by Martin Mares If you want to use a diskless system, as an X-terminal or printer server for example, you have to put your root filesystem onto a non-disk device. This can either be a ramdisk (see initrd.txt in this directory for further information) or a filesystem mounted via NFS. The following text describes on how to use NFS for the root filesystem. For the rest of this text 'client' means the diskless system, and 'server' means the NFS server. 1.) Enabling nfsroot capabilities ----------------------------- In order to use nfsroot you have to select support for NFS during kernel configuration. Note that NFS cannot be loaded as a module in this case. The configuration script will then ask you whether you want to use nfsroot, and if yes what kind of auto configuration system you want to use. Selecting both BOOTP and RARP is safe. 2.) Kernel command line ------------------- When the kernel has been loaded by a boot loader (either by loadlin, LILO or a network boot program) it has to be told what root fs device to use, and where to find the server and the name of the directory on the server to mount as root. This can be established by a couple of kernel command line parameters: root=/dev/nfs This is necessary to enable the pseudo-NFS-device. Note that it's not a real device but just a synonym to tell the kernel to use NFS instead of a real device. nfsroot=[:][,] If the `nfsroot' parameter is NOT given on the command line, the default "/tftpboot/%s" will be used. Specifies the IP address of the NFS server. If this field is not given, the default address as determined by the `ip' variable (see below) is used. One use of this parameter is for example to allow using different servers for RARP and NFS. Usually you can leave this blank. Name of the directory on the server to mount as root. If there is a "%s" token in the string, the token will be replaced by the ASCII-representation of the client's IP address. Standard NFS options. All options are separated by commas. If the options field is not given, the following defaults will be used: port = as given by server portmap daemon rsize = 1024 wsize = 1024 timeo = 7 retrans = 3 acregmin = 3 acregmax = 60 acdirmin = 30 acdirmax = 60 flags = hard, nointr, noposix, cto, ac ip=:::::: This parameter tells the kernel how to configure IP addresses of devices and also how to set up the IP routing table. It was originally called `nfsaddrs', but now the boot-time IP configuration works independently of NFS, so it was renamed to `ip' and the old name remained as an alias for compatibility reasons. If this parameter is missing from the kernel command line, all fields are assumed to be empty, and the defaults mentioned below apply. In general this means that the kernel tries to configure everything using both RARP and BOOTP (depending on what has been enabled during kernel confi- guration, and if both what protocol answer got in first). IP address of the client. If empty, the address will either be determined by RARP or BOOTP. What protocol is used de- pends on what has been enabled during kernel configuration and on the parameter. If this parameter is not empty, neither RARP nor BOOTP will be used. IP address of the NFS server. If RARP is used to determine the client address and this parameter is NOT empty only replies from the specified server are accepted. To use different RARP and NFS server, specify your RARP server here (or leave it blank), and specify your NFS server in the `nfsroot' parameter (see above). If this entry is blank the address of the server is used which answered the RARP or BOOTP request. IP address of a gateway if the server is on a different subnet. If this entry is empty no gateway is used and the server is assumed to be on the local network, unless a value has been received by BOOTP. Netmask for local network interface. If this is empty, the netmask is derived from the client IP address assuming classful addressing, unless overridden in BOOTP reply. Name of the client. If empty, the client IP address is used in ASCII notation, or the value received by BOOTP. Name of network device to use. If this is empty, all devices are used for RARP and BOOTP requests, and the first one we receive a reply on is configured. If you have only one device, you can safely leave this blank. Method to use for autoconfiguration. If this is either 'rarp' or 'bootp', the specified protocol is used. If the value is 'both' or empty, both protocols are used so far as they have been enabled during kernel configura- tion. 'off' means no autoconfiguration. The parameter can appear alone as the value to the `ip' parameter (without all the ':' characters before) in which case auto- configuration is used. 3.) Kernel loader ------------- To get the kernel into memory different approaches can be used. They depend on what facilities are available: 3.1) Writing the kernel onto a floppy using dd: As always you can just write the kernel onto a floppy using dd, but then it's not possible to use kernel command lines at all. To substitute the 'root=' parameter, create a dummy device on any linux system with major number 0 and minor number 255 using mknod: mknod /dev/boot255 c 0 255 Then copy the kernel zImage file onto a floppy using dd: dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0 And finally use rdev to set the root device: rdev /dev/fd0 /dev/boot255 You can then remove the dummy device /dev/boot255 again. There is no real device available for it. The other two kernel command line parameters cannot be substi- tuted with rdev. Therefore, using this method the kernel will by default use RARP and/or BOOTP, and if it gets an answer via RARP will mount the directory /tftpboot// as its root. If it got a BOOTP answer the directory name in that answer is used. 3.2) Using LILO When using LILO you can specify all necessary command line parameters with the 'append=' command in the LILO configuration file. However, to use the 'root=' command you also need to set up a dummy device as described in 3.1 above. For how to use LILO and its 'append=' command please refer to the LILO documentation. 3.3) Using loadlin When you want to boot Linux from a DOS command prompt without having a local hard disk to mount as root, you can use loadlin. I was told that it works, but haven't used it myself yet. In general you should be able to create a kernel command line simi- lar to how LILO is doing it. Please refer to the loadlin docu- mentation for further information. 3.4) Using a boot ROM This is probably the most elegant way of booting a diskless client. With a boot ROM the kernel gets loaded using the TFTP protocol. As far as I know, no commercial boot ROMs yet support booting Linux over the network, but there are two free implementations of a boot ROM available on sunsite.unc.edu and its mirrors. They are called 'netboot-nfs' and 'etherboot'. Both contain everything you need to boot a diskless Linux client. 4.) Credits ------- The nfsroot code in the kernel and the RARP support have been written by Gero Kuhlmann . The rest of the IP layer autoconfiguration code has been written by Martin Mares . In order to write the initial version of nfsroot I would like to thank Jens-Uwe Mager for his help. Quick Summary ------------- cd /usr/src/linux/scripts/ksymoops make ksymoops ./ksymoops < the_oops.txt and send the output the maintainer of the kernel area that seems to be involved with the problem. Don't worry too much about getting the wrong person. If you are unsure send it to the person responsible for the code relevant to what you were doing. If it occurs repeatably try and describe how to recreate it. Thats worth even more than the oops If you are totally stumped as to whom to send the report, send it to linux-kernel@vger.rutgers.edu. Thanks for your help in making Linux as stable as humanly possible. Where is the_oops.txt? ---------------------- Normally the Oops text is read from the kernel buffers by klogd and handed to syslogd which writes it to a syslog file, typically /var/log/messages (depends on /etc/syslog.conf). Sometimes klogd dies, in which case you can run dmesg > file to read the data from the kernel buffers and save it. Or you can cat /proc/kmsg > file, however you have to break in to stop the transfer, kmsg is a "never ending file". If the machine has crashed so badly that you cannot enter commands or the disk is not available then you have three options :- (1) Hand copy the text from the screen and type it in after the machine has restarted. Messy but it is the only option if you have not planned for a crash. (2) Boot with a serial console (see Documentation/serial-console.txt), run a null modem to a second machine and capture the output there using your favourite communication program. Minicom works well. (3) Patch the kernel with one of the crash dump patches. These save data to a floppy disk or video rom or a swap partition. None of these are standard kernel patches so you have to find and apply them yourself. Search kernel archives for kmsgdump, lkcd and oops+smram. No matter how you capture the log output, feed the resulting file to ksymoops along with /proc/ksyms and /proc/modules that applied at the time of the crash. /var/log/ksymoops can be useful to capture the latter, man ksymoops for details. Full Information ---------------- From: Linus Torvalds How to track down an Oops.. [originally a mail to linux-kernel] The main trick is having 5 years of experience with those pesky oops messages ;-) Actually, there are things you can do that make this easier. I have two separate approaches: gdb /usr/src/linux/vmlinux gdb> disassemble That's the easy way to find the problem, at least if the bug-report is well made (like this one was - run through ksymoops to get the information of which function and the offset in the function that it happened in). Oh, it helps if the report happens on a kernel that is compiled with the same compiler and similar setups. The other thing to do is disassemble the "Code:" part of the bug report: ksymoops will do this too with the correct tools (and new version of ksymoops), but if you don't have the tools you can just do a silly program: char str[] = "\xXX\xXX\xXX..."; main(){} and compile it with gcc -g and then do "disassemble str" (where the "XX" stuff are the values reported by the Oops - you can just cut-and-paste and do a replace of spaces to "\x" - that's what I do, as I'm too lazy to write a program to automate this all). Finally, if you want to see where the code comes from, you can do cd /usr/src/linux make fs/buffer.s # or whatever file the bug happened in and then you get a better idea of what happens than with the gdb disassembly. Now, the trick is just then to combine all the data you have: the C sources (and general knowledge of what it _should_ do), the assembly listing and the code disassembly (and additionally the register dump you also get from the "oops" message - that can be useful to see _what_ the corrupted pointers were, and when you have the assembler listing you can also match the other registers to whatever C expressions they were used for). Essentially, you just look at what doesn't match (in this case it was the "Code" disassembly that didn't match with what the compiler generated). Then you need to find out _why_ they don't match. Often it's simple - you see that the code uses a NULL pointer and then you look at the code and wonder how the NULL pointer got there, and if it's a valid thing to do you just check against it.. Now, if somebody gets the idea that this is time-consuming and requires some small amount of concentration, you're right. Which is why I will mostly just ignore any panic reports that don't have the symbol table info etc looked up: it simply gets too hard to look it up (I have some programs to search for specific patterns in the kernel code segment, and sometimes I have been able to look up those kinds of panics too, but that really requires pretty good knowledge of the kernel just to be able to pick out the right sequences etc..) _Sometimes_ it happens that I just see the disassembled code sequence from the panic, and I know immediately where it's coming from. That's when I get worried that I've been doing this for too long ;-) Linus --------------------------------------------------------------------------- Notes on Oops tracing with klogd: In order to help Linus and the other kernel developers there has been substantial support incorporated into klogd for processing protection faults. In order to have full support for address resolution at least version 1.3-pl3 of the sysklogd package should be used. When a protection fault occurs the klogd daemon automatically translates important addresses in the kernel log messages to their symbolic equivalents. This translated kernel message is then forwarded through whatever reporting mechanism klogd is using. The protection fault message can be simply cut out of the message files and forwarded to the kernel developers. Two types of address resolution are performed by klogd. The first is static translation and the second is dynamic translation. Static translation uses the System.map file in much the same manner that ksymoops does. In order to do static translation the klogd daemon must be able to find a system map file at daemon initialization time. See the klogd man page for information on how klogd searches for map files. Dynamic address translation is important when kernel loadable modules are being used. Since memory for kernel modules is allocated from the kernel's dynamic memory pools there are no fixed locations for either the start of the module or for functions and symbols in the module. The kernel supports system calls which allow a program to determine which modules are loaded and their location in memory. Using these system calls the klogd daemon builds a symbol table which can be used to debug a protection fault which occurs in a loadable kernel module. At the very minimum klogd will provide the name of the module which generated the protection fault. There may be additional symbolic information available if the developer of the loadable module chose to export symbol information from the module. Since the kernel module environment can be dynamic there must be a mechanism for notifying the klogd daemon when a change in module environment occurs. There are command line options available which allow klogd to signal the currently executing daemon that symbol information should be refreshed. See the klogd manual page for more information. A patch is included with the sysklogd distribution which modifies the modules-2.0.0 package to automatically signal klogd whenever a module is loaded or unloaded. Applying this patch provides essentially seamless support for debugging protection faults which occur with kernel loadable modules. The following is an example of a protection fault in a loadable module processed by klogd: --------------------------------------------------------------------------- Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 Aug 29 09:51:01 blizard kernel: *pde = 00000000 Aug 29 09:51:01 blizard kernel: Oops: 0002 Aug 29 09:51:01 blizard kernel: CPU: 0 Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3 --------------------------------------------------------------------------- Dr. G.W. Wettstein Oncology Research Div. Computing Facility Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com 820 4th St. N. Fargo, ND 58122 Phone: 701-234-7556 Linux and parallel port IDE devices PARIDE v1.03 (c) 1997-8 Grant Guenther 1. Introduction Owing to the simplicity and near universality of the parallel port interface to personal computers, many external devices such as portable hard-disk, CD-ROM, LS-120 and tape drives use the parallel port to connect to their host computer. While some devices (notably scanners) use ad-hoc methods to pass commands and data through the parallel port interface, most external devices are actually identical to an internal model, but with a parallel-port adapter chip added in. Some of the original parallel port adapters were little more than mechanisms for multiplexing a SCSI bus. (The Iomega PPA-3 adapter used in the ZIP drives is an example of this approach). Most current designs, however, take a different approach. The adapter chip reproduces a small ISA or IDE bus in the external device and the communication protocol provides operations for reading and writing device registers, as well as data block transfer functions. Sometimes, the device being addressed via the parallel cable is a standard SCSI controller like an NCR 5380. The "ditto" family of external tape drives use the ISA replicator to interface a floppy disk controller, which is then connected to a floppy-tape mechanism. The vast majority of external parallel port devices, however, are now based on standard IDE type devices, which require no intermediate controller. If one were to open up a parallel port CD-ROM drive, for instance, one would find a standard ATAPI CD-ROM drive, a power supply, and a single adapter that interconnected a standard PC parallel port cable and a standard IDE cable. It is usually possible to exchange the CD-ROM device with any other device using the IDE interface. The document describes the support in Linux for parallel port IDE devices. It does not cover parallel port SCSI devices, "ditto" tape drives or scanners. Many different devices are supported by the parallel port IDE subsystem, including: MicroSolutions backpack CD-ROM MicroSolutions backpack PD/CD MicroSolutions backpack hard-drives MicroSolutions backpack 8000t tape drive SyQuest EZ-135, EZ-230 & SparQ drives Avatar Shark Imation Superdisk LS-120 Maxell Superdisk LS-120 FreeCom Power CD Hewlett-Packard 5GB and 8GB tape drives Hewlett-Packard 7100 and 7200 CD-RW drives as well as most of the clone and no-name products on the market. To support such a wide range of devices, PARIDE, the parallel port IDE subsystem, is actually structured in three parts. There is a base paride module which provides a registry and some common methods for accessing the parallel ports. The second component is a set of high-level drivers for each of the different types of supported devices: pd IDE disk pcd ATAPI CD-ROM pf ATAPI disk pt ATAPI tape pg ATAPI generic (Currently, the pg driver is only used with CD-R drives). The high-level drivers function according to the relevant standards. The third component of PARIDE is a set of low-level protocol drivers for each of the parallel port IDE adapter chips. Thanks to the interest and encouragement of Linux users from many parts of the world, support is available for almost all known adapter protocols: aten ATEN EH-100 (HK) bpck Microsolutions backpack (US) comm DataStor (old-type) "commuter" adapter (TW) dstr DataStor EP-2000 (TW) epat Shuttle EPAT (UK) epia Shuttle EPIA (UK) fit2 FIT TD-2000 (US) fit3 FIT TD-3000 (US) friq Freecom IQ cable (DE) frpw Freecom Power (DE) kbic KingByte KBIC-951A and KBIC-971A (TW) ktti KT Technology PHd adapter (SG) on20 OnSpec 90c20 (US) on26 OnSpec 90c26 (US) 2. Using the PARIDE subsystem While configuring the Linux kernel, you may choose either to build the PARIDE drivers into your kernel, or to build them as modules. In either case, you will need to select "Parallel port IDE device support" as well as at least one of the high-level drivers and at least one of the parallel port communication protocols. If you do not know what kind of parallel port adapter is used in your drive, you could begin by checking the file names and any text files on your DOS installation floppy. Alternatively, you can look at the markings on the adapter chip itself. That's usually sufficient to identify the correct device. You can actually select all the protocol modules, and allow the PARIDE subsystem to try them all for you. For the "brand-name" products listed above, here are the protocol and high-level drivers that you would use: Manufacturer Model Driver Protocol MicroSolutions CD-ROM pcd bpck MicroSolutions PD drive pf bpck MicroSolutions hard-drive pd bpck MicroSolutions 8000t tape pt bpck SyQuest EZ, SparQ pd epat Imation Superdisk pf epat Maxell Superdisk pf friq Avatar Shark pd epat FreeCom CD-ROM pcd frpw Hewlett-Packard 5GB Tape pt epat Hewlett-Packard 7200e (CD) pcd epat Hewlett-Packard 7200e (CD-R) pg epat 2.1 Configuring built-in drivers We recommend that you get to know how the drivers work and how to configure them as loadable modules, before attempting to compile a kernel with the drivers built-in. If you built all of your PARIDE support directly into your kernel, and you have just a single parallel port IDE device, your kernel should locate it automatically for you. If you have more than one device, you may need to give some command line options to your bootloader (eg: LILO), how to do that is beyond the scope of this document. The high-level drivers accept a number of command line parameters, all of which are documented in the source files in linux/drivers/block/paride. By default, each driver will automatically try all parallel ports it can find, and all protocol types that have been installed, until it finds a parallel port IDE adapter. Once it finds one, the probe stops. So, if you have more than one device, you will need to tell the drivers how to identify them. This requires specifying the port address, the protocol identification number and, for some devices, the drive's chain ID. While your system is booting, a number of messages are displayed on the console. Like all such messages, they can be reviewed with the 'dmesg' command. Among those messages will be some lines like: paride: bpck registered as protocol 0 paride: epat registered as protocol 1 The numbers will always be the same until you build a new kernel with different protocol selections. You should note these numbers as you will need them to identify the devices. If you happen to be using a MicroSolutions backpack device, you will also need to know the unit ID number for each drive. This is usually the last two digits of the drive's serial number (but read MicroSolutions' documentation about this). As an example, let's assume that you have a MicroSolutions PD/CD drive with unit ID number 36 connected to the parallel port at 0x378, a SyQuest EZ-135 connected to the chained port on the PD/CD drive and also an Imation Superdisk connected to port 0x278. You could give the following options on your boot command: pd.drive0=0x378,1 pf.drive0=0x278,1 pf.drive1=0x378,0,36 In the last option, pf.drive1 configures device /dev/pf1, the 0x378 is the parallel port base address, the 0 is the protocol registration number and 36 is the chain ID. Please note: while PARIDE will work both with and without the PARPORT parallel port sharing system that is included by the "Parallel port support" option, PARPORT must be included and enabled if you want to use chains of devices on the same parallel port. 2.2 Loading and configuring PARIDE as modules It is much faster and simpler to get to understand the PARIDE drivers if you use them as loadable kernel modules. Note 1: using these drivers with the "kerneld" automatic module loading system is not recommended for beginners, and is not documented here. Note 2: if you build PARPORT support as a loadable module, PARIDE must also be built as loadable modules, and PARPORT must be loaded before the PARIDE modules. To use PARIDE, you must begin by insmod paride this loads a base module which provides a registry for the protocols, among other tasks. Then, load as many of the protocol modules as you think you might need. As you load each module, it will register the protocols that it supports, and print a log message to your kernel log file and your console. For example: # insmod epat paride: epat registered as protocol 0 # insmod kbic paride: k951 registered as protocol 1 paride: k971 registered as protocol 2 Finally, you can load high-level drivers for each kind of device that you have connected. By default, each driver will autoprobe for a single device, but you can support up to four similar devices by giving their individual co-ordinates when you load the driver. For example, if you had two no-name CD-ROM drives both using the KingByte KBIC-951A adapter, one on port 0x378 and the other on 0x3bc you could give the following command: # insmod pcd drive0=0x378,1 drive1=0x3bc,1 For most adapters, giving a port address and protocol number is sufficient, but check the source files in linux/drivers/block/paride for more information. (Hopefully someone will write some man pages one day !). As another example, here's what happens when PARPORT is installed, and a SyQuest EZ-135 is attached to port 0x378: # insmod paride paride: version 1.0 installed # insmod epat paride: epat registered as protocol 0 # insmod pd pd: pd version 1.0, major 45, cluster 64, nice 0 pda: Sharing parport1 at 0x378 pda: epat 1.0, Shuttle EPAT chip c3 at 0x378, mode 5 (EPP-32), delay 1 pda: SyQuest EZ135A, 262144 blocks [128M], (512/16/32), removable media pda: pda1 Note that the last line is the output from the generic partition table scanner - in this case it reports that it has found a disk with one partition. 2.3 Using a PARIDE device Once the drivers have been loaded, you can access PARIDE devices in the same way as their traditional counterparts. You will probably need to create the device "special files". Here is a simple script that you can cut to a file and execute: #!/bin/bash # # mkd -- a script to create the device special files for the PARIDE subsystem # function mkdev { mknod $1 $2 $3 $4 ; chmod 0660 $1 ; chown root:disk $1 } # function pd { D=$( printf \\$( printf "x%03x" $[ $1 + 97 ] ) ) mkdev pd$D b 45 $[ $1 * 16 ] for P in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do mkdev pd$D$P b 45 $[ $1 * 16 + $P ] done } # cd /dev # for u in 0 1 2 3 ; do pd $u ; done for u in 0 1 2 3 ; do mkdev pcd$u b 46 $u ; done for u in 0 1 2 3 ; do mkdev pf$u b 47 $u ; done for u in 0 1 2 3 ; do mkdev pt$u c 96 $u ; done for u in 0 1 2 3 ; do mkdev npt$u c 96 $[ $u + 128 ] ; done for u in 0 1 2 3 ; do mkdev pg$u c 97 $u ; done # # end of mkd With the device files and drivers in place, you can access PARIDE devices like any other Linux device. For example, to mount a CD-ROM in pcd0, use: mount /dev/pcd0 /cdrom If you have a fresh Avatar Shark cartridge, and the drive is pda, you might do something like: fdisk /dev/pda -- make a new partition table with partition 1 of type 83 mke2fs /dev/pda1 -- to build the file system mkdir /shark -- make a place to mount the disk mount /dev/pda1 /shark Devices like the Imation superdisk work in the same way, except that they do not have a partition table. For example to make a 120MB floppy that you could share with a DOS system: mkdosfs /dev/pf0 mount /dev/pf0 /mnt 2.4 The pf driver The pf driver is intended for use with parallel port ATAPI disk devices. The most common devices in this category are PD drives and LS-120 drives. Traditionally, media for these devices are not partitioned. Consequently, the pf driver does not support partitioned media. This may be changed in a future version of the driver. 2.5 Using the pt driver The pt driver for parallel port ATAPI tape drives is a minimal driver. It does not yet support many of the standard tape ioctl operations. For best performance, a block size of 32KB should be used. You will probably want to set the parallel port delay to 0, if you can. 2.6 Using the pg driver The pg driver can be used in conjunction with the cdrecord program to create CD-ROMs. Please get cdrecord version 1.6.1 or later from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . To record CD-R media your parallel port should ideally be set to EPP mode, and the "port delay" should be set to 0. With those settings it is possible to record at 2x speed without any buffer underruns. If you cannot get the driver to work in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only. 3. Troubleshooting 3.1 Use EPP mode if you can The most common problems that people report with the PARIDE drivers concern the parallel port CMOS settings. At this time, none of the PARIDE protocol modules support ECP mode, or any ECP combination modes. If you are able to do so, please set your parallel port into EPP mode using your CMOS setup procedure. 3.2 Check the port delay Some parallel ports cannot reliably transfer data at full speed. To offset the errors, the PARIDE protocol modules introduce a "port delay" between each access to the i/o ports. Each protocol sets a default value for this delay. In most cases, the user can override the default and set it to 0 - resulting in somewhat higher transfer rates. In some rare cases (especially with older 486 systems) the default delays are not long enough. if you experience corrupt data transfers, or unexpected failures, you may wish to increase the port delay. The delay can be programmed using the "driveN" parameters to each of the high-level drivers. Please see the notes above, or read the comments at the beginning of the driver source files in linux/drivers/block/paride. 3.3 Some drives need a printer reset There appear to be a number of "noname" external drives on the market that do not always power up correctly. We have noticed this with some drives based on OnSpec and older Freecom adapters. In these rare cases, the adapter can often be reinitialised by issuing a "printer reset" on the parallel port. As the reset operation is potentially disruptive in multiple device environments, the PARIDE drivers will not do it automatically. You can however, force a printer reset by doing: insmod lp rmmod lp If you have one of these marginal cases, you should probably build your paride drivers as modules, and arrange to do the printer reset before loading the PARIDE drivers. 3.4 Use the verbose option and dmesg if you need help While a lot of testing has gone into these drivers to make them work as smoothly as possible, problems will arise. If you do have problems, please check all the obvious things first: does the drive work in DOS with the manufacturer's drivers ? If that doesn't yield any useful clues, then please make sure that only one drive is hooked to your system, and that either (a) PARPORT is enabled or (b) no other device driver is using your parallel port (check in /proc/ioports). Then, load the appropriate drivers (you can load several protocol modules if you want) as in: # insmod paride # insmod epat # insmod bpck # insmod kbic ... # insmod pd verbose=1 (using the correct driver for the type of device you have, of course). The verbose=1 parameter will cause the drivers to log a trace of their activity as they attempt to locate your drive. Use 'dmesg' to capture a log of all the PARIDE messages (any messages beginning with paride:, a protocol module's name or a driver's name) and include that with your bug report. You can submit a bug report in one of two ways. Either send it directly to the author of the PARIDE suite, by e-mail to grant@torque.net, or join the linux-parport mailing list and post your report there. 3.5 For more information or help You can join the linux-parport mailing list by sending a mail message to linux-parport-request@torque.net with the single word subscribe in the body of the mail message (not in the subject line). Please be sure that your mail program is correctly set up when you do this, as the list manager is a robot that will subscribe you using the reply address in your mail headers. REMOVE any anti-spam gimmicks you may have in your mail headers, when sending mail to the list server. You might also find some useful information on the linux-parport web pages (although they are not always up to date) at http://www.torque.net/parport/ The `parport' code provides parallel-port support under Linux. This includes the ability to share one port between multiple device drivers. You can pass parameters to the parport code to override its automatic detection of your hardware. This is particularly useful if you want to use IRQs, since in general these can't be autoprobed successfully. By default IRQs are not used even if they _can_ be probed. This is because there are a lot of people using the same IRQ for their parallel port and a sound card or network card. The parport code is split into two parts: generic (which deals with port-sharing) and architecture-dependent (which deals with actually using the port). Parport as modules ================== If you load the parport code as a module, say # insmod parport.o to load the generic parport code. You then must load the architecture-dependent code with (for example): # insmod parport_pc.o io=0x3bc,0x378,0x278 irq=none,7,auto to tell the parport code that you want three PC-style ports, one at 0x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an auto-detected IRQ. Currently, PC-style (parport_pc) and Sun Ultra/AX (parport_ax) hardware is supported; more is in the works. KMod ---- If you use kmod, you will find it useful to edit /etc/conf.modules. Here is an example of the lines that need to be added: alias parport_lowlevel parport_pc options parport_pc io=0x378,0x278 irq=7,auto KMod will then automatically load parport_pc (with the options "io=0x378,0x278 irq=7,auto") whenever a parallel port device driver (such as lp) is loaded. Parport probe [optional] ------------- Once the architecture-dependent part of the parport code is loaded into the kernel, you can insert the parport_probe module with: # insmod parport_probe.o This will perform an IEEE1284 probe of any attached devices and log a message similar to: parport0: Printer, BJC-210 (Canon) (If you are using kmod and have configured parport_probe as a module, this will just happen.) The probe information is available in /proc/parport/?/autoprobe. Parport linked into the kernel statically ========================================= If you compile the parport code into the kernel, then you can use kernel boot parameters to get the same effect. Add something like the following to your LILO command line: parport=0x3bc parport=0x378,7 parport=0x278,auto You can have many `parport=...' statements, one for each port you want to add. Adding `parport=0' to the kernel command-line will disable parport support entirely. Adding `parport=auto' to the kernel command-line will make parport use any IRQ lines or DMA channels that it auto-detects. Files in /proc ============== If you have configured the /proc filesystem into your kernel, you will see a new directory entry: /proc/parport. In there will be a directory entry for each parallel port for which parport is configured. In each of those directories are four files describing that parallel port. For example: File: Contents: /proc/parport/0/devices A list of the device drivers using that port. A "+" will appear by the name of the device currently using the port (it might not appear against any). /proc/parport/0/hardware Parallel port's base address, IRQ line and DMA channel. /proc/parport/0/irq The IRQ that parport is using for that port. This is in a separate file to allow you to alter it by writing a new value in (IRQ number or "none"). /proc/parport/0/autoprobe Any IEEE-1284 device ID information that has been acquired. Device drivers ============== Once the parport code is initialised, you can attach device drivers to specific ports. Normally this happens automatically; if the lp driver is loaded it will create one lp device for each port found. You can override this, though, by using parameters either when you load the lp driver: # insmod lp.o parport=0,2 or on the LILO command line: lp=parport0 lp=parport2 Both the above examples would inform lp that you want /dev/lp0 to be the first parallel port, and /dev/lp1 to be the _third_ parallel port, with no lp device associated with the second port (parport1). Note that this is different to the way older kernels worked; there used to be a static association between the I/O port address and the device name, so /dev/lp0 was always the port at 0x3bc. This is no longer the case - if you only have one port, it will default to being /dev/lp0, regardless of base address. Also: * If you selected the IEEE-1284 autoprobe at compile time, you can say `lp=auto' on the kernel command line, and lp will create devices only for those ports that seem to have printers attached. * If you give PLIP the `timid' parameter, either with `plip=timid' on the command line, or with `insmod plip timid=1' when using modules, it will avoid any ports that seem to be in use by other devices. * IRQ autoprobing works only for a few port types at the moment. -- Philip.Blundell@pobox.com tim@cyberelk.demon.co.uk Few Notes About The PCI Subsystem or "What should you avoid when writing PCI drivers" by Martin Mares on 13-Feb-1998 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. How to find PCI devices ~~~~~~~~~~~~~~~~~~~~~~~~~~ In case your driver wants to search for all devices with given vendor/device ID, it should use: struct pci_dev *dev = NULL; while (dev = pci_find_device(VENDOR_ID, DEVICE_ID, dev)) configure_device(dev); For class-based search, use pci_find_class(CLASS_ID, dev). In case you want to do some complex matching, look at pci_devices -- it's a linked list of pci_dev structures for all PCI devices in the system. All these methods return a pointer to a pci_dev structure which is used as a parameter for many other PCI functions. The rest of them accept bus and device/function numbers which can be found in pci_dev->bus->number and pci_dev->devfn. Feel free to use all other fields of the pci_dev structure, but don't modify them. The pci_present() function can be used to test presence of PCI in the machine. 2. How to access PCI config space ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can use pci_(read|write)_config_(byte|word|dword) to access the config space of a device represented by pci_dev. All these functions return 0 when successful or an error code (PCIBIOS_...) which can be translated to a text string by pcibios_strerror. Most drivers expect that accesses to valid PCI devices don't fail. In case you want to address the devices by bus/device/function numbers, use pcibios_(read_write)_config_(byte|word|dword). If you access fields in the standard portion of the config header, please use symbolic names of locations and bits declared in . 3. Addresses and interrupts ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Memory and port addresses and interrupt numbers should NOT be read from the config space. You should use the values in the pci_dev structure as they might have been remapped by the kernel. If your PCI device uses PCI I/O space, you need to use the check_region(), request_region() and release_region() routines. These prevent devices from having conflicting I/O regions. You access your registers using the inb(), inw(), inl(), outb(), outw(), or outl() routines passing the value of (struct pci_dev *) dev->base_address[] masked by PCI_BASE_ADDRESS_IO_MASK as the base address of your registers. If your PCI device uses PCI memory space, use ioremap() to create a cookie mapping to your PCI device. The mask (struct pci_dev *) dev->base_address[] with PCI_BASE_ADDRESS_MEM_MASK before passing it into ioremap(). This cookie is passed to the readb(), readw(), readl(), writeb(), writew(), and writel() routines when accessing PCI space. You must always use these routines when accessing PCI space from the kernel. Not all architectures allow direct access to PCI memory space from the kernel. The IO-mapping.txt file has information about converting between the various address spaces. People writing DMA device drivers should pay special attention to this information. PCI interrupt routines are always SA_SHIRQ and should use the value from (struct pci_dev *) dev->irq field for the interrupt number passed into request_irq(). Since it is a shared interrupt, you must also always pass a unique dev_id to request_irq(). 4. Obsolete functions ~~~~~~~~~~~~~~~~~~~~~ is obsolete and should not be included in new code. pcibios_find_(device|class) are also obsolete and should be replaced by pci_find_(device|class). 5. Bus mastering ~~~~~~~~~~~~~~~~ If you need to setup a bus-mastering card, just call pci_set_master(). It should set PCI_COMMAND_MASTER in the command register and adjust the latency timer if needed. Berkshire Products PC Watchdog Card Support for ISA Cards Revision A and C Documentation and Driver by Ken Hollis The PC Watchdog is a card that offers the same type of functionality that the WDT card does, only it doesn't require an IRQ to run. Furthermore, the Revision C card allows you to monitor any IO Port to automatically trigger the card into being reset. This way you can make the card monitor hard drive status, or anything else you need. The Watchdog Driver has one basic role: to talk to the card and send signals to it so it doesn't reset your computer ... at least during normal operation. The Watchdog Driver will automatically find your watchdog card, and will attach a running driver for use with that card. After the watchdog drivers have initialized, you can then talk to the card using the PC Watchdog program, available from ftp.bitgate.com:/pub/bitgate/pcwd. I suggest putting a "watchdog -d" before the beginning of an fsck, and a "watchdog -e -t 1" immediately after the end of an fsck. (Remember to run the program with an "&" to run it in the background!) If you want to write a program to be compatible with the PC Watchdog driver, simply do the following: -- Snippet of code -- /* * Watchdog Driver Test Program */ #include #include #include #include #include #include #include int fd; /* * This function simply sends an IOCTL to the driver, which in turn ticks * the PC Watchdog card to reset its internal timer so it doesn't trigger * a computer reset. */ void keep_alive(void) { int dummy; ioctl(fd, WDIOC_KEEPALIVE, &dummy); } /* * The main program. Run the program with "-d" to disable the card, * or "-e" to enable the card. */ int main(int argc, char *argv[]) { fd = open("/dev/watchdog", O_WRONLY); if (fd == -1) { fprintf(stderr, "Watchdog device not enabled.\n"); fflush(stderr); exit(-1); } if (argc > 1) { if (!strncasecmp(argv[1], "-d", 2)) { ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD); fprintf(stderr, "Watchdog card disabled.\n"); fflush(stderr); exit(0); } else if (!strncasecmp(argv[1], "-e", 2)) { ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD); fprintf(stderr, "Watchdog card enabled.\n"); fflush(stderr); exit(0); } else { fprintf(stderr, "-d to disable, -e to enable.\n"); fprintf(stderr, "run by itself to tick the card.\n"); fflush(stderr); exit(0); } } else { fprintf(stderr, "Watchdog Ticking Away!\n"); fflush(stderr); } while(1) { keep_alive(); sleep(1); } } -- End snippet -- Other IOCTL functions include: WDIOC_GETSUPPORT This returns the support of the card itself. This returns in structure "PCWDS" which returns: options = WDIOS_TEMPPANIC (This card supports temperature) firmware_version = xxxx (Firmware version of the card) WDIOC_GETSTATUS This returns the status of the card, with the bits of WDIOF_* bitwise-anded into the value. (The comments are in linux/pcwd.h) WDIOC_GETBOOTSTATUS This returns the status of the card that was reported at bootup. WDIOC_GETTEMP This returns the temperature of the card. (You can also read /dev/watchdog, which gives a temperature update every second.) WDIOC_SETOPTIONS This lets you set the options of the card. You can either enable or disable the card this way. WDIOC_KEEPALIVE This pings the card to tell it not to reset your computer. And that's all she wrote! -- Ken Hollis (khollis@nurk.org) ----------------------------------------------------------------------- T H E /proc F I L E S Y S T E M ----------------------------------------------------------------------- /proc/sys Terrehon Bowden January 27 1999 Bodo Bauer ----------------------------------------------------------------------- Version 1.1 Kernel version 2.2 ----------------------------------------------------------------------- Contents 1 Introduction/Credits 1.1 Legal Issues 2 The /proc file system 2.1 Process specific subdirectories 2.2 Kernel data 2.3 IDE devices in /proc/ide 2.4 Networking info in /proc/net 2.5 SCSI info 2.6 Parallel port info in /proc/parport 2.7 TTY info in /proc/tty 3 Reading and modifying kernel parameters 3.1 /proc/sys/debug and /proc/sys/proc 3.2 /proc/fs - File system data 3.3 /proc/fs/binfmt_misc - Miscellaneous binary formats 3.4 /proc/sys/kernel - General kernel parameters 3.5 /proc/sys/vm - The virtual memory subsystem 3.6 /proc/sys/dev - Device specific parameters 3.7 /proc/sys/sunrpc - Remote procedure calls 3.8 /proc/sys/net - Networking stuff 3.9 /proc/sys/net/ipv4 - IPV4 settings=20 3.10 Appletalk 3.11 IPX ----------------------------------------------------------------------- 1 Introduction/Credits This documentation is part of a soon to be released book published by IDG Books on the SuSE Linux distribution. As there is no complete documentation for the /proc file system and we've used many freely available sources to write this chapter, it seems only fair to give the work back to the Linux community. This work is based on the 2.1.132 and 2.2.0-pre-kernel versions. I'm afraid it's still far from complete, but we hope it will be useful. As far as we know, it is the first 'all-in-one' document about the /proc file system. It is focused on the Intel x86 hardware, so if you are looking for PPC, ARM, SPARC, APX, etc., features, you probably won't find what you are looking for. It also only covers IPv4 networking, not IPv6 nor other protocols - sorry. We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov. We'd also like to extend a special thank you to Andi Kleen for documentation, which we relied on heavily to create this document, as well as the additional information he provided. Thanks to everybody else who contributed source or docs to the Linux kernel and helped create a great piece of software... :) If you have any comments, corrections or additions, please don't hesitate to contact Bodo Bauer at bb@ricochet.net. We'll be happy to add them to this document. The latest version of this document is available online at http://www.suse.com/~bb/Docs/proc.html in HTML, ASCII, and as Postscript file. 1.1 Legal Stuff We don't guarantee the correctness of this document, and if you come to us complaining about how you screwed up your system because of incorrect documentation, we won't feel responsible... ----------------------------------------------------------------------- 2 The /proc file system The proc file system acts as an interface to internal data structures in the kernel. It can be used to obtain information about the system and to change certain kernel parameters at runtime. It contains (among other things) one subdirectory for each process running on the system which is named after the process id (PID) of the process. The link self points to the process reading the file system. 2.1 Process specific subdirectories Each process subdirectory has the in table 1.1 listed entries. _________________________________________________ cmdline Command line arguments environ Values of environment variables fd Directory, which contains all file descriptors mem Memory held by this process stat Process status status Process status in human readable form cwd Link to the current working directory exe Link to the executable of this process maps Memory maps root Link to the root directory of this process statm Process memory status information _________________________________________________ Table 1.1: Process specific entries in /proc For example, to get the status information of a process, all you have to do is read the file /proc/PID/status: > cat /proc/self/status Name: cat State: R (running) Pid: 5633 PPid: 5609 Uid: 501 501 501 501 Gid: 100 100 100 100 Groups: 100 16 VmSize: 804 kB VmLck: 0 kB VmRSS: 344 kB VmData: 68 kB VmStk: 20 kB VmExe: 12 kB VmLib: 660 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 0000000000000000 CapInh: 00000000fffffeff CapPrm: 0000000000000000 CapEff: 0000000000000000 This shows you almost the same information as you would get if you viewed it with the ps command. In fact, ps uses the proc file system to obtain its information. The statm file contains more detailed information about the process memory usage. It contains seven values with the following meanings: size total program size resident size of in memory portions shared number of the pages that are shared trs number of pages that are 'code' drs number of pages of data/stack lrs number of pages of library dt number of dirty pages The ratio text/data/library is approximate only by heuristics. 2.2 Kernel data Similar to the process entries, these are files which give information about the running kernel. The files used to obtain this information are contained in /proc and are listed in table 1.2. Not all of these will be present in your system. It depends on the kernel configuration and the loaded modules, which files are there, and which are missing. ________________________________________________ apm Advanced power management info cmdline Kernel command line cpuinfo Info about the CPU devices Available devices (block and character) dma Used DMS channels filesystems Supported filesystems interrupts Interrupt usage ioports I/O port usage kcore Kernel core image kmsg Kernel messages ksyms Kernel symbol table loadavg Load average locks Kernel locks meminfo Memory info misc Miscellaneous modules List of loaded modules mounts Mounted filesystems partitions Table of partitions known to the system rtc Real time clock slabinfo Slab pool info stat Overall statistics swaps Swap space utilization uptime System uptime version Kernel version ________________________________________________ Table 1.2: Kernel info in /proc You can, for example, check which interrupts are currently in use and what they are used for by looking in the file /proc/interrupts: > cat /proc/interrupts CPU0 0: 8728810 XT-PIC timer 1: 895 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 531695 XT-PIC aha152x 4: 2014133 XT-PIC serial 5: 44401 XT-PIC pcnet_cs 8: 2 XT-PIC rtc 11: 8 XT-PIC i82365 12: 182918 XT-PIC PS/2 Mouse 13: 1 XT-PIC fpu 14: 1232265 XT-PIC ide0 15: 7 XT-PIC ide1 NMI: 0 There three more important subdirectories in /proc: net, scsi and sys. The general rule is that the contents, or even the existence of these directories, depends on your kernel configuration. If SCSI is not enabled, the directory scsi may not exist. The same is true with the net, which is only there when networking support is present in the running kernel. The slabinfo file gives information about memory usage on the slab level. Linux uses slab pools for memory management above page level in version 2.2. Commonly used objects have their own slab pool (like network buffers, directory cache, etc.). 2.3 IDE devices in /proc/ide This subdirectory contains information about all IDE devices that the kernel is aware of. There is one subdirectory for each device (i.e. hard disk) containing the following files: cache The cache capacity Capacity of the medium driver Driver and version geometry Physical and logical geometry identify Device identify block media Media type model Device identifier settings Device setup smart_thresholds IDE disk management thresholds smart_values IDE disk management values 2.4 Networking info in /proc/net This directory follows the usual pattern. Table 1.3 lists the files and their meaning. ____________________________________________________ arp Kernel ARP table dev network devices with statistics dev_mcast Lists the Layer2 multicast groups a device is listening to (interface index, label, number of references, number of bound addresses). dev_stat network device status ip_fwchains Firewall chain linkage ip_fwnames Firewall chains ip_masq Directory containing the masquerading tables. ip_masquerade Major masquerading table netstat Network statistics raw Raw device statistics route Kernel routing table rpc Directory containing rpc info rt_cache Routing cache snmp SNMP data sockstat Socket statistics tcp TCP sockets tr_rif Token ring RIF routing table udp UDP sockets unix UNIX domain sockets wireless Wireless interface data (Wavelan etc) igmp IP multicast addresses, which this host joined psched Global packet scheduler parameters. netlink List of PF_NETLINK sockets. ip_mr_vifs List of multicast virtual interfaces. ip_mr_cache List of multicast routing cache. udp6 UDP sockets (IPv6) tcp6 TCP sockets (IPv6) raw6 Raw device statistics (IPv6) igmp6 IP multicast addresses, which this host joineed (IPv6) if_inet6 List of IPv6 interface addresses. ipv6_route Kernel routing table for IPv6 rt6_stats global IPv6 routing tables statistics. sockstat6 Socket statistics (IPv6) snmp6 Snmp data (IPv6) ____________________________________________________ Table 1.3: Network info in /proc/net You can use this information to see which network devices are available in your system and how much traffic was routed over those devices: > cat /proc/net/dev Inter-|Receive |[... face |bytes packets errs drop fifo frame compressed multicast|[... lo: 908188 5596 0 0 0 0 0 0 [... ppp0:15475140 20721 410 0 0 410 0 0 [... eth0: 614530 7085 0 0 0 0 0 1 [... ...] Transmit ...] bytes packets errs drop fifo colls carrier compressed ...] 908188 5596 0 0 0 0 0 0 ...] 1375103 17405 0 0 0 0 0 0 ...] 1703981 5535 0 0 0 3 0 0 2.5 SCSI info If you have a SCSI host adapter in your system, you'll find a subdirectory named after the driver for this adapter in /proc/scsi. You'll also see a list of all recognized SCSI devices in /proc/scsi: >cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: QUANTUM Model: XP34550W Rev: LXY4 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 01 Lun: 00 Vendor: SEAGATE Model: ST34501W Rev: 0018 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 02 Lun: 00 Vendor: SEAGATE Model: ST34501W Rev: 0017 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 04 Lun: 00 Vendor: ARCHIVE Model: Python 04106-XXX Rev: 703b Type: Sequential-Access ANSI SCSI revision: 02 The directory named after the driver has one file for each adapter found in the system. These files contain information about the controller, including the used IRQ and the IO address range: >cat /proc/scsi/ncr53c8xx/0 General information: Chip NCR53C875, device id 0xf, revision id 0x4 IO port address 0xec00, IRQ number 11 Synchronous period factor 12, max commands per lun 4 2.6 Parallel port info in /proc/parport The directory /proc/parport contains information about the parallel ports of your system. It has one subdirectory for each port, named after the port number (0,1,2,...). This directory contains four files: autoprobe Autoprobe results of this port devices Connected device modules hardware Hardware info (port type, io-port, DMA, IRQ, etc.) irq Used interrupt, if any 2.7 TTY info in /proc/tty Information about the available and the actually used tty's can be found in /proc/tty. You'll find entries for drivers and line disciplines in this directory, as shown in the table below: drivers List of drivers and their usage ldiscs Registered line disciplines driver/serial Usage statistic and status of single tty lines To see which tty's are currently in use, you can simply look into the file /proc/tty/drivers: >cat /proc/tty/drivers pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master serial /dev/cua 5 64-67 serial:callout serial /dev/ttyS 4 64-67 serial /dev/tty0 /dev/tty0 4 0 system:vtmaster /dev/ptmx /dev/ptmx 5 2 system /dev/console /dev/console 5 1 system:console /dev/tty /dev/tty 5 0 system:/dev/tty unknown /dev/tty 4 1-63 console ----------------------------------------------------------------------- 3 Reading and modifying kernel parameters A very interesting part of /proc is the directory /proc/sys. This not only provides information, it also allows you to change parameters within the kernel. Be very careful when trying this. You can optimize your system, but you also can crash it. Never play around with kernel parameters on a production system. Set up a development machine and test to make sure that everything works the way you want it to. You may have no alternative but to reboot the machine once an error has been made. To change a value, simply echo the new value into the file. An example is given below in the section on the file system data. You need to be root to do this. You can create your own boot script to get this done every time your system boots. The files in /proc/sys can be used to tune and monitor miscellaneous and general things in the operation of the Linux kernel. Since some of the files can inadvertently disrupt your system, it is advisable to read both documentation and source before actually making adjustments. In any case, be very careful when writing to any of these files. The entries in /proc may change slightly between the 2.1.* and the 2.2 kernel, so review the kernel documentation if there is any doubt. You'll find the documentation in the directory /usr/src/linux/Documentation/sys. This chapter is heavily based on the documentation included in the pre 2.2 kernels. Thanks to Rick van Riel for providing this information. 3.1 /proc/sys/debug and /proc/sys/proc These two subdirectories are empty. 3.2 /proc/fs - File system data This subdirectory contains specific file system, file handle, inode, dentry and quota information. Currently, these files are in /proc/sys/fs: dentry-state Status of the directory cache. Since directory entries are dynamically allocated and deallocated, this file gives information about the current status. It holds six values, in which the last two are not used and are always zero. The other four mean: nr_dentry Seems to be zero all the time nr_unused Number of unused cache entries age_limit Age in seconds after the entry may be reclaimed, when memory is short want_pages internal dquot-nr and dquot-max The file dquot-max shows the maximum number of cached disk quota entries. The file dquot-nr shows the number of allocated disk quota entries and the number of free disk quota entries. If the number of free cached disk quotas is very low and you have a large number of simultaneous system users, you might want to raise the limit. file-nr and file-max The kernel allocates file handles dynamically, but as yet doesn't free them again. The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate. When you get a lot of error messages about running out of file handles, you might want to raise this limit. The default value is 4096. To change it, just write the new number into the file: # cat /proc/sys/fs/file-max 4096 # echo 8192 > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 8192 This method of revision is useful for all customizable parameters of the kernel - simply echo the new value to the corresponding file. The three values in file-nr denote the number of allocated file handles, the number of used file handles, and the maximum number of file handles. When the allocated file handles come close to the maximum, but the number of actually used ones is far behind, you've encountered a peak in your usage of file handles and you don't need to increase the maximum. However, there is still a per process limit of open files, which unfortunatly can't be changed that easily. It is set to 1024 by default. To change this you have to edit the files limits.h and fs.h in the directory /usr/src/linux/include/linux. Change the definition of NR_OPEN and recompile the kernel. inode-state, inode-nr and inode-max As with file handles, the kernel allocates the inode structures dynamically, but can't free them yet. The value in inode-max denotes the maximum number of inode handlers. This value should be 3 to 4 times larger than the value in file-max, since stdin, stdout, and network sockets also need an inode struct to handle them. If you regularly run out of inodes, you should increase this value. The file inode-nr contains the first two items from inode-state, so we'll skip to that file... inode-state contains three actual numbers and four dummy values. The actual numbers are (in order of appearance) nr_inodes, nr_free_inodes, and preshrink. nr_inodes Denotes the number of inodes the system has allocated. This can be slightly more than inode-max because Linux allocates them one pageful at a time. nr_free_inodes Represents the number of free inodes and pre shrink is nonzero when the nr_inodes > inode-max and the system needs to prune the inode list instead of allocating more. super-nr and super-max Again, super block structures are allocated by the kernel, but not freed. The file super-max contains the maximum number of super block handlers, where super-nr shows the number of currently allocated ones. Every mounted file system needs a super block, so if you plan to mount lots of file systems, you may want to increase these numbers. 3.3 /proc/fs/binfmt_misc - Miscellaneous binary formats Besides these files, there is the subdirectory /proc/sys/fs/binfmt_misc. This handles the kernel support for miscellaneous binary formats. Binfmt_misc provides the ability to register additional binary formats to the Kernel without compiling an additional module/kernel. Therefore binfmt_misc needs to know magic numbers at the beginning or the filename extension of the binary. It works by maintaining a linked list of structs, that contain a description of a binary format, including a magic with size (or the filename extension), offset and mask, and the interpreter name. On request it invokes the given interpreter with the original program as argument, as binfmt_java and binfmt_em86 and binfmt_mz do. Since binfmt_misc does not define any default binary-formats, you have to register an additional binary-format. There are two general files in binfmt_misc and one file per registered format. The two general files are register and status. Registering a new binary format echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register with appropriate name (the name for the /proc-dir entry), offset (defaults to 0, if omitted), magic and mask (which can be omitted, defaults to all 0xff) and last but not least, the interpreter that is to be invoked (for example and testing '/bin/echo'). Type can be M for usual magic matching or E for filename extension matching (give extension in place of magic). To check or reset the status of the binary format handler: If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will get the current status (enabled/disabled) of binfmt_misc. Change the status by echoing 0 (disables) or 1 (enables) or -1 (caution: this clears all previously registered binary formats) to status. For example echo 0 > status to disable binfmt_misc (temporarily). Status of a single handler Each registered handler has an entry in /proc/sys/fs/binfmt_misc. These files perform the same function as status, but their scope is limited to the actual binary format. By cating this file, you also receive all related information about the interpreter/magic of the binfmt. Example usage of binfmt_misc (emulate binfmt_java) cd /proc/sys/fs/binfmt_misc echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register echo ':Applet:M:: | | | edge connector | | | V V V Base address 0x100 caused a conflict in one of my computers once. I haven't the foggiest why. My Specialix card is now at 0x180. My other computer runs just fine with the Specialix card at 0x100.... The card occupies 4 addresses, but actually only two are really used. The PCI version doesn't have any dip switches. The BIOS assigns an IO address. The driver now still autoprobes at 0x100, 0x180, 0x250 and 0x260. If that causes trouble for you, please report that. I'll remove autoprobing then. The driver will tell the card what IRQ to use, so you don't have to change any jumpers to change the IRQ. Just use a command line argument (irq=xx) to the insmod program to set the interrupt. The BIOS assigns the IRQ on the PCI version. You have no say in what IRQ to use in that case. If your specialix cards are not at the default locations, you can use the kernel command line argument "specialix=io0,irq0,io1,irq1...". Here "io0" is the io address for the first card, and "irq0" is the irq line that the first card should use. And so on. Examples. You use the driver as a module and have three cards at 0x100, 0x250 and 0x180. And some way or another you want them detected in that order. Moreover irq 12 is taken (e.g. by your PS/2 mouse). insmod specialix.o iobase=0x100,0x250,0x180 irq=9,11,15 The same three cards, but now in the kernel would require you to add specialix=0x100,9,0x250,11,0x180,15 to the command line. This would become append="specialix=0x100,9,0x250,11,0x180,15" in your /etc/lilo.conf file if you use lilo. The Specialix driver is slightly odd: It allows you to have the second or third card detected without having a first card. This has advantages and disadvantages. A slot that isn't filled by an ISA card, might be filled if a PCI card is detected. Thus if you have an ISA card at 0x250 and a PCI card, you would get: sx0: specialix IO8+ Board at 0x100 not found. sx1: specialix IO8+ Board at 0x180 not found. sx2: specialix IO8+ board detected at 0x250, IRQ 12, CD1865 Rev. B. sx3: specialix IO8+ Board at 0x260 not found. sx0: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B. This would happen if you don't give any probe hints to the driver. If you would specify: specialix=0x250,11 you'd get the following messages: sx0: specialix IO8+ board detected at 0x250, IRQ 11, CD1865 Rev. B. sx1: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B. ISA probing is aborted after the IO address you gave is exhausted, and the PCI card is now detected as the second card. The ISA card is now also forced to IRQ11.... Baud rates ========== The rev 1.2 and below boards use a CL-CD1864. These chips can only do 64kbit. The rev 1.3 and newer boards use a CL-CD1865. These chips are officially capable of 115k2. The Specialix card uses a 25MHz crystal (in times two mode, which in fact is a divided by two mode). This is not enough to reach the rated 115k2 on all ports at the same time. With this clock rate you can only do 37% of this rate. This means that at 115k2 on all ports you are going to lose characters (The chip cannot handle that many incoming bits at this clock rate.) (Yes, you read that correctly: there is a limit to the number of -=bits=- per second that the chip can handle.) If you near the "limit" you will first start to see a graceful degradation in that the chip cannot keep the transmitter busy at all times. However with a central clock this slow, you can also get it to miss incoming characters. The driver will print a warning message when you are outside the official specs. The messages usually show up in the file /var/log/messages . The specialix card cannot reliably do 115k2. If you use it, you have to do "extensive testing" (*) to verify if it actually works. When "mgetty" communicates with my modem at 115k2 it reports: got: +++[0d]ATQ0V1H0[0d][0d][8a]O[cb][0d][8a] ^^^^ ^^^^ ^^^^ The three characters that have the "^^^" under them have suffered a bit error in the highest bit. In conclusion: I've tested it, and found that it simply DOESN'T work for me. I also suspect that this is also caused by the baud rate being just a little bit out of tune. I upgraded the crystal to 66Mhz on one of my Specialix cards. Works great! Contact me for details. (Voids warranty, requires a steady hand and more such restrictions....) (*) Cirrus logic CD1864 databook, page 40. Cables for the Specialix IO8+ ============================= The pinout of the connectors on the IO8+ is: pin short direction long name name Pin 1 DCD input Data Carrier Detect Pin 2 RXD input Receive Pin 3 DTR/RTS output Data Terminal Ready/Ready To Send Pin 4 GND - Ground Pin 5 TXD output Transmit Pin 6 CTS input Clear To Send -- 6 5 4 3 2 1 -- | | | | | | | | +----- -----+ |__________| clip Front view of an RJ12 connector. Cable moves "into" the paper. (the plug is ready to plug into your mouth this way...) NULL cable. I don't know who is going to use these except for testing purposes, but I tested the cards with this cable. (It took quite a while to figure out, so I'm not going to delete it. So there! :-) This end goes This end needs straight into the some twists in RJ12 plug. the wiring. IO8+ RJ12 IO8+ RJ12 1 DCD white - - - 1 DCD 2 RXD black 5 TXD 3 DTR/RTS red 6 CTS 4 GND green 4 GND 5 TXD yellow 2 RXD 6 CTS blue 3 DTR/RTS Same NULL cable, but now sorted on the second column. 1 DCD white - - - 1 DCD 5 TXD yellow 2 RXD 6 CTS blue 3 DTR/RTS 4 GND green 4 GND 2 RXD black 5 TXD 3 DTR/RTS red 6 CTS This is a modem cable usable for hardware handshaking: RJ12 DB25 DB9 1 DCD white 8 DCD 1 DCD 2 RXD black 3 RXD 2 RXD 3 DTR/RTS red 4 RTS 7 RTS 4 GND green 7 GND 5 GND 5 TXD yellow 2 TXD 3 TXD 6 CTS blue 5 CTS 8 CTS +---- 6 DSR 6 DSR +---- 20 DTR 4 DTR This is a modem cable usable for software handshaking: It allows you to reset the modem using the DTR ioctls. I (REW) have never tested this, "but xxxxxxxxxxxxx says that it works." If you test this, please tell me and I'll fill in your name on the xxx's. RJ12 DB25 DB9 1 DCD white 8 DCD 1 DCD 2 RXD black 3 RXD 2 RXD 3 DTR/RTS red 20 DTR 4 DTR 4 GND green 7 GND 5 GND 5 TXD yellow 2 TXD 3 TXD 6 CTS blue 5 CTS 8 CTS +---- 6 DSR 6 DSR +---- 4 RTS 7 RTS I bought a 6 wire flat cable. It was colored as indicated. Check that yours is the same before you trust me on this. Hardware handshaking issues. ============================ The driver can be compiled in two different ways. The default ("Specialix DTR/RTS pin is RTS" is off) the pin behaves as DTR when hardware handshaking is off. It behaves as the RTS hardware handshaking signal when hardware handshaking is selected. When you use this, you have to use the appropriate cable. The cable will either be compatible with hardware handshaking or with software handshaking. So switching on the fly is not really an option. I actually prefer to use the "Specialix DTR/RTS pin is RTS" option. This makes the DTR/RTS pin always an RTS pin, and ioctls to change DTR are always ignored. I have a cable that is configured for this. Ports and devices ================= Port 0 is the one furthest from the card-edge connector. Devices: You should make the devices as follows: bash cd /dev for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 do echo -n "$i " mknod /dev/ttyW$i c 75 $i mknod /dev/cuw$i c 76 $i done echo "" If your system doesn't come with these devices preinstalled, bug your linux-vendor about this. They have had ample time to get this implemented by now. You cannot have more than 4 boards in one computer. The card only supports 4 different interrupts. If you really want this, contact me about this and I'll give you a few tips (requires soldering iron).... If you have enough PCI slots, you can probably use more than 4 PCI versions of the card though.... The PCI version of the card cannot adhere to the mechanical part of the PCI spec because the 8 serial connectors are simply too large. If it doesn't fit in your computer, bring back the card. ------------------------------------------------------------------------ Fixed bugs and restrictions: - During intialization, interrupts are blindly turned on. Having a shadow variable would cause an extra memory access on every IO instruction. - The interrupt (on the card) should be disabled when we don't allocate the Linux end of the interrupt. This allows a different driver/card to use it while all ports are not in use..... (a la standard serial port) == An extra _off variant of the sx_in and sx_out macros are now available. They don't set the interrupt enable bit. These are used during initialization. Normal operation uses the old variant which enables the interrupt line. - RTS/DTR issue needs to be implemented according to specialix' spec. I kind of like the "determinism" of the current implementation. Compile time flag? == Ok. Compile time flag! Default is how Specialix likes it. == Now a config time flag! Gets saved in your config file. Neat! - Can you set the IO address from the lilo command line? If you need this, bug me about it, I'll make it. == Hah! No bugging needed. Fixed! :-) - Cirrus logic hasn't gotten back to me yet why the CD1865 can and the CD1864 can't do 115k2. I suspect that this is because the CD1864 is not rated for 33MHz operation. Therefore the CD1864 versions of the card can't do 115k2 on all ports just like the CD1865 versions. The driver does not block 115k2 on CD1864 cards. == I called the Cirrus Logic representative here in Holland. The CD1864 databook is identical to the CD1865 databook, except for an extra warning at the end. Similar Bit errors have been observed in testing at 115k2 on both an 1865 and a 1864 chip. I see no reason why I would prohibit 115k2 on 1864 chips and not do it on 1865 chips. Actually there is reason to prohibit it on BOTH chips. I print a warning. If you use 115k2, you're on your own. - A spiky CD may send spurious HUPs. Also in CLOCAL??? -- A fix for this turned out to be counter productive. Different fix? Current behaviour is acceptable? -- Maybe the current implementation is correct. If anybody gets bitten by this, please report, and it will get fixed. -- Testing revealed that when in CLOCAL, the problem doesn't occur. As warned for in the CD1865 manual, the chip may send modem intr's on a spike. We could filter those out, but that would be a cludge anyway (You'd still risk getting a spurious HUP when two spikes occur.)..... Bugs & restrictions: - This is a difficult card to autoprobe. You have to WRITE to the address register to even read-probe a CD186x register. Disable autodetection? -- Specialix: any suggestions? - Arbitrary baud rates are not implemented yet. If you need this, bug me about it. On Fri, 2 Jan 1998, Doug Ledford wrote: > > I'm working on making the aic7xxx driver more SMP friendly (as well as > importing the latest FreeBSD sequencer code to have 7895 support) and wanted > to get some info from you. The goal here is to make the various routines > SMP safe as well as UP safe during interrupts and other manipulating > routines. So far, I've added a spin_lock variable to things like my queue > structs. Now, from what I recall, there are some spin lock functions I can > use to lock these spin locks from other use as opposed to a (nasty) > save_flags(); cli(); stuff; restore_flags(); construct. Where do I find > these routines and go about making use of them? Do they only lock on a > per-processor basis or can they also lock say an interrupt routine from > mucking with a queue if the queue routine was manipulating it when the > interrupt occurred, or should I still use a cli(); based construct on that > one? See . The basic version is: spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED; unsigned long flags; spin_lock_irqsave(&xxx_lock, flags); ... critical section here .. spin_unlock_irqrestore(&xxx_lock, flags); and the above is always safe. It will disable interrupts _locally_, but the spinlock itself will guarantee the global lock, so it will guarantee that there is only one thread-of-control within the region(s) protected by that lock. Note that it works well even under UP - the above sequence under UP essentially is just the same as doing a unsigned long flags; save_flags(flags); cli(); ... critical section ... restore_flags(flags); so the code does _not_ need to worry about UP vs SMP issues: the spinlocks work correctly under both (and spinlocks are actually more efficient on architectures that allow doing the "save_flags + cli" in one go because I don't export that interface normally). NOTE NOTE NOTE! The reason the spinlock is so much faster than a global interrupt lock under SMP is exactly because it disables interrupts only on the local CPU. The spin-lock is safe only when you _also_ use the lock itself to do locking across CPU's, which implies that EVERYTHING that touches a shared variable has to agree about the spinlock they want to use. The above is usually pretty simple (you usually need and want only one spinlock for most things - using more than one spinlock can make things a lot more complex and even slower and is usually worth it only for sequences that you _know_ need to be split up: avoid it at all cost if you aren't sure). HOWEVER, it _does_ mean that if you have some code that does cli(); .. critical section .. sti(); and another sequence that does spin_lock_irqsave(flags); .. critical section .. spin_unlock_irqrestore(flags); then they are NOT mutually exclusive, and the critical regions can happen at the same time on two different CPU's. That's fine per se, but the critical regions had better be critical for different things (ie they can't stomp on each other). The above is a problem mainly if you end up mixing code - for example the routines in ll_rw_block() tend to use cli/sti to protect the atomicity of their actions, and if a driver uses spinlocks instead then you should think about issues like the above.. This is really the only really hard part about spinlocks: once you start using spinlocks they tend to expand to areas you might not have noticed before, because you have to make sure the spinlocks correctly protect the shared data structures _everywhere_ they are used. The spinlocks are most easily added to places that are completely independent of other code (ie internal driver data structures that nobody else ever touches, for example). ---- Lesson 2: reader-writer spinlocks. If your data accesses have a very natural pattern where you usually tend to mostly read from the shared variables, the reader-writer locks (rw_lock) versions of the spinlocks are often nicer. They allow multiple readers to be in the same critical region at once, but if somebody wants to change the variables it has to get an exclusive write lock. The routines look the same as above: rwlock_t xxx_lock = RW_LOCK_UNLOCKED; unsigned long flags; read_lock_irqsave(&xxx_lock, flags); .. critical section that only reads the info ... read_unlock_irqrestore(&xxx_lock, flags); write_lock_irqsave(&xxx_lock, flags); .. read and write exclusive access to the info ... write_unlock_irqrestore(&xxx_lock, flags); The above kind of lock is useful for complex data structures like linked lists etc, especially when you know that most of the work is to just traverse the list searching for entries without changing the list itself, for example. Then you can use the read lock for that kind of list traversal, which allows many concurrent readers. Anything that _changes_ the list will have to get the write lock. Note: you cannot "upgrade" a read-lock to a write-lock, so if you at _any_ time need to do any changes (even if you don't do it every time), you have to get the write-lock at the very beginning. I could fairly easily add a primitive to create a "upgradeable" read-lock, but it hasn't been an issue yet. Tell me if you'd want one. ---- Lesson 3: spinlocks revisited. The single spin-lock primitives above are by no means the only ones. They are the most safe ones, and the ones that work under all circumstances, but partly _because_ they are safe they are also fairly slow. They are much faster than a generic global cli/sti pair, but slower than they'd need to be, because they do have to disable interrupts (which is just a single instruction on a x86, but it's an expensive one - and on other architectures it can be worse). If you have a case where you have to protect a data structure across several CPU's and you want to use spinlocks you can potentially use cheaper versions of the spinlocks. IFF you know that the spinlocks are never used in interrupt handlers, you can use the non-irq versions: spin_lock(&lock); ... spin_unlock(&lock); (and the equivalent read-write versions too, of course). The spinlock will guarantee the same kind of exclusive access, and it will be much faster. This is useful if you know that the data in question is only ever manipulated from a "process context", ie no interrupts involved. The reasons you mustn't use these versions if you have interrupts that play with the spinlock is that you can get deadlocks: spin_lock(&lock); ... <- interrupt comes in: spin_lock(&lock); where an interrupt tries to lock an already locked variable. This is ok if the other interrupt happens on another CPU, but it is _not_ ok if the interrupt happens on the same CPU that already holds the lock, because the lock will obviously never be released (because the interrupt is waiting for the lock, and the lock-holder is interrupted by the interrupt and will not continue until the interrupt has been processed). (This is also the reason why the irq-versions of the spinlocks only need to disable the _local_ interrupts - it's ok to use spinlocks in interrupts on other CPU's, because an interrupt on another CPU doesn't interrupt the CPU that holds the lock, so the lock-holder can continue and eventually releases the lock). Note that you can be clever with read-write locks and interrupts. For example, if you know that the interrupt only ever gets a read-lock, then you can use a non-irq version of read locks everywhere - because they don't block on each other (and thus there is no dead-lock wrt interrupts. But when you do the write-lock, you have to use the irq-safe version. For an example of being clever with rw-locks, see the "waitqueue_lock" handling in kernel/sched.c - nothing ever _changes_ a wait-queue from within an interrupt, they only read the queue in order to know whom to wake up. So read-locks are safe (which is good: they are very common indeed), while write-locks need to protect themselves against interrupts. Linus Stallion Multiport Serial Driver Readme --------------------------------------- Copyright (C) 1994-1999, Stallion Technologies (support@stallion.com). Version: 5.5.1 Date: 28MAR99 1. INTRODUCTION There are two drivers that work with the different families of Stallion multiport serial boards. One is for the Stallion smart boards - that is EasyIO, EasyConnection 8/32 and EasyConnection 8/64-PCI, the other for the true Stallion intelligent multiport boards - EasyConnection 8/64 (ISA, EISA, MCA), EasyConnection/RA-PCI, ONboard and Brumby. If you are using any of the Stallion intelligent multiport boards (Brumby, ONboard, EasyConnection 8/64 (ISA, EISA, MCA), EasyConnection/RA-PCI) with Linux you will need to get the driver utility package. This package is available at most of the Linux archive sites (and on CD-ROMs that contain these archives). The file will be called stallion-X.X.X.tar.gz where X.X.X will be the version number. In particular this package contains the board embedded executable images that are required for these boards. It also contains the downloader program. These boards cannot be used without this. The Stallion Technologies ftp site, ftp.stallion.com, will always have the latest version of the driver utility package. Other sites that usually have the latest version are tsx-11.mit.edu, sunsite.unc.edu and their mirrors. ftp.stallion.com:/drivers/ata5/Linux/v550.tar.gz tsx-11.mit.edu:/pub/linux/packages/stallion/stallion-5.5.0.tar.gz sunsite.unc.edu:/pub/Linux/kernel/patches/serial/stallion-5.5.0.tar.gz As of the printing of this document the latest version of the driver utility package is 5.5.0. If a later version is now available then you should use the latest version. If you are using the EasyIO, EasyConnection 8/32 or EasyConnection 8/64-PCI boards then you don't need this package. Although it does have a handy script to create the /dev device nodes for these boards, and a serial stats display program. If you require DIP switch settings, EISA or MCA configuration files, or any other information related to Stallion boards then have a look at Stallion's web pages at http://www.stallion.com. 2. INSTALLATION The drivers can be used as loadable modules or compiled into the kernel. You can choose which when doing a "config" on the kernel. All ISA, EISA and MCA boards that you want to use need to be configured into the driver(s). All PCI boards will be automatically detected when you load the driver - so they do not need to be entered into the driver(s) configuration structure. Note that kernel PCI support is required to use PCI boards. There are two methods of configuring ISA, EISA and MCA boards into the drivers. If using the driver as a loadable module then the simplist method is to pass the driver configuration as module arguments. The other method is to modify the driver source to add configuration lines for each board in use. If you have pre-built Stallion driver modules then the module argument configuration method should be used. A lot of Linux distributions come with pre-built driver modules in /lib/modules/X.Y.Z/misc for the kernel in use. That makes things pretty simple to get going. 2.1 MODULE DRIVER CONFIGURATION: The simplest configuration for modules is to use the module load arguments to configure any ISA, EISA or MCA boards. PCI boards are automatically detected, so do not need any additional configuration at all. If using EasyIO, EasyConnection 8/32 ISA or MCA, or EasyConnection 8/63-PCI boards then use the "stallion" driver module, Otherwise if you are using an EasyConnection 8/64 ISA, EISA or MCA, EasyConnection/RA-PCI, ONboard, Brumby or original Stallion board then use the "istallion" driver module. Typically to load up the smart board driver use: insmod stallion.o This will load the EasyIO and EasyConnection 8/32 driver. It will output a message to say that it loaded and print the driver version number. It will also print out whether it found the configured boards or not. These messages may not appear on the console, but typically are always logged to /var/adm/messages or /var/log/syslog files - depending on how the klogd and syslogd daemons are setup on your system. To load the intelligent board driver use: insmod istallion.o It will output similar messages to the smart board driver. If not using an auto-detectable board type (that is a PCI board) then you will also need to supply command line arguments to the "insmod" command when loading the driver. The general form of the configuration argument is board?=[,[,][,]] where: board? -- specifies the arbitary board number of this board, can be in the range 0 to 3. name -- textual name of this board. The board name is the comman board name, or any "shortened" version of that. The board type number may also be used here. ioaddr -- specifies the I/O address of this board. This argument is optional, but should generally be specified. addr -- optional second address argument. Some board types require a second I/O address, some require a memory address. The exact meaning of this argument depends on the board type. irq -- optional IRQ line used by this board. Up to 4 board configuration arguments can be specified on the load line. Here is some examples: insmod stallion.o board0=easyio,0x2a0,5 This configures an EasyIO board as board 0 at I/O address 0x2a0 and IRQ 5. insmod istallion.o board3=ec8/64,0x2c0,0xcc000 This configures an EasyConnection 8/64 ISA as board 3 at I/O address 0x2c0 at memory address 0xcc000. insmod stallion.o board1=ec8/32-at,0x2a0,0x280,10 This configures an EasyConnection 8/32 ISA board at primary I/O address 0x2a0, secondary address 0x280 and IRQ 10. You will probably want to enter this module load and configuration information into your system startup scripts so that the drivers are loaded and configured on each system boot. Typically the start up script would be something line /etc/rc.d/rc.modules. 2.2 STATIC DRIVER CONFIGURATION: For static driver configuration you need to modify the driver source code. Entering ISA, EISA and MCA boards into the driver(s) configuration structure involves editing the driver(s) source file. It's pretty easy if you follow the instructions below. Both drivers can support up to 4 boards. The smart card driver (the stallion.c driver) supports any combination of EasyIO and EasyConnection 8/32 boards (up to a total of 4). The intelligent driver supports any combination of ONboards, Brumbys, Stallions and EasyConnection 8/64 (ISA and EISA) boards (up to a total of 4). To set up the driver(s) for the boards that you want to use you need to edit the appropriate driver file and add configuration entries. If using EasyIO or EasyConnection 8/32 ISA or MCA boards, do: vi /usr/src/linux/drivers/char/stallion.c - find the definition of the stl_brdconf array (of structures) near the top of the file - modify this to match the boards you are going to install (the comments before this structure should help) - save and exit If using ONboard, Brumby, Stallion or EasyConnection 8/64 (ISA or EISA) boards then do: vi /usr/src/linux/drivers/char/istallion.c - find the definition of the stli_brdconf array (of structures) near the top of the file - modify this to match the boards you are going to install (the comments before this structure should help) - save and exit Once you have set up the board configurations then you are ready to build the kernel or modules. When the new kernel is booted, or the loadable module loaded then the driver will emit some kernel trace messages about whether the configured boards were detected or not. Depending on how your system logger is set up these may come out on the console, or just be logged to /var/adm/messages or /var/log/syslog. You should check the messages to confirm that all is well. 2.3 SHARING INTERRUPTS It is possible to share interrupts between multiple EasyIO and EasyConnection 8/32 boards in an EISA system. To do this you must be using static driver configuration, modifying the driver source code to add driver configuration. Then a couple of extra things are required: 1. When entering the board resources into the stallion.c file you need to mark the boards as using level triggered interrupts. Do this by replacing the "0" entry at field position 6 (the last field) in the board configuration structure with a "1". (This is the structure that defines the board type, I/O locations, etc. for each board). All boards that are sharing an interrupt must be set this way, and each board should have the same interrupt number specified here as well. Now build the module or kernel as you would normally. 2. When physically installing the boards into the system you must enter the system EISA configuration utility. You will need to install the EISA configuration files for *all* the EasyIO and EasyConnection 8/32 boards that are sharing interrupts. The Stallion EasyIO and EasyConnection 8/32 EISA configuration files required are supplied by Stallion Technologies on the EASY Utilities floppy diskette (usually supplied in the box with the board when purchased. If not, you can pick it up from Stallion's FTP site, ftp.stallion.com). You will need to edit the board resources to choose level triggered interrupts, and make sure to set each board's interrupt to the same IRQ number. You must complete both the above steps for this to work. When you reboot or load the driver your EasyIO and EasyConnection 8/32 boards will be sharing interrupts. 2.4 USING HIGH SHARED MEMORY The EasyConnection 8/64-EI, ONboard and Stallion boards are capable of using shared memory addresses above the usual 640K - 1Mb range. The ONboard ISA and the Stallion boards can be programmed to use memory addresses up to 16Mb (the ISA bus addressing limit), and the EasyConnection 8/64-EI and ONboard/E can be programmed for memory addresses up to 4Gb (the EISA bus addressing limit). The higher than 1Mb memory addresses are fully supported by this driver. Just enter the address as you normally would for a lower than 1Mb address (in the driver's board configuration structure). 2.5 TROUBLE SHOOTING If a board is not found by the driver but is actually in the system then the most likely problem is that the I/O address is wrong. Change the module load argument for the loadable module form. Or change it in the driver stallion.c or istallion.c configuration structure and rebuild the kernel or modules, or change it on the board. On EasyIO and EasyConnection 8/32 boards the IRQ is software programmable, so if there is a conflict you may need to change the IRQ used for a board. There are no interrupts to worry about for ONboard, Brumby or EasyConnection 8/64 (ISA, EISA and MCA) boards. The memory region on EasyConnection 8/64 and ONboard boards is software programmable, but not on the Brumby boards. 3. USING THE DRIVERS 3.1 INTELLIGENT DRIVER OPERATION The intelligent boards also need to have their "firmware" code downloaded to them. This is done via a user level application supplied in the driver utility package called "stlload". Compile this program wherever you dropped the package files, by typing "make". In its simplest form you can then type ./stlload -i cdk.sys in this directory and that will download board 0 (assuming board 0 is an EasyConnection 8/64 or EasyConnection/RA board). To download to an ONboard, Brumby or Stallion do: ./stlload -i 2681.sys Normally you would want all boards to be downloaded as part of the standard system startup. To achieve this, add one of the lines above into the /etc/rc.d/rc.S or /etc/rc.d/rc.serial file. To download each board just add the "-b " option to the line. You will need to download code for every board. You should probably move the stlload program into a system directory, such as /usr/sbin. Also, the default location of the cdk.sys image file in the stlload down-loader is /usr/lib/stallion. Create that directory and put the cdk.sys and 2681.sys files in it. (It's a convenient place to put them anyway). As an example your /etc/rc.d/rc.S file might have the following lines added to it (if you had 3 boards): /usr/sbin/stlload -b 0 -i /usr/lib/stallion/cdk.sys /usr/sbin/stlload -b 1 -i /usr/lib/stallion/2681.sys /usr/sbin/stlload -b 2 -i /usr/lib/stallion/2681.sys The image files cdk.sys and 2681.sys are specific to the board types. The cdk.sys will only function correctly on an EasyConnection 8/64 board. Similarly the 2681.sys image fill only operate on ONboard, Brumby and Stallion boards. If you load the wrong image file into a board it will fail to start up, and of course the ports will not be operational! If you are using the modularized version of the driver you might want to put the insmod calls in the startup script as well (before the download lines obviously). 3.2 USING THE SERIAL PORTS Once the driver is installed you will need to setup some device nodes to access the serial ports. The simplest method is to use the stallion utility "mkdevnods" script. It will automatically create device entries for Stallion boards. This will create the normal serial port devices as /dev/ttyE# where # is the port number starting from 0. A bank of 64 minor device numbers is allocated to each board, so the first port on the second board is port 64, etc. A set of callout type devices is also created. They are created as the devices /dev/cue# where # is the same as for the ttyE devices. For the most part the Stallion driver tries to emulate the standard PC system COM ports and the standard Linux serial driver. The idea is that you should be able to use Stallion board ports and COM ports interchangeably without modifying anything but the device name. Anything that doesn't work like that should be considered a bug in this driver! If you look at the driver code you will notice that it is fairly closely based on the Linux serial driver (linux/drivers/char/serial.c). This is intentional, obviously this is the easiest way to emulate its behavior! Since this driver tries to emulate the standard serial ports as much as possible, most system utilities should work as they do for the standard COM ports. Most importantly "stty" works as expected and "setserial" can also be used (excepting the ability to auto-configure the I/O and IRQ addresses of boards). Higher baud rates are supported in the usual fashion through setserial or using the CBAUDEX extensions. Note that the EasyIO and EasyConnection (all types) support at least 57600 and 115200 baud. The newer EasyConnection XP modules and new EasyIO boards support 230400 and 460800 baud as well. The older boards including ONboard and Brumby support a maximum baud rate of 38400. If you are unfamiliar with how to use serial ports, then get the Serial-HOWTO by Greg Hankins. It will explain everything you need to know! 4. NOTES You can use both drivers at once if you have a mix of board types installed in a system. However to do this you will need to change the major numbers used by one of the drivers. Currently both drivers use major numbers 24, 25 and 28 for their devices. Change one driver to use some other major numbers, and then modify the mkdevnods script to make device nodes based on those new major numbers. For example, you could change the istallion.c driver to use major numbers 60, 61 and 62. You will also need to create device nodes with different names for the ports, for example ttyF# and cuf#. The original Stallion board is no longer supported by Stallion Technologies. Although it is known to work with the istallion driver. Finding a free physical memory address range can be a problem. The older boards like the Stallion and ONboard need large areas (64K or even 128K), so they can be very difficult to get into a system. If you have 16 Mb of RAM then you have no choice but to put them somewhere in the 640K -> 1Mb range. ONboards require 64K, so typically 0xd0000 is good, or 0xe0000 on some systems. If you have an original Stallion board, "V4.0" or Rev.O, then you need a 64K memory address space, so again 0xd0000 and 0xe0000 are good. Older Stallion boards are a much bigger problem. They need 128K of address space and must be on a 128K boundary. If you don't have a VGA card then 0xc0000 might be usable - there is really no other place you can put them below 1Mb. Both the ONboard and old Stallion boards can use higher memory addresses as well, but you must have less than 16Mb of RAM to be able to use them. Usual high memory addresses used include 0xec0000 and 0xf00000. The Brumby boards only require 16Kb of address space, so you can usually squeeze them in somewhere. Common addresses are 0xc8000, 0xcc000, or in the 0xd0000 range. EasyConnection 8/64 boards are even better, they only require 4Kb of address space, again usually 0xc8000, 0xcc000 or 0xd0000 are good. If you are using an EasyConnection 8/64-EI or ONboard/E then usually the 0xd0000 or 0xe0000 ranges are the best options below 1Mb. If neither of them can be used then the high memory support to use the really high address ranges is the best option. Typically the 2Gb range is convenient for them, and gets them well out of the way. The ports of the EasyIO-8M board do not have DCD or DTR signals. So these ports cannot be used as real modem devices. Generally, when using these ports you should only use the cueX devices. The driver utility package contains a couple of very useful programs. One is a serial port statistics collection and display program - very handy for solving serial port problems. The other is an extended option setting program that works with the intelligent boards. 5. DISCLAIMER The information contained in this document is believed to be accurate and reliable. However, no responsibility is assumed by Stallion Technologies Pty. Ltd. for its use, nor any infringements of patents or other rights of third parties resulting from its use. Stallion Technologies reserves the right to modify the design of its products and will endeavour to change the information in manuals and accompanying documentation accordingly. Video Mode Selection Support 2.13 (c) 1995--1999 Martin Mares, -------------------------------------------------------------------------------- 1. Intro ~~~~~~~~ This small document describes the "Video Mode Selection" feature which allows the use of various special video modes supported by the video BIOS. Due to usage of the BIOS, the selection is limited to boot time (before the kernel decompression starts) and works only on 80X86 machines. ** Short intro for the impatient: Just use vga=ask for the first time, ** enter `scan' on the video mode prompt, pick the mode you want to use, ** remember its mode ID (the four-digit hexadecimal number) and then ** set the vga parameter to this number (converted to decimal first). The video mode to be used is selected by a kernel parameter which can be specified in the kernel Makefile (the SVGA_MODE=... line) or by the "vga=..." option of LILO (or some other boot loader you use) or by the "vidmode" utility (present in standard Linux utility packages). You can use the following values of this parameter: NORMAL_VGA - Standard 80x25 mode available on all display adapters. EXTENDED_VGA - Standard 8-pixel font mode: 80x43 on EGA, 80x50 on VGA. ASK_VGA - Display a video mode menu upon startup (see below). 0..35 - Menu item number (when you have used the menu to view the list of modes available on your adapter, you can specify the menu item you want to use). 0..9 correspond to "0".."9", 10..35 to "a".."z". Warning: the mode list displayed may vary as the kernel version changes, because the modes are listed in a "first detected -- first displayed" manner. It's better to use absolute mode numbers instead. 0x.... - Hexadecimal video mode ID (also displayed on the menu, see below for exact meaning of the ID). Warning: rdev and LILO don't support hexadecimal numbers -- you have to convert it to decimal manually. 2. Menu ~~~~~~~ The ASK_VGA mode causes the kernel to offer a video mode menu upon bootup. It displays a "Press to see video modes available, to continue or wait 30 secs" message. If you press , you enter the menu, if you press or wait 30 seconds, the kernel will boot up in the standard 80x25 mode. The menu looks like: Video adapter: Mode: COLSxROWS: 0 0F00 80x25 1 0F01 80x50 2 0F02 80x43 3 0F03 80x26 .... Enter mode number or `scan': tells what video adapter did Linux detect -- it's either a generic adapter name (MDA, CGA, HGC, EGA, VGA, VESA VGA [a VGA with VESA-compliant BIOS]) or a chipset name (e.g., Trident). Direct detection of chipsets is turned off by default (see CONFIG_VIDEO_SVGA in chapter 4 to see how to enable it if you really want) as it's inherently unreliable due to absolutely insane PC design. "0 0F00 80x25" means that the first menu item (the menu items are numbered from "0" to "9" and from "a" to "z") is a 80x25 mode with ID=0x0f00 (see the next section for a description of mode IDs). encourages you to enter the item number or mode ID you wish to set and press . If the computer complains something about "Unknown mode ID", it is trying to tell you that it isn't possible to set such a mode. It's also possible to press only which leaves the current mode. The mode list usually contains a few basic modes and some VESA modes. In case your chipset has been detected, some chipset-specific modes are shown as well (some of these might be missing or unusable on your machine as different BIOSes are often shipped with the same card and the mode numbers depend purely on the VGA BIOS). The modes displayed on the menu are partially sorted: The list starts with the standard modes (80x25 and 80x50) followed by "special" modes (80x28 and 80x43), local modes (if the local modes feature is enabled), VESA modes and finally SVGA modes for the auto-detected adapter. If you are not happy with the mode list offered (e.g., if you think your card is able to do more), you can enter "scan" instead of item number / mode ID. The program will try to ask the BIOS for all possible video mode numbers and test what happens then. The screen will be probably flashing wildly for some time and strange noises will be heard from inside the monitor and so on and then, really all consistent video modes supported by your BIOS will appear (plus maybe some `ghost modes'). If you are afraid this could damage your monitor, don't use this function. After scanning, the mode ordering is a bit different: the auto-detected SVGA modes are not listed at all and the modes revealed by `scan' are shown before all VESA modes. 3. Mode IDs ~~~~~~~~~~~ Because of the complexity of all the video stuff, the video mode IDs used here are also a bit complex. A video mode ID is a 16-bit number usually expressed in a hexadecimal notation (starting with "0x"). You can set a mode by entering its mode directly if you know it even if it isn't shown on the menu. The ID numbers can be divided to three regions: 0x0000 to 0x00ff - menu item references. 0x0000 is the first item. Don't use outside the menu as this can change from boot to boot (especially if you have used the `scan' feature). 0x0100 to 0x017f - standard BIOS modes. The ID is a BIOS video mode number (as presented to INT 10, function 00) increased by 0x0100. 0x0200 to 0x08ff - VESA BIOS modes. The ID is a VESA mode ID increased by 0x0100. All VESA modes should be autodetected and shown on the menu. 0x0900 to 0x09ff - Video7 special modes. Set by calling INT 0x10, AX=0x6f05. (Usually 940=80x43, 941=132x25, 942=132x44, 943=80x60, 944=100x60, 945=132x28 for the standard Video7 BIOS) 0x0f00 to 0x0fff - special modes (they are set by various tricks -- usually by modifying one of the standard modes). Currently available: 0x0f00 standard 80x25, don't reset mode if already set (=FFFF) 0x0f01 standard with 8-point font: 80x43 on EGA, 80x50 on VGA 0x0f02 VGA 80x43 (VGA switched to 350 scanlines with a 8-point font) 0x0f03 VGA 80x28 (standard VGA scans, but 14-point font) 0x0f04 leave current video mode 0x0f05 VGA 80x30 (480 scans, 16-point font) 0x0f06 VGA 80x34 (480 scans, 14-point font) 0x0f07 VGA 80x60 (480 scans, 8-point font) 0x0f08 Graphics hack (see the CONFIG_VIDEO_HACK paragraph below) 0x1000 to 0x7fff - modes specified by resolution. The code has a "0xRRCC" form where RR is a number of rows and CC is a number of columns. E.g., 0x1950 corresponds to a 80x25 mode, 0x2b84 to 132x43 etc. This is the only fully portable way to refer to a non-standard mode, but it relies on the mode being found and displayed on the menu (remember that mode scanning is not done automatically). 0xff00 to 0xffff - aliases for backward compatibility: 0xffff equivalent to 0x0f00 (standard 80x25) 0xfffe equivalent to 0x0f01 (EGA 80x43 or VGA 80x50) If you add 0x8000 to the mode ID, the program will try to recalculate vertical display timing according to mode parameters, which can be used to eliminate some annoying bugs of certain VGA BIOSes (usually those used for cards with S3 chipsets and old Cirrus Logic BIOSes) -- mainly extra lines at the end of the display. 4. Options ~~~~~~~~~~ Some options can be set in the source text (in arch/i386/boot/video.S). All of them are simple #define's -- change them to #undef's when you want to switch them off. Currently supported: CONFIG_VIDEO_SVGA - enables autodetection of SVGA cards. This is switched off by default as it's a bit unreliable due to terribly bad PC design. If you really want to have the adapter autodetected (maybe in case the `scan' feature doesn't work on your machine), switch this on and don't cry if the results are not completely sane. In case you really need this feature, please drop me a mail as I think of removing it some day. CONFIG_VIDEO_VESA - enables autodetection of VESA modes. If it doesn't work on your machine (or displays a "Error: Scanning of VESA modes failed" message), you can switch it off and report as a bug. CONFIG_VIDEO_COMPACT - enables compacting of the video mode list. If there are more modes with the same screen size, only the first one is kept (see above for more info on mode ordering). However, in very strange cases it's possible that the first "version" of the mode doesn't work although some of the others do -- in this case turn this switch off to see the rest. CONFIG_VIDEO_RETAIN - enables retaining of screen contents when switching video modes. Works only with some boot loaders which leave enough room for the buffer. (If you have old LILO, you can adjust heap_end_ptr and loadflags in setup.S, but it's better to upgrade the boot loader...) CONFIG_VIDEO_LOCAL - enables inclusion of "local modes" in the list. The local modes are added automatically to the beginning of the list not depending on hardware configuration. The local modes are listed in the source text after the "local_mode_table:" line. The comment before this line describes the format of the table (which also includes a video card name to be displayed on the top of the menu). CONFIG_VIDEO_400_HACK - force setting of 400 scan lines for standard VGA modes. This option is intended to be used on certain buggy BIOSes which draw some useless logo using font download and then fail to reset the correct mode. Don't use unless needed as it forces resetting the video card. CONFIG_VIDEO_GFX_HACK - includes special hack for setting of graphics modes to be used later by special drivers (e.g., 800x600 on IBM ThinkPad -- see ftp://ftp.phys.keio.ac.jp/pub/XFree86/800x600/XF86Configs/XF86Config.IBM_TP560). Allows to set _any_ BIOS mode including graphic ones and forcing specific text screen resolution instead of peeking it from BIOS variables. Don't use unless you think you know what you're doing. To activate this setup, use mode number 0x0f08 (see section 3). 5. Still doesn't work? ~~~~~~~~~~~~~~~~~~~~~~ When the mode detection doesn't work (e.g., the mode list is incorrect or the machine hangs instead of displaying the menu), try to switch off some of the configuration options listed in section 4. If it fails, you can still use your kernel with the video mode set directly via the kernel parameter. In either case, please send me a bug report containing what _exactly_ happens and how do the configuration switches affect the behaviour of the bug. If you start Linux from M$-DOS, you might also use some DOS tools for video mode setting. In this case, you must specify the 0x0f04 mode ("leave current settings") to Linux, because if you don't and you use any non-standard mode, Linux will switch to 80x25 automatically. If you set some extended mode and there's one or more extra lines on the bottom of the display containing already scrolled-out text, your VGA BIOS contains the most common video BIOS bug called "incorrect vertical display end setting". Adding 0x8000 to the mode ID might fix the problem. Unfortunately, this must be done manually -- no autodetection mechanisms are available. If you have a VGA card and your display still looks as on EGA, your BIOS is probably broken and you need to set the CONFIG_VIDEO_400_HACK switch to force setting of the correct mode. 6. History ~~~~~~~~~~ 1.0 (??-Nov-95) First version supporting all adapters supported by the old setup.S + Cirrus Logic 54XX. Present in some 1.3.4? kernels and then removed due to instability on some machines. 2.0 (28-Jan-96) Rewritten from scratch. Cirrus Logic 64XX support added, almost everything is configurable, the VESA support should be much more stable, explicit mode numbering allowed, "scan" implemented etc. 2.1 (30-Jan-96) VESA modes moved to 0x200-0x3ff. Mode selection by resolution supported. Few bugs fixed. VESA modes are listed prior to modes supplied by SVGA autodetection as they are more reliable. CLGD autodetect works better. Doesn't depend on 80x25 being active when started. Scanning fixed. 80x43 (any VGA) added. Code cleaned up. 2.2 (01-Feb-96) EGA 80x43 fixed. VESA extended to 0x200-0x4ff (non-standard 02XX VESA modes work now). Display end bug workaround supported. Special modes renumbered to allow adding of the "recalculate" flag, 0xffff and 0xfffe became aliases instead of real IDs. Screen contents retained during mode changes. 2.3 (15-Mar-96) Changed to work with 1.3.74 kernel. 2.4 (18-Mar-96) Added patches by Hans Lermen fixing a memory overwrite problem with some boot loaders. Memory management rewritten to reflect these changes. Unfortunately, screen contents retaining works only with some loaders now. Added a Tseng 132x60 mode. 2.5 (19-Mar-96) Fixed a VESA mode scanning bug introduced in 2.4. 2.6 (25-Mar-96) Some VESA BIOS errors not reported -- it fixes error reports on several cards with broken VESA code (e.g., ATI VGA). 2.7 (09-Apr-96) - Accepted all VESA modes in range 0x100 to 0x7ff, because some cards use very strange mode numbers. - Added Realtek VGA modes (thanks to Gonzalo Tornaria). - Hardware testing order slightly changed, tests based on ROM contents done as first. - Added support for special Video7 mode switching functions (thanks to Tom Vander Aa). - Added 480-scanline modes (especially useful for notebooks, original version written by hhanemaa@cs.ruu.nl, patched by Jeff Chua, rewritten by me). - Screen store/restore fixed. 2.8 (14-Apr-96) - Previous release was not compilable without CONFIG_VIDEO_SVGA. - Better recognition of text modes during mode scan. 2.9 (12-May-96) - Ignored VESA modes 0x80 - 0xff (more VESA BIOS bugs!) 2.10 (11-Nov-96)- The whole thing made optional. - Added the CONFIG_VIDEO_400_HACK switch. - Added the CONFIG_VIDEO_GFX_HACK switch. - Code cleanup. 2.11 (03-May-97)- Yet another cleanup, now including also the documentation. - Direct testing of SVGA adapters turned off by default, `scan' offered explicitly on the prompt line. - Removed the doc section describing adding of new probing functions as I try to get rid of _all_ hardware probing here. 2.12 (25-May-98)- Added support for VESA frame buffer graphics. 2.13 (14-May-99)- Minor documentation fixes. sx.txt -- specialix SX/SI multiport serial driver readme. Copyright (C) 1997 Roger Wolff (R.E.Wolff@BitWizard.nl) Specialix pays for the development and support of this driver. Please DO contact support@specialix.co.uk if you require support. This driver was developed in the BitWizard linux device driver service. If you require a linux device driver for your product, please contact devices@BitWizard.nl for a quote. (History) There used to be an SI driver by Simon Allan. This is a complete rewrite from scratch. Just a few lines-of-code have been snatched. (Sources) Specialix document number 6210028: SX Host Card and Download Code Software Functional Specification. (Copying) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. (Addendum) I'd appreciate it that if you have fixes, that you send them to me first. Introduction ============ This file contains some random information, that I like to have online instead of in a manual that can get lost. Ever misplace your Linux kernel sources? And the manual of one of the boards in your computer? Theory of operation =================== An important thing to know is that the driver itself doesn't have the firmware for the card. This means that you need the separate package "sx_firmware". For now you can get the source at ftp://ftp.bitwizard.nl/specialix/sx_firmware_.tgz The firmware load needs a "misc" device, so you'll need to enable the "Support for user misc device modules" in your kernel configuration. The misc device needs to be called "/dev/specialix_sxctl". It needs misc major 10, and minor number 167 (assigned by HPA). The section on creating device files below also creates this device. After loading the sx.o module into your kernel, the driver will report the number of cards detected, but because it doesn't have any firmware, it will not be able to determine the number of ports. Only when you then run "sx_firmware" will the firmware be downloaded and the rest of the driver initialized. At that time the sx_firmware program will report the number of ports installed. In contrast with many other multi port serial cards, some of the data structures are only allocated when the card knows the number of ports that are connected. This means we won't waste memory for 120 port descriptor structures when you only have 8 ports. If you experience problems due to this, please report them: I haven't seen any. Interrupts ========== A multi port serial card, would generate a horrendous amount of interrupts if it would interrupt the CPU for every received character. Even more than 10 years ago, the trick not to use interrupts but to poll the serial cards was invented. The SX card allow us to do this two ways. First the card limits its own interrupt rate to a rate that won't overwhelm the CPU. Secondly, we could forget about the cards interrupt completely and use the internal timer for this purpose. Polling the card can take up to a few percent of your CPU. Using the interrupts would be better if you have most of the ports idle. Using timer-based polling is better if your card almost always has work to do. You save the separate interrupt in that case. In any case, it doesn't really matter all that much. The most common problem with interrupts is that for ISA cards in a PCI system the BIOS has to be told to configure that interrupt as "legacy ISA". Otherwise the card can pull on the interrupt line all it wants but the CPU won't see this. If you can't get the interrupt to work, remember that polling mode is more efficient (provided you actually use the card intensively). Allowed Configurations ====================== Some configurations are disallowed. Even though at a glance they might seem to work, they are known to lockup the bus between the host card and the device concentrators. You should respect the drivers decision not to support certain configurations. It's there for a reason. Warning: Seriously technical stuff ahead. Executive summary: Don't use SX cards except configured at a 64k boundary. Skip the next paragraph. The SX cards can theoretically be placed at a 32k boundary. So for instance you can put an SX card at 0xc8000-0xd7fff. This is not a "recommended configuration". ISA cards have to tell the bus controller how they like their timing. Due to timing issues they have to do this based on which 64k window the address falls into. This means that the 32k window below and above the SX card have to use exactly the same timing as the SX card. That reportedly works for other SX cards. But you're still left with two useless 32k windows that should not be used by anybody else. Configuring the driver ====================== PCI cards are always detected. The driver auto-probes for ISA cards at some sensible addresses. Please report if the auto-probe causes trouble in your system, or when a card isn't detected. I'm afraid I haven't implemented "kernel command line parameters" yet. This means that if the default doesn't work for you, you shouldn't use the compiled-into-the-kernel version of the driver. Use a module instead. If you convince me that you need this, I'll make it for you. Deal? I'm afraid that the module parameters are a bit clumsy. If you have a better idea, please tell me. You can specify several parameters: sx_poll: number of jiffies between timer-based polls. Set this to "0" to disable timer based polls. Initialization of cards without a working interrupt will fail. Set this to "1" if you want a polling driver. (on Intel: 100 polls per second). If you don't use fast baud rates, you might consider a value like "5". (If you don't know how to do the math, use 1). sx_slowpoll: Number of jiffies between timer-based polls. Set this to "100" to poll once a second. This should get the card out of a stall if the driver ever misses an interrupt. I've never seen this happen, and if it does, that's a bug. Tell me. sx_maxints: Number of interrupts to request from the card. The card normally limits interrupts to about 100 per second to offload the host CPU. You can increase this number to reduce latency on the card a little. Note that if you give a very high number you can overload your CPU as well as the CPU on the host card. This setting is inaccurate and not recommended for SI cards (But it works). sx_irqmask: The mask of allowable IRQs to use. I suggest you set this to 0 (disable IRQs all together) and use polling if the assignment of IRQs becomes problematic. sx_debug: You can enable different sorts of debug traces with this. At "-1" all debugging traces are active. You'll get several times more debugging output than you'll get characters transmitted. Baud rates ========== Theoretically new SXDCs should be capable of more than 460k baud. However the line drivers usually give up before that. Also the CPU on the card may not be able to handle 8 channels going at full blast at that speed. Moreover, the buffers are not large enough to allow operation with 100 interrupts per second. You'll have to realize that the card has a 256 byte buffer, so you'll have to increase the number of interrupts per second if you have more than 256*100 bytes per second to transmit. If you do any performance testing in this area, I'd be glad to hear from you... (Psst Linux users..... I think the Linux driver is more efficient than the driver for other OSes. If you can and want to benchmark them against each other, be my guest, and report your findings...... :-) Ports and devices ================= Port 0 is the top connector on the module closest to the host card. Oh, the ports on the SXDCs and TAs are labelled from 1 to 8 instead of from 0 to 7, as they are numbered by linux. I'm stubborn in this: I know for sure that I wouldn't be able to calculate which port is which anymore if I would change that.... Devices: You should make the device files as follows: #!/bin/sh # (I recommend that you cut-and-paste this into a file and run that) cd /dev t=0 mknod specialix_sxctl c 10 167 while [ $t -lt 64 ] do echo -n "$t " mknod ttyX$t c 32 $t mknod cux$t c 33 $t t=`expr $t + 1` done echo "" rm /etc/psdevtab ps > /dev/null This creates 64 devices. If you have more, increase the constant on the line with "while". The devices start at 0, as is customary on Linux. Specialix seems to like starting the numbering at 1. If your system doesn't come with these devices pre-installed, bug your linux-vendor about this. They should have these devices "pre-installed" before the new millennium. The "ps" stuff at the end is to "tell" ps that the new devices exist. Officially the maximum number of cards per computer is 4. This driver however supports as many cards in one machine as you want. You'll run out of interrupts after a few, but you can switch to polled operation then. At about 256 ports (More than 8 cards), we run out of minor device numbers. Sorry. I suggest you buy a second computer.... (Or switch to RIO). ------------------------------------------------------------------------ Fixed bugs and restrictions: - Hangup processing. -- Done. - the write path in generic_serial (lockup / oops). -- Done (Ugly: not the way I want it. Copied from serial.c). - write buffer isn't flushed at close. -- Done. I still seem to loose a few chars at close. Sorry. I think that this is a firmware issue. (-> Specialix) - drain hardware before changing termios - Change debug on the fly. - ISA free irq -1. (no firmware loaded). - adding c8000 as a probe address. Added warning. - Add a RAMtest for the RAM on the card.c - Crash when opening a port "way" of the number of allowed ports. (for example opening port 60 when there are only 24 ports attached) - Sometimes the use-count strays a bit. After a few hours of testing the use count is sometimes "3". If you are not like me and can remember what you did to get it that way, I'd appreciate an Email. Possibly fixed. Tell me if anyone still sees this. - TAs don't work right if you don't connect all the modem control signals. SXDCs do. T225 firmware problem -> Specialix. (Mostly fixed now, I think. Tell me if you encounter this!) Bugs & restrictions: - Arbitrary baud rates. Requires firmware update. (-> Specialix) - Low latency (mostly firmware, -> Specialix) MAGIC SYSRQ KEY DOCUMENTATION v1.2 ------------------------------------ [Sat May 16 01:09:21 EDT 1998] * What is the magic SysRQ key? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ It is a 'magical' key combo you can hit which kernel will respond to regardless of whatever else it is doing, unless it is completely locked up. * How do I enable the magic SysRQ key? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You need to say "yes" to 'Magic SysRq key (CONFIG_MAGIC_SYSRQ)' when configuring the kernel. This option is only available in 2.1.x or later kernels. * How do I use the magic SysRQ key? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ On x86 - You press the key combo 'ALT-SysRQ-'. Note - Some (older?) may not have a key labeled 'SysRQ'. The 'SysRQ' key is also known as the 'Print Screen' key. On SPARC - You press 'ALT-STOP-', I believe. On PowerPC - You press 'ALT-Print Screen-'. On other - If you know of the key combos for other architectures, please let me know so I can add them to this section. * What are the 'command' keys? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'r' - Turns off keyboard raw mode and sets it to XLATE. 'k' - Kills all programs on the current virtual console. 'b' - Will immediately reboot the system without syncing or unmounting your disks. 'o' - Will shut your system off via APM (if configured and supported). 's' - Will attempt to sync all mounted filesystems. 'u' - Will attempt to remount all mounted filesystems read-only. 'p' - Will dump the current registers and flags to your console. 't' - Will dump a list of current tasks and their information to your console. 'm' - Will dump current memory info to your console. '0'-'9' - Sets the console log level, controlling which kernel messages will be printed to your console. ('0', for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.) 'e' - Send a SIGTERM to all processes, except for init. 'i' - Send a SIGKILL to all processes, except for init. 'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system will be non-functional after this.) * Okay, so what can I use them for? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Well, un'R'aw is very handy when your X server or a svgalib program crashes. sa'K' (system attention key) is useful when you want to exit a program that will not let you switch consoles. (For example, X or a svgalib program.) re'B'oot is good when you're unable to shut down. But you should also 'S'ync and 'U'mount first. 'S'ync is great when your system is locked up, it allows you to sync your disks and will certainly lessen the chance of data loss and fscking. Note that the sync hasn't taken place until you see the "OK" and "Done" appear on the screen. (If the kernel is really in strife, you may not ever get the OK or Done message...) 'U'mount is basically useful in the same ways as 'S'ync. I generally 'S'ync, 'U'mount, then re'B'oot when my system locks. It's saved me many a fsck. Again, the unmount (remount read-only) hasn't taken place until you see the "OK" and "Done" message appear on the screen. The loglevel'0'-'9' is useful when your console is being flooded with kernel messages you do not want to see. Setting '0' will prevent all but the most urgent kernel messages from reaching your console. (They will still be logged if syslogd/klogd are alive, though.) t'E'rm and k'I'll are useful if you have some sort of runaway process you are unable to kill any other way, especially if it's spawning other processes. * Sometimes SysRQ seems to get 'stuck' after using it, what can I do? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ That happens to me, also. I've found that tapping shift, alt, and control on both sides of the keyboard, and hitting an invalid sysrq sequence again will fix the problem. (ie, something like alt-sysrq-z). Switching to another virtual console (ALT+Fn) and then back again should also help. * I hit SysRQ, but nothing seems to happen, what's wrong? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There are some keyboards which do not support 'SysRQ', you can try running 'showkey -s' and pressing SysRQ or alt-SysRQ to see if it generates any 0x54 codes. If it doesn't, you may define the magic sysrq sequence to a different key. Find the keycode with showkey, and change the define of '#define SYSRQ_KEY 0x54' in [/usr/src/linux/]include/asm/keyboard.h to the keycode of the key you wish to use, then recompile. Oh, and by the way, you exit 'showkey' by not typing anything for ten seconds. * I have more questions, who can I ask? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You may feel free to send email to myrdraal@deathsdoor.com, and I will respond as soon as possible. If that email address does not work, use myrdraal@jackalz.dyn.ml.org. -Myrdraal The Linux kernel code has been rewritten to use Unicode to map characters to fonts. By downloading a single Unicode-to-font table, both the eight-bit character sets and UTF-8 mode are changed to use the font as indicated. This changes the semantics of the eight-bit character tables subtly. The four character tables are now: Map symbol Map name Escape code (G0) LAT1_MAP Latin-1 (ISO 8859-1) ESC ( B GRAF_MAP DEC VT100 pseudographics ESC ( 0 IBMPC_MAP IBM code page 437 ESC ( U USER_MAP User defined ESC ( K In particular, ESC ( U is no longer "straight to font", since the font might be completely different than the IBM character set. This permits for example the use of block graphics even with a Latin-1 font loaded. In accordance with the Unicode standard/ISO 10646 the range U+F000 to U+F8FF has been reserved for OS-wide allocation (the Unicode Standard refers to this as a "Corporate Zone", since this is inaccurate for Linux we call it the "Linux Zone"). U+F000 was picked as the starting point since it lets the direct-mapping area start on a large power of two (in case 1024- or 2048-character fonts ever become necessary). This leaves U+E000 to U+EFFF as End User Zone. The Unicodes in the range U+F000 to U+F1FF have been hard-coded to map directly to the loaded font, bypassing the translation table. The user-defined map now defaults to U+F000 to U+F1FF, emulating the previous behaviour. This range may expand in the future should it be warranted. Actual characters assigned in the Linux Zone -------------------------------------------- In addition, the following characters not present in Unicode 1.1.4 (at least, I have not found them!) have been defined; these are used by the DEC VT graphics map: U+F800 DEC VT GRAPHICS HORIZONTAL LINE SCAN 1 U+F801 DEC VT GRAPHICS HORIZONTAL LINE SCAN 3 U+F803 DEC VT GRAPHICS HORIZONTAL LINE SCAN 7 U+F804 DEC VT GRAPHICS HORIZONTAL LINE SCAN 9 The DEC VT220 uses a 6x10 character matrix, and these characters form a smooth progression in the DEC VT graphics character set. I have omitted the scan 5 line, since it is also used as a block-graphics character, and hence has been coded as U+2500 FORMS LIGHT HORIZONTAL. However, I left U+F802 blank should the need arise. Klingon language support ------------------------ Unfortunately, Unicode/ISO 10646 does not allocate code points for the language Klingon, probably fearing the potential code point explosion if many fictional languages were submitted for inclusion. There are also political reasons (the Japanese, for example, are not too happy about the whole 16-bit concept to begin with.) However, with Linux being a hacker-driven OS it seems this is a brilliant linguistic hack worth supporting. Hence I have chosen to add it to the list in the Linux Zone. Several glyph forms for the Klingon alphabet have been proposed. However, since the set of symbols appear to be consistent throughout, with only the actual shapes being different, in keeping with standard Unicode practice these differences are considered font variants. Klingon has an alphabet of 26 characters, a positional numeric writing system with 10 digits, and is written left-to-right, top-to-bottom. Punctuation appears to be only used in Latin transliteration; it appears customary to write each sentence on its own line, and centered. Space has been reserved for punctuation should it prove necessary. This encoding has been endorsed by the Klingon Language Institute. For more information, contact them at: http://www.kli.org/ Since the characters in the beginning of the Linux CZ have been more of the dingbats/symbols/forms type and this is a language, I have located it at the end, on a 16-cell boundary in keeping with standard Unicode practice. U+F8D0 KLINGON LETTER A U+F8D1 KLINGON LETTER B U+F8D2 KLINGON LETTER CH U+F8D3 KLINGON LETTER D U+F8D4 KLINGON LETTER E U+F8D5 KLINGON LETTER GH U+F8D6 KLINGON LETTER H U+F8D7 KLINGON LETTER I U+F8D8 KLINGON LETTER J U+F8D9 KLINGON LETTER L U+F8DA KLINGON LETTER M U+F8DB KLINGON LETTER N U+F8DC KLINGON LETTER NG U+F8DD KLINGON LETTER O U+F8DE KLINGON LETTER P U+F8DF KLINGON LETTER Q - Written in standard Okrand Latin transliteration U+F8E0 KLINGON LETTER QH - Written in standard Okrand Latin transliteration U+F8E1 KLINGON LETTER R U+F8E2 KLINGON LETTER S U+F8E3 KLINGON LETTER T U+F8E4 KLINGON LETTER TLH U+F8E5 KLINGON LETTER U U+F8E6 KLINGON LETTER V U+F8E7 KLINGON LETTER W U+F8E8 KLINGON LETTER Y U+F8E9 KLINGON LETTER GLOTTAL STOP U+F8F0 KLINGON DIGIT ZERO U+F8F1 KLINGON DIGIT ONE U+F8F2 KLINGON DIGIT TWO U+F8F3 KLINGON DIGIT THREE U+F8F4 KLINGON DIGIT FOUR U+F8F5 KLINGON DIGIT FIVE U+F8F6 KLINGON DIGIT SIX U+F8F7 KLINGON DIGIT SEVEN U+F8F8 KLINGON DIGIT EIGHT U+F8F9 KLINGON DIGIT NINE Other Fictional and Artificial Scripts -------------------------------------- Since the assignment of the Klingon Linux Unicode block, a registry of fictional and artificial scripts has been established by John Cowan, . The ConScript Unicode Registry is accessible at http://locke.ccil.org/~cowan/csur/; the ranges used fall at the bottom of the End User Zone and can hence not be normatively assigned, but it is recommended that people who wish to encode fictional scripts use these codes, in the interest of interoperability. For Klingon, CSUR has adopted the Linux encoding. H. Peter Anvin Software cursor for VGA by Pavel Machek ======================= and Martin Mares Linux now has some ability to manipulate cursor appearance. Normally, you can set the size of hardware cursor (and also work around some ugly bugs in those miserable Trident cards--see #define TRIDENT_GLITCH in drivers/video/ vgacon.c). You can now play a few new tricks: you can make your cursor look like a non-blinking red block, make it inverse background of the character it's over or to highlight that character and still choose whether the original hardware cursor should remain visible or not. There may be other things I have never thought of. The cursor appearance is controlled by a "[?1;2;3c" escape sequence where 1, 2 and 3 are parameters described below. If you omit any of them, they will default to zeroes. Parameter 1 specifies cursor size (0=default, 1=invisible, 2=underline, ..., 8=full block) + 16 if you want the software cursor to be applied + 32 if you want to always change the background color + 64 if you dislike having the background the same as the foreground. Highlights are ignored for the last two flags. The second parameter selects character attribute bits you want to change (by simply XORing them with the value of this parameter). On standard VGA, the high four bits specify background and the low four the foreground. In both groups, low three bits set color (as in normal color codes used by the console) and the most significant one turns on highlight (or sometimes blinking--it depends on the configuration of your VGA). The third parameter consists of character attribute bits you want to set. Bit setting takes place before bit toggling, so you can simply clear a bit by including it in both the set mask and the toggle mask. Examples: ========= To get normal blinking underline, use: echo -e '\033[?2c' To get blinking block, use: echo -e '\033[?6c' To get red non-blinking block, use: echo -e '\033[?17;0;64c' Watchdog Timer Interfaces For The Linux Operating System Alan Cox Custom Linux Driver And Program Development The following watchdog drivers are currently implemented: ICS WDT501-P ICS WDT501-P (no fan tachometer) ICS WDT500-P Software Only Berkshire Products PC Watchdog Revision A & C (by Ken Hollis) All five interfaces provide /dev/watchdog, which when open must be written to within a timeout or the machine will reboot. Each write delays the reboot time another timeout. In the case of the software watchdog the ability to reboot will depend on the state of the machines and interrupts. The hardware boards physically pull the machine down off their own onboard timers and will reboot from almost anything. A second temperature monitoring interface is available on the WDT501P cards and some Berkshire cards. This provides /dev/temperature. This is the machine internal temperature in degrees Fahrenheit. Each read returns a single byte giving the temperature. The third interface logs kernel messages on additional alert events. Both software and hardware watchdog drivers are available in the standard kernel. If you are using the software watchdog, you probably also want to use "panic=60" as a boot argument as well. The wdt card cannot be safely probed for. Instead you need to pass wdt=ioaddr,irq as a boot parameter - eg "wdt=0x240,11". Features -------- WDT501P WDT500P Software Berkshire Reboot Timer X X X X External Reboot X X o o I/O Port Monitor o o o X Temperature X o o X Fan Speed X o o o Power Under X o o o Power Over X o o o Overheat X o o o The external event interfaces on the WDT boards are not currently supported. Minor numbers are however allocated for it. Example Watchdog Driver ----------------------- #include #include #include int main(int argc, const char *argv[]) { int fd=open("/dev/watchdog",O_WRONLY); if(fd==-1) { perror("watchdog"); exit(1); } while(1) { write(fd,"\0",1); sleep(10); } } Contact Information People keep asking about the WDT watchdog timer hardware: The phone contacts for Industrial Computer Source are: US: 619 677 0877 (sales) 0895 (fax) UK: 01243 533900 France (1) 69.18.74.30 Industrial Computer Source 9950 Barnes Canyon Road San Diego, CA http://www.industry.net/indcompsrc and please mention Linux when enquiring. For full information about the PCWD cards see the pcwd-watchdog.txt document. /* XPM */ /*****************************************************************************/ /** This pixmap was made by Torsten Poulin - 1996 - torsten@diku.dk **/ /** It was made by combining xterm-blank.xpm with **/ /** the wonderfully cute Linux penguin mascot by Larry Ewing. **/ /** I had to change Larry's penguin a little to make it fit. **/ /** xterm-blank.xpm contained the following comment: **/ /** This pixmap is kindly offered by Ion Cionca - 1992 - **/ /** Swiss Federal Institute of Technology **/ /** Central Computing Service **/ /*****************************************************************************/ static char * image_name [] = { /**/ "64 38 8 1", /**/ " s mask c none", ". c gray70", "X c gray85", "o c gray50", "O c yellow", "+ c darkolivegreen", "@ c white", "# c black", " ###### ", " ######## ", " ########## ........................... ", " ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ", " #@@@#@@@### .XX+++++++++++++++++++++++XXXXoo ", " #@#@#@#@### .XX++++++++++++++++++++++++XXXooo ", " #@#####@### .XX++@@+@++@+@@@@++@+++++++XXXooo ", " ###OOO######.XX++++++++++++++++++++++++XXXoooo ", " ##OOOOOO####.XX++@@@@+@@+@@@+++++++++++XXXoooo ", " #O#OOO#O####.XX++++++++++++++++++++++++XXXooooo ", " ##O###OO####.XX++@@@@@@@@@@+@@@@@++++++XXXooooo ", " ###OOOO@#####XX++++++++++++++++++++++++XXXooooo ", " ##@###@@@@####XX++@@@+@@@@+@@++@@@++++++XXXooooo ", " #@@@@@@@@@@####X++++++++++++++++++++++++XXXooooo ", " ##@@@@@@@@@@#####++@+++++++++++++++++++++XXXooooo ", " ###@@@@@@@@@@######+++++++++++++++++++++++XXXooooo ", " ####@@@@@@@@@@@#####+@@@@+@+@@@+@++++++++++XXXooooo ", " ###@@@@@@@@@@@@######++++++++++++++++++++++XXXooooo ", " ##@@@@@@@@@@@@@@#####@+@@@@++++++++++++++++XXXooooo ", " ###@@@@@@@@@@@@@@######++++++++++++++++++++XXXXoooo ", " ###@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXXooo ", " ###@@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXooo ", " ###@@@@@@@@@@@@@@@@#####ooooooooooooooooooooooo...oo ", " ###@@@@@@@@@@@@@@@######.........................ooo ", " #OO##@@@@@@@@@@@@@#######oooooooooooooooooooooooooooo ", " #OOO##@@@@@@@@@@@#OO####O#XXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ", " ###OOOOO##@@@@@@@@@@#OOO#OOO#XXXXXXXXXXXXXX#######XXoooo . .", " #OOOOOOOO###@@@@@@@@@#OOOOOOO#ooooooooooooooooooooXXXooo . ", " #OOOOOOOOO###@@@@@@@@@#OOOOOOO##XXXXXXXXXXXXXXXXXooooo . ", " #OOOOOOOOO#@@@@@@@@###OOOOOOOOO#XXXXXXXXXXXXXXXoo oooooo ", " #OOOOOOOOO#@@@@@@@####OOOOOOOO#@@@@@@@@@@@XXXXXoo ooooo...o ", " #OOOOOOOOOOO###########OOOOOO##XXXXXXXXXXXXXXXXoo ooXXXoo..o ", " ##OOOOOOOOO###########OOOO##@@@@@@@@@@@@@XXXXoo oXXXXX..o ", " ###OOOO### oXX##OOO#XXXXXXXXXXXXXXXXXXoo o.....oo ", " #### oooo####oooooooooooooooooooo ooooooo ", " ", " "}; NetWinder specific documentation ================================ The NetWinder is a small low-power computer, primarily designed to run Linux. It is based around the StrongARM RISC processor, DC21285 PCI bridge, with PC-type hardware glued around it. Port usage ========== Min - Max Description --------------------------- 0x0000 - 0x000f DMA1 0x0020 - 0x0021 PIC1 0x0060 - 0x006f Keyboard 0x0070 - 0x007f RTC 0x0080 - 0x0087 DMA1 0x0088 - 0x008f DMA2 0x00a0 - 0x00a3 PIC2 0x00c0 - 0x00df DMA2 0x0180 - 0x0187 IRDA 0x01f0 - 0x01f6 ide0 0x0201 Game port 0x0203 RWA010 configuration read 0x0220 - ? SoundBlaster 0x0250 - ? WaveArtist 0x0279 RWA010 configuration index 0x02f8 - 0x02ff Serial ttyS1 0x0300 - 0x031f Ether10 0x0338 GPIO1 0x033a GPIO2 0x0370 - 0x0371 W83977F configuration registers 0x0388 - ? AdLib 0x03c0 - 0x03df VGA 0x03f6 ide0 0x03f8 - 0x03ff Serial ttyS0 0x0400 - 0x0408 DC21143 0x0480 - 0x0487 DMA1 0x0488 - 0x048f DMA2 0x0a79 RWA010 configuration write 0xe800 - 0xe80f ide0/ide1 BM DMA Interrupt usage =============== IRQ type Description --------------------------- 0 ISA 100Hz timer 1 ISA Keyboard 2 ISA cascade 3 ISA Serial ttyS1 4 ISA Serial ttyS0 5 ISA PS/2 mouse 6 ISA IRDA 7 ISA Printer 8 ISA RTC alarm 9 ISA 10 ISA GP10 (Orange reset button) 11 ISA 12 ISA WaveArtist 13 ISA 14 ISA hda1 15 ISA DMA usage ========= DMA type Description --------------------------- 0 ISA IRDA 1 ISA 2 ISA cascade 3 ISA WaveArtist 4 ISA 5 ISA 6 ISA 7 ISA WaveArtist ARM Linux 2.2.3 =============== * NOTE * The ARM support in the mainstream Linux kernel sources is not up to date. Please check ftp.arm.uk.linux.org:/pub/armlinux for latest updates. Compilation of kernel --------------------- In order to compile ARM Linux, you will need a compiler capable of generating ARM ELF code with GNU extensions. GCC-2.7.2.2 ELF, GCC 2.8.1 and EGCS are good compilers. Note that GCC-2.7.2.2 ELF is rare, and you probably don't have it. To build ARM Linux natively, you shouldn't have to alter the ARCH = line in the top level Makefile. However, if you don't have the ARM Linux ELF tools installed as default, then you should change the CROSS_COMPILE line as detailed below. If you wish to cross-compile, then alter the following lines in the top level make file: ARCH = with ARCH = arm and CROSS_COMPILE= to CROSS_COMPILE= eg. CROSS_COMPILE=arm-linux- Do a 'make config', followed by 'make dep', and finally 'make Image' to build the kernel (arch/arm/boot/Image). A compressed image can be built by doing a 'make zImage' instead of 'make Image'. Bug reports etc --------------- Please send patches, bug reports and code for the ARM Linux project to linux@arm.linux.org.uk Patches will not be included into future kernels unless they come to me (or the relevant person concerned). When sending bug reports, please ensure that they contain all relevant information, eg. the kernel messages that were printed before/during the problem, what you were doing, etc. For patches, please include some explanation as to what the patch does and why (if relevant). Modules ------- Although modularisation is supported (and required for the FP emulator), each module on an arm2/arm250/arm3 machine when is loaded will take memory up to the next 32k boundary due to the size of the pages. Hence is modularisation on these machines really worth it? However, arm6 and up machines allow modules to take multiples of 4k, and as such Acorn RiscPCs and other architectures using these processors can make good use of modularisation. ADFS Image files ---------------- You can access image files on your ADFS partitions by mounting the ADFS partition, and then using the loopback device driver. You must have losetup installed. Please note that the PCEmulator DOS partitions have a partition table at the start, and as such, you will have to give '-o offset' to losetup. Request to developers --------------------- When writing device drivers which include a separate assembler file, please include it in with the C file, and not the arch/arm/lib directory. This allows the driver to be compiled as a loadable module without requiring half the code to be compiled into the kernel image. In general, try to avoid using assembler unless it is really necessary. It makes drivers far less easy to port to other hardware. ST506 hard drives ----------------- The ST506 hard drive controllers seem to be working fine (if a little slowly). At the moment they will only work off the controllers on an A4x0's motherboard, but for it to work off a Podule just requires someone with a podule to add the addresses for the IRQ mask and the HDC base to the source. As of 31/3/96 it works with two drives (you should get the ADFS *configure harddrive set to 2). I've got an internal 20MB and a great big external 5.25" FH 64MB drive (who could ever want more :-) ). I've just got 240K/s off it (a dd with bs=128k); thats about half of what RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting last week :-) Known bug: Drive data errors can cause a hang; including cases where the controller has fixed the error using ECC. (Possibly ONLY in that case...hmm). 1772 Floppy ----------- This also seems to work OK, but hasn't been stressed much lately. It hasn't got any code for disc change detection in there at the moment which could be a bit of a problem! Suggestions on the correct way to do this are welcome. Kernel entry (head-armv.S) -------------------------- The initial entry into the kernel made via head-armv.S uses architecture independent code. The architecture is selected by the value of 'r1' on entry, which must be kept unique. You can register a new architecture by mailing the following details to rmk@arm.uk.linux.org. Please give the mail a subject of 'Register new architecture': Name: ARCHDIR: Description: Please follow this format - it is an automated system. You should receive a reply the next day. --- Russell King (27/03/1999) There seems to be a problem with exp(double) and our emulator. I haven't been able to track it down yet. This does not occur with the emulator supplied by Russell King. I also found one oddity in the emulator. I don't think it is serious but will point it out. The ARM calling conventions require floating point registers f4-f7 to be preserved over a function call. The compiler quite often uses an stfe instruction to save f4 on the stack upon entry to a function, and an ldfe instruction to restore it before returning. I was looking at some code, that calculated a double result, stored it in f4 then made a function call. Upon return from the function call the number in f4 had been converted to an extended value in the emulator. This is a side effect of the stfe instruction. The double in f4 had to be converted to extended, then stored. If an lfm/sfm combination had been used, then no conversion would occur. This has performance considerations. The result from the function call and f4 were used in a multiplication. If the emulator sees a multiply of a double and extended, it promotes the double to extended, then does the multiply in extended precision. This code will cause this problem: double x, y, z; z = log(x)/log(y); The result of log(x) (a double) will be calculated, returned in f0, then moved to f4 to preserve it over the log(y) call. The division will be done in extended precision, due to the stfe instruction used to save f4 in log(y). This directory contains the version 0.92 test release of the NetWinder Floating Point Emulator. The majority of the code was written by me, Scott Bambrough It is written in C, with a small number of routines in inline assembler where required. It was written quickly, with a goal of implementing a working version of all the floating point instructions the compiler emits as the first target. I have attempted to be as optimal as possible, but there remains much room for improvement. I have attempted to make the emulator as portable as possible. One of the problems is with leading underscores on kernel symbols. Elf kernels have no leading underscores, a.out compiled kernels do. I have attempted to use the C_SYMBOL_NAME macro wherever this may be important. Another choice I made was in the file structure. I have attempted to contain all operating system specfic code in one module (fpmodule.*). All the other files contain emulator specific code. This should allow others to port the emulator to NetBSD for instance relatively easily. The floating point operations are based on SoftFloat Release 2, by John Hauser. SoftFloat is a software implementation of floating-point that conforms to the IEC/IEEE Standard for Binary Floating-point Arithmetic. As many as four formats are supported: single precision, double precision, extended double precision, and quadruple precision. All operations required by the standard are implemented, except for conversions to and from decimal. We use only the single precision, double precision and extended double precision formats. The port of SoftFloat to the ARM was done by Phil Blundell, based on an earlier port of SoftFloat version 1 by Neil Carson for NetBSD/arm32. The file README.FPE contains a description of what has been implemented so far in the emulator. The file TODO contains a information on what remains to be done, and other ideas for the emulator. Bug reports, comments, suggestions should be directed to me at . General reports of "this program doesn't work correctly when your emulator is installed" are useful for determining that bugs still exist; but are virtually useless when attempting to isolate the problem. Please report them, but don't expect quick action. Bugs still exist. The problem remains in isolating which instruction contains the bug. Small programs illustrating a specific problem are a godsend. Legal Notices ------------- The NetWinder Floating Point Emulator is free software. Everything Corel has written is provided under the GNU GPL. See the file COPYING for copying conditions. Excluded from the above is the SoftFloat code. John Hauser's legal notice for SoftFloat is included below. ------------------------------------------------------------------------------- SoftFloat Legal Notice SoftFloat was written by John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE. ------------------------------------------------------------------------------- The following describes the current state of the NetWinder's floating point emulator. In the following nomenclature is used to describe the floating point instructions. It follows the conventions in the ARM manual. = , no default {P|M|Z} = {round to +infinity,round to -infinity,round to zero}, default = round to nearest Note: items enclosed in {} are optional. Floating Point Coprocessor Data Transfer Instructions (CPDT) ------------------------------------------------------------ LDF/STF - load and store floating {cond} Fd, Rn {cond} Fd, [Rn, #]{!} {cond} Fd, [Rn], # These instructions are fully implemented. LFM/SFM - load and store multiple floating Form 1 syntax: {cond} Fd, , [Rn] {cond} Fd, , [Rn, #]{!} {cond} Fd, , [Rn], # Form 2 syntax: {cond} Fd, , [Rn]{!} These instructions are fully implemented. They store/load three words for each floating point register into the memory location given in the instruction. The format in memory is unlikely to be compatible with other implementations, in particular the actual hardware. Specific mention of this is made in the ARM manuals. Floating Point Coprocessor Register Transfer Instructions (CPRT) ---------------------------------------------------------------- Conversions, read/write status/control register instructions FLT{cond}{P,M,Z} Fn, Rd Convert integer to floating point FIX{cond}{P,M,Z} Rd, Fn Convert floating point to integer WFS{cond} Rd Write floating point status register RFS{cond} Rd Read floating point status register WFC{cond} Rd Write floating point control register RFC{cond} Rd Read floating point control register FLT/FIX are fully implemented. RFS/WFS are fully implemented. RFC/WFC are fully implemented. RFC/WFC are supervisor only instructions, and presently check the CPU mode, and do an invalid instruction trap if not called from supervisor mode. Compare instructions CMF{cond} Fn, Fm Compare floating CMFE{cond} Fn, Fm Compare floating with exception CNF{cond} Fn, Fm Compare negated floating CNFE{cond} Fn, Fm Compare negated floating with exception These are fully implemented. Floating Point Coprocessor Data Instructions (CPDT) --------------------------------------------------- Dyadic operations: ADF{cond}{P,M,Z} Fd, Fn, - add SUF{cond}{P,M,Z} Fd, Fn, - subtract RSF{cond}{P,M,Z} Fd, Fn, - reverse subtract MUF{cond}{P,M,Z} Fd, Fn, - multiply DVF{cond}{P,M,Z} Fd, Fn, - divide RDV{cond}{P,M,Z} Fd, Fn, - reverse divide These are fully implemented. FML{cond}{P,M,Z} Fd, Fn, - fast multiply FDV{cond}{P,M,Z} Fd, Fn, - fast divide FRD{cond}{P,M,Z} Fd, Fn, - fast reverse divide These are fully implemented as well. They use the same algorithm as the non-fast versions. Hence, in this implementation their performance is equivalent to the MUF/DVF/RDV instructions. This is acceptable according to the ARM manual. The manual notes these are defined only for single operands, on the actual FPA11 hardware they do not work for double or extended precision operands. The emulator currently does not check the requested permissions conditions, and performs the requested operation. RMF{cond}{P,M,Z} Fd, Fn, - IEEE remainder This is fully implemented. Monadic operations: MVF{cond}{P,M,Z} Fd, - move MNF{cond}{P,M,Z} Fd, - move negated These are fully implemented. ABS{cond}{P,M,Z} Fd, - absolute value SQT{cond}{P,M,Z} Fd, - square root RND{cond}{P,M,Z} Fd, - round These are fully implemented. URD{cond}{P,M,Z} Fd, - unnormalized round NRM{cond}{P,M,Z} Fd, - normalize These are implemented. URD is implemented using the same code as the RND instruction. Since URD cannot return a unnormalized number, NRM becomes a NOP. Library calls: POW{cond}{P,M,Z} Fd, Fn, - power RPW{cond}{P,M,Z} Fd, Fn, - reverse power POL{cond}{P,M,Z} Fd, Fn, - polar angle (arctan2) LOG{cond}{P,M,Z} Fd, - logarithm to base 10 LGN{cond}{P,M,Z} Fd, - logarithm to base e EXP{cond}{P,M,Z} Fd, - exponent SIN{cond}{P,M,Z} Fd, - sine COS{cond}{P,M,Z} Fd, - cosine TAN{cond}{P,M,Z} Fd, - tangent ASN{cond}{P,M,Z} Fd, - arcsine ACS{cond}{P,M,Z} Fd, - arccosine ATN{cond}{P,M,Z} Fd, - arctangent These are not implemented. They are not currently issued by the compiler, and are handled by routines in libc. These are not implemented by the FPA11 hardware, but are handled by the floating point support code. They should be implemented in future versions. Signalling: Signals are implemented. However current ELF kernels produced by Corel Computer have a bug in them that prevents the module from generating a SIGFPE. This is caused by a failure to alias fp_current to the kernel variable current_set[0] correctly. The kernel provided with this distribution (vmlinux-nwfpe-0.93) contains a fix for this problem and also incorporates the current version of the emulator directly. It is possible to run with no floating point module loaded with this kernel. It is provided as a demonstration of the technology and for those who want to do floating point work that depends on signals. It is not strictly necessary to use the module. A module (either the one provided by Russell King, or the one in this distribution) can be loaded to replace the functionality of the emulator built into the kernel. TODO LIST --------- POW{cond}{P,M,Z} Fd, Fn, - power RPW{cond}{P,M,Z} Fd, Fn, - reverse power POL{cond}{P,M,Z} Fd, Fn, - polar angle (arctan2) LOG{cond}{P,M,Z} Fd, - logarithm to base 10 LGN{cond}{P,M,Z} Fd, - logarithm to base e EXP{cond}{P,M,Z} Fd, - exponent SIN{cond}{P,M,Z} Fd, - sine COS{cond}{P,M,Z} Fd, - cosine TAN{cond}{P,M,Z} Fd, - tangent ASN{cond}{P,M,Z} Fd, - arcsine ACS{cond}{P,M,Z} Fd, - arccosine ATN{cond}{P,M,Z} Fd, - arctangent These are not implemented. They are not currently issued by the compiler, and are handled by routines in libc. These are not implemented by the FPA11 hardware, but are handled by the floating point support code. They should be implemented in future versions. There are a couple of ways to approach the implementation of these. One method would be to use accurate table methods for these routines. I have a couple of papers by S. Gal from IBM's research labs in Haifa, Israel that seem to promise extreme accuracy (in the order of 99.8%) and reasonable speed. These methods are used in GLIBC for some of the transcendental functions. Another approach, which I know little about is CORDIC. This stands for Coordinate Rotation Digital Computer, and is a method of computing transcendental functions using mostly shifts and adds and a few multiplications and divisions. The ARM excels at shifts and adds, so such a method could be promising, but requires more research to determine if it is feasible. Rounding Methods The IEEE standard defines 4 rounding modes. Round to nearest is the default, but rounding to + or - infinity or round to zero are also allowed. Many architectures allow the rounding mode to be specified by modifying bits in a control register. Not so with the ARM FPA11 architecture. To change the rounding mode one must specify it with each instruction. This has made porting some benchmarks difficult. It is possible to introduce such a capability into the emulator. The FPCR contains bits describing the rounding mode. The emulator could be altered to examine a flag, which if set forced it to ignore the rounding mode in the instruction, and use the mode specified in the bits in the FPCR. This would require a method of getting/setting the flag, and the bits in the FPCR. This requires a kernel call in ArmLinux, as WFC/RFC are supervisor only instructions. If anyone has any ideas or comments I would like to hear them. [NOTE: pulled out from some docs on ARM floating point, specifically for the Acorn FPE, but not limited to it: The floating point control register (FPCR) may only be present in some implementations: it is there to control the hardware in an implementation- specific manner, for example to disable the floating point system. The user mode of the ARM is not permitted to use this register (since the right is reserved to alter it between implementations) and the WFC and RFC instructions will trap if tried in user mode. Hence, the answer is yes, you could do this, but then you will run a high risk of becoming isolated if and when hardware FP emulation comes out -- Russell]. 00-INDEX - this file (info on CD-ROMs and Linux) Makefile - only used to generate TeX output from the documentation. aztcd - info on Aztech/Orchid/Okano/Wearnes/Conrad/CyCDROM driver. cdrom-standard.tex - LaTeX document on standardizing the CD-ROM programming interface. cdu31a - info on the Sony CDU31A/CDU33A CD-ROM driver. cm206 - info on the Philips/LMS cm206/cm260 CD-ROM driver. gscd - info on the Goldstar R420 CD-ROM driver. ide-cd - info on setting up and using ATAPI (aka IDE) CD-ROMs. isp16 - info on the CD-ROM interface on ISP16, MAD16 or Mozart sound card. mcd - info on limitations of standard Mitsumi CD-ROM driver. mcdx - info on improved Mitsumi CD-ROM driver. optcd - info on the Optics Storage 8000 AT CD-ROM driver sbpcd - info on the SoundBlaster/Panasonic CD-ROM interface driver. sjcd - info on the SANYO CDR-H94A CD-ROM interface driver. sonycd535 - info on the Sony CDU-535 (and 531) CD-ROM driver. $Id: README.aztcd,v 2.60 1997/11/29 09:51:25 root Exp root $ Readme-File /usr/src/Documentation/cdrom/aztcd for AZTECH CD-ROM CDA268-01A, ORCHID CD-3110, OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540 CD-ROM Drives Version 2.6 and newer (for other drives see 6.-8.) NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE A PROPRIETARY INTERFACE (implemented on a sound card or on an ISA-AT-bus card). IT WILL DEFINITELY NOT WORK WITH CD-ROM DRIVES WITH *IDE*-INTERFACE, such as the Aztech CDA269-031SE !!! (The only known exceptions are 'faked' IDE drives like the CyCDROM CR520ie which work with aztcd under certain conditions, see 7.). IF YOU'RE USING A CD-ROM DRIVE WITH IDE-INTERFACE, SOMETIMES ALSO CALLED ATAPI-COMPATIBLE, PLEASE USE THE ide-cd.c DRIVER, WRITTEN BY MARK LORD AND SCOTT SNYDER ! THE STANDARD-KERNEL 1.2.x NOW ALSO SUPPORTS IDE-CDROM-DRIVES, SEE THE HARDDISK (!) SECTION OF make config, WHEN COMPILING A NEW KERNEL!!! ---------------------------------------------------------------------------- Contents of this file: 1. NOTE 2. INSTALLATION 3. CONFIGURING YOUR KERNEL 4. RECOMPILING YOUR KERNEL 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE 4.2 CDROM CONNECTED TO A SOUNDCARD 5. KNOWN PROBLEMS, FUTURE DEVELOPMENTS 5.1 MULTISESSION SUPPORT 5.2 STATUS RECOGNITION 5.3 DOSEMU's CDROM SUPPORT 6. BUG REPORTS 7. OTHER DRIVES 8. IF YOU DON'T SUCCEED ... DEBUGGING 9. TECHNICAL HISTORY OF THE DRIVER 10. ACKNOWLEDGMENTS 11. PROGRAMMING ADD ONS: CDPLAY.C APPENDIX: Source code of cdplay.c ---------------------------------------------------------------------------- 1. NOTE This software has been successfully in alpha and beta test and is part of the standard kernel since kernel 1.1.8x since December 1994. It works with AZTECH CDA268-01A, ORCHID CDS-3110, ORCHID/WEARNES CDD110 and CONRAD TXC (Nr.99 31 23 -series 04) and has proven to be stable with kernel versions 1.0.9 and newer. But with any software there still may be bugs in it. So if you encounter problems, you are invited to help us improve this software. Please send me a detailed bug report (see chapter BUG REPORTS). You are also invited in helping us to increase the number of drives, which are supported. Please read the README-files carefully and always keep a backup copy of your old kernel, in order to reboot if something goes wrong! 2. INSTALLATION The driver consists of a header file 'aztcd.h', which normally should reside in /usr/src/linux/drivers/cdrom and the source code 'aztcd.c', which normally resides in the same place. It uses /dev/aztcd (/dev/aztcd0 in some distri- butions), which must be a valid block device with major number 29 and reside in directory /dev. To mount a CD-ROM, your kernel needs to have the ISO9660- filesystem support included. PLEASE NOTE: aztcd.c has been developed in parallel to the linux kernel, which had and is having many major and minor changes which are not backward compatible. Quite definitely aztcd.c version 1.80 and newer will NOT work in kernels older than 1.3.33. So please always use the most recent version of aztcd.c with the appropriate linux-kernel. 3. CONFIGURING YOUR KERNEL If your kernel is already configured for using the AZTECH driver you will see the following message while Linux boots: Aztech CD-ROM Init: DriverVersion= BaseAddress= Aztech CD-ROM Init: FirmwareVersion=>> Aztech CD-ROM Init: detected Aztech CD-ROM Init: End If the message looks different and you are sure to have a supported drive, it may have a different base address. The Aztech driver does look for the CD-ROM drive at the base address specified in aztcd.h at compile time. This address can be overwritten by boot parameter aztcd=....You should reboot and start Linux with boot parameter aztcd=, e.g. aztcd=0x320. If you do not know the base address, start your PC with DOS and look at the boot message of your CD-ROM's DOS driver. If that still does not help, use boot parameter aztcd=,0x79 , this tells aztcd to try a little harder. aztcd may be configured to use autoprobing the base address by recompiling it (see chapter 4.). If the message looks correct, as user 'root' you should be able to mount the drive by mount -t iso9660 -r /dev/aztcd0 /mnt and use it as any other filesystem. (If this does not work, check if /dev/aztcd0 and /mnt do exist and create them, if necessary by doing mknod /dev/aztcd0 b 29 0 mkdir /mnt If you still get a different message while Linux boots or when you get the message, that the ISO9660-filesystem is not supported by your kernel, when you try to mount the CD-ROM drive, you have to recompile your kernel. If you do *not* have an Aztech/Orchid/Okano/Wearnes/TXC drive and want to bypass drive detection during Linux boot up, start with boot parameter aztcd=0. Most distributions nowadays do contain a boot disk image containing aztcd. Please note, that this driver will not work with IDE/ATAPI drives! With these you must use ide-cd.c instead. 4. RECOMPILING YOUR KERNEL If your kernel is not yet configured for the AZTECH driver and the ISO9660- filesystem, you have to recompile your kernel: - Edit aztcd.h to set the I/O-address to your I/O-Base address (AZT_BASE_ADDR), the driver does not use interrupts or DMA, so if you are using an AZTECH CD268, an ORCHID CD-3110 or ORCHID/WEARNES CDD110 that's the only item you have to set up. If you have a soundcard, read chapter 4.2. Users of other drives should read chapter OTHER DRIVES of this file. You also can configure that address by kernel boot parameter aztcd=... - aztcd may be configured to use autoprobing the base address by setting AZT_BASE_ADDR to '-1'. In that case aztcd probes the addresses listed under AZT_BASE_AUTO. But please remember, that autoprobing always may incorrectly influence other hardware components too! - There are some other points, which may be configured, e.g. auto-eject the CD when unmounting a drive, tray locking etc., see aztcd.h for details. - If you're using a linux kernel version prior to 2.1.0, in aztcd.h uncomment the line '#define AZT_KERNEL_PRIOR_2_1' - Build a new kernel, configure it for 'Aztech/Orchid/Okano/Wearnes support' (if you want aztcd to be part of the kernel). Do not configure it for 'Aztech... support', if you want to use aztcd as a run time loadable module. But in any case you must have the ISO9660-filesystem included in your kernel. - Activate the new kernel, normally this is done by running LILO (don't for- get to configure it before and to keep a copy of your old kernel in case something goes wrong!). - Reboot - If you've included aztcd in your kernel, you now should see during boot some messages like Aztech CD-ROM Init: DriverVersion= BaseAddress= Aztech CD-ROM Init: FirmwareVersion= Aztech CD-ROM Init: detected Aztech CD-ROM Init: End - If you have not included aztcd in your kernel, but want to load aztcd as a run time loadable module see 4.1. - If the message looks correct, as user 'root' you should be able to mount the drive by mount -t iso9660 -r /dev/aztcd0 /mnt and use it as any other filesystem. (If this does not work, check if /dev/aztcd0 and /mnt do exist and create them, if necessary by doing mknod /dev/aztcd0 b 29 0 mkdir /mnt - If this still does not help, see chapters OTHER DRIVES and DEBUGGING. 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE If you do not need aztcd permanently, you can also load and remove the driver during runtime via insmod and rmmod. To build aztcd as a loadable module you must configure your kernel for AZTECH module support (answer 'm' when con- figuring the kernel). Anyhow, you may run into problems, if the version of your boot kernel is not the same than the source kernel version, from which you create the modules. So rebuild your kernel, if necessary. Now edit the base address of your AZTECH interface card in /usr/src/linux/drivers/cdrom/aztcd.h to the appropriate value. aztcd may be configured to use autoprobing the base address by setting AZT_BASE_ADDR to '-1'. In that case aztcd probes the addresses listed under AZT_BASE_AUTO. But please remember, that autoprobing always may incorrectly influence other hardware components too! There are also some special features which may be configured, e.g. auto-eject a CD when unmounting the drive etc; see aztcd.h for details. Then change to /usr/src/linux and do a make modules make modules_install After that you can run-time load the driver via insmod /lib/modules/X.X.X/misc/aztcd.o and remove it via rmmod aztcd. If you did not set the correct base address in aztcd.h, you can also supply the base address when loading the driver via insmod /lib/modules/X.X.X/misc/aztcd.o aztcd= Again specifying aztcd=-1 will cause autoprobing. If you do not have the iso9660-filesystem in your boot kernel, you also have to load it before you can mount the CDROM: insmod /lib/modules/X.X.X/fs/isofs.o The mount procedure works as described in 4. above. (In all commands 'X.X.X' is the current linux kernel version number. For details see file modules.txt in /usr/src/linux/Documentation) 4.2 CDROM CONNECTED TO A SOUNDCARD Most soundcards do have a bus interface to the CDROM-drive. In many cases this soundcard needs to be configured, before the CDROM can be used. This configuration procedure consists of writing some kind of initialization data to the soundcard registers. The AZTECH-CDROM driver in the moment does only support one type of soundcard (SoundWave32). Users of other soundcards should try to boot DOS first and let their DOS drivers initialize the soundcard and CDROM, then warm boot (or use loadlin) their PC to start Linux. Support for the CDROM-interface of SoundWave32-soundcards is directly implemented in the AZTECH driver. Please edit linux/drivers/cdrom/aztdc.h, uncomment line '#define AZT_SW32' and set the appropriate value for AZT_BASE_ADDR and AZT_SW32_BASE_ADDR. This support was tested with an Orchid CDS-3110 connected to a SoundWave32. If you want your soundcard to be supported, find out, how it needs to be configured and mail me (see 6.) the appropriate information. 5. KNOWN PROBLEMS, FUTURE DEVELOPMENTS 5.1 MULTISESSION SUPPORT Multisession support for CD's still is a myth. I implemented and tested a basic support for multisession and XA CDs, but I still have not enough CDs and appli- cations to test it rigorously. So if you'd like to help me, please contact me (Email address see below). As of version 1.4 and newer you can enable the multisession support in aztcd.h by setting AZT_MULTISESSION to 1. Doing so will cause the ISO9660-filesystem to deal with multisession CDs, ie. redirect requests to the Table of Contents (TOC) information from the last session, which contains the info of all previous sessions etc.. If you do set AZT_MULTISESSION to 0, you can use multisession CDs anyway. In that case the drive's firmware will do automatic redirection. For the ISO9660-filesystem any multisession CD will then look like a 'normal' single session CD. But never- theless the data of all sessions are viewable and accessible. So with practical- ly all real world applications you won't notice the difference. But as future applications may make use of advanced multisession features, I've started to implement the interface for the ISO9660 multisession interface via ioctl CDROMMULTISESSION. 5.2 STATUS RECOGNITION The drive status recognition does not work correctly in all cases. Changing a disk or having the door open, when a drive is already mounted, is detected by the Aztech driver itself, but nevertheless causes multiple read attempts by the different layers of the ISO9660-filesystem driver, which finally timeout, so you have to wait quite a little... But isn't it bad style to change a disk in a mounted drive, anyhow ?! The driver uses busy wait in most cases for the drive handshake (macros STEN_LOW and DTEN_LOW). I tested with a 486/DX2 at 66MHz and a Pentium at 60MHz and 90MHz. Whenever you use a much faster machine you are likely to get timeout messages. In that case edit aztcd.h and increase the timeout value AZT_TIMEOUT. For some 'slow' drive commands I implemented waiting with a timer waitqueue (macro STEN_LOW_WAIT). If you get this timeout message, you may also edit aztcd.h and increase the timeout value AZT_STATUS_DELAY. The waitqueue has shown to be a little critical. If you get kernel panic messages, edit aztcd.c and substitute STEN_LOW_WAIT by STEN_LOW. Busy waiting with STEN_LOW is more stable, but also causes CPU overhead. 5.3 DOSEMU's CD-ROM SUPPORT With release 1.20 aztcd was modified to allow access to CD-ROMS when running under dosemu-0.60.0 aztcd-versions before 1.20 are most likely to crash Linux, when a CD-ROM is accessed under dosemu. This problem has partly been fixed, but still when accessing a directory for the first time the system might hang for some 30sec. So be patient, when using dosemu's CD-ROM support in combination with aztcd :-) ! This problem has now (July 1995) been fixed by a modification to dosemu's CD-ROM driver. The new version came with dosemu-0.60.2, see dosemu's README.CDROM. 6. BUG REPORTS Please send detailed bug reports and bug fixes via EMail to Werner.Zimmermann@fht-esslingen.de Please include a description of your CD-ROM drive type and interface card, the exact firmware message during Linux bootup, the version number of the AZTECH-CDROM-driver and the Linux kernel version. Also a description of your system's other hardware could be of interest, especially microprocessor type, clock frequency, other interface cards such as soundcards, ethernet adapter, game cards etc.. I will try to collect the reports and make the necessary modifications from time to time. I may also come back to you directly with some bug fixes and ask you to do further testing and debugging. Editors of CD-ROMs are invited to send a 'cooperation' copy of their CD-ROMs to the volunteers, who provided the CD-ROM support for Linux. My snail mail address for such 'stuff' is Prof. Dr. W. Zimmermann Fachhochschule fuer Technik Esslingen Fachbereich IT Flandernstrasse 101 D-73732 Esslingen Germany 7. OTHER DRIVES The following drives ORCHID CDS3110, OKANO CDD110, WEARNES CDD110 and Conrad TXC Nr. 993123-series 04 nearly look the same as AZTECH CDA268-01A, especially they seem to use the same command codes. So it was quite simple to make the AZTECH driver work with these drives. Unfortunately I do not have any of these drives available, so I couldn't test it myself. In some installations, it seems necessary to initialize the drive with the DOS driver before (especially if combined with a sound card) and then do a warm boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'. If you do not succeed, read chapter DEBUGGING. Thanks in advance! Sorry for the inconvenience, but it is difficult to develop for hardware, which you don't have available for testing. So if you like, please help us. If you do have a CyCDROM CR520ie thanks to Hilmar Berger's help your chances are good, that it will work with aztcd. The CR520ie is sold as an IDE-drive and really is connected to the IDE interface (primary at 0x1F0 or secondary at 0x170, configured as slave, not as master). Nevertheless it is not ATAPI compatible but still uses Aztech's command codes. 8. DEBUGGING : IF YOU DON'T SUCCEED, TRY THE FOLLOWING -reread the complete README file -make sure, that your drive is hardware configured for transfer mode: polled IRQ: not used DMA: not used Base Address: something like 300, 320 ... You can check this, when you start the DOS driver, which came with your drive. By appropriately configuring the drive and the DOS driver you can check, whether your drive does operate in this mode correctly under DOS. If it does not operate under DOS, it won't under Linux. If your drive's base address is something like 0x170 or 0x1F0 (and it is not a CyCDROM CR520ie or CR 940ie) you most likely are having an IDE/ATAPI- compatible drive, which is not supported by aztcd.c, use ide-cd.c instead. Make sure the Base Address is configured correctly in aztcd.h, also make sure, that /dev/aztcd0 exists with the correct major number (compare it with the entry in file /usr/include/linux/major.h for the Aztech drive). -insert a CD-ROM and close the tray -cold boot your PC (i.e. via the power on switch or the reset button) -if you start Linux via DOS, e.g. using loadlin, make sure, that the DOS driver for the CD-ROM drive is not loaded (comment out the calling lines in DOS' config.sys!) -look for the aztcd: init message during Linux init and note them exactly -log in as root and do a mount -t iso9660 /dev/aztcd0 /mnt -if you don't succeed in the first time, try several times. Try also to open and close the tray, then mount again. Please note carefully all commands you typed in and the aztcd-messages, which you get. -if you get an 'Aztech CD-ROM init: aborted' message, read the remarks about the version string below. If this does not help, do the same with the following differences -start DOS before; make now sure, that the DOS driver for the CD-ROM is loaded under DOS (i.e. uncomment it again in config.sys) -warm boot your PC (i.e. via CTRL-ALT-DEL) if you have it, you can also start via loadlin (try both). ... Again note all commands and the aztcd-messages. If you see STEN_LOW or STEN_LOW_WAIT error messages, increase the timeout values. If this still does not help, -look in aztcd.c for the lines #if 0 #define AZT_TEST1 ... #endif and substitute '#if 0' by '#if 1'. -recompile your kernel and repeat the above two procedures. You will now get a bundle of debugging messages from the driver. Again note your commands and the appropriate messages. If you have syslogd running, these messages may also be found in syslogd's kernel log file. Nevertheless in some installations syslogd does not yet run, when init() is called, thus look for the aztcd-messages during init, before the login-prompt appears. Then look in aztcd.c, to find out, what happened. The normal calling sequence is: aztcd_init() during Linux bootup procedure init() after doing a 'mount -t iso9660 /dev/aztcd0 /mnt' the normal calling sequence is aztcd_open() -> Status 2c after cold reboot with CDROM or audio CD inserted -> Status 8 after warm reboot with CDROM inserted -> Status 2e after cold reboot with no disk, closed tray -> Status 6e after cold reboot, mount with door open aztUpdateToc() aztGetDiskInfo() aztGetQChannelInfo() repeated several times aztGetToc() aztGetQChannelInfo() repeated several times a list of track information do_aztcd_request() } azt_transfer() } repeated several times azt_poll } Check, if there is a difference in the calling sequence or the status flags! There are a lot of other messages, eg. the ACMD-command code (defined in aztcd.h), status info from the getAztStatus-command and the state sequence of the finite state machine in azt_poll(). The most important are the status messages, look how they are defined and try to understand, if they make sense in the context where they appear. With a CD-ROM inserted the status should always be 8, except in aztcd_open(). Try to open the tray, insert an audio disk, insert no disk or reinsert the CD-ROM and check, if the status bits change accordingly. The status bits are the most likely point, where the drive manufacturers may implement changes. If you still don't succeed, a good point to start is to look in aztcd.c in function aztcd_init, where the drive should be detected during init. Do the following: -reboot the system with boot parameter 'aztcd=,0x79'. With parameter 0x79 most of the drive version detection is bypassed. After that you should see the complete version string including leading and trailing blanks during init. Now adapt the statement if ((result[1]=='A')&&(result[2]=='Z' ...) in aztcd_init() to exactly match the first 3 or 4 letters you have seen. -Another point is the 'smart' card detection feature in aztcd_init(). Normally the CD-ROM drive is ready, when aztcd_init is trying to read the version string and a time consuming ACMD_SOFT_RESET command can be avoided. This is detected by looking, if AFL_OP_OK can be read correctly. If the CD-ROM drive hangs in some unknown state, e.g. because of an error before a warm start or because you first operated under DOS, even the version string may be correct, but the following commands will not. Then change the code in such a way, that the ACMD_SOFT_RESET is issued in any case, by substituting the if-statement 'if ( ...=AFL_OP_OK)' by 'if (1)'. If you succeed, please mail me the exact version string of your drive and the code modifications, you have made together with a short explanation. If you don't succeed, you may mail me the output of the debugging messages. But remember, they are only useful, if they are exact and complete and you describe in detail your hardware setup and what you did (cold/warm reboot, with/without DOS, DOS-driver started/not started, which Linux-commands etc.) 9. TECHNICAL HISTORY OF THE DRIVER The AZTECH-Driver is a rework of the Mitsumi-Driver. Four major items had to be reworked: a) The Mitsumi drive does issue complete status information acknowledging each command, the Aztech drive does only signal that the command was processed. So whenever the complete status information is needed, an extra ACMD_GET_STATUS command is issued. The handshake procedure for the drive can be found in the functions aztSendCmd(), sendAztCmd() and getAztStatus(). b) The Aztech Drive does not have a ACMD_GET_DISK_INFO command, so the necessary info about the number of tracks (firstTrack, lastTrack), disk length etc. has to be read from the TOC in the lead in track (see function aztGetDiskInfo()). c) Whenever data is read from the drive, the Mitsumi drive is started with a command to read an indefinite (0xffffff) number of sectors. When the appropriate number of sectors is read, the drive is stopped by a ACDM_STOP command. This does not work with the Aztech drive. I did not find a way to stop it. The stop and pause commands do only work in AUDIO mode but not in DATA mode. Therefore I had to modify the 'finite state machine' in function azt_poll to only read a certain number of sectors and then start a new read on demand. As I have not completely understood, how the buffer/caching scheme of the Mitsumi driver was implemented, I am not sure, if I have covered all cases correctly, whenever you get timeout messages, the bug is most likely to be in that function azt_poll() around switch(cmd) .... case ACD_S_DATA. d) I did not get information about changing drive mode. So I doubt, that the code around function azt_poll() case AZT_S_MODE does work. In my test I have not been able to switch to reading in raw mode. For reading raw mode, Aztech uses a different command than for cooked mode, which I only have implemen- ted in the ioctl-section but not in the section which is used by the ISO9660. The driver was developed on an AST PC with Intel 486/DX2, 8MB RAM, 340MB IDE hard disk and on an AST PC with Intel Pentium 60MHz, 16MB RAM, 520MB IDE running Linux kernel version 1.0.9 from the LST 1.8 Distribution. The kernel was compiled with gcc.2.5.8. My CD-ROM drive is an Aztech CDA268-01A. My drive says, that it has Firmware Version AZT26801A1.3. It came with an ISA-bus interface card and works with polled I/O without DMA and without interrupts. The code for all other drives was 'remote' tested and debugged by a number of volunteers on the Internet. Points, where I feel that possible problems might be and all points where I did not completely understand the drive's behaviour or trust my own code are marked with /*???*/ in the source code. There are also some parts in the Mitsumi driver, where I did not completely understand their code. 10. ACKNOWLEDGMENTS Without the help of P.Bush, Aztech, who delivered technical information about the Aztech Drive and without the help of E.Moenkeberg, GWDG, who did a great job in analyzing the command structure of various CD-ROM drives, this work would not have been possible. E.Moenkeberg was also a great help in making the software 'kernel ready' and in answering many of the CDROM-related questions in the newsgroups. He really is *the* Linux CD-ROM guru. Thanks also to all the guys on the Internet, who collected valuable technical information about CDROMs. Joe Nardone (joe@access.digex.net) was a patient tester even for my first trial, which was more than slow, and made suggestions for code improvement. Especially the 'finite state machine' azt_poll() was rewritten by Joe to get clean C code and avoid the ugly 'gotos', which I copied from mcd.c. Robby Schirmer (schirmer@fmi.uni-passau.de) tested the audio stuff (ioctls) and suggested a lot of patches for them. Joseph Piskor and Peter Nugent were the first users with the ORCHID CD3110 and also were very patient with the problems which occurred. Reinhard Max delivered the information for the CDROM-interface of the SoundWave32 soundcards. Jochen Kunz and Olaf Kaluza delivered the information for supporting Conrad's TXC drive. Hilmar Berger delivered the patches for supporting CyCDROM CR520ie. Anybody, who is interested in these items should have a look at 'ftp.gwdg.de', directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'. 11. PROGRAMMING ADD ONs: cdplay.c You can use the ioctl-functions included in aztcd.c in your own programs. As an example on how to do this, you will find a tiny CD Player for audio CDs named 'cdplay.c'. It allows you to play audio CDs. You can play a specified track, pause and resume or skip tracks forward and backwards. If you quit the program without stopping the drive, playing is continued. You can also (mis)use cdplay to read and hexdump data disks. You can find the code in the APPENDIX of this file, which you should cut out with an editor and store in a separate file 'cdplay.c'. To compile it and make it executable, do gcc -s -Wall -O2 -L/usr/lib cdplay.c -o /usr/local/bin/cdplay # compiles it chmod +755 /usr/local/bin/cdplay # makes it executable ln -s /dev/aztcd0 /dev/cdrom # creates a link (for /usr/lib substitute the top level directory, where your include files reside, and for /usr/local/bin the directory, where you want the executable binary to reside ) You have to set the correct permissions for cdplay *and* for /dev/mcd0 or /dev/aztcd0 in order to use it. Remember, that you should not have /dev/cdrom mounted, when you're playing audio CDs. This program is just a hack for testing the ioctl-functions in aztcd.c. I will not maintain it, so if you run into problems, discard it or have a look into the source code 'cdplay.c'. The program does only contain a minimum of user protection and input error detection. If you use the commands in the wrong order or if you try to read a CD at wrong addresses, you may get error messages or even hang your machine. If you get STEN_LOW, STEN_LOW_WAIT or segment violation error messages when using cdplay, after that, the system might not be stable any more, so you'd better reboot. As the ioctl-functions run in kernel mode, most normal Linux-multitasking protection features do not work. By using uninitialized 'wild' pointers etc., it is easy to write to other users' data and program areas, destroy kernel tables etc.. So if you experiment with ioctls as always when you are doing systems programming and kernel hacking, you should have a backup copy of your system in a safe place (and you also should try restoring from a backup copy first)! A reworked and improved version called 'cdtester.c', which has yet more features for testing CDROM-drives can be found in /usr/src/linux/Documentation/cdrom/sbpcd, written by E.Moenkeberg. Werner Zimmermann Fachhochschule fuer Technik Esslingen (EMail: Werner.Zimmermann@fht-esslingen.de) October, 1997 --------------------------------------------------------------------------- APPENDIX: Source code of cdplay.c /* Tiny Audio CD Player Copyright 1994, 1995, 1996 Werner Zimmermann (Werner.Zimmermann@fht-esslingen.de) This program originally was written to test the audio functions of the AZTECH.CDROM-driver, but it should work with every CD-ROM drive. Before using it, you should set a symlink from /dev/cdrom to your real CDROM device. The GNU General Public License applies to this program. History: V0.1 W.Zimmermann: First release. Nov. 8, 1994 V0.2 W.Zimmermann: Enhanced functionality. Nov. 9, 1994 V0.3 W.Zimmermann: Additional functions. Nov. 28, 1994 V0.4 W.Zimmermann: fixed some bugs. Dec. 17, 1994 V0.5 W.Zimmermann: clean 'scanf' commands without compiler warnings Jan. 6, 1995 V0.6 W.Zimmermann: volume control (still experimental). Jan. 24, 1995 V0.7 W.Zimmermann: read raw modified. July 26, 95 */ #include #include #include #include #include #include #include #include void help(void) { printf("Available Commands: STOP s EJECT/CLOSE e QUIT q\n"); printf(" PLAY TRACK t PAUSE p RESUME r\n"); printf(" NEXT TRACK n REPEAT LAST l HELP h\n"); printf(" SUB CHANNEL c TRACK INFO i PLAY AT a\n"); printf(" READ d READ RAW w VOLUME v\n"); } int main(void) { int handle; unsigned char command=' ', ini=0, first=1, last=1; unsigned int cmd, i,j,k, arg1,arg2,arg3; struct cdrom_ti ti; struct cdrom_tochdr tocHdr; struct cdrom_subchnl subchnl; struct cdrom_tocentry entry; struct cdrom_msf msf; union { struct cdrom_msf msf; unsigned char buf[CD_FRAMESIZE_RAW]; } azt; struct cdrom_volctrl volctrl; printf("\nMini-Audio CD-Player V0.72 (C) 1994,1995,1996 W.Zimmermann\n"); handle=open("/dev/cdrom",O_RDWR); ioctl(handle,CDROMRESUME); if (handle<=0) { printf("Drive Error: already playing, no audio disk, door open\n"); printf(" or no permission (you must be ROOT in order to use this program)\n"); } else { help(); while (1) { printf("Type command (h = help): "); scanf("%s",&command); switch (command) { case 'e': cmd=CDROMEJECT; ioctl(handle,cmd); break; case 'p': if (!ini) { printf("Command not allowed - play track first\n"); } else { cmd=CDROMPAUSE; if (ioctl(handle,cmd)) printf("Drive Error\n"); } break; case 'r': if (!ini) { printf("Command not allowed - play track first\n"); } else { cmd=CDROMRESUME; if (ioctl(handle,cmd)) printf("Drive Error\n"); } break; case 's': cmd=CDROMPAUSE; if (ioctl(handle,cmd)) printf("Drive error or already stopped\n"); cmd=CDROMSTOP; if (ioctl(handle,cmd)) printf("Drive error\n"); break; case 't': cmd=CDROMREADTOCHDR; if (ioctl(handle,cmd,&tocHdr)) printf("Drive Error\n"); first=tocHdr.cdth_trk0; last= tocHdr.cdth_trk1; if ((first==0)||(first>last)) { printf ("--could not read TOC\n"); } else { printf("--first track: %d --last track: %d --enter track number: ",first,last); cmd=CDROMPLAYTRKIND; scanf("%i",&arg1); ti.cdti_trk0=arg1; if (ti.cdti_trk0last) ti.cdti_trk0=last; ti.cdti_ind0=0; ti.cdti_trk1=last; ti.cdti_ind1=0; if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); ini=1; } break; case 'n': if (!ini++) { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n"); first=tocHdr.cdth_trk0; last= tocHdr.cdth_trk1; ti.cdti_trk0=first-1; } if ((first==0)||(first>last)) { printf ("--could not read TOC\n"); } else { cmd=CDROMPLAYTRKIND; if (++ti.cdti_trk0 > last) ti.cdti_trk0=last; ti.cdti_ind0=0; ti.cdti_trk1=last; ti.cdti_ind1=0; if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); ini=1; } break; case 'l': if (!ini++) { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n"); first=tocHdr.cdth_trk0; last= tocHdr.cdth_trk1; ti.cdti_trk0=first+1; } if ((first==0)||(first>last)) { printf ("--could not read TOC\n"); } else { cmd=CDROMPLAYTRKIND; if (--ti.cdti_trk0 < first) ti.cdti_trk0=first; ti.cdti_ind0=0; ti.cdti_trk1=last; ti.cdti_ind1=0; if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); ini=1; } break; case 'c': subchnl.cdsc_format=CDROM_MSF; if (ioctl(handle,CDROMSUBCHNL,&subchnl)) printf("Drive Error\n"); else { printf("AudioStatus:%s Track:%d Mode:%d MSF=%d:%d:%d\n", \ subchnl.cdsc_audiostatus==CDROM_AUDIO_PLAY ? "PLAYING":"NOT PLAYING",\ subchnl.cdsc_trk,subchnl.cdsc_adr, \ subchnl.cdsc_absaddr.msf.minute, subchnl.cdsc_absaddr.msf.second, \ subchnl.cdsc_absaddr.msf.frame); } break; case 'i': if (!ini) { printf("Command not allowed - play track first\n"); } else { cmd=CDROMREADTOCENTRY; printf("Track No.: "); scanf("%d",&arg1); entry.cdte_track=arg1; if (entry.cdte_tracklast) entry.cdte_track=last; entry.cdte_format=CDROM_MSF; if (ioctl(handle,cmd,&entry)) { printf("Drive error or invalid track no.\n"); } else { printf("Mode %d Track, starts at %d:%d:%d\n", \ entry.cdte_adr,entry.cdte_addr.msf.minute, \ entry.cdte_addr.msf.second,entry.cdte_addr.msf.frame); } } break; case 'a': cmd=CDROMPLAYMSF; printf("Address (min:sec:frame) "); scanf("%d:%d:%d",&arg1,&arg2,&arg3); msf.cdmsf_min0 =arg1; msf.cdmsf_sec0 =arg2; msf.cdmsf_frame0=arg3; if (msf.cdmsf_sec0 > 59) msf.cdmsf_sec0 =59; if (msf.cdmsf_frame0> 74) msf.cdmsf_frame0=74; msf.cdmsf_min1=60; msf.cdmsf_sec1=00; msf.cdmsf_frame1=00; if (ioctl(handle,cmd,&msf)) { printf("Drive error or invalid address\n"); } break; #ifdef AZT_PRIVATE_IOCTLS /*not supported by every CDROM driver*/ case 'd': cmd=CDROMREADCOOKED; printf("Address (min:sec:frame) "); scanf("%d:%d:%d",&arg1,&arg2,&arg3); azt.msf.cdmsf_min0 =arg1; azt.msf.cdmsf_sec0 =arg2; azt.msf.cdmsf_frame0=arg3; if (azt.msf.cdmsf_sec0 > 59) azt.msf.cdmsf_sec0 =59; if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74; if (ioctl(handle,cmd,&azt.msf)) { printf("Drive error, invalid address or unsupported command\n"); } k=0; getchar(); for (i=0;i<128;i++) { printf("%4d:",i*16); for (j=0;j<16;j++) { printf("%2x ",azt.buf[i*16+j]); } for (j=0;j<16;j++) { if (isalnum(azt.buf[i*16+j])) printf("%c",azt.buf[i*16+j]); else printf("."); } printf("\n"); k++; if (k>=20) { printf("press ENTER to continue\n"); getchar(); k=0; } } break; case 'w': cmd=CDROMREADRAW; printf("Address (min:sec:frame) "); scanf("%d:%d:%d",&arg1,&arg2,&arg3); azt.msf.cdmsf_min0 =arg1; azt.msf.cdmsf_sec0 =arg2; azt.msf.cdmsf_frame0=arg3; if (azt.msf.cdmsf_sec0 > 59) azt.msf.cdmsf_sec0 =59; if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74; if (ioctl(handle,cmd,&azt)) { printf("Drive error, invalid address or unsupported command\n"); } k=0; for (i=0;i<147;i++) { printf("%4d:",i*16); for (j=0;j<16;j++) { printf("%2x ",azt.buf[i*16+j]); } for (j=0;j<16;j++) { if (isalnum(azt.buf[i*16+j])) printf("%c",azt.buf[i*16+j]); else printf("."); } printf("\n"); k++; if (k>=20) { getchar(); k=0; } } break; #endif case 'v': cmd=CDROMVOLCTRL; printf("--Channel 0 Left (0-255): "); scanf("%d",&arg1); printf("--Channel 1 Right (0-255): "); scanf("%d",&arg2); volctrl.channel0=arg1; volctrl.channel1=arg2; volctrl.channel2=0; volctrl.channel3=0; if (ioctl(handle,cmd,&volctrl)) { printf("Drive error or unsupported command\n"); } break; case 'q': if (close(handle)) printf("Drive Error: CLOSE\n"); exit(0); case 'h': help(); break; default: printf("unknown command\n"); break; } } } return 0; } \documentclass{article} \def\version{$Id: cdrom-standard.tex,v 1.9 1997/12/28 15:42:49 david Exp $} \newcommand{\newsection}[1]{\newpage\section{#1}} \evensidemargin=0pt \oddsidemargin=0pt \topmargin=-\headheight \advance\topmargin by -\headsep \textwidth=15.99cm \textheight=24.62cm % normal A4, 1'' margin \def\linux{{\sc Linux}} \def\cdrom{{\sc cd-rom}} \def\UCD{{\sc Uniform cd-rom Driver}} \def\cdromc{{\tt {cdrom.c}}} \def\cdromh{{\tt {cdrom.h}}} \def\fo{\sl} % foreign words \def\ie{{\fo i.e.}} \def\eg{{\fo e.g.}} \everymath{\it} \everydisplay{\it} \catcode `\_=\active \def_{\_\penalty100 } \catcode`\<=\active \def<#1>{{\langle\hbox{\rm#1}\rangle}} \begin{document} \title{A \linux\ \cdrom\ standard} \author{David van Leeuwen\\{\normalsize\tt david@ElseWare.cistron.nl} \\{\footnotesize updated by Erik Andersen {\tt(andersee@debian.org)}} \\{\footnotesize updated by Jens Axboe {\tt(axboe@image.dk)}}} \date{12 March 1999} \maketitle \newsection{Introduction} \linux\ is probably the Unix-like operating system that supports the widest variety of hardware devices. The reasons for this are presumably \begin{itemize} \item The large list of hardware devices available for the many platforms that \linux\ now supports (\ie, i386-PCs, Sparc Suns, etc.) \item The open design of the operating system, such that anybody can write a driver for \linux. \item There is plenty of source code around as examples of how to write a driver. \end{itemize} The openness of \linux, and the many different types of available hardware has allowed \linux\ to support many different hardware devices. Unfortunately, the very openness that has allowed \linux\ to support all these different devices has also allowed the behavior of each device driver to differ significantly from one device to another. This divergence of behavior has been very significant for \cdrom\ devices; the way a particular drive reacts to a `standard' $ioctl()$ call varies greatly from one device driver to another. To avoid making their drivers totally inconsistent, the writers of \linux\ \cdrom\ drivers generally created new device drivers by understanding, copying, and then changing an existing one. Unfortunately, this practice did not maintain uniform behavior across all the \linux\ \cdrom\ drivers. This document describes an effort to establish Uniform behavior across all the different \cdrom\ device drivers for \linux. This document also defines the various $ioctl$s, and how the low-level \cdrom\ device drivers should implement them. Currently (as of the \linux\ 2.1.$x$ development kernels) several low-level \cdrom\ device drivers, including both IDE/ATAPI and SCSI, now use this Uniform interface. When the \cdrom\ was developed, the interface between the \cdrom\ drive and the computer was not specified in the standards. As a result, many different \cdrom\ interfaces were developed. Some of them had their own proprietary design (Sony, Mitsumi, Panasonic, Philips), other manufacturers adopted an existing electrical interface and changed the functionality (CreativeLabs/SoundBlaster, Teac, Funai) or simply adapted their drives to one or more of the already existing electrical interfaces (Aztech, Sanyo, Funai, Vertos, Longshine, Optics Storage and most of the `NoName' manufacturers). In cases where a new drive really brought its own interface or used its own command set and flow control scheme, either a separate driver had to be written, or an existing driver had to be enhanced. History has delivered us \cdrom\ support for many of these different interfaces. Nowadays, almost all new \cdrom\ drives are either IDE/ATAPI or SCSI, and it is very unlikely that any manufacturer will create a new interface. Even finding drives for the old proprietary interfaces is getting difficult. When (in the 1.3.70's) I looked at the existing software interface, which was expressed through \cdromh, it appeared to be a rather wild set of commands and data formats.\footnote{I cannot recollect what kernel version I looked at, then, presumably 1.2.13 and 1.3.34---the latest kernel that I was indirectly involved in.} It seemed that many features of the software interface had been added to accommodate the capabilities of a particular drive, in an {\fo ad hoc\/} manner. More importantly, it appeared that the behavior of the `standard' commands was different for most of the different drivers: \eg, some drivers close the tray if an $open()$ call occurs when the tray is open, while others do not. Some drivers lock the door upon opening the device, to prevent an incoherent file system, but others don't, to allow software ejection. Undoubtedly, the capabilities of the different drives vary, but even when two drives have the same capability their drivers' behavior was usually different. I decided to start a discussion on how to make all the \linux\ \cdrom\ drivers behave more uniformly. I began by contacting the developers of the many \cdrom\ drivers found in the \linux\ kernel. Their reactions encouraged me to write the \UCD\ which this document is intended to describe. The implementation of the \UCD\ is in the file \cdromc. This driver is intended to be an additional software layer that sits on top of the low-level device drivers for each \cdrom\ drive. By adding this additional layer, it is possible to have all the different \cdrom\ devices behave {\em exactly\/} the same (insofar as the underlying hardware will allow). The goal of the \UCD\ is {\em not\/} to alienate driver developers who have not yet taken steps to support this effort. The goal of \UCD\ is simply to give people writing application programs for \cdrom\ drives {\em one\/} \linux\ \cdrom\ interface with consistent behavior for all \cdrom\ devices. In addition, this also provides a consistent interface between the low-level device driver code and the \linux\ kernel. Care is taken that 100\,\% compatibility exists with the data structures and programmer's interface defined in \cdromh. This guide was written to help \cdrom\ driver developers adapt their code to use the \UCD\ code defined in \cdromc. Personally, I think that the most important hardware interfaces are the IDE/ATAPI drives and, of course, the SCSI drives, but as prices of hardware drop continuously, it is also likely that people may have more than one \cdrom\ drive, possibly of mixed types. It is important that these drives behave in the same way. In December 1994, one of the cheapest \cdrom\ drives was a Philips cm206, a double-speed proprietary drive. In the months that I was busy writing a \linux\ driver for it, proprietary drives became obsolete and IDE/ATAPI drives became the standard. At the time of the last update to this document (November 1997) it is becoming difficult to even {\em find} anything less than a 16 speed \cdrom\ drive, and 24 speed drives are common. \newsection{Standardizing through another software level} \label{cdrom.c} At the time this document was conceived, all drivers directly implemented the \cdrom\ $ioctl()$ calls through their own routines. This led to the danger of different drivers forgetting to do important things like checking that the user was giving the driver valid data. More importantly, this led to the divergence of behavior, which has already been discussed. For this reason, the \UCD\ was created to enforce consistent \cdrom\ drive behavior, and to provide a common set of services to the various low-level \cdrom\ device drivers. The \UCD\ now provides another software-level, that separates the $ioctl()$ and $open()$ implementation from the actual hardware implementation. Note that this effort has made few changes which will affect a user's application programs. The greatest change involved moving the contents of the various low-level \cdrom\ drivers' header files to the kernel's cdrom directory. This was done to help ensure that the user is only presented with only one cdrom interface, the interface defined in \cdromh. \cdrom\ drives are specific enough (\ie, different from other block-devices such as floppy or hard disc drives), to define a set of common {\em \cdrom\ device operations}, $_dops$. These operations are different from the classical block-device file operations, $_fops$. The routines for the \UCD\ interface level are implemented in the file \cdromc. In this file, the \UCD\ interfaces with the kernel as a block device by registering the following general $struct\ file_operations$: $$ \halign{$#$\ \hfil&$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr struct& file_operations\ cdrom_fops = \{\hidewidth\cr &NULL, & lseek \cr &block_read, & read---general block-dev read \cr &block_write, & write---general block-dev write \cr &NULL, & readdir \cr &NULL, & select \cr &cdrom_ioctl, & ioctl \cr &NULL, & mmap \cr &cdrom_open, & open \cr &cdrom_release, & release \cr &NULL, & fsync \cr &NULL, & fasync \cr &cdrom_media_changed, & media change \cr &NULL & revalidate \cr \};\cr } $$ Every active \cdrom\ device shares this $struct$. The routines declared above are all implemented in \cdromc, since this file is the place where the behavior of all \cdrom-devices is defined and standardized. The actual interface to the various types of \cdrom\ hardware is still performed by various low-level \cdrom-device drivers. These routines simply implement certain {\em capabilities\/} that are common to all \cdrom\ (and really, all removable-media devices). Registration of a low-level \cdrom\ device driver is now done through the general routines in \cdromc, not through the Virtual File System (VFS) any more. The interface implemented in \cdromc\ is carried out through two general structures that contain information about the capabilities of the driver, and the specific drives on which the driver operates. The structures are: \begin{description} \item[$cdrom_device_ops$] This structure contains information about the low-level driver for a \cdrom\ device. This structure is conceptually connected to the major number of the device (although some drivers may have different major numbers, as is the case for the IDE driver). \item[$cdrom_device_info$] This structure contains information about a particular \cdrom\ drive, such as its device name, speed, etc. This structure is conceptually connected to the minor number of the device. \end{description} Registering a particular \cdrom\ drive with the \UCD\ is done by the low-level device driver though a call to: $$register_cdrom(struct\ cdrom_device_info * _info) $$ The device information structure, $_info$, contains all the information needed for the kernel to interface with the low-level \cdrom\ device driver. One of the most important entries in this structure is a pointer to the $cdrom_device_ops$ structure of the low-level driver. The device operations structure, $cdrom_device_ops$, contains a list of pointers to the functions which are implemented in the low-level device driver. When \cdromc\ accesses a \cdrom\ device, it does it through the functions in this structure. It is impossible to know all the capabilities of future \cdrom\ drives, so it is expected that this list may need to be expanded from time to time as new technologies are developed. For example, CD-R and CD-R/W drives are beginning to become popular, and support will soon need to be added for them. For now, the current $struct$ is: $$ \halign{$#$\ \hfil&$#$\ \hfil&\hbox to 10em{$#$\hss}& $/*$ \rm# $*/$\hfil\cr struct& cdrom_device_ops\ \{ \hidewidth\cr &int& (* open)(struct\ cdrom_device_info *, int)\cr &void& (* release)(struct\ cdrom_device_info *);\cr &int& (* drive_status)(struct\ cdrom_device_info *, int);\cr &int& (* media_changed)(struct\ cdrom_device_info *, int);\cr &int& (* tray_move)(struct\ cdrom_device_info *, int);\cr &int& (* lock_door)(struct\ cdrom_device_info *, int);\cr &int& (* select_speed)(struct\ cdrom_device_info *, int);\cr &int& (* select_disc)(struct\ cdrom_device_info *, int);\cr &int& (* get_last_session) (struct\ cdrom_device_info *, struct\ cdrom_multisession *{});\cr &int& (* get_mcn)(struct\ cdrom_device_info *, struct\ cdrom_mcn *{});\cr &int& (* reset)(struct\ cdrom_device_info *);\cr &int& (* audio_ioctl)(struct\ cdrom_device_info *, unsigned\ int, void *{});\cr &int& (* dev_ioctl)(struct\ cdrom_device_info *, unsigned\ int, unsigned\ long);\cr \noalign{\medskip} &const\ int& capability;& capability flags \cr &int& n_minors;& number of active minor devices \cr \};\cr } $$ When a low-level device driver implements one of these capabilities, it should add a function pointer to this $struct$. When a particular function is not implemented, however, this $struct$ should contain a NULL instead. The $capability$ flags specify the capabilities of the \cdrom\ hardware and/or low-level \cdrom\ driver when a \cdrom\ drive is registered with the \UCD. The value $n_minors$ should be a positive value indicating the number of minor devices that are supported by the low-level device driver, normally~1. Although these two variables are `informative' rather than `operational,' they are included in $cdrom_device_ops$ because they describe the capability of the {\em driver\/} rather than the {\em drive}. Nomenclature has always been difficult in computer programming. Note that most functions have fewer parameters than their $blkdev_fops$ counterparts. This is because very little of the information in the structures $inode$ and $file$ is used. For most drivers, the main parameter is the $struct$ $cdrom_device_info$, from which the major and minor number can be extracted. (Most low-level \cdrom\ drivers don't even look at the major and minor number though, since many of them only support one device.) This will be available through $dev$ in $cdrom_device_info$ described below. The drive-specific, minor-like information that is registered with \cdromc, currently contains the following fields: $$ \halign{$#$\ \hfil&$#$\ \hfil&\hbox to 10em{$#$\hss}& $/*$ \rm# $*/$\hfil\cr struct& cdrom_device_info\ \{ \hidewidth\cr & struct\ cdrom_device_ops *& ops;& device operations for this major\cr & struct\ cdrom_device_info *& next;& next device_info for this major\cr & void *& handle;& driver-dependent data\cr \noalign{\medskip} & kdev_t& dev;& device number (incorporates minor)\cr & int& mask;& mask of capability: disables them \cr & int& speed;& maximum speed for reading data \cr & int& capacity;& number of discs in a jukebox \cr \noalign{\medskip} &int& options : 30;& options flags \cr &unsigned& mc_flags : 2;& media-change buffer flags \cr & int& use_count;& number of times device is opened\cr & char& name[20];& name of the device type\cr \}\cr }$$ Using this $struct$, a linked list of the registered minor devices is built, using the $next$ field. The device number, the device operations struct and specifications of properties of the drive are stored in this structure. The $mask$ flags can be used to mask out some of the capabilities listed in $ops\to capability$, if a specific drive doesn't support a feature of the driver. The value $speed$ specifies the maximum head-rate of the drive, measured in units of normal audio speed (176\,kB/sec raw data or 150\,kB/sec file system data). The value $n_discs$ should reflect the number of discs the drive can hold simultaneously, if it is designed as a juke-box, or otherwise~1. The parameters are declared $const$ because they describe properties of the drive, which don't change after registration. A few registers contain variables local to the \cdrom\ drive. The flags $options$ are used to specify how the general \cdrom\ routines should behave. These various flags registers should provide enough flexibility to adapt to the different users' wishes (and {\em not\/} the `arbitrary' wishes of the author of the low-level device driver, as is the case in the old scheme). The register $mc_flags$ is used to buffer the information from $media_changed()$ to two separate queues. Other data that is specific to a minor drive, can be accessed through $handle$, which can point to a data structure specific to the low-level driver. The fields $use_count$, $next$, $options$ and $mc_flags$ need not be initialized. The intermediate software layer that \cdromc\ forms will perform some additional bookkeeping. The use count of the device (the number of processes that have the device opened) is registered in $use_count$. The function $cdrom_ioctl()$ will verify the appropriate user-memory regions for read and write, and in case a location on the CD is transferred, it will `sanitize' the format by making requests to the low-level drivers in a standard format, and translating all formats between the user-software and low level drivers. This relieves much of the drivers' memory checking and format checking and translation. Also, the necessary structures will be declared on the program stack. The implementation of the functions should be as defined in the following sections. Two functions {\em must\/} be implemented, namely $open()$ and $release()$. Other functions may be omitted, their corresponding capability flags will be cleared upon registration. Generally, a function returns zero on success and negative on error. A function call should return only after the command has completed, but of course waiting for the device should not use processor time. \subsection{$Int\ open(struct\ cdrom_device_info * cdi, int\ purpose)$} $Open()$ should try to open the device for a specific $purpose$, which can be either: \begin{itemize} \item[0] Open for reading data, as done by {\tt {mount()}} (2), or the user commands {\tt {dd}} or {\tt {cat}}. \item[1] Open for $ioctl$ commands, as done by audio-CD playing programs. \end{itemize} In case the driver supports modules, the call $MOD_INC_USE_COUNT$ should be performed exactly once, if the $open()$ was successful. The return value is negative on error, and zero on success. The open-for-ioctl call can only fail if there is no hardware. Notice that any strategic code (closing tray upon $open()$, etc.)\ is done by the calling routine in \cdromc, so the low-level routine should only be concerned with proper initialization, such as spinning up the disc, etc. % and device-use count \subsection{$Void\ release(struct\ cdrom_device_info * cdi)$} In case of module support, a single call $MOD_DEC_USE_COUNT$ should be coded here. Possibly other device-specific actions should be taken such as spinning down the device. However, strategic actions such as ejection of the tray, or unlocking the door, should be left over to the general routine $cdrom_release()$. Also, the invalidation of the allocated buffers in the VFS is taken care of by the routine in \cdromc. This is the only function returning type $void$. \subsection{$Int\ drive_status(struct\ cdrom_device_info * cdi, int\ slot_nr)$} \label{drive status} The function $drive_status$, if implemented, should provide information on the status of the drive (not the status of the disc, which may or may not be in the drive). If the drive is not a changer, $slot_nr$ should be ignored. In \cdromh\ the possibilities are listed: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDS_NO_INFO& no information available\cr CDS_NO_DISC& no disc is inserted, tray is closed\cr CDS_TRAY_OPEN& tray is opened\cr CDS_DRIVE_NOT_READY& something is wrong, tray is moving?\cr CDS_DISC_OK& a disc is loaded and everything is fine\cr } $$ \subsection{$Int\ media_changed(struct\ cdrom_device_info * cdi, int\ disc_nr)$} This function is very similar to the original function in $struct\ file_operations$. It returns 1 if the medium of the device $cdi\to dev$ has changed since the last call, and 0 otherwise. The parameter $disc_nr$ identifies a specific slot in a juke-box, it should be ignored for single-disc drives. Note that by `re-routing' this function through $cdrom_media_changed()$, we can implement separate queues for the VFS and a new $ioctl()$ function that can report device changes to software (\eg, an auto-mounting daemon). \subsection{$Int\ tray_move(struct\ cdrom_device_info * cdi, int\ position)$} This function, if implemented, should control the tray movement. (No other function should control this.) The parameter $position$ controls the desired direction of movement: \begin{itemize} \item[0] Close tray \item[1] Open tray \end{itemize} This function returns 0 upon success, and a non-zero value upon error. Note that if the tray is already in the desired position, no action need be taken, and the return value should be 0. \subsection{$Int\ lock_door(struct\ cdrom_device_info * cdi, int\ lock)$} This function (and no other code) controls locking of the door, if the drive allows this. The value of $lock$ controls the desired locking state: \begin{itemize} \item[0] Unlock door, manual opening is allowed \item[1] Lock door, tray cannot be ejected manually \end{itemize} This function returns 0 upon success, and a non-zero value upon error. Note that if the door is already in the requested state, no action need be taken, and the return value should be 0. \subsection{$Int\ select_speed(struct\ cdrom_device_info * cdi, int\ speed)$} Some \cdrom\ drives are capable of changing their head-speed. There are several reasons for changing the speed of a \cdrom\ drive. Badly pressed \cdrom s may benefit from less-than-maximum head rate. Modern \cdrom\ drives can obtain very high head rates (up to $24\times$ is common). It has been reported that these drives can make reading errors at these high speeds, reducing the speed can prevent data loss in these circumstances. Finally, some of these drives can make an annoyingly loud noise, which a lower speed may reduce. %Finally, %although the audio-low-pass filters probably aren't designed for it, %more than real-time playback of audio might be used for high-speed %copying of audio tracks. This function specifies the speed at which data is read or audio is played back. The value of $speed$ specifies the head-speed of the drive, measured in units of standard cdrom speed (176\,kB/sec raw data or 150\,kB/sec file system data). So to request that a \cdrom\ drive operate at 300\,kB/sec you would call the CDROM_SELECT_SPEED $ioctl$ with $speed=2$. The special value `0' means `auto-selection', \ie, maximum data-rate or real-time audio rate. If the drive doesn't have this `auto-selection' capability, the decision should be made on the current disc loaded and the return value should be positive. A negative return value indicates an error. \subsection{$Int\ select_disc(struct\ cdrom_device_info * cdi, int\ number)$} If the drive can store multiple discs (a juke-box) this function will perform disc selection. It should return the number of the selected disc on success, a negative value on error. Currently, only the ide-cd driver supports this functionality. \subsection{$Int\ get_last_session(struct\ cdrom_device_info * cdi, struct\ cdrom_multisession * ms_info)$} This function should implement the old corresponding $ioctl()$. For device $cdi\to dev$, the start of the last session of the current disc should be returned in the pointer argument $ms_info$. Note that routines in \cdromc\ have sanitized this argument: its requested format will {\em always\/} be of the type $CDROM_LBA$ (linear block addressing mode), whatever the calling software requested. But sanitization goes even further: the low-level implementation may return the requested information in $CDROM_MSF$ format if it wishes so (setting the $ms_info\rightarrow addr_format$ field appropriately, of course) and the routines in \cdromc\ will make the transformation if necessary. The return value is 0 upon success. \subsection{$Int\ get_mcn(struct\ cdrom_device_info * cdi, struct\ cdrom_mcn * mcn)$} Some discs carry a `Media Catalog Number' (MCN), also called `Universal Product Code' (UPC). This number should reflect the number that is generally found in the bar-code on the product. Unfortunately, the few discs that carry such a number on the disc don't even use the same format. The return argument to this function is a pointer to a pre-declared memory region of type $struct\ cdrom_mcn$. The MCN is expected as a 13-character string, terminated by a null-character. \subsection{$Int\ reset(struct\ cdrom_device_info * cdi)$} This call should perform a hard-reset on the drive (although in circumstances that a hard-reset is necessary, a drive may very well not listen to commands anymore). Preferably, control is returned to the caller only after the drive has finished resetting. If the drive is no longer listening, it may be wise for the underlying low-level cdrom driver to time out. \subsection{$Int\ audio_ioctl(struct\ cdrom_device_info * cdi, unsigned\ int\ cmd, void * arg)$} Some of the \cdrom-$ioctl$s defined in \cdromh\ can be implemented by the routines described above, and hence the function $cdrom_ioctl$ will use those. However, most $ioctl$s deal with audio-control. We have decided to leave these to be accessed through a single function, repeating the arguments $cmd$ and $arg$. Note that the latter is of type $void*{}$, rather than $unsigned\ long\ int$. The routine $cdrom_ioctl()$ does do some useful things, though. It sanitizes the address format type to $CDROM_MSF$ (Minutes, Seconds, Frames) for all audio calls. It also verifies the memory location of $arg$, and reserves stack-memory for the argument. This makes implementation of the $audio_ioctl()$ much simpler than in the old driver scheme. For example, you may look up the function $cm206_audio_ioctl()$ in {\tt {cm206.c}} that should be updated with this documentation. An unimplemented ioctl should return $-ENOSYS$, but a harmless request (\eg, $CDROMSTART$) may be ignored by returning 0 (success). Other errors should be according to the standards, whatever they are. When an error is returned by the low-level driver, the \UCD\ tries whenever possible to return the error code to the calling program. (We may decide to sanitize the return value in $cdrom_ioctl()$ though, in order to guarantee a uniform interface to the audio-player software.) \subsection{$Int\ dev_ioctl(struct\ cdrom_device_info * cdi, unsigned\ int\ cmd, unsigned\ long\ arg)$} Some $ioctl$s seem to be specific to certain \cdrom\ drives. That is, they are introduced to service some capabilities of certain drives. In fact, there are 6 different $ioctl$s for reading data, either in some particular kind of format, or audio data. Not many drives support reading audio tracks as data, I believe this is because of protection of copyrights of artists. Moreover, I think that if audio-tracks are supported, it should be done through the VFS and not via $ioctl$s. A problem here could be the fact that audio-frames are 2352 bytes long, so either the audio-file-system should ask for 75264 bytes at once (the least common multiple of 512 and 2352), or the drivers should bend their backs to cope with this incoherence (to which I would be opposed). Furthermore, it is very difficult for the hardware to find the exact frame boundaries, since there are no synchronization headers in audio frames. Once these issues are resolved, this code should be standardized in \cdromc. Because there are so many $ioctl$s that seem to be introduced to satisfy certain drivers,\footnote{Is there software around that actually uses these? I'd be interested!} any `non-standard' $ioctl$s are routed through the call $dev_ioctl()$. In principle, `private' $ioctl$s should be numbered after the device's major number, and not the general \cdrom\ $ioctl$ number, {\tt {0x53}}. Currently the non-supported $ioctl$s are: {\it CDROMREADMODE1, CDROMREADMODE2, CDROMREADAUDIO, CDROMREADRAW, CDROMREADCOOKED, CDROMSEEK, CDROMPLAY\-BLK and CDROM\-READALL}. \subsection{\cdrom\ capabilities} \label{capability} Instead of just implementing some $ioctl$ calls, the interface in \cdromc\ supplies the possibility to indicate the {\em capabilities\/} of a \cdrom\ drive. This can be done by ORing any number of capability-constants that are defined in \cdromh\ at the registration phase. Currently, the capabilities are any of: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDC_CLOSE_TRAY& can close tray by software control\cr CDC_OPEN_TRAY& can open tray\cr CDC_LOCK& can lock and unlock the door\cr CDC_SELECT_SPEED& can select speed, in units of $\sim$150\,kB/s\cr CDC_SELECT_DISC& drive is juke-box\cr CDC_MULTI_SESSION& can read sessions $>\rm1$\cr CDC_MCN& can read Media Catalog Number\cr CDC_MEDIA_CHANGED& can report if disc has changed\cr CDC_PLAY_AUDIO& can perform audio-functions (play, pause, etc)\cr CDC_RESET& hard reset device\cr CDC_IOCTLS& driver has non-standard ioctls\cr CDC_DRIVE_STATUS& driver implements drive status\cr } $$ The capability flag is declared $const$, to prevent drivers from accidentally tampering with the contents. The capability fags actually inform \cdromc\ of what the driver can do. If the drive found by the driver does not have the capability, is can be masked out by the $cdrom_device_info$ variable $mask$. For instance, the SCSI \cdrom\ driver has implemented the code for loading and ejecting \cdrom's, and hence its corresponding flags in $capability$ will be set. But a SCSI \cdrom\ drive might be a caddy system, which can't load the tray, and hence for this drive the $cdrom_device_info$ struct will have set the $CDC_CLOSE_TRAY$ bit in $mask$. In the file \cdromc\ you will encounter many constructions of the type $$\it if\ (cdo\rightarrow capability \mathrel\& \mathord{\sim} cdi\rightarrow mask \mathrel{\&} CDC_) \ldots $$ There is no $ioctl$ to set the mask\dots The reason is that I think it is better to control the {\em behavior\/} rather than the {\em capabilities}. \subsection{Options} A final flag register controls the {\em behavior\/} of the \cdrom\ drives, in order to satisfy different users' wishes, hopefully independently of the ideas of the respective author who happened to have made the drive's support available to the \linux\ community. The current behavior options are: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDO_AUTO_CLOSE& try to close tray upon device $open()$\cr CDO_AUTO_EJECT& try to open tray on last device $close()$\cr CDO_USE_FFLAGS& use $file_pointer\rightarrow f_flags$ to indicate purpose for $open()$\cr CDO_LOCK& try to lock door if device is opened\cr CDO_CHECK_TYPE& ensure disc type is data if opened for data\cr } $$ The initial value of this register is $CDO_AUTO_CLOSE \mathrel| CDO_USE_FFLAGS \mathrel| CDO_LOCK$, reflecting my own view on user interface and software standards. Before you protest, there are two new $ioctl$s implemented in \cdromc, that allow you to control the behavior by software. These are: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDROM_SET_OPTIONS& set options specified in $(int)\ arg$\cr CDROM_CLEAR_OPTIONS& clear options specified in $(int)\ arg$\cr } $$ One option needs some more explanation: $CDO_USE_FFLAGS$. In the next newsection we explain what the need for this option is. A software package {\tt setcd}, available from the Debian distribution and {\tt sunsite.unc.edu}, allows user level control of these flags. \newsection{The need to know the purpose of opening the \cdrom\ device} Traditionally, Unix devices can be used in two different `modes', either by reading/writing to the device file, or by issuing controlling commands to the device, by the device's $ioctl()$ call. The problem with \cdrom\ drives, is that they can be used for two entirely different purposes. One is to mount removable file systems, \cdrom s, the other is to play audio CD's. Audio commands are implemented entirely through $ioctl$s, presumably because the first implementation (SUN?) has been such. In principle there is nothing wrong with this, but a good control of the `CD player' demands that the device can {\em always\/} be opened in order to give the $ioctl$ commands, regardless of the state the drive is in. On the other hand, when used as a removable-media disc drive (what the original purpose of \cdrom s is) we would like to make sure that the disc drive is ready for operation upon opening the device. In the old scheme, some \cdrom\ drivers don't do any integrity checking, resulting in a number of i/o errors reported by the VFS to the kernel when an attempt for mounting a \cdrom\ on an empty drive occurs. This is not a particularly elegant way to find out that there is no \cdrom\ inserted; it more-or-less looks like the old IBM-PC trying to read an empty floppy drive for a couple of seconds, after which the system complains it can't read from it. Nowadays we can {\em sense\/} the existence of a removable medium in a drive, and we believe we should exploit that fact. An integrity check on opening of the device, that verifies the availability of a \cdrom\ and its correct type (data), would be desirable. These two ways of using a \cdrom\ drive, principally for data and secondarily for playing audio discs, have different demands for the behavior of the $open()$ call. Audio use simply wants to open the device in order to get a file handle which is needed for issuing $ioctl$ commands, while data use wants to open for correct and reliable data transfer. The only way user programs can indicate what their {\em purpose\/} of opening the device is, is through the $flags$ parameter (see {\tt {open(2)}}). For \cdrom\ devices, these flags aren't implemented (some drivers implement checking for write-related flags, but this is not strictly necessary if the device file has correct permission flags). Most option flags simply don't make sense to \cdrom\ devices: $O_CREAT$, $O_NOCTTY$, $O_TRUNC$, $O_APPEND$, and $O_SYNC$ have no meaning to a \cdrom. We therefore propose to use the flag $O_NONBLOCK$ to indicate that the device is opened just for issuing $ioctl$ commands. Strictly, the meaning of $O_NONBLOCK$ is that opening and subsequent calls to the device don't cause the calling process to wait. We could interpret this as ``don't wait until someone has inserted some valid data-\cdrom.'' Thus, our proposal of the implementation for the $open()$ call for \cdrom s is: \begin{itemize} \item If no other flags are set than $O_RDONLY$, the device is opened for data transfer, and the return value will be 0 only upon successful initialization of the transfer. The call may even induce some actions on the \cdrom, such as closing the tray. \item If the option flag $O_NONBLOCK$ is set, opening will always be successful, unless the whole device doesn't exist. The drive will take no actions whatsoever. \end{itemize} \subsection{And what about standards?} You might hesitate to accept this proposal as it comes from the \linux\ community, and not from some standardizing institute. What about SUN, SGI, HP and all those other Unix and hardware vendors? Well, these companies are in the lucky position that they generally control both the hardware and software of their supported products, and are large enough to set their own standard. They do not have to deal with a dozen or more different, competing hardware configurations.\footnote{Incidentally, I think that SUN's approach to mounting \cdrom s is very good in origin: under Solaris a volume-daemon automatically mounts a newly inserted \cdrom\ under {\tt {/cdrom/$$/}}. In my opinion they should have pushed this further and have {\em every\/} \cdrom\ on the local area network be mounted at the similar location, \ie, no matter in which particular machine you insert a \cdrom, it will always appear at the same position in the directory tree, on every system. When I wanted to implement such a user-program for \linux, I came across the differences in behavior of the various drivers, and the need for an $ioctl$ informing about media changes.} We believe that using $O_NONBLOCK$ to indicate that a device is being opened for $ioctl$ commands only can be easily introduced in the \linux\ community. All the CD-player authors will have to be informed, we can even send in our own patches to the programs. The use of $O_NONBLOCK$ has most likely no influence on the behavior of the CD-players on other operating systems than \linux. Finally, a user can always revert to old behavior by a call to $ioctl(file_descriptor, CDROM_CLEAR_OPTIONS, CDO_USE_FFLAGS)$. \subsection{The preferred strategy of $open()$} The routines in \cdromc\ are designed in such a way that run-time configuration of the behavior of \cdrom\ devices (of {\em any\/} type) can be carried out, by the $CDROM_SET/CLEAR_OPTIONS$ $ioctls$. Thus, various modes of operation can be set: \begin{description} \item[$CDO_AUTO_CLOSE \mathrel| CDO_USE_FFLAGS \mathrel| CDO_LOCK$] This is the default setting. (With $CDO_CHECK_TYPE$ it will be better, in the future.) If the device is not yet opened by any other process, and if the device is being opened for data ($O_NONBLOCK$ is not set) and the tray is found to be open, an attempt to close the tray is made. Then, it is verified that a disc is in the drive and, if $CDO_CHECK_TYPE$ is set, that it contains tracks of type `data mode 1.' Only if all tests are passed is the return value zero. The door is locked to prevent file system corruption. If the drive is opened for audio ($O_NONBLOCK$ is set), no actions are taken and a value of 0 will be returned. \item[$CDO_AUTO_CLOSE \mathrel| CDO_AUTO_EJECT \mathrel| CDO_LOCK$] This mimics the behavior of the current sbpcd-driver. The option flags are ignored, the tray is closed on the first open, if necessary. Similarly, the tray is opened on the last release, \ie, if a \cdrom\ is unmounted, it is automatically ejected, such that the user can replace it. \end{description} We hope that these option can convince everybody (both driver maintainers and user program developers) to adopt the new \cdrom\ driver scheme and option flag interpretation. \newsection{Description of routines in \cdromc} Only a few routines in \cdromc\ are exported to the drivers. In this new section we will discuss these, as well as the functions that `take over' the \cdrom\ interface to the kernel. The header file belonging to \cdromc\ is called \cdromh. Formerly, some of the contents of this file were placed in the file {\tt {ucdrom.h}}, but this file has now been merged back into \cdromh. \subsection{$Struct\ file_operations\ cdrom_fops$} The contents of this structure were described in section~\ref{cdrom.c}. As already stated, this structure should be used to register block devices with the kernel: $$ register_blkdev(major, , \&cdrom_fops); $$ \subsection{$Int\ register_cdrom( struct\ cdrom_device_info\ * cdi)$} This function is used in about the same way one registers $cdrom_fops$ with the kernel, the device operations and information structures, as described in section~\ref{cdrom.c}, should be registered with the \UCD: $$ register_cdrom(\&_info)); $$ This function returns zero upon success, and non-zero upon failure. The structure $_info$ should have a pointer to the driver's $_dops$, as in $$ \vbox{\halign{&$#$\hfil\cr struct\ &cdrom_device_info\ _info = \{\cr & _dops;\cr &\ldots\cr \}\cr }}$$ Note that a driver must have one static structure, $_dops$, while it may have as many structures $_info$ as there are minor devices active. $Register_cdrom()$ builds a linked list from these. \subsection{$Int\ unregister_cdrom(struct\ cdrom_device_info * cdi)$} Unregistering device $cdi$ with minor number $MINOR(cdi\to dev)$ removes the minor device from the list. If it was the last registered minor for the low-level driver, this disconnects the registered device-operation routines from the \cdrom\ interface. This function returns zero upon success, and non-zero upon failure. \subsection{$Int\ cdrom_open(struct\ inode * ip, struct\ file * fp)$} This function is not called directly by the low-level drivers, it is listed in the standard $cdrom_fops$. If the VFS opens a file, this function becomes active. A strategy is implemented in this routine, taking care of all capabilities and options that are set in the $cdrom_device_ops$ connected to the device. Then, the program flow is transferred to the device_dependent $open()$ call. \subsection{$Void\ cdrom_release(struct\ inode *ip, struct\ file *fp)$} This function implements the reverse-logic of $cdrom_open()$, and then calls the device-dependent $release()$ routine. When the use-count has reached 0, the allocated buffers are flushed by calls to $sync_dev(dev)$ and $invalidate_buffers(dev)$. \subsection{$Int\ cdrom_ioctl(struct\ inode *ip, struct\ file *fp, unsigned\ int\ cmd, unsigned\ long\ arg)$} \label{cdrom-ioctl} This function handles all the standard $ioctl$ requests for \cdrom\ devices in a uniform way. The different calls fall into three categories: $ioctl$s that can be directly implemented by device operations, ones that are routed through the call $audio_ioctl()$, and the remaining ones, that are presumable device-dependent. Generally, a negative return value indicates an error. \subsubsection{Directly implemented $ioctl$s} \label{ioctl-direct} The following `old' \cdrom-$ioctl$s are implemented by directly calling device-operations in $cdrom_device_ops$, if implemented and not masked: \begin{description} \item[CDROMMULTISESSION] Requests the last session on a \cdrom. \item[CDROMEJECT] Open tray. \item[CDROMCLOSETRAY] Close tray. \item[CDROMEJECT_SW] If $arg\not=0$, set behavior to auto-close (close tray on first open) and auto-eject (eject on last release), otherwise set behavior to non-moving on $open()$ and $release()$ calls. \item[CDROM_GET_MCN] Get the Media Catalog Number from a CD. \end{description} \subsubsection{$Ioctl$s routed through $audio_ioctl()$} \label{ioctl-audio} The following set of $ioctl$s are all implemented through a call to the $cdrom_fops$ function $audio_ioctl()$. Memory checks and allocation are performed in $cdrom_ioctl()$, and also sanitization of address format ($CDROM_LBA$/$CDROM_MSF$) is done. \begin{description} \item[CDROMSUBCHNL] Get sub-channel data in argument $arg$ of type $struct\ cdrom_subchnl *{}$. \item[CDROMREADTOCHDR] Read Table of Contents header, in $arg$ of type $struct\ cdrom_tochdr *{}$. \item[CDROMREADTOCENTRY] Read a Table of Contents entry in $arg$ and specified by $arg$ of type $struct\ cdrom_tocentry *{}$. \item[CDROMPLAYMSF] Play audio fragment specified in Minute, Second, Frame format, delimited by $arg$ of type $struct\ cdrom_msf *{}$. \item[CDROMPLAYTRKIND] Play audio fragment in track-index format delimited by $arg$ of type $struct\ \penalty-1000 cdrom_ti *{}$. \item[CDROMVOLCTRL] Set volume specified by $arg$ of type $struct\ cdrom_volctrl *{}$. \item[CDROMVOLREAD] Read volume into by $arg$ of type $struct\ cdrom_volctrl *{}$. \item[CDROMSTART] Spin up disc. \item[CDROMSTOP] Stop playback of audio fragment. \item[CDROMPAUSE] Pause playback of audio fragment. \item[CDROMRESUME] Resume playing. \end{description} \subsubsection{New $ioctl$s in \cdromc} The following $ioctl$s have been introduced to allow user programs to control the behavior of individual \cdrom\ devices. New $ioctl$ commands can be identified by the underscores in their names. \begin{description} \item[CDROM_SET_OPTIONS] Set options specified by $arg$. Returns the option flag register after modification. Use $arg = \rm0$ for reading the current flags. \item[CDROM_CLEAR_OPTIONS] Clear options specified by $arg$. Returns the option flag register after modification. \item[CDROM_SELECT_SPEED] Select head-rate speed of disc specified as by $arg$ in units of standard cdrom speed (176\,kB/sec raw data or 150\,kB/sec file system data). The value 0 means `auto-select', \ie, play audio discs at real time and data discs at maximum speed. The value $arg$ is checked against the maximum head rate of the drive found in the $cdrom_dops$. \item[CDROM_SELECT_DISC] Select disc numbered $arg$ from a juke-box. First disc is numbered 0. The number $arg$ is checked against the maximum number of discs in the juke-box found in the $cdrom_dops$. \item[CDROM_MEDIA_CHANGED] Returns 1 if a disc has been changed since the last call. Note that calls to $cdrom_media_changed$ by the VFS are treated by an independent queue, so both mechanisms will detect a media change once. For juke-boxes, an extra argument $arg$ specifies the slot for which the information is given. The special value $CDSL_CURRENT$ requests that information about the currently selected slot be returned. \item[CDROM_DRIVE_STATUS] Returns the status of the drive by a call to $drive_status()$. Return values are defined in section~\ref{drive status}. Note that this call doesn't return information on the current playing activity of the drive; this can be polled through an $ioctl$ call to $CDROMSUBCHNL$. For juke-boxes, an extra argument $arg$ specifies the slot for which (possibly limited) information is given. The special value $CDSL_CURRENT$ requests that information about the currently selected slot be returned. \item[CDROM_DISC_STATUS] Returns the type of the disc currently in the drive. It should be viewed as a complement to $CDROM_DRIVE_STATUS$. This $ioctl$ can provide \emph {some} information about the current disc that is inserted in the drive. This functionality used to be implemented in the low level drivers, but is now carried out entirely in \UCD. The history of development of the CD's use as a carrier medium for various digital information has lead to many different disc types. This $ioctl$ is useful only in the case that CDs have \emph {only one} type of data on them. While this is often the case, it is also very common for CDs to have some tracks with data, and some tracks with audio. Because this is an existing interface, rather than fixing this interface by changing the assumptions it was made under, thereby breaking all user applications that use this function, the \UCD\ implements this $ioctl$ as follows: If the CD in question has audio tracks on it, and it has absolutly no CD-I, XA, or data tracks on it, it will be reported as $CDS_AUDIO$. If it has both audio and data tracks, it will return $CDS_MIXED$. If there are no audio tracks on the disc, and if the CD in question has any CD-I tracks on it, it will be reported as $CDS_XA_2_2$. Failing that, if the CD in question has any XA tracks on it, it will be reported as $CDS_XA_2_1$. Finally, if the CD in question has any data tracks on it, it will be reported as a data CD ($CDS_DATA_1$). This $ioctl$ can return: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDS_NO_INFO& no information available\cr CDS_NO_DISC& no disc is inserted, or tray is opened\cr CDS_AUDIO& Audio disc (2352 audio bytes/frame)\cr CDS_DATA_1& data disc, mode 1 (2048 user bytes/frame)\cr CDS_XA_2_1& mixed data (XA), mode 2, form 1 (2048 user bytes)\cr CDS_XA_2_2& mixed data (XA), mode 2, form 1 (2324 user bytes)\cr CDS_MIXED& mixed audio/data disc\cr } $$ For some information concerning frame layout of the various disc types, see a recent version of \cdromh. \item[CDROM_CHANGER_NSLOTS] Returns the number of slots in a juke-box. \item[CDROMRESET] Reset the drive. \item[CDROM_GET_CAPABILITY] Returns the $capability$ flags for the drive. Refer to section \ref{capability} for more information on these flags. \item[CDROM_LOCKDOOR] Locks the door of the drive. $arg == \rm0$ unlocks the door, any other value locks it. \item[CDROM_DEBUG] Turns on debugging info. Only root is allowed to do this. Same semantics as CDROM_LOCKDOOR. \end{description} \subsubsection{Device dependent $ioctl$s} Finally, all other $ioctl$s are passed to the function $dev_ioctl()$, if implemented. No memory allocation or verification is carried out. \newsection{How to update your driver} \begin{enumerate} \item Make a backup of your current driver. \item Get hold of the files \cdromc\ and \cdromh, they should be in the directory tree that came with this documentation. \item Make sure you include \cdromh. \item Change the 3rd argument of $register_blkdev$ from $\&_fops$ to $\&cdrom_fops$. \item Just after that line, add the following to register with the \UCD: $$register_cdrom(\&_info);$$ Similarly, add a call to $unregister_cdrom()$ at the appropriate place. \item Copy an example of the device-operations $struct$ to your source, \eg, from {\tt {cm206.c}} $cm206_dops$, and change all entries to names corresponding to your driver, or names you just happen to like. If your driver doesn't support a certain function, make the entry $NULL$. At the entry $capability$ you should list all capabilities your driver currently supports. If your driver has a capability that is not listed, please send me a message. \item Copy the $cdrom_device_info$ declaration from the same example driver, and modify the entries according to your needs. If your driver dynamically determines the capabilities of the hardware, this structure should also be declared dynamically. \item Implement all functions in your $_dops$ structure, according to prototypes listed in \cdromh, and specifications given in section~\ref{cdrom.c}. Most likely you have already implemented the code in a large part, and you will almost certainly need to adapt the prototype and return values. \item Rename your $_ioctl()$ function to $audio_ioctl$ and change the prototype a little. Remove entries listed in the first part in section~\ref{cdrom-ioctl}, if your code was OK, these are just calls to the routines you adapted in the previous step. \item You may remove all remaining memory checking code in the $audio_ioctl()$ function that deals with audio commands (these are listed in the second part of section~\ref{cdrom-ioctl}). There is no need for memory allocation either, so most $case$s in the $switch$ statement look similar to: $$ case\ CDROMREADTOCENTRY\colon get_toc_entry\bigl((struct\ cdrom_tocentry *{})\ arg\bigr); $$ \item All remaining $ioctl$ cases must be moved to a separate function, $_ioctl$, the device-dependent $ioctl$s. Note that memory checking and allocation must be kept in this code! \item Change the prototypes of $_open()$ and $_release()$, and remove any strategic code (\ie, tray movement, door locking, etc.). \item Try to recompile the drivers. We advise you to use modules, both for {\tt {cdrom.o}} and your driver, as debugging is much easier this way. \end{enumerate} \newsection{Thanks} Thanks to all the people involved. First, Erik Andersen, who has taken over the torch in maintaining \cdromc\ and integrating much \cdrom-related code in the 2.1-kernel. Thanks to Scott Snyder and Gerd Knorr, who were the first to implement this interface for SCSI and IDE-CD drivers and added many ideas for extension of the data structures relative to kernel~2.0. Further thanks to Heiko Eissfeldt, Thomas Quinot, Jon Tombs, Ken Pizzini, Eberhard M\"onkeberg and Andrew Kroll, the \linux\ \cdrom\ device driver developers who were kind enough to give suggestions and criticisms during the writing. Finally of course, I want to thank Linus Torvalds for making this possible in the first place. \vfill $ \version\ $ \eject \end{document} CDU31A/CDU33A Driver Info ------------------------- Information on the Sony CDU31A/CDU33A CDROM driver for the Linux kernel. Corey Minyard (minyard@metronet.com) Colossians 3:17 Crude Table of Contents ----------------------- Setting Up the Hardware Configuring the Kernel Configuring as a Module Driver Special Features This device driver handles Sony CDU31A/CDU33A CDROM drives and provides a complete block-level interface as well as an ioctl() interface as specified in include/linux/cdrom.h). With this interface, CDROMs can be accessed, standard audio CDs can be played back normally, and CD audio information can be read off the drive. Note that this will only work for CDU31A/CDU33A drives. Some vendors market their drives as CDU31A compatible. They lie. Their drives are really CDU31A hardware interface compatible (they can plug into the same card). They are not software compatible. Setting Up the Hardware ----------------------- The CDU31A driver is unable to safely tell if an interface card is present that it can use because the interface card does not announce its presence in any way besides placing 4 I/O locations in memory. It used to just probe memory and attempt commands, but Linus wisely asked me to remove that because it could really screw up other hardware in the system. Because of this, you must tell the kernel where the drive interface is, what interrupts are used, and possibly if you are on a PAS-16 soundcard. If you have the Sony CDU31A/CDU33A drive interface card, the following diagram will help you set it up. If you have another card, you are on your own. You need to make sure that the I/O address and interrupt is not used by another card in the system. You will need to know the I/O address and interrupt you have set. Note that use of interrupts is highly recommended, if possible, it really cuts down on CPU used. Unfortunately, most soundcards do not support interrupts for their CDROM interfaces. By default, the Sony interface card comes with interrupts disabled. +----------+-----------------+----------------------+ | JP1 | 34 Pin Conn | | | JP2 +-----------------+ | | JP3 | | JP4 | | +--+ | | +-+ | | | | External | | | | Connector | | | | | | +-+ | +--+ | | | +--------+ | | +------------------------------------------+ JP1 sets the Base Address, using the following settings: Address Pin 1 Pin 2 ------- ----- ----- 0x320 Short Short 0x330 Short Open 0x340 Open Short 0x360 Open Open JP2 and JP3 configure the DMA channel; they must be set the same. DMA Pin 1 Pin 2 Pin 3 --- ----- ----- ----- 1 On Off On 2 Off On Off 3 Off Off On JP4 Configures the IRQ: IRQ Pin 1 Pin 2 Pin 3 Pin 4 --- ----- ----- ----- ----- 3 Off Off On Off 4 Off Off* Off On 5 On Off Off Off 6 Off On Off Off The documentation states to set this for interrupt 4, but I think that is a mistake. Note that if you have another interface card, you will need to look at the documentation to find the I/O base address. This is specified to the SLCD.SYS driver for DOS with the /B: parameter, so you can look at you DOS driver setup to find the address, if necessary. Configuring the Kernel ---------------------- You must tell the kernel where the drive is at boot time. This can be done at the Linux boot prompt, by using LILO, or by using Bootlin. Note that this is no substitute for HOWTOs and LILO documentation, if you are confused please read those for info on bootline configuration and LILO. At the linux boot prompt, press the ALT key and add the following line after the boot name (you can let the kernel boot, it will tell you the default boot name while booting): cdu31a=,[,PAS] The base address needs to have "0x" in front of it, since it is in hex. For instance, to configure a drive at address 320 on interrupt 5, use the following: cdu31a=0x320,5 I use the following boot line: cdu31a=0x1f88,0,PAS because I have a PAS-16 which does not support interrupt for the CDU31A interface. Adding this as an append line at the beginning of the /etc/lilo.conf file will set it for lilo configurations. I have the following as the first line in my lilo.conf file: append="cdu31a=0x1f88,0" I'm not sure how to set up Bootlin (I have never used it), if someone would like to fill in this section please do. Configuring as a Module ----------------------- The driver supports loading as a module. However, you must specify the boot address and interrupt on the boot line to insmod. You can't use modprobe to load it, since modprobe doesn't support setting variables. Anyway, I use the following line to load my driver as a module /sbin/insmod /lib/modules/`uname -r`/misc/cdu31a.o cdu31a_port=0x1f88 You can set the following variables in the driver: cdu31a_port= - sets the base I/O. If hex, put 0x in front of it. This must be specified. cdu31a_irq= - Sets the interrupt number. Leaving this off will turn interrupts off. Driver Special Features ----------------------- This section describes features beyond the normal audio and CD-ROM functions of the drive. 2048 byte buffer mode If a disk is mounted with -o block=2048, data is copied straight from the drive data port to the buffer. Otherwise, the readahead buffer must be involved to hold the other 1K of data when a 1K block operation is done. Note that with 2048 byte blocks you cannot execute files from the CD. XA compatibility The driver should support XA disks for both the CDU31A and CDU33A. It does this transparently, the using program doesn't need to set it. Multi-Session A multi-session disk looks just like a normal disk to the user. Just mount one normally, and all the data should be there. A special thanks to Koen for help with this! Raw sector I/O Using the CDROMREADAUDIO it is possible to read raw audio and data tracks. Both operations return 2352 bytes per sector. On the data tracks, the first 12 bytes is not returned by the drive and the value of that data is indeterminate. This is the readme file for the driver for the Philips/LMS cdrom drive cm206 in combination with the cm260 host adapter card. (c) 1995 David A. van Leeuwen Changes since version 0.99 -------------------------- - Interfacing to the kernel is routed though an extra interface layer, cdrom.c. This allows runtime-configurable `behavior' of the cdrom-drive, independent of the driver. Features since version 0.33 --------------------------- - Full audio support, that is, both workman, workbone and cdp work now reasonably. Reading TOC still takes some time. xmcd has been reported to run successfully. - Made auto-probe code a little better, I hope Features since version 0.28 --------------------------- - Full speed transfer rate (300 kB/s). - Minimum kernel memory usage for buffering (less than 3 kB). - Multisession support. - Tray locking. - Statistics of driver accessible to the user. - Module support. - Auto-probing of adapter card's base port and irq line, also configurable at boot time or module load time. Decide how you are going to use the driver. There are two options: (a) installing the driver as a resident part of the kernel (b) compiling the driver as a loadable module Further, you must decide if you are going to specify the base port address and the interrupt request line of the adapter card cm260 as boot options for (a), module parameters for (b), use automatic probing of these values, or hard-wire your adaptor card's settings into the source code. If you don't care, you can choose autoprobing, which is the default. In that case you can move on to the next step. Compiling the kernel -------------------- 1) move to /usr/src/linux and do a make config If you have chosen option (a), answer yes to CONFIG_CM206 and CONFIG_ISO9660_FS. If you have chosen option (b), answer yes to CONFIG_MODVERSIONS and no (!) to CONFIG_CM206 and CONFIG_ISO9660_FS. 2) then do a make dep; make clean; make zImage; make modules 3) do the usual things to install a new image (backup the old one, run `rdev -R zImage 1', copy the new image in place, run lilo). Might be `make zlilo'. Using the driver as a module ---------------------------- If you will only occasionally use the cd-rom driver, you can choose option (b), install as a loadable module. You may have to re-compile the module when you upgrade the kernel to a new version. Since version 0.96, much of the functionality has been transferred to a generic cdrom interface in the file cdrom.c. The module cm206.o depends on cdrom.o. If the latter is not compiled into the kernel, you must explicitly load it before cm206.o: insmod /usr/src/linux/modules/cdrom.o To install the module, you use the command, as root insmod /usr/src/linux/modules/cm206.o You can specify the base address on the command line as well as the irq line to be used, e.g. insmod /usr/src/linux/modules/cm206.o cm206=0x300,11 The order of base port and irq line doesn't matter; if you specify only one, the other will have the value of the compiled-in default. You may also have to install the file-system module `iso9660.o', if you didn't compile that into the kernel. Using the driver as part of the kernel -------------------------------------- If you have chosen option (a), you can specify the base-port address and irq on the lilo boot command line, e.g.: LILO: linux cm206=0x340,11 This assumes that your linux kernel image keyword is `linux'. If you specify either IRQ (3--11) or base port (0x300--0x370), auto probing is turned off for both settings, thus setting the other value to the compiled-in default. Note that you can also put these parameters in the lilo configuration file: # linux config image = /vmlinuz root = /dev/hda1 label = Linux append = "cm206=0x340,11" read-only If module parameters and LILO config options don't work ------------------------------------------------------- If autoprobing does not work, you can hard-wire the default values of the base port address (CM206_BASE) and interrupt request line (CM206_IRQ) into the file /usr/src/linux/drivers/cdrom/cm206.h. Change the defines of CM206_IRQ and CM206_BASE. Mounting the cdrom ------------------ 1) Make sure that the right device is installed in /dev. mknod /dev/cm206cd b 32 0 2) Make sure there is a mount point, e.g., /cdrom mkdir /cdrom 3) mount using a command like this (run as root): mount -rt iso9660 /dev/cm206cd /cdrom 4) For user-mounts, add a line in /etc/fstab /dev/cm206cd /cdrom iso9660 ro,noauto,user This will allow users to give the commands mount /cdrom umount /cdrom If things don't work -------------------- - Try to do a `dmesg' to find out if the driver said anything about what is going wrong during the initialization. - Try to do a `dd if=/dev/cm206cd | od -tc | less' to read from the CD. - Look in the /proc directory to see if `cm206' shows up under one of `interrupts', `ioports', `devices' or `modules' (if applicable). DISCLAIMER ---------- I cannot guarantee that this driver works, or that the hardware will not be harmed, although I consider it most unlikely. I hope that you'll find this driver in some way useful. David van Leeuwen david@tm.tno.nl Note for Linux CDROM vendors ----------------------------- You are encouraged to include this driver on your Linux CDROM. If you do, you might consider sending me a free copy of that cd-rom. You can contact me through my e-mail address, david@tm.tno.nl. If this driver is compiled into a kernel to boot off a cdrom, you should actually send me a free copy of that cd-rom. Copyright --------- The copyright of the cm206 driver for Linux is (c) 1995 David A. van Leeuwen The driver is released under the conditions of the GNU general public license, which can be found in the file COPYING in the root of this source tree. Goldstar R420 CD-Rom device driver README For all kind of other information about the GoldStar R420 CDROM and this Linux device driver see the WWW page: http://linux.rz.fh-hannover.de/~raupach If you are the editor of a Linux CD, you should enable gscd.c within your boot floppy kernel. Please, send me one of your CDs for free. This current driver version 0.4a only supports reading data from the disk. Currently we have no audio and no multisession or XA support. The polling interface is used, no DMA. Sometimes the GoldStar R420 is sold in a 'Reveal Multimedia Kit'. This kit's drive interface is compatible, too. Installation ------------ Change to '/usr/src/linux/drivers/cdrom' and edit the file 'gscd.h'. Insert the i/o address of your interface card. The default base address is 0x340. This will work for most applications. Address selection is accomplished by jumpers PN801-1 to PN801-4 on the GoldStar Interface Card. Appropriate settings are: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360 0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0 Then go back to '/usr/src/linux/' and 'make config' to build the new configuration for your kernel. If you want to use the GoldStar driver like a module, don't select 'GoldStar CDROM support'. By the way, you have to include the iso9660 filesystem. Now start compiling the kernel with 'make dep ; make zImage'. If you want to use the driver as a module, you have to do 'make modules' and 'make modules_install', additionally. Install your new kernel as usual - maybe you do it with 'make zlilo'. Before you can use the driver, you have to mknod /dev/gscd0 b 16 0 to create the appropriate device file (you only need to do this once). If you use modules, you can try to insert the driver. Say: 'insmod /usr/src/linux/modules/gscd.o' or: 'insmod /usr/src/linux/modules/gscd.o gscd=
' The driver should report its results. That's it! Mount a disk, i.e. 'mount -rt iso9660 /dev/gscd0 /cdrom' Feel free to report errors and suggestions to the following address. Be sure, I'm very happy to receive your comments! Oliver Raupach Hannover, Juni 1995 (raupach@nwfs1.rz.fh-hannover.de) IDE-CD driver documentation Originally by scott snyder (19 May 1996) Carrying on the torch is: Erik Andersen New maintainers (19 Oct 1998): Jens Axboe 1. Introduction --------------- The ide-cd driver should work with all ATAPI ver 1.2 to ATAPI 2.6 compliant CDROM drives which attach to an IDE interface. Note that some CDROM vendors (including Mitsumi, Sony, Creative, Aztech, and Goldstar) have made both ATAPI-compliant drives and drives which use a proprietary interface. If your drive uses one of those proprietary interfaces, this driver will not work with it (but one of the other CDROM drivers probably will). This driver will not work with `ATAPI' drives which attach to the parallel port. In addition, there is at least one drive (CyCDROM CR520ie) which attaches to the IDE port but is not ATAPI; this driver will not work with drives like that either (but see the aztcd driver). This driver provides the following features: - Reading from data tracks, and mounting ISO 9660 filesystems. - Playing audio tracks. Most of the CDROM player programs floating around should work; I usually use Workman. - Multisession support. - On drives which support it, reading digital audio data directly from audio tracks. The program cdda2wav can be used for this. Note, however, that only some drives actually support this. - There is now support for CDROM changers which comply with the ATAPI 2.6 draft standard (such as the NEC CDR-251). This additional functionality includes a function call to query which slot is the currently selected slot, a function call to query which slots contain CDs, etc. A sample program which demonstrates this functionality is appended to the end of this file. The Sanyo 3-disc changer (which does not conform to the standard) is also now supported. Please note the driver refers to the first CD as slot # 0. 2. Installation --------------- 0. The ide-cd relies on the ide disk driver. See Documentation/ide.txt for up-to-date information on the ide driver. 1. Make sure that the ide and ide-cd drivers are compiled into the kernel you're using. When configuring the kernel, in the section entitled "Floppy, IDE, and other block devices", say either `Y' (which will compile the support directly into the kernel) or `M' (to compile support as a module which can be loaded and unloaded) to the options: Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support Include IDE/ATAPI CDROM support and `no' to Use old disk-only driver on primary interface Depending on what type of IDE interface you have, you may need to specify additional configuration options. See Documentation/ide.txt. 2. You should also ensure that the iso9660 filesystem is either compiled into the kernel or available as a loadable module. You can see if a filesystem is known to the kernel by catting /proc/filesystems. 3. The CDROM drive should be connected to the host on an IDE interface. Each interface on a system is defined by an I/O port address and an IRQ number, the standard assignments being 0x170 and 14 for the primary interface and 0x1f0 and 15 for the secondary interface. Each interface can control up to two devices, where each device can be a hard drive, a CDROM drive, a floppy drive, or a tape drive. The two devices on an interface are called `master' and `slave'; this is usually selectable via a jumper on the drive. Linux names these devices as follows. The master and slave devices on the primary IDE interface are called `hda' and `hdb', respectively. The drives on the secondary interface are called `hdc' and `hdd'. (Interfaces at other locations get other letters in the third position; see Documentation/ide.txt.) If you want your CDROM drive to be found automatically by the driver, you should make sure your IDE interface uses either the primary or secondary addresses mentioned above. In addition, if the CDROM drive is the only device on the IDE interface, it should be jumpered as `master'. (If for some reason you cannot configure your system in this manner, you can probably still use the driver. You may have to pass extra configuration information to the kernel when you boot, however. See Documentation/ide.txt for more information.) 4. Boot the system. If the drive is recognized, you should see a message which looks like hdb: NEC CD-ROM DRIVE:260, ATAPI CDROM drive If you do not see this, see section 5 below. 5. You may want to create a symbolic link /dev/cdrom pointing to the actual device. You can do this with the command ln -s /dev/hdX /dev/cdrom where X should be replaced by the letter indicating where your drive is installed. 6. You should be able to see any error messages from the driver with the `dmesg' command. 3. Basic usage -------------- An ISO 9660 CDROM can be mounted by putting the disc in the drive and typing (as root) mount -t iso9660 /dev/cdrom /mnt/cdrom where it is assumed that /dev/cdrom is a link pointing to the actual device (as described in step 5 of the last section) and /mnt/cdrom is an empty directory. You should now be able to see the contents of the CDROM under the /mnt/cdrom directory. If you want to eject the CDROM, you must first dismount it with a command like umount /mnt/cdrom Note that audio CDs cannot be mounted. Some distributions set up /etc/fstab to always try to mount a CDROM filesystem on bootup. It is not required to mount the CDROM in this manner, though, and it may be a nuisance if you change CDROMs often. You should feel free to remove the cdrom line from /etc/fstab and mount CDROMs manually if that suits you better. Multisession and photocd discs should work with no special handling. The hpcdtoppm package (ftp.gwdg.de:/pub/linux/hpcdtoppm/) may be useful for reading photocds. To play an audio CD, you should first unmount and remove any data CDROM. Any of the CDROM player programs should then work (workman, workbone, cdplayer, etc.). Lacking anything else, you could use the cdtester program in Documentation/cdrom/sbpcd. On a few drives, you can read digital audio directly using a program such as cdda2wav. The only types of drive which I've heard support this are Sony and Toshiba drives. You will get errors if you try to use this function on a drive which does not support it. For supported changers, you can use the `cdchange' program (appended to the end of this file) to switch between changer slots. Note that the drive should be unmounted before attempting this. The program takes two arguments: the CDROM device, and the slot number to which you wish to change. If the slot number is -1, the drive is unloaded. 4. Compilation options ---------------------- There are a few additional options which can be set when compiling the driver. Most people should not need to mess with any of these; they are listed here simply for completeness. A compilation option can be enabled by adding a line of the form `#define