AUTHOR: John Gnew
DATE: 2005-08-11
LICENSE: Public Domain
SYNOPSIS: How to install LFS on S/390 hardware
PRIMARY URL: http://www.linuxfromscratch.org/hints/
DESCRIPTION:
This hint should help to install Linux from scratch version 6.0 on a
IBM S/390 mainframe. I was able to take the 6.0 install guide, with some minor
modifications and three additional packages, and complete the install.
This LFS system was installed on a 3390-3, my starter LFS 5.0 system was on a 3390-3.
I also had a 3390-9 to use for general storage of files.
At the compleation, I was able to IPL my LFS system as a VM guest.
I have not included the CTC configuration as this will vary from system to system.
Prior to compiling the kernel, I verified various kernl patches from IBM. It seems that
all of the patches I came up with were already included in the kernel sources. I would
recommend checking for patches prior to compiling different versions of the kernel.
The IBM site for obtaining various patches is located at:
(http://www-128.ibm.com/developerworks/linux/linux390/index.html)
PREREQUISITES:
None
REQUIRED ADDITIONAL SOFTWARE:
mingetty-1.06 (version 1.07-1 in now available)
s390-tools-1.4.0
HINT:
I followed the documentation for the LFS 6.0 install with the following exceptions:
The first addition was to upgrade the 2.4 kernel in LFS 5. GCC was already at
level 3.3. I needed to be at the 2.6 level. This upgrade caused changes in the
networking so it took a few attempts before I got everything back in place.
Install module-init-tools-3.0.tar.bz2
./configure --prefix=/
make moveold
make
make install
./generate-modprobe.conf /etc/modprobe.conf
copy the modprobe.devfs file into /etc.
Upgrade kernel to 2.6.8.1 (or any 2.6 kernel)
Create /sys dir and update fstab for sysfs entry
I had problems with CTC network without /sys dir
Set up CTC with the commands similar to the following:
# device must be offline and should be by default
echo 0.0.2000,0.0.2001 > /sys/bus/ccwgroup/drivers/ctc/group
# echo 0 > /sys/bus/ccwgroup/drivers/ctc/0.0.2000/online
echo 0 > /sys/bus/ccwgroup/drivers/ctc/0.0.2000/protocol
echo 1 > /sys/bus/ccwgroup/drivers/ctc/0.0.2000/online
The following is the command to freate your file system:
mkfs.ext3 /dev/dasda1
linux-libc-headers needs to change the copy asm-i386 to asm-s390
in chapter 5 and chapter 6
glibc 2.3.4
touch /tools/glibc-kernheaders/autoconf.h
And I initially received the following error:
In file included from sys/ustat.h:30,
from ../sysdeps/unix/sysv/linux/ustat.c:21:
../sysdeps/generic/bits/ustat.h:26: error: redefinition of `struct ustat'
make[2]: *** [/LFS60/sources/glibc-build/misc/ustat.o] Error 1
make[2]: Leaving directory `/LFS60/sources/glibc-2.3.4/misc'
To correct this problem I edited ./sysdeps/unix/sysv/linux/ustat.c by commenting
#include and then adding #include .
The following SED command will accomplish the same.
sed -i 's@sys/ustat.h@sys/statfs.h@' \
'../glibc-2.3.4/sysdeps/unix/sysv/linux/ustat.c'
The problem was related to a file including an obsolete header file.
Chapter 5 Locking in GLIBC
The next thing to do is to amend our GCC specs file so that it points to the new dynamic linker.
A simple sed will accomplish this:
SPECFILE=/tools/lib/gcc-lib/*/*/specs &&
sed -e 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
$SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
unset SPECFILE
Change to
sed -e 's@ /lib/ld.so.1@ /tools/lib/ld.so.1@g' \
There does not seem to be a ld-linux.so.2 in the /tools/lib.
In chapter 6 I had to remove the coreutils patch for uname. Had a problem with asm:
Besides, patch is for intel not 390.
Gettext 0.14.3 check failed on msgfmt-6. This also failed on 0.14.4.
I found a comment on problems with this test and AIX.
+#ifdef linux
+#define cpuid(in,a,b,c,d)\
+ asm("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in));
+int has_sse( void );
+#endif
Besides, this patch is for intel type boxes not s390. Guess Iíll just have to
live with uname -1 and uname -p displaying unknown.
mingetty-1.06 (http://packages.qa.debian.org/m/mingetty.html)
mingetty is required for non serial consoles. This had to be installed with "make&&make install"
which puts mingetty in /sbin.
The /etc/inittab needed the following added:
# S/390 enable console login for all runlevels
1:012356:respawn:/sbin/mingetty /dev/ttyS0
I also commented the following lines:
#1:2345:respawn:/sbin/agetty tty1 9600
#2:2345:respawn:/sbin/agetty tty2 9600
#3:2345:respawn:/sbin/agetty tty3 9600
#4:2345:respawn:/sbin/agetty tty4 9600
#5:2345:respawn:/sbin/agetty tty5 9600
#6:2345:respawn:/sbin/agetty tty6 9600
Customization
root:/usr/src# ln -s /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz /usr/sh
are/kbd/keymaps/defkeymap.map.gz
KERNEL GEN
For the install the kernel, the kernel is not under arch/i386/boot/BzImage but
rather arch/s390/boot/image
s390-tools-1.4.0
Tools that were built as follows:
cd zipl
make
make install
cd ../fdasd
make
make install
cd ../dasdfmt
make
make install
PROBLEMS TODO
During boot the console will display messages that have ascii control characters.
This make it hard to read. Especialy during a disk check.
To correct this make sure bashrc has something similar to the following:
# Provides a colored /bin/ls command. Used in conjunction with code in
# /etc/profile.
if [ $TERM = "dumb" ]; then
alias ls='ls --color=never'
else
alias ls='ls --color=auto'
fi
To prevent the console from displaying weird lines during a filesystem check,
change in /etc/rc.d/init.d/checkfs
# fsck $options -a -A -C -T
fsck $options -a -A -T
ACKNOWLEDGMENTS:
CHANGELOG:
[2004-10-21]
* Initial post
[2004-11-05]
* Corrected install for GCC-2.95.3
[2005-08-11]
* Changed install to represent LFS 6