Mettre un bootloader sur un atmega168 avec un Mac

En ouvrant une console, et en mettant un code du genre :

avrdude -p m168 -c stk500 -P /dev/tty.usbserial-A1001N2Y -i5 .....

J'arrive a avoir une liaison avec ma plaque.

Maintenant il me reste à trouver comment mettre mon bootloader .

en fait ni la distribution de uisp ni celle de avrdude ne fonctionne d'office avec le mode bit bang.
Il te faut donc :

  • récupérer le source (facile)
  • le modifier en appliquant un patch (facile)
  • le compiler (et la c'est pas forcément une partie de plaisir).

c'est déja bon tu arrives a accéder a ta plaque en ligne de commande mais il te reste maintenant a compiler un avrdude pour avoir une commande du genre (avrdude -c ftbb)

Nicolas

Donc si j'ai bien compris il faut que je trouve le code source de Avrdude que j'ai installer, que j'y rajoute un patch et que je recompile le tout ?

La commande que tu dis serait celle qui permet de faire un bit bang ?

Est-ce que ça peux être un fichier qui s'apelle ATmegaBOOT_168.c ?

Je sens que je vais encore y passé quelques soirées ::slight_smile:

non ce fichier est le code source du bootloader qui une fois compilé est a flasher sur l'atmega a l'aide du programmer que tu es en train de construire.

le patch se trouve par la je pense AVR Downloader/UploaDEr - Patches: patch #4330, Adds experimental FTDI bit bang... [Savannah] mais ca doit aller avec une version d'avrdude particuliere

Nicolas

Je dois télécharger les 5 fichiers joints ?

Dans la discussion qui se trouve sur la page que tu m'as indiquée Thomas Fischl parle d'un test qu'il aurait effectué avec Mac osx.

Ceci mis à part j'ai downloadé les 5 fichiers, il me semblent qu'ils sont complémentaires.

Est ce que la méthode bitbang fait passer le bootloader bit par bit ?
si c'est le cas cela doit prendre un certain temps à faire un "burn".

mais ca doit aller avec une version d'avrdude particuliere

Si je me réfère aux dates sur cette page la version avrdude pour ce patch serait la 5.2 ou la 5.3.1 :-?

J'ai trouvé un fichier avrdude.conf avec ça dedans :

...

#
#   programmer
#       id       = <id1> [, <id2> [, <id3>] ...] ;  # <idN> are quoted strings
#       desc     = <description> ;                  # quoted string
#       type     = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic |
#                  avr910 | butterfly | usbasp |
#                  jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw |
#                  dragon_dw | dragon_jtag | dragon_isp | dragon_pp |
#                  dragon_hvsp; # programmer type
#       baudrate = <num> ;                          # baudrate for avr910-programmer
#       vcc      = <num1> [, <num2> ... ] ;         # pin number(s)
#       reset    = <num> ;                          # pin number
#       sck      = <num> ;                          # pin number
#       mosi     = <num> ;                          # pin number
#       miso     = <num> ;                          # pin number
#       errled   = <num> ;                          # pin number
#       rdyled   = <num> ;                          # pin number
#       pgmled   = <num> ;                          # pin number
#       vfyled   = <num> ;                          # pin number

...

Qu'est-ce que c'est ce fichier?

Dans le même fichier j'ai trouvé ça :

#------------------------------------------------------------
# ATmega168
#------------------------------------------------------------

part
    id              = "m168";
    desc            = "ATMEGA168";
     has_debugwire = yes;
     flash_instr   = 0xB6, 0x01, 0x11;
     eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
                   0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
                   0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode  = 0x86;
    # avr910_devcode = 0x;
    signature       = 0x1e 0x94 0x06;
    pagel           = 0xd7;
    bs2             = 0xc2;
    chip_erase_delay = 9000;
    pgm_enable       = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
                       "x x x x x x x x x x x x x x x x";

    chip_erase       = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
                       "x x x x x x x x x x x x x x x x";

    timeout         = 200;
    stabdelay       = 100;
    cmdexedelay     = 25;
    synchloops      = 32;
    bytedelay       = 0;
    pollindex       = 3;
    pollvalue       = 0x53;
    predelay        = 1;
    postdelay       = 1;
    pollmethod      = 1;

    pp_controlstack     =
      0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
      0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
      0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
      0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay    = 100;
    progmodedelay       = 0;
    latchcycles         = 5;
    togglevtg           = 1;
    poweroffdelay       = 15;
    resetdelayms        = 1;
    resetdelayus        = 0;
    hvleavestabdelay    = 15;
    resetdelay          = 15;
    chiperasepulsewidth = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    memory "eeprom"
        paged           = no;
        page_size       = 4;
        size            = 512;
        min_write_delay = 3600;
        max_write_delay = 3600;
        readback_p1     = 0xff;
        readback_p2     = 0xff;
        read            = " 1 0 1 0 0 0 0 0",
                          " 0 0 0 x x x x a8",
                          " a7 a6 a5 a4 a3 a2 a1 a0",
                          " o o o o o o o o";
    
        write           = " 1 1 0 0 0 0 0 0",
                          " 0 0 0 x x x x a8",
                          " a7 a6 a5 a4 a3 a2 a1 a0",
                          " i i i i i i i i";

      loadpage_lo      = "  1   1   0   0      0   0   0   1",
                    "  0   0   0   0      0   0   0   0",
                    "  0   0   0   0      0   0  a1  a0",
                    "  i   i   i   i      i   i   i   i";

      writepage      = "  1   1   0   0      0   0   1   0",
                    "  0   0   x   x      x   x   x  a8",
                    " a7  a6  a5  a4     a3  a2   0   0",
                    "  x   x   x   x      x   x   x   x";

      mode            = 0x41;
      delay            = 5;
      blocksize      = 4;
      readsize      = 256;
        ;

    memory "flash"
        paged           = yes;
        size            = 16384;
        page_size       = 128;
        num_pages       = 128;
        min_write_delay = 4500;
        max_write_delay = 4500;
        readback_p1     = 0xff;
        readback_p2     = 0xff;
        read_lo         = " 0 0 1 0 0 0 0 0",
                          " 0 0 0 a12 a11 a10 a9 a8",
                          " a7 a6 a5 a4 a3 a2 a1 a0",
                          " o o o o o o o o";
        
        read_hi          = " 0 0 1 0 1 0 0 0",
                           " 0 0 0 a12 a11 a10 a9 a8",
                           " a7 a6 a5 a4 a3 a2 a1 a0",
                           " o o o o o o o o";
        
        loadpage_lo     = " 0 1 0 0 0 0 0 0",
                          " 0 0 0 x x x x x",
                          " x x a5 a4 a3 a2 a1 a0",
                          " i i i i i i i i";
        
        loadpage_hi     = " 0 1 0 0 1 0 0 0",
                          " 0 0 0 x x x x x",
                          " x x a5 a4 a3 a2 a1 a0",
                          " i i i i i i i i";
        
        writepage       = " 0 1 0 0 1 1 0 0",
                          " 0 0 0 a12 a11 a10 a9 a8",
                          " a7 a6 x x x x x x",
                          " x x x x x x x x";

        mode        = 0x41;
        delay       = 6;
        blocksize   = 128;
        readsize    = 256;

        ;
        
    memory "lfuse"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
                          "x x x x x x x x o o o o o o o o";
        
        write           = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
                          "x x x x x x x x i i i i i i i i";
        ;
    
    memory "hfuse"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
                          "x x x x x x x x o o o o o o o o";
        
        write           = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
                          "x x x x x x x x i i i i i i i i";
        ;
    
    memory "efuse"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
                          "x x x x x x x x x x x x x o o o";
        
        write           = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
                          "x x x x x x x x x x x x x i i i";
        ;
    
    memory "lock"
        size            = 1;
        min_write_delay = 4500;
        max_write_delay = 4500;
        read            = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
                          "x x x x x x x x x x o o o o o o";
        
        write           = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
                          "x x x x x x x x 1 1 i i i i i i";
        ;
    
    memory "calibration"
        size            = 1;
        read            = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
                          "0 0 0 0 0 0 0 0 o o o o o o o o";
        ;
    
    memory "signature"
        size            = 3;
        read            = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
                          "x x x x x x a1 a0 o o o o o o o o";
        ;
;

J'ai compris que ça se rapporte au Mega168 (c'était pas dur à deviner.. ;D) mais j'aimerais savoir ce que cela indique.

Pour le code source que je dois patcher où est ce qu'il devrait se trouver ?

En cherchant le code source d'avrdude 5.5 pour osx , je suis tombé sur cette page.

Tout en bas il y a ça :

What's New in This Release: [ read full changelog ]

· Add support for the USBtinyISP programmer (patch #6233)
· Add support for the C2N232I serial bitbang programmer (patch #6121)
· Bugfixes

Cela voudrait-il dire que la version 5.5 est déjà patchée bitbang ?

Dans ce topic "stk500" est remplacé par "dasa".

Avec stk500 j'avais quelque chose genre :

programmer is not responding : time out

Avec dasa, j'ai ça :

avrdude -p m168 -c dasa -P /dev/tty.usbserial-A1001N2Y -F

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.32s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATMEGA168 is 1E 94 06

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Toujours dans le fichier avrdude.conf, j'ai trouvé ça :

...

#
# some ultra cheap programmers use bitbanging on the 
# serialport.
#
# PC - DB9 - Pins for RS232:
#
# GND   5   -- |O
#              |   O| <-   9   RI
# DTR   4   <- |O   |
#              |   O| <-   8   CTS
# TXD   3   <- |O   |
#              |   O| ->   7   RTS
# RXD   2   -> |O   |
#              |   O| <-   6   DSR
# DCD   1   -> |O
#
# Using RXD is currently not supported.
# Using RI is not supported under Win32 but is supported under Posix.

...


# unknown (dasa in uisp)
# reset=rts sck=dtr mosi=txd miso=cts

programmer
  id    = "dasa";
  desc  = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts";
  type  = serbb;
  reset = 7;
  sck   = 4;
  mosi  = 3;
  miso  = 8;
;


...

et pour ISP :


Je ne sais pas si l'on peut vraiment comparer le port RS232 avec le FT232R, mais si c'est le cas en comparant la configuration pour "dasa" et l'ISP de l'arduino, les pins miso, mosi, sck et reset ne sont pas aux bons endroits.

Je me demande si il ne faut pas refaire la configuration des pins sur la broche icsp ?

Oula j'ai du retard....
Désolé.

Je te répond dans l'ordre :
pour la lenteur du bitbang (bb) oui je confirme que pour burner mon bootloader (avec uisp) j'avais mis 20 minutes (sans la vérification) et le double avec la vérification.
C'est très long mais une fois que tu as le bootloader tu n'as plus besoin de passer par cette methode :slight_smile:
Je te réponds sur la suite plus tard.

Nicolas

Ok, c'est bien ce que je me disais, merci pour ces infos.

Je suis en train de refaire mon installation, je me suis aperçu hier que lorsque j'ai installé Xcode, GCC n'avait pas été installé, c'est chose faite maintenant.

Sur cette page est décrite une procédure pour installer avrdude sur Os X, une des étapes concerne justement gcc.
Est-ce que je dois réinstaller gcc une deuxième fois depuis le répertoire qui contiendra avrdude ?

Edit : je vais essayer sans le réinstaller une deuxième fois, car lorsque j'invoque gcc depuis n'importe quel répertoire, il répond présent...

si tu as gcc en ligne de commande ca doit etre bon.
Sinon pour revenir sur les anciens posts

C2N232I serial bitbang programmer : ca doit etre le bb pour la puce C2N2321 pas pour la FTDI232R

avrdude.conf c'est le fichier de conf de avrdude qui lui permet de saisir les particularités de chaque puce avr.

pour les options tu as stk500 ou dasa qui sont des programmeurs particuliers le tien (grace au patch) sera ftbb si mes souvenirs sont bons

si tu craques avec avrdude je peux t'aider avec uisp

essaye juste ca pour voir si ca vaut le coup d'aller + loin

download ca http://www.tuxgraphics.org/common/src2/article07052/uisp-20050207-with-usb-bbpg-patch.tar.gz

ensuite dans un terminal tu détares et dezippe puis tu fais un cd dans le repertoire créé et tu fais

% ./configure
% make

si ca marche ca veut dire que tu n'es plus très loin de la solution

(je t'enverrai ensuite les modifs de code pour que ca marche sur l'arduino + les lignes de commandes pour faire du bb)

Nicolas

Grosse panne d'internet dans ma région ce soir ... >:(

J'ai essayé d'installer le patch, il s'est apparemment configuré, mais "make" me donne :

.....
DAPA.C:1314: error: 'ftdibb_setBitMode' cannot be used as a function
DAPA.C: In destructor 'TDAPA::~TDAPA()':
DAPA.C:1375: error: 'bbpg_dev_handle' was not declared in this scope
DAPA.C:1375: error: 'ftdibb_setBitMode' cannot be used as a function
DAPA.C:1376: error: 'ftdibb_close' cannot be used as a function
make[2]: *** [DAPA.o] Error 1
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1

Autrement on dirait que averdude est installé :

$ avrdude -v

avrdude: Version 5.6cvs, compiled on Nov 20 2008 at 19:22:47
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/Users/JFS/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping


avrdude: no programmer has been specified on the command line or the config file
         Specify a programmer using the -c option and try again

cette version possède des librairies qui s'appellent bitbang.h ...
mais après je patauge :-?

pour avrdude essaye de faire un avrdude -c toto dans une console pour avoir la liste des programmeurs si tu as ftbb c'est tout bon.

Nicolas

J'avais pas réalisé pour "toto"... ;D

avrdude: Can't find programmer id "toto"

J'ai pas ftbb dans la liste :-[

Valid programmers are:
  c2n232i  = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts [/etc/avrdude.conf:622]
  dasa3    = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts [/etc/avrdude.conf:609]
  dasa     = serial port banging, reset=rts sck=dtr mosi=txd miso=cts [/etc/avrdude.conf:596]
  siprog   = Lancos SI-Prog <http://www.lancos.com/siprogsch.html> [/etc/avrdude.conf:583]
  ponyser  = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts [/etc/avrdude.conf:570]
  pavr     = Jason Kyle's pAVR Serial Programmer [/etc/avrdude.conf:541]
  dragon_dw = Atmel AVR Dragon in debugWire mode [/etc/avrdude.conf:534]
  dragon_hvsp = Atmel AVR Dragon in HVSP mode  [/etc/avrdude.conf:526]
  dragon_pp = Atmel AVR Dragon in PP mode    [/etc/avrdude.conf:518]
  dragon_isp = Atmel AVR Dragon in ISP mode   [/etc/avrdude.conf:510]
  dragon_jtag = Atmel AVR Dragon in JTAG mode  [/etc/avrdude.conf:502]
  jtag2dw  = Atmel JTAG ICE mkII in debugWire mode [/etc/avrdude.conf:494]
  jtag2isp = Atmel JTAG ICE mkII in ISP mode [/etc/avrdude.conf:486]
  jtag2    = Atmel JTAG ICE mkII            [/etc/avrdude.conf:478]
  jtag2fast = Atmel JTAG ICE mkII            [/etc/avrdude.conf:470]
  jtag2slow = Atmel JTAG ICE mkII            [/etc/avrdude.conf:462]
  jtagmkII = Atmel JTAG ICE mkII            [/etc/avrdude.conf:454]
  jtag1slow = Atmel JTAG ICE (mkI)           [/etc/avrdude.conf:447]
  jtag1    = Atmel JTAG ICE (mkI)           [/etc/avrdude.conf:439]
  jtagmkI  = Atmel JTAG ICE (mkI)           [/etc/avrdude.conf:431]
  avr911   = Atmel AppNote AVR911 AVROSP    [/etc/avrdude.conf:425]
  avr109   = Atmel AppNote AVR109 Boot Loader [/etc/avrdude.conf:419]
  butterfly = Atmel Butterfly Development Board [/etc/avrdude.conf:413]
  usbtiny  = USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/ [/etc/avrdude.conf:407]
  usbasp   = USBasp, http://www.fischl.de/usbasp/ [/etc/avrdude.conf:401]
  avr910   = Atmel Low Cost Serial Programmer [/etc/avrdude.conf:395]
  stk600hvsp = Atmel STK600 in high-voltage serial programming mode [/etc/avrdude.conf:389]
  stk600pp = Atmel STK600 in parallel programming mode [/etc/avrdude.conf:383]
  stk600   = Atmel STK600                   [/etc/avrdude.conf:377]
  stk500hvsp = Atmel STK500 V2 in high-voltage serial programming mode [/etc/avrdude.conf:371]
  stk500pp = Atmel STK500 V2 in parallel programming mode [/etc/avrdude.conf:365]
  stk500v2 = Atmel STK500 Version 2.x firmware [/etc/avrdude.conf:359]
  mib510   = Crossbow MIB510 programming board [/etc/avrdude.conf:353]
  stk500v1 = Atmel STK500 Version 1.x firmware [/etc/avrdude.conf:347]
  stk500   = Atmel STK500                   [/etc/avrdude.conf:341]
  avrisp2  = Atmel AVR ISP mkII             [/etc/avrdude.conf:331]
  avrispmkII = Atmel AVR ISP mkII             [/etc/avrdude.conf:325]
  avrispv2 = Atmel AVR ISP V2               [/etc/avrdude.conf:319]
  avrisp   = Atmel AVR ISP                  [/etc/avrdude.conf:313]

Bon ben revenons sur ta compile de uisp
Que dit le configure (donne moi la sortie)

Nicolas

J'ai ça en sortie de ./configure :

powerbook:uisp-20050207-with-usb-bbpg-patch $ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking for inttypes.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking for unistd.h... (cached) yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for an ANSI C-conforming const... yes
checking for size_t... yes
checking whether time.h and sys/time.h may both be included... yes
checking whether gcc needs -traditional... rm: conftest.dSYM: is a directory
rm: conftest.dSYM: is a directory
no
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for working memcmp... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking types of arguments for select... int,fd_set *,struct timeval *
rm: conftest.dSYM: is a directory
checking for working strtod... yes
checking for vprintf... yes
checking for _doprnt... no
checking for gettimeofday... yes
checking for memset... yes
checking for select... yes
checking for strcasecmp... yes
checking for strncasecmp... yes
checking for strstr... yes
checking for strtol... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating uisp.1
config.status: creating uisp.spec
config.status: creating src/Makefile
config.status: creating src/config.h
config.status: src/config.h is unchanged
config.status: executing depfiles commands
powerbook:uisp-20050207-with-usb-bbpg-patch $

Bon... j'ai fait un autre essai, j'ai complètement désinstaller avrdude 5.6cvs.
J'ai installer une version plus ancienne, averdude 5.3.1.

J'ai essayer de patcher... sans succés :frowning:

J'ai trouvé un autre patch (que j'ai mis à la main ::)) et ça me donne toujours pareille deux warnings et des errors aux mêmes endroits :

...

configure: creating ./config.status
 /bin/sh ./config.status
config.status: creating windows/Makefile
config.status: WARNING:  windows/Makefile.in seems to ignore the --datarootdir setting
config.status: creating avrdude.spec
config.status: creating Makefile
config.status: WARNING:  Makefile.in seems to ignore the --datarootdir setting
config.status: creating avrdude.conf.tmp
sed: 1: "avrdude.conf.tmp": command a expects \ followed by text
config.status: creating ac_cfg.h
config.status: executing depfiles commands
cd . && /bin/sh /Applications/Arduino/arduino-0012/bootloader-usb/avrdude-5.3.1/missing --run autoheader
rm -f stamp-h1
touch ac_cfg.h.in
cd . && /bin/sh ./config.status ac_cfg.h
config.status: creating ac_cfg.h
make  all-recursive
Making all in @WINDOWS_DIRS@
/bin/sh: line 0: cd: @WINDOWS_DIRS@: No such file or directory
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
powerbook:avrdude-5.3.1 $

Ici quelques infos sur les programmeurs série

J'ai trouvé une autre page où un programmeur DIY est proposé (aussi pour mac ?), mais je ne sais pas ce que ça vaut et en plus l'Atmega168 n'est pas mentionné comme supporté.