Giter Site home page Giter Site logo

aaronjackson / 2.11bsd Goto Github PK

View Code? Open in Web Editor NEW
6.0 6.0 0.0 16.93 MB

2.11BSD with some modifications

Makefile 2.44% C 83.51% Roff 9.31% Assembly 2.30% Yacc 0.74% Lex 0.18% C++ 0.01% Shell 1.17% Logos 0.01% ChucK 0.01% Awk 0.01% PostScript 0.13% Emacs Lisp 0.01% Perl 0.03% Standard ML 0.03% Max 0.08% Brainfuck 0.01% R 0.01% Limbo 0.01% TeX 0.02%
bsd kernel pdp-11

2.11bsd's Introduction

  • ๐Ÿคก Code for "Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric Regression" vrn, which is also available on Docker Hub as a container image vrn-docker
  • ๐Ÿ“ป Hacky scripts for ax25d on Linux ax25hacks
  • ๐ŸŒ Poorly written web server for your PDP-11 2.11BSDhttpd
  • ๐Ÿ A Lisp interpreter written in K&R C for your PDP-11 bnlisp
  • ๐Ÿ˜ˆ Some attempts at drivers in my 2.11BSD fork, including a dummy driver for learning, and a driver for the IBV11 GPIB controller. See branches and PRs!
  • ๐Ÿค– A GitHub Action for 2.11BSD continuous integration testing (on an emulated PDP-11) 2.11BSD-Action along with a GitHub repo and workflow which builds distribution files 2.11BSD-Distribution-Builder

Feel free to stalk on my website aaronsplace.co.uk or plant some trees ๐ŸŒณ

Recent blog posts

This section is automatically updated using RSS to README GitHub Action.

2.11bsd's People

Contributors

aaronjackson avatar bsdimp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

2.11bsd's Issues

Notes on kernel overlays

Newsgroups: comp.bugs.2bsd
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!newshost.telstra.net!act.news.telstra.net!psgrain!news.uoregon.edu!news.dacom.co.kr!usenet.seri.re.kr!news.cais.net!news.jsums.edu!gatech!newsfeed.internetmci.com!in2.uu.net!citicorp.com!news.new-york.net!wlbr!sms
From: [email protected] (Steven M. Schultz)
Subject: Re: ld failure while rebuild 2.11BSD kernel
Sender: [email protected] (System Administrator)
Organization: GTE Government Systems, Thousand Oaks CA USA
Message-ID: <[email protected]>
References: <[email protected]>
X-Nntp-Posting-Host: wlv.iipo.gtegsc.com
Date: Fri, 23 Feb 1996 04:47:23 GMT
Lines: 202

In article <[email protected]>, Bob Armstrong  <[email protected]> wrote:
>  I am using a 11/73 running the as distributed GENERIC 2.11BSD system,
>and I'd like to build a new kernel.  So far I've tried to duplicate the
>GENERIC and NONET kernels using the configuration files distributed
>(this is just as a test to make sure I have all the parts I need to
>build my own customized kernel).  In each case everything compiles OK,
>but the link fails with:
>
>	ld: too big for type 431
>
>  Could someone interpret this message for me ?
>
>Thanks,
>Bob


	This may be of some help - I typed it up the last time the same
	question was asked.

	RSH (Real Soon Now;-)) this is going into the setup&installation
	documentation - I just haven't gotten around to it (a 'round tuit'?)
	yet.

	Steven Schultz
	[email protected] or [email protected]
------------------
> The Makefile proceeds without errors until the final (massive) link run.
> Then it says:
>                         too big for type 431
> and exits code 2.
> I tried playing with Makefile, deleted some modules, like the rk, which
> I do not have, and moved a couple around. Same result.
> Obviously I'm new at this. Any assistance appreciated.

	This is not unexpected.  In fact I was placing bets with myself
	as to when the first person would encounter the 'too big' message ;-)

	As distributed only the GENERIC kernel is guaranteed to configure 
	and build without errors.

	What to do when the linker complains about the size of a kernel
	is not covered in the documentation - sorry 'bout that, perhaps I'll
	take the mini-tutorial below and add it to the setup documentation
	some day.

	As a bit of background here is what goes on when a kernel is
	configured:

		cd /sys/conf
		cp GENERIC PICKLE
		vi PICKLE
		  ... turn on/off desired featuers,drivers,etc ...
		./config PICKLE

		At this point the 'config' script creates the directory
		/sys/PICKLE and populates it with various .h files describing
		what devices are present and so on.  Also copied into
		/sys/PICKLE are the various _prototype_ Makefiles: Makefile,
		Make.pdp, Make.pdpuba, etc.  Of these makefiles you are 
		only concerned with "Makefile" - the others should almost
		_never_ be edited.

		cd ../PICKLE
		make

		ld: too big for type 431

	First - what does that message mean?  '431' is the magic number for
	a split I/D overlaid executable.  Kernels are *always* split I/D
	and overlaid.

	The 'too big' part of the message means that the base segment and/or
	one of the overlays is larger than allowed.  What are the limits
	on the sizes (I hear you ask)?

	Kernels are a special case of overlaid program (user mode programs
	may be overlaid too but have less restrictive size rules).  The
	BASE segment (non-overlaid portion)  may be up to 56kb (57344) bytes
	in size.  In the case of the kernel the base segment must be a
	minimum of 48kb (this is not hard to do).  User mode overlays do
	not have the minimum size restriction.  Each of the 15 (maximum) 
	overlays (OV1 thru OV15) may be up to 8kb (8192) bytes.

	When 'ld' gives you a "too big" message the first thing you should
	do is:

		size unix.o

	That will produce something similar to:

	text    data    bss     dec     hex
	58304   7778    41206   107288  1a318   total text: 119360
        	overlays: 8192,6976,7680,7616,8000,7872,7680,7040

	As we see the base segment is over 57344.  To reduce the base we
	must move one of the files from the BASE group to one of the OV groups.
	Which one?  It is not critical but a the general rule is:

		The smallest one which will solve the problem.

	It is perfectly ok to put device drivers in overlays - especially
	disk drivers which tend to move large chunks of data per interrupt
	or call.  It is desireable to keep terminal drivers in the base but
	nothing bad will happen if you need to put one (such as dh.o) into
	an overlay.

	Next, look in the Makefile at the line starting with "BASE=" and do:
	a "size " command on all the files listed in the BASE section.

	How much do we need to reduce the base?  58304 - 57344 = 960.  So, 
	we need to find a .o (or more than one - it's the total of sizes
	that counts) in the BASE that is >= 960 bytes of text.

	In my kernel the overlay description looks like this:

BASE=   br.o cons.o dh.o dhu.o dhv.o dr.o dz.o hk.o ht.o init_sysent.o \
        kern_clock.o kern_descrip.o kern_mman.o kern_proc.o kern_prot.o \
	kern_subr.o kern_synch.o machdep.o ram.o kern_fork.o \
	rk.o ra.o rx.o si.o subr_rmap.o sys_inode.o sys_kern.o \
	tm.o tty.o tty_conf.o tty_subr.o tty_tb.o ufs_alloc.o \
	ufs_bio.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \
	vm_sched.o vm_text.o xp.o quota_subr.o
OV1=    sys_generic.o ufs_syscalls.o
OV2=    kern_acct.o kern_exec.o kern_exit.o kern_resource.o
OV3=    kern_time.o sys_process.o ufs_mount.o ufs_subr.o \
	uipc_syscalls.o
OV4=    dkbad.o kern_sig.o mem.o subr_xxx.o trap.o tty_pty.o tty_tty.o
OV5=    quota_kern.o quota_ufs.o quota_sys.o ufs_bmap.o \
	sys_pipe.o
# OV6 gets the (hopefully) never used routines
OV6=    clock.o dn.o init_main.o kern_pdp.o machdep2.o subr_prf.o syscalls.o \
	subr_log.o toy.o vm_swap.o
OV7=    tmscp.o lp.o vm_swp.o rl.o mch_fpsim.o ts.o
OV8=    kern_sysctl.o ingreslock.o ufs_disksubr.o kern_xxx.o vm_proc.o

	We see that

		size kern_subr.o ufs_dsort.o

	gives

		text	data	bss
		820	34	0
		272	0	0

	820 + 272 = 1092

	58304 - 1092 = 57212

	which is great!  It's below 57344.  So, we've found the .o files which
	when moved to an overlay will generate a valid kernel.  Where should
	we put it?

	Well - OV2 looks a little small, is there room there?  8192-6976=1216.
	Yes, there is room.

	So, the kern_subr.o and ufs_dsort.o files are removed from the BASE
	section and added to OV2:

BASE=   br.o cons.o dh.o dhu.o dhv.o dr.o dz.o hk.o ht.o init_sysent.o \
        kern_clock.o kern_descrip.o kern_mman.o kern_proc.o kern_prot.o \
	kern_synch.o machdep.o ram.o kern_fork.o \
	rk.o ra.o rx.o si.o subr_rmap.o sys_inode.o sys_kern.o \
	tm.o tty.o tty_conf.o tty_subr.o tty_tb.o ufs_alloc.o \
	ufs_bio.o ufs_fio.o ufs_inode.o ufs_namei.o \
	vm_sched.o vm_text.o xp.o quota_subr.o
OV2=    kern_acct.o kern_exec.o kern_exit.o kern_resource.o kern_subr.o \
	ufs_dsort.o

	Then exit the editor and type "make".  And voila - no error and
	doing "size unix" yields:

text    data    bss     dec     hex
57280   7778    41206   106264  19f18   total text: 119424
        overlays: 8192,8064,7680,7616,8000,7872,7680,7040

	Perfect!

	*NEVER* simply delete files from the Makefile!  If you did not select
	a device in the config file - the .o is 0 bytes in size.  If for
	example you do not have an RK05 configured do a "size rk.o" and
	you will see that it is "0 0 0".  The .o is only 16 bytes long.

	That is why you won't notice any difference when moving/deleting
	some files - they don't have anything in them.  

	REMEMBER: "size" is your friend when adjusting overlays - get to 
	know and trust him.

	NOTE: There are some .o files which *must not* be moved out of the
	base segment.  These are identified as such in the Makefile.

	NOTE: You can not have any gaps in the overlays.  This means that
	there can not be a 0 length (empty) overlay between two populated
	overlays.  The last overlay used may be empty.

	IF all the overlays are full - then add OV7, OV8, OV9, etc lines
	(up to OV15) as needed and put .o files in them.  The Makefile will
	use the new OV lines automatically.

	I hope this makes things a little bit clearer for anyone building
	a 2.11BSD kernel.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.