Files
2024-02-19 00:25:02 -05:00

577 lines
22 KiB
Plaintext

From: Digestifier <Linux-Activists-Request@news-digests.mit.edu>
To: Linux-Activists@news-digests.mit.edu
Reply-To: Linux-Activists@news-digests.mit.edu
Date: Sat, 21 Mar 92 23:15:09 EST
Subject: Linux-Activists Digest #135
Linux-Activists Digest #135, Volume #1 Sat, 21 Mar 92 23:15:09 EST
Contents:
Re: 33MHz vs 8Mhz (Drew Eckhardt)
diff for extended partitions (Charles Hedrick)
Re: diff for extended partitions (Charles Hedrick)
test program for extended partitions (Charles Hedrick)
Re: non-root login and vi (Drew Eckhardt)
Re: Free BSD release: future of Minix/Linux? (Michael L. Kaufman)
Where can I get Linux ? (Chris Kottaridis)
HD trouble with .95a (Lawrence C. Foard)
adduser (S3679988)
----------------------------------------------------------------------------
From: drew@cs.colorado.edu (Drew Eckhardt)
Subject: Re: 33MHz vs 8Mhz
Date: 22 Mar 92 00:19:56 GMT
In article <dave.701137159@stat.tamu.edu> dave@stat.tamu.edu (Dave Perry) writes:
>Hi,
>
>I hate to waste bandwidth, but... :) I've successfully
>installed basic linux on my pc (finally!) and have noticed
>a few nagging problems. One is the refusal of the filesystem
>to run in 33MHz on my 486. Its a major bummer to have to
>resort to 8 and loose all that potential (uncompress is a
>*chore* ). Does anyone have any suggestions? The other thing
>is the lack of other niceties, such as job control, and the
>inability of kermit to escape back to linux, which obviously
>prevents me from using kermit (Not a bad idea, but when its
>all you have :) Keep up the excellent work, Linus!
>
My guess would be that insufficient wait states are being
added to bus accesses at 33Mhz. Since most PC's on the market divide
clock frequency to get the bus clock as this is cheaper than using a
separate clock circuit for the bus, the problem would not manifest itself
at 8Mhz when the bus is running at 1/4th the speed.
This could corrupt data coming
in off the hard disk, etc. Most software deals with potentially
slow devices on the bus by putting a jmp instruction after any port
access - ie in MASM you would have something like
foo:
insb
jmp $+2 ; flush pipeline
loop foo
as the jump will flush the pipeline and slow things down to a workable speed.
If your CMOS has an extended setup, where bus waitstates can be set,
you probably should increase them.
Otherwise, search the linux source code for any in, out, or ins / outs
assembler instructions where a jump like this is not being performed.
Under gas, you would do this like
outs
jmp 1f
1:
outs
jmp 1f
1:
using the local labels.
------------------------------
From: hedrick@dartagnan.rutgers.edu (Charles Hedrick)
Subject: diff for extended partitions
Date: 22 Mar 92 00:33:14 GMT
The following diff appears to fix extended partitions. At least on my
system I get the right list of partitions, and making a file system on
one causes no visible damage. Note that I've added code to print the
start and end of all the partitions at startup. Until we get
confidence in this code I strongly recommend that you look carefully
at the partitions to make sure that the logical partitions don't
overlap each other or any real partitions. Since the kernel defines
partitions only by start and size, as long as those numbers are
reasonable, the partitions should be safe to use.
Unlike the previous posting, this one is NOT from Linus, and is not
endorsed by him. (In fact, he hasn't seen it yet.)
It turns out that Linus' guess for how extended partitions would be
done was not right. He figured that the partition table in the
extended partition would be used just like the main partition table.
It appears that this is not the case. The problem with that is that
it would only allow 4 logical partitions. In fact what they do is
make a linked list of logical partitions, with each link in the list
being a partition table. The tricky thing about it is that in those
link partition tables, the "start" fields are interpreted oddly. The
first one should be offset by the location of the partition table.
The second one should be offset by the location of the main extended
partition.
I've tried this code on a machine with one disk and one extended
partitions. (I've set up a number of logical partitions, including a
gap between two of them, just to make sure that I tested the code as
much a possible.) Be suspicious of what might happen on a machine
with more than one disk or using DiskManager partitions (what ever
that is).
*** hd.c.ORIG Sun Mar 22 00:15:32 1992
--- hd.c Sat Mar 21 23:57:51 1992
***************
*** 74,85 ****
extern void hd_interrupt(void);
extern void rd_load(void);
static unsigned int current_minor;
static void check_partition(unsigned int dev)
{
! int minor, i;
struct buffer_head *bh;
struct partition *p;
unsigned long first_sector;
--- 74,86 ----
extern void hd_interrupt(void);
extern void rd_load(void);
+ static void extended_partition(unsigned int dev);
static unsigned int current_minor;
static void check_partition(unsigned int dev)
{
! int i;
struct buffer_head *bh;
struct partition *p;
unsigned long first_sector;
***************
*** 89,106 ****
printk("Unable to read partition table of device %04x\n",dev);
return;
}
! minor = current_minor;
if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
p = 0x1BE + (void *)bh->b_data;
! for (i=0 ; i<4 ; i++,p++) {
! if (!(hd[i+minor].nr_sects = p->nr_sects))
continue;
! hd[i+minor].start_sect = first_sector + p->start_sect;
if ((current_minor & 0x3f) >= 60)
continue;
if (p->sys_ind == EXTENDED_PARTITION) {
! current_minor += 4;
! check_partition(0x0300 | (i+minor));
}
}
/*
--- 90,109 ----
printk("Unable to read partition table of device %04x\n",dev);
return;
}
! current_minor += 4; /* first "extra" minor */
if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
p = 0x1BE + (void *)bh->b_data;
! for (i=1 ; i<=4 ; i++,p++) {
! if (!(hd[i].nr_sects = p->nr_sects))
continue;
! hd[i].start_sect = first_sector + p->start_sect;
! printk("part %d start %d size %d end %d \n\r", i,
! hd[i].start_sect, hd[i].nr_sects,
! hd[i].start_sect + hd[i].nr_sects);
if ((current_minor & 0x3f) >= 60)
continue;
if (p->sys_ind == EXTENDED_PARTITION) {
! extended_partition(0x0300 | (i));
}
}
/*
***************
*** 112,125 ****
p--;
if ((current_minor & 0x3f) >= 60)
break;
! if (!(hd[current_minor+4].start_sect = p->start_sect))
continue;
! hd[current_minor+4].nr_sects = p->nr_sects;
current_minor++;
}
}
} else
printk("Bad partition table on dev %04x\n",dev);
brelse(bh);
}
--- 115,206 ----
p--;
if ((current_minor & 0x3f) >= 60)
break;
! if (!(hd[current_minor].start_sect = p->start_sect))
continue;
! hd[current_minor].nr_sects = p->nr_sects;
! printk("DM part %d start %d size %d end %d\n\r",
! current_minor,
! hd[current_minor].start_sect,
! hd[current_minor].nr_sects,
! hd[current_minor].start_sect +
! hd[current_minor].nr_sects);
current_minor++;
}
}
} else
printk("Bad partition table on dev %04x\n",dev);
+ brelse(bh);
+ }
+
+ /*
+ * Create devices for each logical partition in an extended partition.
+ * The logical partitions form a linked list, with each entry being
+ * a partition table with two entries. The first entry
+ * is the real data partition (with a start relative to the partition
+ * table start). The second is a pointer to the next logical partition
+ * (with a start relative to the entire extended partition).
+ * We do not create a Linux partition for the partition tables, but
+ * only for the actual data partitions.
+ */
+
+ static void extended_partition(unsigned int dev)
+ {
+ struct buffer_head *bh;
+ struct partition *p;
+ unsigned long first_sector, this_sector;
+
+ first_sector = hd[MINOR(dev)].start_sect;
+ this_sector = first_sector;
+
+ while (1) {
+ if ((current_minor & 0x3f) >= 60)
+ return;
+ if (!(bh = bread(dev,0))) {
+ printk("Unable to read partition table of device %04x\n",dev);
+ return;
+ }
+ /*
+ * This block is from a device that we're about to stomp on.
+ * So make sure nobody thinks this block is usable.
+ */
+ bh->b_dirt=0;
+ bh->b_uptodate=0;
+ if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
+ p = 0x1BE + (void *)bh->b_data;
+ /*
+ * Process the first entry, which should be the real
+ * data partition.
+ */
+ if (p->sys_ind == EXTENDED_PARTITION ||
+ !(hd[current_minor].nr_sects = p->nr_sects))
+ goto done; /* shouldn't happen */
+ hd[current_minor].start_sect = this_sector + p->start_sect;
+ printk("Logical part %d start %d size %d end %d\n\r",
+ current_minor, hd[current_minor].start_sect,
+ hd[current_minor].nr_sects,
+ hd[current_minor].start_sect +
+ hd[current_minor].nr_sects);
+ current_minor++;
+ p++;
+ /*
+ * Process the second entry, which should be a link
+ * to the next logical partition. Create a minor
+ * for this just long enough to get the next partition
+ * table. The minor will be reused for the real
+ * data partition.
+ */
+ if (p->sys_ind != EXTENDED_PARTITION ||
+ !(hd[current_minor].nr_sects = p->nr_sects))
+ goto done; /* no more logicals in this partition */
+ hd[current_minor].start_sect = first_sector + p->start_sect;
+ this_sector = first_sector + p->start_sect;
+ dev = 0x0300 | current_minor;
+ brelse(bh);
+ }
+ else
+ goto done;
+ }
+ done:
brelse(bh);
}
------------------------------
From: hedrick@dartagnan.rutgers.edu (Charles Hedrick)
Subject: Re: diff for extended partitions
Date: 22 Mar 92 00:56:51 GMT
A PS to my extended partition code: This is based on 0.95a with the
diffs from Linus that I posted in a previous message. So you should
apply those diffs first. I think my code could be put in a stock
0.95a, but some minor changes would probably be necessary.
I know there's somebody keeping track of patches. Do I need
to do something separate to get them to you, and have them go
onto tsx-11, etc., or do you pull all patches off the newsgroup?
------------------------------
From: hedrick@dartagnan.rutgers.edu (Charles Hedrick)
Subject: test program for extended partitions
Date: 22 Mar 92 01:08:35 GMT
Here's an fdisk-like thing that uses the same method of handling
extended partitions as my kernel patches. (However it's a bit more
limited: it only knows about one disk, /dev/hda, and can only handle
one extended partition on that disk.) If you're nervous about firing
up kernel support, you can use this to check whether my code can
figure out your disks. [By the way, all this stuff I'm posting
is also on athos.rutgers.edu:/pub/linux]
char *parttype ();
main (argc, argv)
int argc;
char **argv;
{
int fd, i;
char buffer[1024];
char *p, *part;
unsigned long m, partition, start, size, next;
p = 0;
fd = open("/dev/hda", 0);
read(fd, buffer, 1024);
for (i = 1,part = buffer+ 0702; i <= 4; i++, part += 020) {
if (*part == 5)
p = part;
start = *(unsigned long *)(part + 4);
size = *(unsigned long *)(part + 8);
printf("/dev/hda%d: %6d blocks (%d sectors) %s at %d-%d\n", i,
size / 2, size,
parttype(*part), start, start+size);
}
if (! p)
exit(0);
printf("\nLogical partitions in extended partition:\n\n");
partition = *(unsigned long *)(p+4);
m = partition;
size = *(unsigned long *)(p+4);
for(i = 5; ;i++) {
lseek(fd, partition * 512, 0);
read(fd, buffer, 1024);
start = *(unsigned long *)(buffer + 0706);
size = *(unsigned long *)(buffer + 0712);
next = *(unsigned long *)(buffer + 0726);
printf("/dev/hda%d: %6d blocks (%d sectors) %s at %d-%d\n", i,
size / 2, size,
parttype(*(buffer + 0702)), partition + start,
partition+ start + size);
if (5 != *(buffer + 0722))
break;
partition = m + next;
}
}
char typebuf[32];
char *parttype(i)
int i;
{
if (i == 6)
return "16-bit DOS";
else if (i == 1)
return "12-bit DOS";
else if (i == 5)
return "extended partition";
else {
sprintf(typebuf, "type %d", i);
return typebuf;
}
}
------------------------------
From: drew@cs.colorado.edu (Drew Eckhardt)
Subject: Re: non-root login and vi
Date: 22 Mar 92 01:12:07 GMT
In article <zhao.701198899@chilko.ucs.ubc.ca> zhao@unixg.ubc.ca (Jiansheng Zhao) writes:
>I cann't use vi if I login as a non-root user:
>error messge;"can't create temporary file, error 2."
>Can someone tell me what I did wrong? I created a UserName under /usr and
>logged in as UserName. Also, I made the file /usr/UserName/tmp and made
>changes in file "passwd" and "group."
This is a problem with the permissions on /tmp. You should set permissions on
/tmp to 1777 - sticky, r/w/x all. Tmp must be r/w all so anyone can make files
there, and should be sticky so users cannot delete files they don't own.
------------------------------
From: kaufman@eecs.nwu.edu (Michael L. Kaufman)
Crossposted-To: comp.os.minix
Subject: Re: Free BSD release: future of Minix/Linux?
Date: 21 Mar 92 16:04:52 GMT
In article <1992Mar21.073048.1673@nntp.hut.fi> s32974l@kaira.hut.fi (Jussi Markus V{h{passi) writes:
>Users of PS/2 70/80 etc. with MICROCHANNEL are stuck with Minix, too, like it
>or not.
Maybe not. If I get some free time, I may do a PS/2 port. I have already ported
another Unix to the PS/2, so it shouldn't be too big a deal.
Michael
--
Michael Kaufman | I've seen things you people wouldn't believe. Attack ships on
kaufman | fire off the shoulder of Orion. I watched C-beams glitter in
@eecs.nwu.edu | the dark near the Tannhauser gate. All those moments will be
| lost in time - like tears in rain. Time to die. Roy Batty
------------------------------
From: chrisk@Ceram.COM (Chris Kottaridis)
Subject: Where can I get Linux ?
Date: 21 Mar 92 05:47:03 GMT
I am looking for an OS to run on my 386 PC. It was recommended that I
monitor this newsgroup for a while. I like what I see and would like
to know how to get source for linux. I can ask a favor of a friend to
get Internet access if that is required, but email or UUCP would be
easier for me.
Thanks
Chris Kottaridis Chris.Kottaridis@Ceram.COM
------------------------------
From: entropy@ee.WPI.EDU (Lawrence C. Foard)
Subject: HD trouble with .95a
Reply-To: entropy@ee.WPI.EDU (Lawrence C. Foard)
Date: Sun, 22 Mar 1992 02:46:07 GMT
I just tried compiling the new .95a kernel and my hard drive does weird
things after booting. It acts like the driver is putting it at a very
low step rate. Any idea of how this can be corrected?
------------------------------
From: S3679988@deimos.ucc.umass.edu (S3679988)
Subject: adduser
Date: Sun, 22 Mar 1992 03:37:59 GMT
here is a utility that i wrote to add new users to a linux system.
It asks for the username (and checks if it is in user).
the group id, and user id (sorry, you still have to manage these),
the users root directory, shell, and default password.
this was a quick hack, i haven't seen any bugs, though.
-- craig hagan
========================= cut here =============================
begin 644 adduser.tar.Z
M'YV08<B0J3.GC)P7 !(J7,BPH<.'$"-*G$@1 (B+-VK4 &'QXD48'#U^#"FR
M)$@0,F38F&&CY8P9,B[&@$'CI<4:%7/JW,FS)P""=,+(N0A SILW='P^-(I4
MJ=.G4*-*G4HU9\"!!0^.D9,'#AT7;ZJ*E>K1!@T:)#V"[*@VK<@8,N!>3+G2
M)8P9:$' A2&#AD488P,+7@A4*%&F2:<B'LRXL>/'8P\$2,AA,D0P#B$YK)*H
MW"!V"*Y8F;*H#X-%=2 LZH)A2:(N_ ;M^_> 4#F%D'(M/%8$WP&%B>3-B# H
M&($'MX0MPK0P1A<$,W 14!A,G6I-S9_/T#4]X:(J%(87/YY\>7;HTJE;7X1=
MH7/HW!5^AT[<.')A,V M7 2H.X 815!0'00SR+*?)/[% %XB^HAG7W+Y[=>?
M>P$.6."!"8+W3Q/X#-('/K054L0_),Z72!T()&(-@Z51D(B&3<36!S\A<D B
MB7508,45_Z"(SCO^D-A(&>QLX<47R0RC4 .6_09 ],H9$!"##0C)97!*%0
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
M'F!@AH.N( $G",()S"EM1SH'!-9>+[85"@,\F.&X(/"!#T! V^#X 1A&+<S
M [W7,3^YS"( )SAS5@;Q8<VZH/YF.)%=:FTFX6Q@)O%*N2*YA+/ RS>N]8!%
M<(=>H6'+WNR8W<*0YBFON=-NOOC"1ZUQ* M-C1;OG(E)-E!7QW7A'!7SQL&9
M!+M937V.,W$KM]O=[]IYKH'&<&YK_52;LE+B/;!O%WX;WQ/P@0\GI3;5\TMJ
MCP@UDQMO0AC6P*V>C;C$% =Y%VXNSHQGL@UKD**/P<P"&-P !L<E):MS7= _
MMM-L*("G 1&XR7J*( R6[ARQD]I15-JSFSJ ? F4.?G(S\'REI?K4&6L0J_@
M^I.2*W<*6-!;.9)AHP8Q[)?ED%(W+SBM=Y#ACR5\^M[J5@']5D#&=L][J<SN
M!6(7ED=[/Q5[H84M(T%^OO@E$[F@1& MH0%?;F PN/AE8<0GU\,.0S&J2"S[
MX ]_588PA!ZP3@%#, (3@G"$*5C[=;Z;G0Z<20(4D/^@]4__^MM_T!;(KG99
MD4RVTSJ=ISNZ)WX(F( *N( ,V#"_)P5%$ 1$T 1%T( \87SXHB\BH8$EL1<;
M\7QU819X80/--P,W<'V 88%BL7T1TWT3TQ0J&(,6B 1I(#D_1U8C!P)Q(&%C
M #@GU(/(=!4D8S(H8UTK13(750=XD#?>4S9MX (*D 0@(#9(@36] @(Z8S4?
MLX-IT(-LD >2<S70@S5:" )LP#* @S=E@ =EXP;$HT;_)#YUX#=S (51&#-Y
M=$:NI45YD&:CXW-7(W-:] 8=IS;SIP"113(J0TZ2<W83UX<^9G*<YG.-@V0L
MEF0OP .JY0,']7(=HP">%HF;=F64" *3Y@9T-GILI48D5W-RH$:B>'):5H:+
MZ%,I8(=7J(5#LQ4%5S: >'!)EF81AW9@F$R_"#I'6(:N"(>.IP">B$-J4P9V
M0X@F<T2G=%IXHX5@)HRM9&)Y8(</%SBG9#>.Z(UMYC)LH$9B4 :'6("<<Q$A
M(XY84X!XQ"U"T8>>TRJA,SJE<SJ2XTMO8 =SA#EBT(?(T@(%J 0*($4^$SQ
M>(.=@TH*$'Q3ADKP>!%E"$/"9Y%'J)%8,SO."( &<3L/&8A(-(=C0&)O0#R^
MXSLMT *9LS,]<T)!XP:^0Y-" P3$4S]&Y0)U@"H^"4,6Y *R4@<'*(-(F91*
FN91,V91.^910&952.9546956>958F95:N95<V95>^95@&99B.18'
end
------------------------------
** FOR YOUR REFERENCE **
The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:
Internet: Linux-Activists-Request@NEWS-DIGESTS.MIT.EDU
You can send mail to the entire list (and alt.os.linux) via:
Internet: Linux-Activists@NEWS-DIGESTS.MIT.EDU
Linux may be obtained via one of these FTP sites:
nic.funet.fi pub/OS/Linux
tsx-11.mit.edu pub/linux
tupac-amaru.informatik.rwth-aachen.de pub/msdos/replace
The current version of Linux is 0.12, released on Jan 14, 1992
End of Linux-Activists Digest
******************************