Flashing LinuxBIOS on A-Test Boards: Difference between revisions

From OLPC
Jump to navigation Jump to search
(Moved from the LinuxBIOS page)
 
(Add link to the ROM chips from the Building page)
Line 5: Line 5:
The instructions here are for the A test boards. You can place an PLCC EEPROM into the (only) socket on the A test board, flash it with LinuxBIOS, and on reboot boot from the EEPROM chip
The instructions here are for the A test boards. You can place an PLCC EEPROM into the (only) socket on the A test board, flash it with LinuxBIOS, and on reboot boot from the EEPROM chip
containing your newly flashed LinuxBIOS. For now, this only covers flashing a PLCC chip.
containing your newly flashed LinuxBIOS. For now, this only covers flashing a PLCC chip.

== Hardware ==

Currently there isn't any sane way to flash the ROM to the serial flash on the OLPC board without running a huge risk of bricking it. The only way to try out
the ROM image right now is to write the image to a PLCC ROM chip and use that in the PLCC socket on the Rev A boards.

You will want to use 8Mbit ROM chips, like
[https://www.em.avnet.com/pns/home/0,5533,CID%253D0%2526CCD%253DUSA%2526SID%253D0%2526DID%253DDF2%2526LID%253D0%2526BID%253DDF2%2526CTP%253DPNS,00.html?ref=https://emwcs.avnet.com/webapp/wcs/stores/servlet/RemoteAdvancedSearchView?langId=-1&storeId=500201&catalogId=500201&manufacturerPartNum=SST49LF008A-33-4C-NH these].


== Building the Flashrom Utility ==
== Building the Flashrom Utility ==

===Boot with normal BIOS and setup toolchain===
===Boot with normal BIOS and setup toolchain===



Revision as of 00:15, 10 August 2006

Warnings

YOU CAN BRICK YOUR MACHINE IF YOU FOLLOW ANY OF THESE STEPS!

The instructions here are for the A test boards. You can place an PLCC EEPROM into the (only) socket on the A test board, flash it with LinuxBIOS, and on reboot boot from the EEPROM chip containing your newly flashed LinuxBIOS. For now, this only covers flashing a PLCC chip.

Hardware

Currently there isn't any sane way to flash the ROM to the serial flash on the OLPC board without running a huge risk of bricking it. The only way to try out the ROM image right now is to write the image to a PLCC ROM chip and use that in the PLCC socket on the Rev A boards.

You will want to use 8Mbit ROM chips, like these.

Building the Flashrom Utility

Boot with normal BIOS and setup toolchain

Use your normal serial BIOS (currently, by Insyde Software) to boot into a Linux distribution. You'll need to build some software before you can flash your EEPROM chip with LinuxBIOS.

rdmsr

Build the rdmsr (read MSR) tool by Ron Minnich:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    unsigned char buf[8];
    int fd_msr, i;
    unsigned long addr = 0;

    if (argc < 2) {
        printf("usage:rdmsr reg\n");
        exit(1);
    }
    addr = strtoul(argv[1], NULL, 0);

    fd_msr = open("/dev/cpu/0/msr", O_RDONLY);
    lseek(fd_msr, addr, SEEK_SET);
    read(fd_msr, buf, 8);

    printf("MSR register 0x%lx => ", addr);
    for (i = 7; i > 0; i--)
        printf("%2.2x:", buf[i]);
    printf("%2.2x\n", buf[i]);

    return(0);
}

with:

% gcc rdmsr.c -o rdmsr

wrmsr

Build the wrmsr (write MSR) tool (also by Ron Minnich):

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    unsigned char buf[8], *p;
    int fd_msr, i;
    unsigned long addr = 0;

    if (argc < 3) {
        printf("usage:wrmsr reg value\n");
        exit(1);
    }
    addr = strtoul(argv[1], NULL, 0);
    p = argv[2];

    printf("MSR register 0x%lx => ", addr);
    for (i = 7; i > 0; i--) {
        buf[i] = strtol(p, &p, 16);
        p++;
        printf("%2.2x:", buf[i]);
    }
    buf[i] = strtol(p, &p, 16);
    printf("%2.2x\n", buf[i]);

    fd_msr = open("/dev/cpu/0/msr", O_WRONLY);
    lseek(fd_msr, addr, SEEK_SET);
    if (write(fd_msr, buf, 8) < 0)
        perror("");

    return(0);
}

with:

% gcc wrmsr.c -o wrmsr

flashrom

Download the latest LinuxBIOS snapshot to get the flashrom utility. Unpack the archive, and go into the util/flashrom directory. After making sure you have your distribution's pciutils and pcituils-dev package installed, run make. This will build the flashrom utility; copy it into a convenient location (such as /usr/local/bin).

Using Flashrom