Hello List, i'm writing to you concerning 2.4 kernel boot parameters which are used by an IBM NetVista Thin Client 2200 (alias NetStation 8363-EXX, alias N2200) on startup. By now i boot the N2200 with a patched 2.4.27 Kernel compiled with gcc-3.3.5 (based on a Debian-System). The Patch was delivered by the IBM toolkit package NetVistaLTC.tar.gz and is attached to this message. N2200 passes different Parameters to the Kernel, which i had partly identified with the 2.4 Kernel Documentation (Documentation\kernel-parameters.txt). Below is a list of all passed Parameters: root=/dev/hda1 - Root Filesystem V=1024x768 - (?Resolution?) D=16 - ???? ip=192.168.0.200:0.0.0.0:192.168.0.1:255.255.255.0:localhost:eth0 - IP-Address specified in nfsroot.txt load_ramdisk=1 - Ramdisk Support is enabled. n1=1.2.3.4 - DNS entry n2=0.0.0.0 - yet another DNS entry pf=2 - The ParIDE subsystem is enabled. vga=4 - Boot Loader Parameter (Display-Setting) There are some Parameters in the list which i could not identify. Among these is the Parameter D=16. Does anyone know what kind of parameter this is, or where i do find documentation about it? Another one is that V=1024x768 Parameter. As of the nature of the passed value to V, i thought of some kind of resoultion settings. But i did not found anything to read about it. Can anyone give me a hint on this? Thanks in advance. Christian Schäfer
--- linux/init/main.c.orig Wed Jul 11 09:40:41 2001 +++ linux/init/main.c Wed Jul 11 09:41:09 2001 @@ -518,6 +518,18 @@ printk(linux_banner); setup_arch(&command_line); printk("Kernel command line: %s\n", saved_command_line); + + if (strstr(command_line, "hda1")) + command_line = strstr(command_line, "root"); + + if ( strstr(command_line, "hda1") && strstr(command_line, "tty2") ) { + parse_options(strcat(" console=/dev/ttyS3,9600 ", command_line)) +; + } else { + parse_options(command_line); + } + + parse_options(command_line); trap_init(); init_IRQ(); @@ -750,9 +762,9 @@ while (pid != wait(&i)); if (MAJOR(real_root_dev) != RAMDISK_MAJOR || MINOR(real_root_dev) != 0) { - error = change_root(real_root_dev,"/initrd"); + error = change_root(real_root_dev,"/dev"); if (error) - printk(KERN_ERR "Change root to /initrd: " + printk(KERN_ERR "Change root to /dev: " "error %d\n",error); } } --- linux/drivers/char/pc_keyb.c.orig Mon Jul 16 16:09:55 2001 +++ linux/drivers/char/pc_keyb.c Thu Jul 12 14:28:32 2001 @@ -448,6 +448,11 @@ unsigned char status = kbd_read_status(); unsigned int work = 10000; + + if (status == 0xff) + return 0; + + while ((--work > 0) && (status & KBD_STAT_OBF)) { unsigned char scancode; --- linux/arch/i386/kernel/head.S.orig Mon Jul 16 16:13:11 2001 +++ linux/arch/i386/kernel/head.S Mon Jul 16 16:14:26 2001 @@ -158,7 +158,10 @@ movl $512,%ecx rep stosl - movl SYMBOL_NAME(empty_zero_page)+NEW_CL_POINTER,%esi +/* NetVista */ +/* movl SYMBOL_NAME(empty_zero_page)+NEW_CL_POINTER,%esi */ + movl $0x98000, %esi + andl %esi,%esi jnz 2f # New command line protocol cmpw $(OLD_CL_MAGIC),OLD_CL_MAGIC_ADDR --- linux/Makefile.orig Wed Aug 15 12:37:45 2001 +++ linux/Makefile Wed Aug 15 12:37:50 2001 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 5 -EXTRAVERSION = +EXTRAVERSION = -IBM KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) --- linux/fs/nfs/file.c.orig Tue May 22 11:26:06 2001 +++ linux/fs/nfs/file.c Sun Sep 23 22:14:56 2001 @@ -41,6 +41,10 @@ static int nfs_fsync(struct file *, struct dentry *dentry, int datasync); static int nfs_file_release(struct inode *, struct file *); +/* 2200's do not have RTC's so we will set the initial xid from the inode + of the first file we read from the nfs server */ +u32 xid_init = 0; + struct file_operations nfs_file_operations = { read: nfs_file_read, write: nfs_file_write, @@ -101,6 +105,10 @@ struct dentry * dentry = file->f_dentry; struct inode * inode = dentry->d_inode; ssize_t result; + + /* since 2200 doesn't have RTC, lets pull time from inode on nfs server */ + if (xid_init == 0) + xid_init = ( ( inode->i_atime << 16 ) + (inode->i_atime & 0x0000ffff) ); dfprintk(VFS, "nfs: read(%s/%s, %lu@%lu)\n", dentry->d_parent->d_name.name, dentry->d_name.name, --- linux/net/sunrpc/xprt.c.orig Thu Apr 12 14:11:39 2001 +++ linux/net/sunrpc/xprt.c Sun Sep 23 22:28:17 2001 @@ -71,6 +71,9 @@ extern spinlock_t rpc_queue_lock; +extern u32 xid_init; +u32 xid_set = 0; + /* * Local variables */ @@ -1383,6 +1386,13 @@ if (!xid) xid = CURRENT_TIME << 12; + /* we reset the xid based on the time of the first file we read from + the nfs server since 2200's do not have a RTC. */ + if (!xid_set && xid_init != 0) { + xid = xid_init; + xid_set = 1; + } + dprintk("RPC: %4d reserved req %p xid %08x\n", task->tk_pid, req, xid); task->tk_status = 0; req->rq_timeout = xprt->timeout; @@ -1391,6 +1401,7 @@ req->rq_xid = xid++; if (!xid) xid++; + } /* --- linux/drivers/block/loop.c.orig Sat Oct 27 12:34:26 2001 +++ linux/drivers/block/loop.c Sat Oct 27 12:34:48 2001 @@ -74,7 +74,7 @@ #define MAJOR_NR LOOP_MAJOR -static int max_loop = 8; +static int max_loop = 32; static struct loop_device *loop_dev; static int *loop_sizes; static int *loop_blksizes; --- linux/arch/i386/kernel/setup.c.orig Sat Oct 27 12:37:28 2001 +++ linux/arch/i386/kernel/setup.c Sat Oct 27 12:37:36 2001 @@ -173,7 +173,7 @@ #define INITRD_START (*(unsigned long *) (PARAM+0x218)) #define INITRD_SIZE (*(unsigned long *) (PARAM+0x21c)) #define COMMAND_LINE ((char *) (PARAM+2048)) -#define COMMAND_LINE_SIZE 256 +#define COMMAND_LINE_SIZE 512 #define RAMDISK_IMAGE_START_MASK 0x07FF #define RAMDISK_PROMPT_FLAG 0x8000 --- linux/drivers/block/ll_rw_blk.c.orig Fri Nov 30 11:25:41 2001 +++ linux/drivers/block/ll_rw_blk.c Fri Nov 30 11:24:00 2001 @@ -876,9 +876,9 @@ /* This may well happen - the kernel calls bread() without checking the size of the device, e.g., when mounting a device. */ - printk(KERN_INFO + printk(KERN_DEBUG "attempt to access beyond end of device\n"); - printk(KERN_INFO "%s: rw=%d, want=%ld, limit=%d\n", + printk(KERN_DEBUG "%s: rw=%d, want=%ld, limit=%d\n", kdevname(bh->b_rdev), rw, (sector + count)>>1, blk_size[major][MINOR(bh->b_rdev)]);