/
LOG
2870 lines (1970 loc) · 110 KB
/
LOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Major changes from 1.0 to 1.1
+ Everywhere: Can compile two versions of the code, under gcc or bcc
(Bruce Evan's cc), so that 16-bit boot PROMs can be made. See
netboot-16/README.16 for more details.
+ Everywhere: Removed duplicate defines, e.g. everybody defined their
own ID for ethernet address size (6). Put IDs for magic numbers in
various places. Still some inconsistency, ETH_ and ETHER_ are used.
+ Everywhere: Added prototypes of functions to netboot.h. Removed
unused variables.
+ Makefiles: Rewritten.
+ netboot.h: Added define for TFTP_MAX_PACKET = 512. Increased TIMEOUT
for tftp packets to 180 (about 10 seconds) so that tftp servers would
be able to retransmit blocks.
+ main.c: Rewrote tftp(). Original was intended to get only one block
and the strain on the structure due to modifications was showing.
Increased config_buffer size to TFTP_MAX_PACKET+1 to avoid special
casing data length=512.
+ linuxloader.c: Cleaned up the code in some places, especially
linux_tftp. Moved the bootp reply block into bss space instead of a
fixed location such as 0x90000.
+ ns8390.c: Removed one bug regarding packet length. packetlen was
wrongly shortened when packets wraparound the ring buffer.
+ 3c509.c: Changed some of the gotos to returns. Removed ARP code since
that's already done elsewhere. Removed interrupt enable and Rx early
notification (we can't do anything with the packet until it's complete
anyway).
Major changes from 1.1 to 1.2
+ Small bug in makerom.c. Extra semicolon shortened for loop and made
double checking code invalid.
+ Added version identification to startup string.
+ Gathered external declarations into netboot.h.
+ New compile time option for netboot-32. If INT19H is not defined,
then boot ROM takes control as soon as BIOS scans it. This may solve
the problem of some BIOSes not calling the boot ROM at INT19H. This
may be when disks are detected by the BIOS, i.e. the machine is not
truly diskless.
+ Added a new program, test.c, for making test ROMs to verify that
the BIOS recognises the ROM.
+ New directory contrib contains contributed code. Currently contains
masq by Gerd Knorr: make a boot floppy without DOS
comboot-1.0 by Adam J. Richter: also make a boot floppy without DOS.
+ New mknbi-1.4 from Gero Kuhlmann and Markus Gutschke. This one handles
the new bzImage format.
Bumped up version to 2.0 because we are so listed in the Linux 2.0
distribution and this would avoid confusion.
Major changes from 2.0 to 2.1
+ Added LSM for transname-patch to contrib.
+ Added patch for serial console from Claus Heine
<claus AT momo PERIOD math PERIOD rwth-aachen PERIOD de>.
+ Claus Heine contributed patches to the 2.0.21/22 kernel sources to
allow NFS swap.
+ Markus Gutschke provided fixes to start2.S so that main can return to
the ROM code if user doesn't want to ROM boot.
+ Added code to main.c to timeout on the prompt and assume Y or N
for the answer. Timeout and answer configurable.
+ Made NE1/2000 probe addresses configurable from Makefile. Fixed up
autoscan code.
+ Made NFS_BOOT a configurable option. By undefining it, only tagged
file load is supported but ROMs are under 8k.
+ ROMSIZE is not used by makerom now. -s flag controls size of ROM
at runtime. So don't need to recompile makerom if ROMSIZE changes.
+ Updated netboot-16 for the latest dev tools from the Linux-MT
project. Use the size.c from there.
+ Got rid of _main() in main.c, instead using #ifdef ELF in start2.S.
ELF is preferred now anyway.
+ Changed bcompare to standard bcmp and reversed sense of result.
Reason: to use standard library if available, e.g. Netboot-16.
+ Common Makefile for 32 bit and 16 versions, with differences in
Config files.
Major changes from 2.1 to 2.2
+ New device driver for the Crystal Semiconductor CS89x0 chipset family.
(because of legal problems, this code is currently in the "contrib"
directory.)
+ Added support for loading BOOTP extension files (c.f. RFC1533).
+ If we have to go thru a gateway, then use the one that has been used for
the BOOTP daemon. If the BOOTP daemon is directly accessible, then use
the first entry in the "gw" gateway list instead.
+ For all retries, back off according to RFC951 by randomizing the timeouts
and exponentially increasing them until an average of one minute is
reached.
+ Warn if code will not fit into chosen ROM size. Happens only if the
autosizing in the Makefile somehow fails.
+ Modified the code for enabling the A20 gate; this could increase
compatibility, but I still have to hear from users.
+ The copyright message will now reflect, which features have been
enabled at compile time.
+ Added support for selecting different boot images from a menu. As a side
effect, this can be used to upgrade the ROM without having to burn a new
image (c.f. README.VendorTags).
+ Display a "message of the day" that is provided by the BOOTP daemon.
+ The sanity check for detecting a Linux kernel was too strong to properly
recognize a 2.1.x kernel; this has been fixed.
+ Trys to negotiate for 1432 octect blocks, if the TFTP daemon knows
about RFC1783.
+ We can optionally boot from local disk, if the BOOTP server cannot
be contacted.
+ Restructured directories: got rid of netboot-freebsd to reduce confusion
with Gero Kuhlmann's netboot, moved documentation to doc and renamed
directories to be more in line with Unix conventions. Edited documentation.
+ Created a dispatch table for NIC routines so that we can include one
or more drivers in one binary. Renamed all entry points in the driver
sources. Created two new files, config.c, which holds the dispatch
table and can be conditionally compiled; and nic.c which contains the
extern variables referenced by the drivers.
+ Automatically decide what size ROM is needed by doing a size and then
choosing the correct startup object. Currently caters for 8k, 16k and
32k ROMs.
+ Optionally include a simple interpreter for ANSI escape sequences. This
allows for fancier boot menus.
+ Remove patches directory which is mostly relevant to 1.x kernels only.
Everybody should use 2.x kernels now. If for some reason you need those
patches, get an older release of etherboot.
+ Fix Makefile to work even if . not on PATH.
+ Sadly, 32 bit ROMs are now > 8kb. We will try to reduce the size by
conditionals in a later release. For now, use version 2.1 if your NIC
won't take > 8kb ROMs.
+ Release as 3.0b1 because of the large amount of changes.
+ Fixed a few problems with the code for ANSI escape sequences and
added optional support for displaying graphics.
+ Optional support for password protected boot images.
+ Optional support for booting from block devices (floppy, hd).
+ The bootp server can pass additional parameters to the loaded kernel
image (currently, this only applies to Linux) and the user can be
allowed to edit a commandline; the latter is optionally protected by
a password scheme.
+ Set the warm-boot flag when the main routine is entered.
+ Release as 3.0b2
+ Added code for updating the FlashCard EPROM over the network
(contrib/flashimg).
+ Added very simple code for turning a ROM image into a network loadable image.
This is useful for debugging, but some users without flash EPROMs might
appreciate the possibility to load a fully fledged image from a very basic
configuration.
+ Optional support for compressing the ROM images. Please read
doc/COPYING.compressor before using this feature.
+ Sync'd our source tree with Gero's netboot-0.5; this means that you now need
the as86 from the ELKs project in order to recompile all of the files. This
should not affect normal usage, though.
+ Added "mknbi-blkdev" for booting from local block devices.
+ Fixed some bugs in ppmtoansi.c and bootmenu.c
+ Renamed reference compressor implementation to compressor.exp otherwise
make tries to use it and it should not be turned on by default.
+ Zero'ing BSS in 16-bit version has to be done to _end, not to A0000
because it's executing in a segment, not in flat address space in 16
bit mode.
+ Ken Yap contributed a quick and dirty Perl script for people who use
netboot to test ELKS. So far I'm the only one I know of; maybe the
others are silent. :-(
+ Release as 3.0
Major changes from 3.0 to 3.1
+ 4 versions of etherboot can be built for a NIC: .com for testing and
.rom for burning into EPROM, and corresponding compressed versions:
.lzcom and .lzrom.
+ The loaders are now separate programs which are prepended to the
etherboot binary. This allows them (plain and uncompressing versions) to
be maintained separately and gives a bit more RAM to the etherboot code.
+ No need to define ROMSIZE in the build. makerom automatically discovers
the ROM size needed and fills in the size field in the ROM. This
simplifies the build procedure.
+ 16 bit versions use the same loaders as the 32 bit version. Also fixed
two bugs in the 16 bit versions: (1) a non-8086 instruction in zloader,
(2) setting warm-boot flag in main which zapped some code.
+ Fixed a documentation bug on the ANSI escape sequences.
+ Include netboot-0.5.3 distribution from Gero Kuhlmann.
+ Included some contributions from Dickon.Reed AT cl PERIOD cam PERIOD
ac PERIOD uk: Running display of Kbytes loaded, line of delimiters after
loading complete, a temporary hack to address timing problems with the
3C509, and some Makefile cleanup. The first two changes need to be
enabled in Config with defines.
+ mknbi-blkdev seems to have been left out by Gero Kuhlmann. Add to
contrib directory. You probably have to make a symlink to it from
the netboot-0.5.2 directory.
+ Release as 3.1
Major changes from 3.1 to 3.2
+ 16 bit version now can load to extended memory, if it exists. On
a 8086/8 this will silently fail.
+ Cleaned up interface between main body of code and NIC drivers. No
global variables referenced in NIC driver, everything is passed
through a structure. Only the probe function is visible outside,
pointers to the others are returned in the structure.
+ Implemented autoprobe for 3c503. Also simplifies code at same time.
+ Removed ARP response code in ns8390.c. Don't think we need to respond
to ARP requests because other machines will do gratuituous ARP when
boot code sends out bootp request. Are there cases where this is not
true? Gateways?
+ Added 1 second timeout to routine that clears the keyboard buffer
in case there is no keyboard.
+ Added a skeleton driver that can be used as a template for new NIC
drivers.
+ ./lzhuf in Makefile so that it will run even if . is not on path.
+ Fixed comboot to work on 286s also. Won't work yet on 8086/8.
+ Fixed mknbi-blkdev to configure properly under netboot-0.7.
+ Added David Munro's PCI code adapted from Linux. Currently has entries
for PCI NE2000 clones. Generalised it to probe other PCI cards later on.
+ Moved twiddle() outside NIC driver except where used to provide a delay.
+ Fixed bug in Makefile spotted by Ton Biegstraaten. Should prepend
ZLOADER to make all.lzcom, not LOADER.
+ Charlie Brady donated a NE2100 (LANCE) card, so Ken Yap wrote a driver
for it. Should work for other LANCE (7990, etc) based cards with some
modifications.
+ Markus Gutschke wrote rom-scan, and it is in contrib/.
+ Hack rom-scan.c so that a DOS version can be compiled.
+ Removed all.* targets from Makefile. The NIC specific loaders should be
used in preference as the all.* loaders can run out of memory.
+ Added a disable routine to dispatch table so that cards can be turned
off before the loaded code is executed.
+ Make INT19H the default.
+ Rogier Wolff persuaded AW computer systems to contribute the Intel
EtherExpressPro 100 driver. The binary to hex converter in contrib/
is also from Rogier Wolff. Part of the work is sponsored by BitWizard
NL (www.bitwizard.nl).
+ Distribute with a subset of netboot-0.7.2 that doesn't have the bootrom
portion.
+ Release as 3.2.
Major changes from 3.2 to 4.0
+ Merged in Vlad Lungu's patches for DHCP support, ifdef'ed by DHCP_SUPPORT.
+ XID matching fix also provided by Vlad Lungu.
+ Merged in William Arbaugh's patches to make eepro driver work properly.
+ Add to contrib/ better bin2intelhex from Jean Marc Lacroix.
+ Patches from Jim Hague (thanks!) for the following:
* Added PIO mode for 3c503 to ns8390.c. Changed the card detection to
detect shared memory or PIO and use the selected one, and removed
a jumper check that failed on the Bull (no jumpers).
* Added more #ifdefs to ns8390.c to include only code relevant to the
card being compiled, and removed unnecessary run-time card vendor
behaviour branches - it's all now #ifdefd.
* Added a -3 parameter to makerom to set the last two bytes to 0x80.
These are the values they have in the 3Com Etherboot image that was
in the Bull. (Also on the 3c503 card I have - Ken.) Also altered the
Makefile to add this parameter when building a 3c503 image.
* Modifies lzhuf.c, objdump86.c & size86.c to work on either-endian systems.
* Adds a -DT503_AUI config paramter to let you choose AUI or BNC on
3c503s. Previously it defaulted to AUI, and you had to change the
code to alter it.
* Changed the BCC include directory to /usr/bcc/include. If you use the
BCC include files they don't define u_char, u_short etc. I've added
these into linuxdef.h, ifdef'd on BCC.
* Adds a trivial Linux 3c503 driver patch to the contrib directory
to let it spot these 'ere Bull things.
+ Charlie Brady confirmed that the Lance driver works with PCI so there
is a new lancepci driver now.
+ Removed support for NFS_BOOT; only TFTP booting supported now.
+ Removed support for linear images; only tagged images supported now.
+ Removed PRIORIZEBOOTPKERNEL and BOOTPKERNELONLY. Bootp reply must
specify kernel name.
+ Bug fix for 16 bit version of 3c509 driver: sign bit propagation bug.
+ Revert to non-pausing versions of out[bw] and inb for NEx000 driver
because of reports of timimg problems on some cards.
+ New driver for NI6510. Just a simple tweak of the lance driver for
different ID bytes and different register offsets. According to the
NI6510 driver in Linux, the NI6510 Etherblaster is more like the NE2100
and would be detected by the NE2100 driver. So use that one instead.
+ New drivers for 3c507 and NI5210, both of which use the i82586 chip. It
works properly for both now. I needed to have enough receive buffers to
make sure i82586 never goes into an out of resources state. 3c507 driver
has one quirk, it only responds after second bootp request. I seem to
remember something about this problem of losing the first packet after
initialisation in early Linux discussions. I am also now convinced
that Intel designers have weird minds. BTW, NI5210 driver assumes 8k
RAM because if you put the ROM on the NIC you can only have 8k RAM. If
you are putting the ROM off-board and you want 16k, well, talk to me.
+ Call nic_disable routine just before jumping to loaded image. This
does nothing in most drivers, but may have side effects as the nic_reset
routine used to be called instead.
+ One of those "why I didn't think of it before" ideas: A modified version
of comboot, called floppyload, that is prepended to the .rom image rather
than the .com image and then both written raw to a floppy for testing the
bootrom. All we have to do is jump to an entry point in (z)loader that
skips the INT19H stuff. Relocation will happen automatically. Now the
.com images and comboot are superfluous, unless one is masochistic enough
to want to try to test under DOS.
Added .fd0 targets to Makefile. Saying make <card>.fd0 will make
floppyload.bin and <card>.rom, and cat both to /dev/fd0. Naturally the
drive must be writable and you must have a floppy in the drive.
+ New driver for Tiara (Fujitsu EtherStar). This was one of the easiest
drivers to write. But the chip apparently has some quirks; there is no
Linux driver for it in the standard distribution and the email address
of someone who wrote an alpha driver is invalid. Perhaps I'll bump into
an AT1700 (which has a similar chip) one day and be able to reuse a lot
of the code.
+ Updated contrib/mkelksnbi for ELKS 0.0.68.
+ Confirmed that the SMC8216 driver works. 8416 not tested, it's a PnP
card. Can anybody confirm this?
+ New contributed software: p910nd, a tiny printer daemon suitable for
diskless hosts.
+ Made ANSIESC work for Etherboot/16.
+ Fixed Makefile and Config.* so that it works with old binutils.
+ Included a subset of netboot-0.7.3.
+ Released as version 4.0.
Changes between 4.0 and 4.1
+ Patches by Andrew Coulthurst for eepro100b.
+ Patches by Doug Ambrisko for booting Windows95 after answering N to
the boot from network question. Added conditional code to cope with
broken DHCP server and TAG 128.
+ Put version and driver identifier at end of ROM image if it fits,
to help identify ROMs in future.
+ Capture ROM segment address and length to help choose between multiple
NICs later.
+ Don't clear all of memory because it will destroy return address
on stack.
+ Changes to comboot-1.2 (although obsolete) to run on 8088s.
+ New version 0.2 of p910nd, a non-spooling printer daemon.
+ Patches by Alex Harin to prepended loaders and makerom to generate PnP
ready ROMs. Modified makerom to automatically detect PnP and PCI headers
and do the right thing. Added option to change the vendor and device IDs.
+ Augmented documentation for 2.1 and above kernels. Kernel now wants to
mount /tftpboot/<hostname in bootptab> rather than /tftpboot/<ip address>
as the root FS.
+ Changed all the outb* and outw calls in drivers (except eepro) to be
OUTB* and OUTW, then defined macros to translate to out[bp]* for both
Etherboot/32 and Etherboot/16, instead of pasting macros from Linux
include files because apparently they've changed in 2.1. At the same
time reversed the arguments in start16.S for outb and outw to match the
Linux convention. Unfortunately the out[bw] usage came that way from
FreeBSD. Someday I'll reverse the arguments in the C files properly.
For any new driver writers, you should use the Linux order now.
+ New contributed utility, disnbi for decoding and extracting network
boot images.
+ Martin Atkins contributed mntnbi for mounting DOS NBIs.
+ Peter Dobcsanyi contributed vendor and device IDs for the Netvin
NE2000/PCI clone.
+ adam AT mudlist PERIOD eorbit PERIOD net contributed RARP code as
alternative to BOOTP/DHCP. Activated by RARP_NOT_BOOTP define.
+ Added link to Claus-Justus Heine's NFS swap Web page and updated the
contrib directory.
+ Disabled max packet length check in ns8390.c. Caused spurious Bogus
packet messages in some cases and doesn't seem that useful a sanity
check anyway.
+ Daniel Engstrom contributed a SMC9000 driver.
+ Didier Poirot contributed an Etherpower II (EPIC 100) driver.
+ Added bug fix by Attila Bogár for bootmenu.c and patch to main.c to
remove looping menus on failure. Also code for ARP replies and TFTP
block retransmit (#ifdefed because controversial).
+ Code cleanup of tftp and tftpd also by Attila Bogár.
+ Nathan R. Neulinger fixed a bug with block being declared short instead
of u_short in tftpd.c, which limited transfers to 32k blocks. Fixed
problem with field tu_block being declared as signed short in many
platforms by including fixed version of tftp.h. Fixed tftp also for
good measure.
+ New mini-HOWTO on a "ssh terminal".
+ Andreas Mack pointed out that eepro100 doesn't compile on 2.1 and
2.2 kernels. Removed unnecessary include of bios32.h and reliance on
definition of virt_to_bus in kernel headers in eepro100.c, epic100.c
and lance.c.
+ David Sharp contributed a Tulip driver written for FreeBSD netboot.
Ken Yap ported to Etherboot. Not tested yet because no hardware.
+ Replaced references to arptable[ARP_CLIENT].node to nic->node_addr in
eepro100.c and epic100.c as they should be.
+ Greg Beeley of LightSys Technology Services contributed a 3c905b
driver. Be sure to read the release notes in 3c905b.txt.
+ Günter Knauf suggested making the prompt strings more generic and to
put a newline after the answer. Beware, N now means Network boot and
not No to network boot.
+ Alex Nemirovsky contributed some patches for BIOSes that use an extended
space at the top of 640k. Also some code for BIOSes that don't implement
BIOS32 correctly or at all.
+ Use PCI extension BIOS header only for PCI cards, all others use legacy
extension BIOS header.
+ Klaus Espenlaub contributed various cleanup patches to the code. Also
introduced Rainer Bawidamann's code, see next paragraph.
+ Rainer Bawidamann contributed a Realtek 8139 driver.
+ Simplified rules for building .bin files, use -b of as86 so we
don't need ld86 or objdump86 now. But later found that a fixed as86 is
required. So supply preassembled binaries. The keen hackers can get the
fixed tools.
+ Georg Baum contributed a Schneider & Koch G16 driver. Only the
32 bit version works at the moment; even though the 16 bit version
compiles, it won't work because the current code assumes flat memory
addressing. Anybody who needs the 16 bit version should feel free to
fix it.
+ Reduce size of ROM image loaded by floppyboot.bin from 64kB to 32kB
for a slight speedup in loading. None of the images are even 32kB anyway.
+ Updated some of the documents in doc/sgml.
+ Klaus Espenlaub sent in a totally revamped start32.S, using the code16
and code32 directives in recent GNU as (so if this file won't assemble
maybe your as version is not recent enough). Also patches to the menu
handling code.
+ jluke AT deakin PERIOD edu PERIOD au sent in a fix for the WD/SMC8013
long ago which I finally got around to verifying.
+ start16.o and start32.o are supplied for those people who have problems
compiling start*.S with as/as86.
Released as Etherboot-4.2.0
+ One line fix to 3c509b by Greg Beeley for Wake-On-LAN support.
+ Added patches by Klaus Espenlaub that I forgot.
+ Made AS_PSEUDOS not the default, assume that people have sufficiently
up-to-date GNU as. If not they can uncomment that line.
Released as Etherboot-4.2.1
+ Disable 3c509 after loading finished or port may be unusable.
+ Woops, forgot to up the version's last digit in the last release.
+ Stephan Bauer sent in a device ID for config.c for 21142 chip Tulips.
+ Ifdef out input overrun recovery code (it's really only needed for
NE2000s) and use SHMEM by default for 3c503s to bring the ROM size down
below 8kB.
+ Added code to start32.S to detect < 386 and exit so it doesn't hang
the computer. Doesn't print a message yet.
+ Changed README.sgml to recommend that TFTP use a separate directory
from NFS, /tftpdir. Added sample configuration file for DHCPD and caveat
about the name of the root directory when using DHCPD.
+ Revamped atnetboot.sgml: use mtools most of the time, write about a
few example applications.
+ Quick Perl script for converting bootptab to dhcpd.conf.
Released as Etherboot-4.2.2
+ Forgot to put new version of src/start32.o. Not urgent though, the
extra code only guards against Etherboot/32 being executed on < 386.
+ Supply version preassembled start32.o with ANSIESC and FLOPPY defined
for those with a deficient as. Define dummy handleansi routine in
ansiesc.c so that it will still link even if this start32.o is used.
+ Edited *.asm so that they can be assembled by either as86 (ELKS version)
or nasm.
+ Changed Makefile so that one can choose between no as86, as86 or nasm.
+ Added Mark Burazin's conditional code for Compex RL2000 PCI NIC.
+ Increase delay during probe phase to 10ms as 1ms is too low for some
3c509 boards. Donald Becker's Linux driver hints that > 2ms is needed
to be safe. Also call t509_disable in case board was active.
+ Update README.sgml date and version.
Released as Etherboot 4.2.3.
+ rtl8139.c: Reduce the number of transmit buffers to reduce footprint.
Remove polling loop in *_loop(), caller already does the looping.
+ main.c: Fix code indentation in bootp().
+ Small corrections to documentation.
Released as Etherboot 4.2.4.
+ Matthias Meixner found a longstanding bug in rtl8139.c where it was
testing the wrong bit for the existence of a packet in the buffer.
+ Added paragraph to documentation about caveats for hosting NFS root
on a different architecture.
Released as Etherboot 4.2.5.
+ Updated mklnim for RH6.0 which uses a different floppy image and
requires 'network' to be appended to kernel parameters.
+ Reversed sense of #ifdef DHCP_SUPPORT to #ifndef NO_DHCP_SUPPORT and
so forth, i.e. the default is with DHCP support.
+ Suggest reducing options for rtl8139 driver to minimise footprint in
release notes.
+ Jim McQuillan provided changes to support the SMC1211, which uses the
RTL8139 chip.
+ Changed lret in start32.S to int $0x19 so that it doesn't depend on
the return location being there.
Released as Etherboot 4.2.6
+ Succeeded in booting FreeDOS with the kernel in the tagged image rather
than on the ramdisk, i.e. the boot process jumps directly to the kernel
in memory. The utility is mkfreedosnbi in contrib/.
+ Additions to the documentation.
Released as Etherboot 4.2.7
+ Matt Hortman pointed out that the BIOS clock value returned by INT1AH
rolls over at midnight, causing delay loops that cross midnight to
fail. Fix was to keep track of midnight crossings in currticks so that
currticks' return value is monotonically increasing.
+ Added paragraph to documentation about editing PCI vendor and device
IDs in Makefile if needed.
+ Merged in FreeBSD support code supplied by Doug Ambrisko. Thanks!
Released as Etherboot 4.2.8
+ Cleaned up the FreeBSD support in osloader.c. Symbols to use in Config
are to select image type, not FreeBSD specific now.
+ Added simple signature checking code in floppyload.asm in case somebody
forgets to append a ROM image or tries to load a non-ROM image.
+ Merged in 3c90x and multiple PCI bus support by Steve Smith. Thanks!
+ Included NT-Diskless-Terminal HOWTO by Pavel Tkatchouk.
+ Included snapshot of H. Peter Anvin's rewrite of tftp.
+ Combined tftp and tftpd directories, and touched up Makefile to reflect
normal Linux install directories.
Released as Etherboot 4.2.9
+ NT-Diskless-Terminal HOWTO renamed to Diskless-From-NT.
+ One line fix to mknbi-dos to recognise FAT16 filesystems as legal.
Updated first.S in mknbi-dos so that it can be assembled by nasm and is
also suitable for FreeDOS with the right define. Still backward compatible
with as86. Bug fix at line starting getnm3:.
+ Updated first.S in mknbi-linux so that it can be assembled by nasm also.
+ Locate bootp data block at 0x93C00-0x93FFF to free up 1024+ bytes in
[0x98000-0x9FFFF]. Etherboot/32 only, business as usual for Etherboot/16.
+ Patch from Attila Bogár to make CONGESTED a compile option for
TFTP_TIMEOUT. Also corrected spelling of his name in README.
+ Fixed start32.S to assemble correctly with gas version 2.95. Must
define GAS295 in CFLAGS.
+ Add contrib/3c90xutil containing a utility for handling 3c90x EEPROMs
in situ.
+ Update p910nd to 0.3. client.pl now checks if hostname is known and
uses more convenient routines from Socket module.
+ Moved the Flashcard directory into a separate package as it's of
limited interest.
Released as Etherboot 4.2.10
+ Fixed bug introduced in 4.2.10 in code for handling bootp extension
files.
+ Change in 3c90x.c so that it can compile under FreeBSD.
+ Patch to tulip.c from Nick Lopez to handle Macronix 98715 (Tulip clone).
Released as Etherboot 4.2.11
+ Prefer RFC1533_GATEWAY to giaddr for routing tftp packets.
+ Print out both relay address and gateway address.
+ Stored arptable ipaddrs in network byte order. Makes everything simpler
and we can get rid of convert_ipaddr. Now %I in printf and inet_ntoa
have to deal with NBO. We reduce the footprint by ~100 bytes.
+ Renamed setip to more standard inet_ntoa and change argument type to
suit, using in_addr.
+ Replaced bcmp by memcmp, bzero by memset, and bcopy by memcpy. Allows
us to use optimised versions in inline assembler.
+ Replaced OUTB and OUTW by outb and outw with arguments reversed.
Finally all the out macros are the same form as for Linux.
+ Replaced \r\n and \n\r in output strings with \n since putchar
now prints \r before \n. Then changed printf("\n") to putchar('\n').
Like Unix convention for strings now.
+ Got rid of test.c and Makefile rules connected with it.
+ Added patch to eepro100.c by Matt Hortman to correct PCI latency.
+ Merged in Marty Connor's ntulip.c. Now supports Macronix 98715 and
Linksys LNE100TX.
Released as Etherboot 4.2.12
+ Anders Larsen contributed mkQNXnbi, for generating tagged images from
QNX kernels.
+ Bernd Wiebelt contributed code to request vendor tags in DHCP.
+ Fixed more bugs introduced in 4.2.10 in code for handling bootp
extension files.
Released as Etherboot 4.2.13
+ Marty Connor reduced RTL8139 footprint by using only one transmit
buffer instead of 4. Now RTL8139 is reliable.
+ Moved initialised data declaration from ns8390.h to ns8390.c.
+ Contributed utilities for wake-on-LAN: wol.c (Bob Edwards) and wake.pl.
+ Makefile for 3c90xutil/romutil.c. -O is essential when compiling.
+ Happy year 2000!
Released as Etherboot 4.4.0
+ VIA-Rhine driver contributed by Paolo Marini. Footprint reduced by
Marty Connor.
+ Netgear FA310TX (Tulip clone, LC82C168 chip) support added by Marty
Connor.
+ Support for 3C905C added by Marty Connor.
+ mklnim updated to support SuSE 6.x also.
Released as Etherboot 4.4.1
+ New configuration file scheme to specify what ROMs are built.
+ Adam Fritzler contributed 3c529 (MCA version of 3c509) support in
driver.
+ Marty Connor wrote a version of 3c90xutil/romutil for 905C NICs.
+ Günter Knauf contributed a wake on LAN CGI script.
+ Notes in contrib/eepro100notes on how to flash the EEPROM.
+ Happy Australia Day, 2000-01-26.
Released as Etherboot 4.4.2
+ hwilmer AT gmx PERIOD de found a probe error in 3c507.c, shouldn't
mask memory size with 0xffffL, this fails with 64kB memory. Also
changed to use real-time-clock to timeout on initialisation of i82586
rather than relying on decrementing a variable (which is CPU speed
dependent).
+ James Pearson pointed out that ~ should be escaped as ˜ in
vendortags.sgml. Also cleaned up the 8-bit characters while I was at it.
+ Günter Knauf pointed out that if ASK_BOOT is defined, then key input
echos twice. Also, CR doesn't select the default. Problem was that getchar
converts all \r to \n then main.c was testing against \r instead of \n,
and also that getchar() was echoing when it should leave it to the caller.
Deleted code from getchar() and made it a function with no arguments.
Also sent me a new version of mp-form.pl with mp-form.txt. Also suggested
the good idea that the gateway and relay fields not be displayed if they
are not used.
+ Bob Edwards sent in patches to ntulip.c to autodetect 100 Mb media
for 21142/3 NICs.
+ Okuji Yoshinori found a small bug in main.c: for (retry1 = 0; retry < ..
Don't know what effect it had.
+ Klaus Espenlaub sent patches which make the RTL8139 driver more
reliable, see notes in rtl8139.c.
+ Russ Nelson gave permission to release cs89x0 driver with Etherboot.
It's normally under GPL. Moved cs89x0 driver to src directory, removed
cs89x0.sgml.
+ Clarified copyrights of files in distribution.
Released as Etherboot 4.4.3
+ Klaus Espenlaub sent in some patches to overcome the 64K block rollover
problem in tftp.
+ Bob Edwards, Paul Mackerras and Marty Connor worked out fixes to
ntulip.c to handle 21142/3 Tulips properly.
+ Karsten Tinnefeld sent in a Makefile fragment for doc/sgml/Makefile
to generate DVI and PS files using sgml2latex.
+ tulip.* renamed to otulip.*, ntulip.* renamed to tulip.*
+ Added FAQ and Writing an Etherboot Driver sections to README.
+ Woops, if and of swapped in dd command in atnetboot.sgml.
Released as Etherboot 4.4.4
+ FUKUHARA Makoto supplied a patch for 4.4.4 for FreeBSD ELF booting
with large tftp blocks which I missed putting in.
+ Small patch by Marty Connor to tulip.c to handle fast Tulips better.
+ Wrote small loader to load images from .com files.
+ Shusuke Nisiyama contributed a 3c595 (and may work for 3c590) driver.
Released as Etherboot 4.4.5
A major reorganisation by Klaus Espenlaub. Here are his notes, verbatim:
The biggest change is the almost rewritten Makefiles (both in src and in
doc - the one in doc is still reasonably simple). If you want to get
an overview - basically one Makefile now builds both /16 and /32 ROMs.
This involves quite a few make variables (similarly in Config), but it
should be mostly self-explaining. I also converted the suffix rules to
pattern rules, because it is the only way to keep the build directories
for /16 and /32 apart.
Generally all /32 code is compiled in bin32, all /16 code is compiled
in bin16, and the code that works for both is in bin.
The names (object files, images, but NOT the final ROMs) used during
the build process for some PCI cards have changed (especially lancepci
and nepci).
I eliminated the driver.a file by adding yet more ugly code to genrules.pl
(no, I'm not very proud of the code I added there - I hate perl, but
at least it works), which now generates all sorts of make rules and
dependency information. This eliminates the redundant recompile of all
other drivers if you specified a specific target at the make command line.
There are now automatic checks for the generated ROM size (3K safety
margin are used to allow for 1K BIOS EBDA and 2K stack). This should
avoid most of the cases in which the stack overwrites code and/or data,
causing strange crashes.
On to the real code - I rewrote both the ELF and a.out loading (the
blocksize is now properly handled for all formats), and now most of the
code is identical. Someone might want to merge the two. I verified that
both a.out and ELF FreeBSD loading still works by booting the FreeBSD
2.2.8 and 3.4 install kernels (the ELF kernel you gave me didn't work
for whatever reason). Actually I tested everything except NBI, but that
code is completely unchanged.
I eliminated config.h and created cards.h - just have a look and you
should get the idea. The PCI/ISA prototype matching hack is now buried
in there. All PCI drivers (and skel.c) have been converted to the new
include file.
The only file that is really new is nfs.c, which contains the code where
I started my journey.
The loader code is now merged into one file for both the normal and
compressed case. Some bugs have been fixed along the way (the normal
loader copied too much data, potentially crashing the machine). BTW: I
removed the block copy from comboot, because the first thing the loader
code does is - to copy the code to the right place. Also copying it to
0x80000 prevents compressed ROMs (though there is no way in the Makefile
to create such a beast). Also the stack changing code was wrong -
the overflow handling is missing: 0x9fxxxx-0x800000 is truncated to
fit in the 16 bit register, which is not quite what one would expect.
The stack pointer must be in the same segment, so for overflows just
load 0. Anyway, we don't need a new stack for 4 bytes (the return
address). Also the shifts won't work on an 8086/8088. The ROM segment
and length code is also done once more in loader.S. Finally the org
0x100 didn't work with my version of as86 - it prepended 256 null bytes.
Don't get me wrong - I see that comboot was just a quick and dirty hack.
It's now working...
I also fixed floppyload to read exactly the right amount of data (not
up to 65520 bytes more like the Linux code did) and ripped out some
unused code.
3c509.c: includes fixed, const added, static added, removed redundant code
3c90x.c: includes fixed, const added, shortened messages to save space,
made the transceiver selection bootrom fix optional (default: off),
updated 3c90x.txt
ansiesc.c: de-tftpified (now uses "download")
config.c: moved the driver prototypes to separate file, added a few const
cs89x0.c: ansified, const added, fixed timeout handling
eepro100.c: includes fixed, const added, static added, USE_INTERNAL_BUFFER
hack, passing globals as a parameter removed, timeout handling fixed,
comments fixed
epic100.c: comments fixed, const added, static added, USE_INTERNAL_BUFFER
hack, removed unused variables, changed debug code to use macro instead
of variable, allow broadcasts to be received (after all how did it
work before???)
etherboot.h: dual/serial console "cleanups", added NFS support, fixed
INTERNAL_BOOTP_DATA for pathologic cases, removed prototype within comment
(how did that end up there?), moved prototypes for config.c code here,
added consts all over the place
floppy.c: added static, changed cleanup code
floppyload.S: renamed from .asm
genrules.pl: I didn't write this :)
i82586.c: fixed includes, added const
lance.c: fixed DMA for PCI cards, removed leftovers from Linux driver,
USE_INTERNAL_BUFFER hack
linux-asm-io.h: added prototypes
linux-asm-string.h: added prototypes
loader.S: renamed from loader.asm, more comments see elsewhere in
this mail
loader.inc: removed
main.c: includes fixed, static and const added, Etherboot/32 now prints
relocaddr, hooks for NFS support, drain the Rx queue in some strategic
places (after sleep), changed interface to await_reply: timeout handling,
new cleanup code
misc.c: ansified, twiddle code changed, strcasecmp enabled for
Etherboot/16 (smaller than the 16 bit libc version), clear A20 before
kernel is started (only for NBI), dual console fixes, removed bogus
comment about interrupt enabling using iskey()
nic.h: include guard added, added const
ns8390.c: fixed includes for PCI version, added const, ansified, renamed
internal functions
osdep.h: removed #include <asm/byteorder.h> - probably all #ifdef
__linux__ and __FreeBSD__ may be removed now.
osloader.c: see elsewhere in this mail. removed loads of debugging code.
otulip.c: removed unused variables, USE_INTERNAL_BUFFER hack, ansified,
added const
otultip.h: added const
pci.c: fixed signed comparison