383 lines
18 KiB
Plaintext
383 lines
18 KiB
Plaintext
From: I Reid <eonu24@castle.edinburgh.ac.uk>
|
|
Subject: gcc 2.1 installation/95c+ rebuild notes
|
|
Date: Tue, 14 Apr 92 1:05:04 WET DST
|
|
|
|
These are the notes I have just posted to alt/comp.os.linux. I would apprciate
|
|
any comments that you feel are appropriate.
|
|
|
|
Iain
|
|
|
|
p.s. Once again I apologise if the layout of this is a bit weird.... some part
|
|
of the combination of 0.95c+ and my mainframe account setup is causing some
|
|
annoying screen disruptions.
|
|
|
|
Solutions to 2 common questions
|
|
-------------------------------
|
|
|
|
1. How to install and use gcc 2.1
|
|
2. How to install and rebuild the 0.95c+ kernel using gcc 2.1
|
|
|
|
As usual, I welcome all and any comments to Iain_Reid@ed.ac.uk and I
|
|
will try to reply to them if the message warrants it. Please note that
|
|
I have not tried to compile 0.95c+ (or anything post 0.95a) with any
|
|
compiler other than gcc 2.1. I understand (from postings in
|
|
com/alt.os.linux) that this is possible but I have no details on it.
|
|
If anyone wants to write notes on this then please feel free to send
|
|
them to me and I will include them.
|
|
|
|
Iain
|
|
|
|
----------------------------------------------------------------------------
|
|
|
|
1. Installing and using gcc 2.1
|
|
-------------------------------
|
|
|
|
The information in this section is all from the gcc 2.1 FAQ (available
|
|
at tsx-11 and other archive sites). You should get this document and
|
|
read it well. It is clear and very informative.
|
|
|
|
GCC 2.1 WILL NOT WORK WITH PRE 0.95 KERNELS. IT REQUIRES AT LEAST 2MB
|
|
of RAM AND AT LEAST 4MB OF SWAP SPACE.
|
|
|
|
n.b. I did this while still running 0.95a with ps patches.
|
|
|
|
|
|
Q1. Which files do I need?
|
|
|
|
A1. 2.1lib.tar.Z
|
|
2.1misc.tar.Z.
|
|
binutils.tar.Z,
|
|
2.1shared-x.tar.Z.
|
|
Gcc 2.1 FAQ <------- essential!
|
|
|
|
|
|
Q2. What are the contents of them?
|
|
|
|
A2. - 2.1lib.tar.Z contains cc1, cc1plus and cpp.
|
|
- 2.1misc.tar.Z contains gcc 2.1 drivers, header files, libraries,
|
|
manual pages and installation instructions.
|
|
- binutils.tar.Z contains binaries needed to run gcc 2.1
|
|
- 2.1shared-x.tar.Z ..... erm, not to sure about this one. It
|
|
contains some example precompiled shared libs stuff I think.
|
|
|
|
|
|
Installation
|
|
------------
|
|
|
|
1. Backup your old compiler. As root I went into /usr/bin,
|
|
/usr/local/bin, /usr/local/lib and /usr/include and put all the gcc
|
|
related stuff into a tar file (tar -cf tarfile file-to-archive for the
|
|
first file and then tar -rf tarfile file-to-archive for all the rest).
|
|
|
|
Do NOT throw this tar file away yet 'cos you may need part of it (or
|
|
if nothing works, all of it).
|
|
|
|
You should not have any C compiler on your system when you install
|
|
2.1 (it has caused problems apparently).
|
|
|
|
2. From this point I will assume that xxxx is the directory where you
|
|
have put the gcc 2.1 tar files. For me this was /tmp/new/gcc2.1.
|
|
Type
|
|
|
|
# cd /usr
|
|
# tar xvpfz xxxx/2.1misc.tar.Z
|
|
|
|
If you tar doesn't support the z option then uncompress the tar
|
|
file before doing this and think about getting a better version. I
|
|
use version 1.10 without problems (tar +version reports the version
|
|
details)
|
|
|
|
3. Read the FAQ in /usr/install/gcc2. This appears to be the same one
|
|
as is at the archive sites but it doesn't hurt to have a look
|
|
through it. When you've finished type
|
|
|
|
# cd /usr
|
|
# tar xvpfz xxxx/2.1lib.tar.Z
|
|
|
|
4. Run the installation script (took a bit of finding this one!) by
|
|
typing
|
|
|
|
# cd /usr/install/gcc2
|
|
# inst2.x
|
|
|
|
If this doesn't do anything check that you have execute permission
|
|
set for it (chmod u+x inst2.x will make sure!). Note that you need
|
|
the contents of binutils.tar.Z for this so if necessary type
|
|
|
|
# cd /usr
|
|
# tar xvpfz xxxx/binutils.tar.Z
|
|
|
|
before trying again.
|
|
|
|
That's it! You now has gcc 2.1 installed on your system. My first test
|
|
was on some code that I'm working on and it failed abysmally with a
|
|
fatal signal 11 (internal compiler error) from ld. I renamed /usr/bin/ld
|
|
to /usr/bin/ld2.1 and retrieved my old ld from the tar file (ld-old in
|
|
the archives is equivalent). I made this /usr/bin/ld and everything
|
|
compiled properly.
|
|
------------------------------------------------------------
|
|
|
|
2. Installing and rebuilding the linux v0.95c+ kernel using gcc 2.1
|
|
-------------------------------------------------------------------
|
|
|
|
Full source code for the linux kernel is available at the archive sites
|
|
and it is useful to know how to rebuild the kernel from this code. This
|
|
is very easy to do.
|
|
|
|
You will need - the kernel source for the latest version (0.95c+)
|
|
- gcc 2.1
|
|
- a working copy of make (I use pmake from the archives)
|
|
- 1.5 - 2 Mb of free disk space
|
|
- gcc 2.1 FAQ (read the bit about a.out.h!)
|
|
|
|
n.b. you need the old ld to compile the kernel (even while running
|
|
under 95c+ with a.out.h changed it seems).
|
|
|
|
|
|
The standard place for the linux source tree is in /usr/src/linux so
|
|
if you don't have a /usr/src directory you will need to create one
|
|
with mkdir. Once you have done this move the tar file of the kernel
|
|
source (probably called linux-0.95c+.tar.Z) to /usr/src and type
|
|
|
|
tar -xzvf linux-0.95a.tar.Z
|
|
|
|
You should see a whole load of file names flashing by on the screen.
|
|
This is good. When tar finishes you should have a directory called
|
|
/usr/src/linux and this will have a number of subdirectories. You will
|
|
probably want to hang on to the original tar in case you want an
|
|
original source tree.
|
|
|
|
You might want to make a few small changes to the kernel source tree
|
|
at the point.
|
|
|
|
1. In the master makefile (/usr/src/linux/Makefile) you should choose
|
|
the keyboard definition that suits you (round about line 12). For
|
|
me this means changing
|
|
|
|
|
|
# KEYBOARD = -DKBD_FINNISH
|
|
KEYBOARD = -DKBD_US
|
|
# KEYBOARD = -DKBD_GR
|
|
# KEYBOARD = -DKBD_FR
|
|
# KEYBOARD = -DKBD_UK
|
|
# KEYBOARD = -DKBD_DK
|
|
|
|
to
|
|
|
|
# KEYBOARD = -DKBD_FINNISH
|
|
# KEYBOARD = -DKBD_US
|
|
# KEYBOARD = -DKBD_GR
|
|
# KEYBOARD = -DKBD_FR
|
|
KEYBOARD = -DKBD_UK
|
|
# KEYBOARD = -DKBD_DK
|
|
|
|
|
|
You should also tell make what your root device is by editing the bit
|
|
that looks like this
|
|
|
|
#
|
|
# ROOT_DEV specifies the default root-device when making the image.
|
|
# This can be either FLOPPY, /dev/xxxx or empty, in which case the
|
|
# default of FLOPPY is used by 'build'.
|
|
#
|
|
|
|
# ROOT_DEV = /dev/hdb1
|
|
|
|
so that the rootdev entry matches what you use (the bit you ran mkfs
|
|
for). In mine I have the line
|
|
|
|
ROOT_DEV = /dev/hda2
|
|
|
|
Ok, now making sure that you are /usr/src/linux type
|
|
|
|
make
|
|
|
|
If your compiler is set up properly you should see something that
|
|
looks like this
|
|
|
|
------------------------------------------------------------
|
|
expr: not found
|
|
[: syntax error
|
|
Usage: date [-q] [[MMDDYY]hhmm[ss]]
|
|
touch include/linux/config.h
|
|
cpp -nostdinc -Iinclude -traditional boot/bootsect.S -o boot/bootsect.s
|
|
as86 -0 -a -o boot/bootsect.o boot/bootsect.s
|
|
ld86 -0 -s -o boot/bootsect boot/bootsect.o
|
|
cpp -nostdinc -Iinclude -traditional boot/setup.S -o boot/setup.s
|
|
as86 -0 -a -o boot/setup.o boot/setup.s
|
|
ld86 -0 -s -o boot/setup boot/setup.o
|
|
as -c -o boot/head.o boot/head.s
|
|
gcc -Wall -O6 -fomit-frame-pointer -nostdinc -Iinclude -c -o init/main.o init/main.c
|
|
init/main.c:23: warning: `fork' declarations disagree about `inline'
|
|
init/main.c:23: warning: static declaration for `fork' follows non-static
|
|
init/main.c:24: warning: `pause' declarations disagree about `inline'
|
|
init/main.c:24: warning: static declaration for `pause' follows non-static
|
|
init/main.c:26: warning: `sync' declarations disagree about `inline'
|
|
init/main.c:26: warning: static declaration for `sync' follows non-static
|
|
init/main.c:46: warning: `strcpy' declarations disagree about `inline'
|
|
init/main.c:184: warning: static declaration for `printf' follows non-static
|
|
(cd kernel; make CFLAGS="-Wall -O6 -fomit-frame-pointer ")
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -fno-omit-frame-pointer -c sched.c
|
|
as -c -o sys_call.o sys_call.s
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o traps.o traps.c
|
|
as -c -o asm.o asm.s
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o fork.o fork.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o panic.o panic.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o printk.o printk.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o vsprintf.o vsprintf.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o sys.o sys.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o exit.o exit.c
|
|
exit.c: In function `do_exit':
|
|
exit.c:367: warning: `volatile' function does return
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o signal.o signal.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o mktime.o mktime.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o ptrace.o ptrace.c
|
|
ld -r -o kernel.o sched.o sys_call.o traps.o asm.o fork.o panic.o printk.o vsprintf.o sys.o exit.o signal.o mktime.o ptrace.o
|
|
sync
|
|
(cd mm; make CFLAGS="-Wall -O6 -fomit-frame-pointer ")
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o memory.o memory.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o swap.o swap.c
|
|
ld -r -o mm.o memory.o swap.o
|
|
(cd fs; make CFLAGS="-Wall -O6 -fomit-frame-pointer ")
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o open.o open.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o read_write.o read_write.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o inode.o inode.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o file_table.o file_table.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o buffer.o buffer.c
|
|
buffer.c: In function `check_disk_change':
|
|
buffer.c:124: warning: implicit declaration of function `put_super'
|
|
buffer.c:125: warning: implicit declaration of function `invalidate_inodes'
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o super.o super.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o block_dev.o block_dev.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o char_dev.o char_dev.c
|
|
char_dev.c: In function `rw_mem':
|
|
char_dev.c:65: warning: implicit declaration of function `un_wp_page'
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o stat.o stat.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o exec.o exec.c
|
|
exec.c: In function `copy_strings':
|
|
exec.c:130: warning: `pag' may be used uninitialized in this function
|
|
exec.c: In function `do_execve':
|
|
exec.c:393: warning: implicit declaration of function `send_sig'
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o pipe.o pipe.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o namei.o namei.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o fcntl.o fcntl.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o ioctl.o ioctl.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o select.o select.c
|
|
ld -r -o fs.o open.o read_write.o inode.o file_table.o buffer.o super.o block_dev.o char_dev.o stat.o exec.o pipe.o namei.o fcntl.o ioctl.o select.o
|
|
(cd fs/minix; make CFLAGS="-Wall -O6 -fomit-frame-pointer ")
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o minix_op.o minix_op.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o bitmap.o bitmap.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o truncate.o truncate.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o namei.o namei.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o inode.o inode.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o file_dev.o file_dev.c
|
|
ld -r -o minix.o minix_op.o bitmap.o truncate.o namei.o inode.o file_dev.o
|
|
(cd kernel/blk_drv; make CFLAGS="-Wall -O6 -fomit-frame-pointer ")
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o ll_rw_blk.o ll_rw_blk.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o floppy.o floppy.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o hd.o hd.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o ramdisk.o ramdisk.c
|
|
ar rcs blk_drv.a ll_rw_blk.o floppy.o hd.o ramdisk.o
|
|
sync
|
|
(cd kernel/chr_drv; make CFLAGS="-Wall -O6 -fomit-frame-pointer " KEYBOARD="-DKBD_UK")
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o tty_io.o tty_io.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o console.o console.c
|
|
console.c: In function `con_write':
|
|
console.c:815: warning: empty body in an else-statement
|
|
console.c:815: warning: empty body in an else-statement
|
|
cpp -nostdinc -I../../include -DKBD_UK -traditional keyboard.S -o keyboard.s
|
|
as -c -o keyboard.o keyboard.s
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o serial.o serial.c
|
|
as -c -o rs_io.o rs_io.s
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o tty_ioctl.o tty_ioctl.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o pty.o pty.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -c -o lp.o lp.c
|
|
ar rcs chr_drv.a tty_io.o console.o keyboard.o serial.o rs_io.o tty_ioctl.o pty.o lp.o
|
|
sync
|
|
(cd kernel/math; make CFLAGS="-Wall -O6 -fomit-frame-pointer " MATH_EMULATION="-DKERNEL_MATH_EMULATION")
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o emulate.o emulate.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o error.o error.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o convert.o convert.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o ea.o ea.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o get_put.o get_put.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o add.o add.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o mul.o mul.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o div.o div.c
|
|
gcc -nostdinc -I../../include -Wall -O6 -fomit-frame-pointer -DKERNEL_MATH_EMULATION -c -o compare.o compare.c
|
|
ar rcs math.a emulate.o error.o convert.o ea.o get_put.o add.o mul.o div.o compare.o
|
|
sync
|
|
(cd lib; make CFLAGS="-Wall -O6 -fomit-frame-pointer ")
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o ctype.o ctype.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o _exit.o _exit.c
|
|
_exit.c: In function `_exit':
|
|
_exit.c:14: warning: `volatile' function does return
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o open.o open.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o close.o close.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o errno.o errno.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o write.o write.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o dup.o dup.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o setsid.o setsid.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o execve.o execve.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o wait.o wait.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o string.o string.c
|
|
gcc -nostdinc -I../include -Wall -O6 -fomit-frame-pointer -c -o malloc.o malloc.c
|
|
ar rcs lib.a ctype.o _exit.o open.o close.o errno.o write.o dup.o setsid.o execve.o wait.o string.o malloc.o
|
|
sync
|
|
ld -M boot/head.o init/main.o kernel/kernel.o mm/mm.o fs/fs.o fs/minix/minix.o kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a kernel/math/math.a lib/lib.a -o tools/system > System.map
|
|
gcc -Wall -O6 -fomit-frame-pointer -o tools/build tools/build.c
|
|
cp tools/system system.tmp
|
|
strip system.tmp
|
|
tools/build boot/bootsect boot/setup system.tmp /dev/hda2 > Image
|
|
Root device is (3, 2)
|
|
Boot sector 512 bytes.
|
|
Setup is 1456 bytes.
|
|
System is 188420 bytes.
|
|
rm system.tmp
|
|
sync
|
|
------------------------------------------------------------
|
|
|
|
This takes about 7 minutes on my machine (heavily cached 386-33 with
|
|
8Mb Ram) and seems to use up to about 2.5Mb of memory. Don't worry about
|
|
the expr bit at the start. Expr is in the gnu shell utils 1.6 release
|
|
and is needed for compiling c++ code. You do not NEED it to rebuild
|
|
the 0.95c kernel (but it would make it slightly aesthetically more
|
|
pleasing I suppose :-)). Before anyone asks, no I don't know where you
|
|
can find the shell utils 1.6 (perhaps the gcc2.1 FAQ should indicate
|
|
this). There may be a copy somewhere in the Linux archives (don't
|
|
remember seeing one) but if not you should be able to get the original
|
|
from ftp.gnu.ai.mit.edu.
|
|
|
|
N.b. don't worry if it seems to hang while compiling floppy.c.... give
|
|
it a few seconds and it should burst back into life.... it's thinking :-)
|
|
|
|
If it gets all the way through there will be a file called Image
|
|
created in /usr/src/linux. This is the new bootimage and you can put
|
|
it onto a floppy in /dev/PS0 (a 3.5" 1.44Mb floppy on my machine) by
|
|
typing
|
|
|
|
dd bs=8192 if=Image of=/dev/PS0
|
|
|
|
You can do this automatically by typing make disk instead of make
|
|
(above) if you wish.
|
|
|
|
Congratulations! You have just rebuilt the linux kernel and created a
|
|
new boot floppy. Time to sync, reboot your machine and test it. I
|
|
hope you didn't overwrite your original bootimage; 'cos if you did then
|
|
what are going to use to boot up if the new bootimage is faulty?? Ah,
|
|
the value of forward planning :-)
|
|
-------------------------------------------------------------------
|
|
|
|
What now?
|
|
|
|
You probably want to compile ps (process status) now. There is a
|
|
version of this for 2.1 but it refused to compile for me and
|
|
complained about missing structure members. I don't intend to pursue
|
|
this 'cos my old version of ps (as compiled for 0.95a) works a treat
|
|
with the new kernel!
|
|
------------------------------------------------------------
|
|
|
|
_______________________________________________________________________________
|
|
|Iain_Reid@uk.ac.edinburgh : "This is a dog licence with the word dog |
|
|
|eonu24@uk.ac.edinburgh.emas-a | crossed out and cat written in with crayon."|
|
|
_______________________________________________________________________________
|