On Mon, 8 Jan 2001, Marc Mongenet wrote:

> Attached devices: 
> Host: scsi0 Channel: 00 Id: 00 Lun: 00
>   Vendor: QUANTUM  Model: XP34550S         Rev: LXY4
>   Type:   Direct-Access                    ANSI SCSI revision: 02
> Host: scsi0 Channel: 00 Id: 01 Lun: 00
>   Vendor: SEAGATE  Model: ST51080N         Rev: 0943
>   Type:   Direct-Access                    ANSI SCSI revision: 02
> Host: scsi0 Channel: 00 Id: 02 Lun: 00
>   Vendor: PIONEER  Model: CD-ROM DR-U24X   Rev: 1.01
>   Type:   CD-ROM                           ANSI SCSI revision: 02
> Host: scsi0 Channel: 00 Id: 05 Lun: 00
>   Vendor: IOMEGA   Model: ZIP 100          Rev: J.02
>   Type:   Direct-Access                    ANSI SCSI revision: 02
> 
> > et dmesg, il voit les périphériques disque ?
> Oui, c'est après qu'il y a un problème, pour lire les disques.
> Qu'est-ce qui manque au noyau pour que je reçoive une telle erreur ?
> ll_rw_block: Trying to read nonexistent block-device 08:00 (0)

Je ne sais pas trop. Mais une chose: je n'ai jamais utilisé un (b)zImage
avec SCSI_SUPPORT=no avec des modules SCSI_SUPPORT=m. Ca m'apprendra à
magouiller :)

C'est peut-être le gag: je vais donc te créer une image correcte cette
fois :)

>  sda:<3>ll_rw_block: Trying to read nonexistent block-device 08:00 (0)

        dev = NULL;
        if ((major = MAJOR(bh[0]->b_dev)) < MAX_BLKDEV)
                dev = blk_dev + major;
        if (!dev || !dev->request_fn) {
                printk(KERN_ERR
        "ll_rw_block: Trying to read nonexistent block-device %s (%ld)\n",
                kdevname(bh[0]->b_dev), bh[0]->b_blocknr);
                goto sorry;

donc le message sera affiché s'il n'y a pas de fonctions d'exécution de
requêtes IO ou si MAX_BLKDEV est dépassé par le major du device, ce qui
n'est pas le cas (fixé à 255 dans /usr/src/linux/include/linux/major.h).

Donc

/* blk_dev_struct is:
 *      *request_fn
 *      *current_request
 */
struct blk_dev_struct blk_dev[MAX_BLKDEV]; /* initialized by blk_dev_init() */

Donc allons voir blk_dev_init():

   commence par zéroer tout ça

   ensuite pour tous les types de périphériques définis,
   la fonction spécifique est appelée. P.ex. pour
   SCSI, c'est via la fonction genhd_init() (fallait le
   savoir :)), donc scsi_dev_init(), seulement appelé
   si CONFIG_SCSI est mis (donc SCSI_SUPPORT=yes ou
   SCSI_SUPPORT=m).

S'il y a un spécialiste dans la salle qu'il me corrige.



--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.

Répondre à