NANDBlaster fails on one machine repeatedly
Mitch Bradley
wmb at laptop.org
Wed Oct 7 14:24:37 EDT 2009
> I am using NANDBlaster to update all of our SFSU Lending Library XOs
> (a total of 12). All machines update via nb-secure to 8.2.1 except one
> XO, which repeatedly (five tries so far) fails to find the NANDBlaster
> info, cycles through all other options and says "Boot failed". It
> does update via USB key though.
>
> Suggestions for diagnosis?
>
>
The client code that discovers a NANDblaster session is shown below.
Additional supporting words can be seen at
http://tracker.coreboot.org/trac/openfirmware/browser/cpu/x86/pc/olpc/wifichannel.fth
: multinand-traffic? ( channel# -- flag )
start-mesh
" "(01 00 5e 7e 01 02)" " set-multicast" $call-wlan
d# 300 0 do
scan-buf d# 2048 " read" $call-wlan ( actual )
0> if ( )
scan-buf d# 12 + " XO" comp 0= if ( )
stop-mesh ( )
true unloop exit
then
then
1 ms
loop
stop-mesh
false
;
: search-channels ( -- true | chan# false )
channel-bounds do ( )
i channel-avail? if ( )
i multinand-traffic? if ( )
i unloop false exit
then ( )
then ( )
loop ( )
true
;
: find-multinand-server ( -- true | chan# false )
open-wlan
search-channels
close-wlan
;
: nandblaster ( -- )
find-multinand-server abort" No multicast NAND server" ( chan# )
#nb
;
The top-level word "nandblaster" is normally called from
"try-fs-update", which checks for an update image on USB storage, SD,
NANDblaster, and http in turn. try-fs-update is normally invoked by
game key.
Any of these words can be executed manually from the ok prompt. Also,
you can use the Forth debugger to step through the execution
interactively. http://wiki.laptop.org/go/Forth_Lesson_15 tells how to
use the debugger.
The operation of "find-multinand-server" should be self-explanatory.
"search-channels" probably needs some explanation. It really boils down
to calling "multinand-traffic?" for channels 1, 6, and 11 . The
complexity (outer loop over a range of channel numbers with an inner
"channel-avail?" filter) is due to the desire to support different
regulatory domains that may have different allowed frequencies.
"multinand-traffic?" is the main test for nandblaster activity on a
channel. If you happen to know that the sender is on channel 6, for
example, you could go directly to the test by writing:
ok open-wlan 6 multinand-traffic? . close-wlan
The result would be 0 for no traffic seen, ffffffff for traffic seen.
multinand-traffic? puts the wifi interface in mesh mode listening to a
specific multicast address, then tries to receive Ethernet frames,
looking for one whose Ethernet type field has the value "XO".
Here is a recipe for starting the debugger to step through the main
event. Replace 6 with the channel number - either 1, 6, or d# 11 (if
you just type 11 you will get 0x11).
ok debug multinand-traffic?
ok open-wlan 6 multinand-traffic? . close-wlan
Type space to step through.
More information about the Devel
mailing list