mirror of
https://github.com/memtest86plus/memtest86plus.git
synced 2024-11-23 08:26:23 -06:00
Rename to Memtest86+ v6.0.
This commit is contained in:
parent
0075375632
commit
d04ec9f681
83
README.md
83
README.md
@ -1,10 +1,10 @@
|
||||
# PCMemTest
|
||||
# Memtest86+
|
||||
|
||||
PCMemTest is a stand-alone memory tester for x86 and x86-64 architecture
|
||||
Memtest86+ is a stand-alone memory tester for x86 and x86-64 architecture
|
||||
computers. It provides a more thorough memory check than that provided by
|
||||
BIOS memory tests.
|
||||
|
||||
PCMemTest can be loaded and run either directly by a PC BIOS (legacy or UEFI)
|
||||
Memtest86+ can be loaded and run either directly by a PC BIOS (legacy or UEFI)
|
||||
or via an intermediate bootloader that supports the Linux 16-bit, 32-bit,
|
||||
64-bit, or EFI handover boot protocol. It should work on any Pentium class or
|
||||
later 32-bit or 64-bit CPU.
|
||||
@ -21,34 +21,32 @@ later 32-bit or 64-bit CPU.
|
||||
* [Trouble-shooting Memory Errors](#trouble-shooting-memory-errors)
|
||||
* [Execution Time](#execution-time)
|
||||
* [Memory Testing Philosophy](#memory-testing-philosophy)
|
||||
* [PCMemTest Test Algorithms](#pcmemtest-test-algorithms)
|
||||
* [Memtest86+ Test Algorithms](#memtest86+-test-algorithms)
|
||||
* [Individual Test Descriptions](#individual-test-descriptions)
|
||||
* [Known Limitations and Bugs](#known-limitations-and-bugs)
|
||||
* [Acknowledgments](#acknowledgments)
|
||||
|
||||
## Origins
|
||||
|
||||
PCMemTest is a fork and rewrite of Memtest86+, which in turn was a fork of
|
||||
Memtest86. The purpose of the rewrite was to:
|
||||
Memtest86+ v6.0 was based on PCMemTest, which was a fork and rewrite of the
|
||||
earlier Memtest86+ v5.01, which in turn was a fork of Memtest86. The purpose
|
||||
of the PCMemTest rewrite was to:
|
||||
|
||||
* make the code more readable and easier to maintain
|
||||
* make the code 64-bit clean and support UEFI boot
|
||||
* fix failures seen when building with newer versions of GCC
|
||||
|
||||
In the process, a number of features of Memtest86+ that are not required for
|
||||
the main purpose of PCMemTest (testing the system memory) have been dropped.
|
||||
In particular, no attempt is made to measure the cache and main memory speed,
|
||||
or to identify and report the DRAM type. This should allow PCMemTest to work
|
||||
without modification on future hardware.
|
||||
|
||||
PCMemTest is based on the v5.01 release of Memtest86+, which was the last
|
||||
public release at the time of the fork.
|
||||
In the process of creating PCMemTest, a number of features of Memtest86+ v5.01
|
||||
that were not strictly required for testing the system memory were dropped. In
|
||||
particular, no attempt is made to measure the cache and main memory speed, or
|
||||
to identify and report the DRAM type. Some of these features will be added back
|
||||
in future releases.
|
||||
|
||||
## Licensing
|
||||
|
||||
PCMemTest is released under the terms of the GNU General Public License version
|
||||
2 (GPLv2). Other than the provisions of the GPL there are no restrictions for
|
||||
use, private or commercial. See the LICENSE file for details.
|
||||
Memtest86+ is released under the terms of the GNU General Public License
|
||||
version 2 (GPLv2). Other than the provisions of the GPL there are no
|
||||
restrictions for use, private or commercial. See the LICENSE file for details.
|
||||
|
||||
## Build and Installation
|
||||
|
||||
@ -92,8 +90,8 @@ When using an intermediate bootloader, either the `memtest.bin` file or the
|
||||
access, and the bootloader configuration should be updated to boot from
|
||||
that file as if it were a Linux kernel with no initial RAM disk. Several
|
||||
boot command line options are recognised, as described below. If using the
|
||||
16-bit boot protocol, PCMemTest will use the display in text mode (640x400).
|
||||
If using the 32-bit or 64-bit boot protocols, PCMemTest will use the display
|
||||
16-bit boot protocol, Memtest86+ will use the display in text mode (640x400).
|
||||
If using the 32-bit or 64-bit boot protocols, Memtest86+ will use the display
|
||||
in either text mode or graphics mode, as specified in the `boot_params` struct
|
||||
passed to it by the bootloader. If in graphics mode, the supplied framebuffer
|
||||
must be at least 640x400 pixels; if larger, the display will be centred. If
|
||||
@ -107,12 +105,12 @@ on your build system. You may need to adjust some path and file names in
|
||||
the make file to match the naming on your system.
|
||||
|
||||
The GRUB configuration files contained in the `grub` directory are there for
|
||||
use on the test ISO, but also serve as an example of how to boot PCMemTest
|
||||
use on the test ISO, but also serve as an example of how to boot Memtest86+
|
||||
from GRUB.
|
||||
|
||||
## Boot Options
|
||||
|
||||
An intermediate bootloader may pass a boot command line to PCMemTest. The
|
||||
An intermediate bootloader may pass a boot command line to Memtest86+. The
|
||||
command line may contain one or more options, separated by spaces. Each
|
||||
option consists of an option name, optionally followed by an `=` sign and
|
||||
one or more parameters, separated by commas. The following options are
|
||||
@ -130,7 +128,7 @@ recognised:
|
||||
|
||||
## Keyboard Selection
|
||||
|
||||
PCMemTest supports both the legacy keyboard interface (using I/O ports 0x60
|
||||
Memtest86+ supports both the legacy keyboard interface (using I/O ports 0x60
|
||||
and 0x64) and USB keyboards (using its own USB device drivers). One or the
|
||||
other can be selected via the boot command line, If neither is selected, the
|
||||
default is to use both. An additional option on the boot command line is
|
||||
@ -139,7 +137,7 @@ older USB devices.
|
||||
|
||||
Older BIOSs usually support USB legacy keyboard emulation, which makes USB
|
||||
keyboards act like legacy keyboards connected to ports 0x60 and 0x64. This
|
||||
can often be enabled or disabled in the BIOS setup menus. If PCMemTest's
|
||||
can often be enabled or disabled in the BIOS setup menus. If Memtest86+'s
|
||||
USB device drivers are enabled, they will override this and access any USB
|
||||
keyboards directly. The downside of that is that the USB controllers and
|
||||
device drivers require some memory to be reserved for their private use,
|
||||
@ -151,17 +149,17 @@ emulation and add `keyboard=legacy` on the boot command line.
|
||||
you enable the Compatibility System Module (CSM) in the BIOS setup. Others
|
||||
only support it when actually booting in legacy mode.
|
||||
|
||||
**NOTE**: PCMemTest's USB device drivers are work in progress. Not all USB
|
||||
devices are supported yet.
|
||||
**NOTE**: Memtest86+'s USB device drivers are work in progress. Not all USB
|
||||
devices are supported yet, and there may be problems on some hardware.
|
||||
|
||||
## Operation
|
||||
|
||||
Once booted, PCMemTest will initialise its display, then pause for a few
|
||||
Once booted, Memtest86+ will initialise its display, then pause for a few
|
||||
seconds to allow the user to configure its operation. If no key is pressed,
|
||||
it will automatically start running all tests using a single CPU core,
|
||||
continuing indefinitely until the user reboots or halts the machine.
|
||||
|
||||
At startup, and when running tests, PCMemTest responds to the following keys:
|
||||
At startup, and when running tests, Memtest86+ responds to the following keys:
|
||||
|
||||
* F1
|
||||
* enters the configuration menu
|
||||
@ -281,7 +279,7 @@ results.
|
||||
|
||||
## Trouble-shooting Memory Errors
|
||||
|
||||
Please be aware that not all errors reported by PCMemTest are due to bad
|
||||
Please be aware that not all errors reported by Memtest86+ are due to bad
|
||||
memory. The test implicitly tests the CPU, caches, and motherboard. It is
|
||||
impossible for the test to determine what causes the failure to occur. Most
|
||||
failures will be due to a problem with memory. When it is not, the only option
|
||||
@ -320,8 +318,8 @@ module may work fine in one system and not in another. This is not uncommon
|
||||
and is a source of confusion. The components are not necessarily bad but
|
||||
certain combinations may need to be avoided.
|
||||
|
||||
In the vast majority of cases errors reported by PCMemTest are valid. There
|
||||
are some systems that cause PCMemTest to be confused about the size of memory
|
||||
In the vast majority of cases errors reported by Memtest86+ are valid. There
|
||||
are some systems that cause Memtest86+ to be confused about the size of memory
|
||||
and it will try to test non-existent memory. This will cause a large number of
|
||||
consecutive addresses to be reported as bad and generally there will be many
|
||||
bits in error. If you have a relatively small number of failing addresses and
|
||||
@ -332,14 +330,14 @@ All valid memory errors should be corrected. It is possible that a particular
|
||||
error will never show up in normal operation. However, operating with marginal
|
||||
memory is risky and can result in data loss and even disk corruption.
|
||||
|
||||
PCMemTest can not diagnose many types of PC failures. For example a faulty CPU
|
||||
that causes your OS to crash will most likely just cause PCMemTest to crash in
|
||||
Memtest86+ can not diagnose many types of PC failures. For example a faulty CPU
|
||||
that causes your OS to crash will most likely just cause Memtest86+ to crash in
|
||||
the same way.
|
||||
|
||||
## Execution Time
|
||||
|
||||
The time required for a complete pass of PCMemTest will vary greatly depending
|
||||
on CPU speed, memory speed, and memory size. PCMemTest executes indefinitely.
|
||||
The time required for a complete pass of Memtest86+ will vary greatly depending
|
||||
on CPU speed, memory speed, and memory size. Memtest86+ executes indefinitely.
|
||||
The pass counter increments each time that all of the selected tests have been
|
||||
run. Generally a single pass is sufficient to catch all but the most obscure
|
||||
errors. However, for complete confidence when intermittent errors are suspected
|
||||
@ -370,9 +368,9 @@ number of possible chip layouts for different chip types and manufacturers
|
||||
making this strategy impractical. However, there are testing algorithms that
|
||||
can approximate this ideal strategy.
|
||||
|
||||
## PCMemTest Test Algorithms
|
||||
## Memtest86+ Test Algorithms
|
||||
|
||||
PCMemTest uses two algorithms that provide a reasonable approximation of the
|
||||
Memtest86+ uses two algorithms that provide a reasonable approximation of the
|
||||
ideal test strategy above. The first of these strategies is called moving
|
||||
inversions. The moving inversion tests work as follows:
|
||||
|
||||
@ -419,7 +417,7 @@ strides may be more effective but would take longer to execute. The choice of
|
||||
|
||||
## Individual Test Descriptions
|
||||
|
||||
PCMemTest executes a series of numbered tests to check for errors. These tests
|
||||
Memtest86+ executes a series of numbered tests to check for errors. These tests
|
||||
consist of a combination of test algorithm, data pattern and caching. The
|
||||
execution order for these tests were arranged so that errors will be detected
|
||||
as rapidly as possible. A description of each test follows.
|
||||
@ -515,22 +513,23 @@ of all zeros and all ones.
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
PCMemTest was based on Memtest86+, developed by Samuel Demeulemeester, which
|
||||
in turn was based on Memtest86, developed by Chris Brady with the resources
|
||||
and assistance listed below:
|
||||
Memtest86+ v6.0 was based on PCMemTest, developed by Martin Whitaker, which
|
||||
was based on Memtest86+ v5.01, developed by Samuel Demeulemeester, which in
|
||||
turn was based on Memtest86, developed by Chris Brady with the resources and
|
||||
assistance listed below:
|
||||
|
||||
* The initial versions of the source files bootsect.S, setup.S, head.S and
|
||||
build.c are from the Linux 1.2.1 kernel and have been heavily modified.
|
||||
|
||||
* Doug Sisk provided code to support a console connected via a serial port.
|
||||
(not used by PCMemTest)
|
||||
(not currently used)
|
||||
|
||||
* Code to create BadRAM patterns was provided by Rick van Rein.
|
||||
|
||||
* The block move test is based on Robert Redelmeier's burnBX test.
|
||||
|
||||
* Screen buffer code was provided by Jani Averbach.
|
||||
(not used by PCMemTest)
|
||||
(not used by Memtest86+ v6.0)
|
||||
|
||||
* Eric Biederman provided all of the feature content for version 3.0
|
||||
plus many bugfixes and significant code cleanup.
|
||||
|
@ -71,9 +71,9 @@ void display_init(void)
|
||||
set_background_colour(WHITE);
|
||||
clear_screen_region(0, 0, 0, 27);
|
||||
#if TESTWORD_WIDTH > 32
|
||||
prints( 0, 0, " PCMemTest-64 v1.6-devel");
|
||||
prints(0, 0, " Memtest86+64 v6.0pre");
|
||||
#else
|
||||
prints( 0, 0, " PCMemTest-32 v1.6-devel");
|
||||
prints(0, 0, " Memtest86+32 v6.0pre");
|
||||
#endif
|
||||
set_foreground_colour(WHITE);
|
||||
set_background_colour(BLUE);
|
||||
|
@ -345,7 +345,7 @@ sectors:
|
||||
.word 0
|
||||
|
||||
boot_msg:
|
||||
.ascii "Loading PCMemTest"
|
||||
.ascii "Loading Memtest86+"
|
||||
boot_msg_end:
|
||||
|
||||
# Emulate the Linux boot header, to allow loading by intermediate boot loaders.
|
||||
|
@ -163,7 +163,7 @@ dap_lba_start:
|
||||
.quad 0
|
||||
|
||||
boot_msg:
|
||||
.ascii "Loading PCMemTest\r\n"
|
||||
.ascii "Loading Memtest86+\r\n"
|
||||
boot_msg_end:
|
||||
|
||||
error_msg:
|
||||
|
@ -129,7 +129,7 @@ esp.img: memtest.efi
|
||||
memtest.iso: memtest.mbr floppy.img esp.img
|
||||
@mkdir -p iso/boot
|
||||
cp floppy.img iso/boot/floppy.img
|
||||
xorrisofs -pad -R -J -volid PCMemTest32 -graft-points -hide-rr-moved --grub2-mbr memtest.mbr \
|
||||
xorrisofs -pad -R -J -volid Memtest86+32 -graft-points -hide-rr-moved --grub2-mbr memtest.mbr \
|
||||
-b /boot/floppy.img --efi-boot --interval:appended_partition_2:all:: \
|
||||
-part_like_isohybrid -iso_mbr_part_type 0x00 -append_partition 2 0xef ./esp.img \
|
||||
-o ./memtest.iso /boot=./iso/boot /EFI=./iso/EFI
|
||||
@ -167,7 +167,7 @@ grub-bootia32.efi:
|
||||
|
||||
grub-esp.img: memtest.efi grub-bootia32.efi ../grub/grub-efi.cfg
|
||||
@mkdir -p grub-iso/EFI/BOOT/grub/i386-efi grub-iso/EFI/BOOT/grub/fonts
|
||||
cp memtest.efi grub-iso/EFI/BOOT/pcmemtest
|
||||
cp memtest.efi grub-iso/EFI/BOOT/memtest
|
||||
cp grub-bootia32.efi grub-iso/EFI/BOOT/bootia32.efi
|
||||
cp ../grub/grub-efi.cfg grub-iso/EFI/BOOT/grub/grub.cfg
|
||||
cp $(GRUB_FONT_DIR)/unicode.pf2 grub-iso/EFI/BOOT/grub/fonts/
|
||||
@ -178,12 +178,12 @@ grub-esp.img: memtest.efi grub-bootia32.efi ../grub/grub-efi.cfg
|
||||
|
||||
grub-memtest.iso: memtest.bin grub-eltorito.img ../grub/grub-legacy.cfg grub-esp.img
|
||||
@mkdir -p grub-iso/boot/grub/i386-pc grub-iso/boot/grub/fonts
|
||||
cp memtest.bin grub-iso/boot/pcmemtest
|
||||
cp memtest.bin grub-iso/boot/memtest
|
||||
cp grub-eltorito.img grub-iso/boot/eltorito.img
|
||||
cp ../grub/grub-legacy.cfg grub-iso/boot/grub/grub.cfg
|
||||
cp $(GRUB_FONT_DIR)/unicode.pf2 grub-iso/boot/grub/fonts/
|
||||
cp $(GRUB_LIB_DIR)/i386-pc/*.mod grub-iso/boot/grub/i386-pc/
|
||||
xorrisofs -pad -R -J -volid PCMemTest64 -graft-points -hide-rr-moved \
|
||||
xorrisofs -pad -R -J -volid Memtest86+32 -graft-points -hide-rr-moved \
|
||||
--grub2-mbr $(GRUB_LIB_DIR)/i386-pc/boot_hybrid.img \
|
||||
-b /boot/eltorito.img -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
|
||||
--efi-boot --interval:appended_partition_2:all:: \
|
||||
|
@ -128,7 +128,7 @@ esp.img: memtest.efi
|
||||
memtest.iso: memtest.mbr floppy.img esp.img
|
||||
@mkdir -p iso/boot
|
||||
cp floppy.img iso/boot/floppy.img
|
||||
xorrisofs -pad -R -J -volid PCMemTest64 -graft-points -hide-rr-moved --grub2-mbr memtest.mbr \
|
||||
xorrisofs -pad -R -J -volid Memtest86+64 -graft-points -hide-rr-moved --grub2-mbr memtest.mbr \
|
||||
-b /boot/floppy.img --efi-boot --interval:appended_partition_2:all:: \
|
||||
-part_like_isohybrid -iso_mbr_part_type 0x00 -append_partition 2 0xef ./esp.img \
|
||||
-o ./memtest.iso /boot=./iso/boot /EFI=./iso/EFI
|
||||
@ -166,7 +166,7 @@ grub-bootx64.efi:
|
||||
|
||||
grub-esp.img: memtest.efi grub-bootx64.efi ../grub/grub-efi.cfg
|
||||
@mkdir -p grub-iso/EFI/BOOT/grub/x86_64-efi grub-iso/EFI/BOOT/grub/fonts
|
||||
cp memtest.efi grub-iso/EFI/BOOT/pcmemtest
|
||||
cp memtest.efi grub-iso/EFI/BOOT/memtest
|
||||
cp grub-bootx64.efi grub-iso/EFI/BOOT/bootx64.efi
|
||||
cp ../grub/grub-efi.cfg grub-iso/EFI/BOOT/grub/grub.cfg
|
||||
cp $(GRUB_FONT_DIR)/unicode.pf2 grub-iso/EFI/BOOT/grub/fonts/
|
||||
@ -177,12 +177,12 @@ grub-esp.img: memtest.efi grub-bootx64.efi ../grub/grub-efi.cfg
|
||||
|
||||
grub-memtest.iso: memtest.bin grub-eltorito.img ../grub/grub-legacy.cfg grub-esp.img
|
||||
@mkdir -p grub-iso/boot/grub/i386-pc grub-iso/boot/grub/fonts
|
||||
cp memtest.bin grub-iso/boot/pcmemtest
|
||||
cp memtest.bin grub-iso/boot/memtest
|
||||
cp grub-eltorito.img grub-iso/boot/eltorito.img
|
||||
cp ../grub/grub-legacy.cfg grub-iso/boot/grub/grub.cfg
|
||||
cp $(GRUB_FONT_DIR)/unicode.pf2 grub-iso/boot/grub/fonts/
|
||||
cp $(GRUB_LIB_DIR)/i386-pc/*.mod grub-iso/boot/grub/i386-pc/
|
||||
xorrisofs -pad -R -J -volid PCMemTest64 -graft-points -hide-rr-moved \
|
||||
xorrisofs -pad -R -J -volid Memtest86+64 -graft-points -hide-rr-moved \
|
||||
--grub2-mbr $(GRUB_LIB_DIR)/i386-pc/boot_hybrid.img \
|
||||
-b /boot/eltorito.img -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
|
||||
--efi-boot --interval:appended_partition_2:all:: \
|
||||
|
@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
|
||||
# title of most generated pages and in a few other places.
|
||||
# The default value is: My Project.
|
||||
|
||||
PROJECT_NAME = "PCMemTest"
|
||||
PROJECT_NAME = "Memtest86+"
|
||||
|
||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Developer's Guide
|
||||
|
||||
This is the developer's guide to the PCMemTest source code. The user's guide
|
||||
This is the developer's guide to the Memtest86+ source code. The user's guide
|
||||
can be found in the README.md file in the top level directory.
|
||||
|
||||
## Code Organisation
|
||||
@ -14,12 +14,12 @@ subdirectory of the same name:
|
||||
|
||||
* boot
|
||||
|
||||
The code that transitions from the BIOS or bootloader entry point to the
|
||||
The code that runs from the BIOS or bootloader entry point to the
|
||||
start of the main application.
|
||||
|
||||
* lib
|
||||
|
||||
The subset of the C standard library that is used by PCMemTest plus other
|
||||
The subset of the C standard library that is used by Memtest86+ plus other
|
||||
hardware-independent low-level support functions.
|
||||
|
||||
* system
|
||||
@ -31,7 +31,7 @@ subdirectory of the same name:
|
||||
The individual memory tests.
|
||||
|
||||
The boot code is mostly written in AT&T syntax x86 assembly language. The
|
||||
remaining code is written in C.
|
||||
remaining code is written in C with a smattering of inline assembly code.
|
||||
|
||||
Each category is further subdivided into multiple source files, splitting the
|
||||
code into small units of closely related functionality. For the C code, the
|
||||
|
@ -11,12 +11,12 @@ insmod linux
|
||||
insmod linuxefi
|
||||
insmod linux32
|
||||
|
||||
menuentry "Start PCMemTest using 'linux' command" {
|
||||
linux /EFI/BOOT/pcmemtest
|
||||
menuentry "Start Memtest86+ using 'linux' command" {
|
||||
linux /EFI/BOOT/memtest
|
||||
}
|
||||
menuentry "Start PCMemTest using 'linuxefi' command" {
|
||||
linuxefi /EFI/BOOT/pcmemtest
|
||||
menuentry "Start Memtest86+ using 'linuxefi' command" {
|
||||
linuxefi /EFI/BOOT/memtest
|
||||
}
|
||||
menuentry "Start PCMemTest using 'linux32' command" {
|
||||
linux32 /EFI/BOOT/pcmemtest
|
||||
menuentry "Start Memtest86+ using 'linux32' command" {
|
||||
linux32 /EFI/BOOT/memtest
|
||||
}
|
||||
|
@ -11,12 +11,12 @@ insmod linux
|
||||
insmod linux16
|
||||
insmod linux32
|
||||
|
||||
menuentry "Start PCMemTest using 'linux' command" {
|
||||
linux /boot/pcmemtest
|
||||
menuentry "Start Memtest86+ using 'linux' command" {
|
||||
linux /boot/memtest
|
||||
}
|
||||
menuentry "Start PCMemTest using 'linux16' command" {
|
||||
linux16 /boot/pcmemtest
|
||||
menuentry "Start Memtest86+ using 'linux16' command" {
|
||||
linux16 /boot/memtest
|
||||
}
|
||||
menuentry "Start PCMemTest using 'linux32' command" {
|
||||
linux32 /boot/pcmemtest
|
||||
menuentry "Start Memtest86+ using 'linux32' command" {
|
||||
linux32 /boot/memtest
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user