J'ai un travail sur la création d'une distribution qui fonctionne directement sur une clé USB (USBLive). Voici lles étapes que j'ai suivi:
1-creation du root file système
- mkdir bin sbin root tmp etc ......... (archittecture)
- MAKEDEV -v generic console
- compiler et installer BUSYBOX dans le root files system
- compiler et installer du uCLibc ..........
- création des fichiers: inittab, group, passwd, fstab, init.d/rcS
- création de initrd-2.6.25 par l'utilitaire: mkinitramfs -o /root_fs/boot/initrd 2.6.25
2 - compilation du noyau 2.6.25
- make gconfig ->Je ne sais pas les option à inclure?? ce que j'ai fait: SCSI, USB, EXT2,EXT3, ......
(pouvez me donner un detail)
- make bzImage
- copier bzImage généré dans le /boot du root file system
- copier aussi les modules
3- Préparation de la clé
-mke2fs /dev/sdb1
-copier le contenu de system de fichier dans la clé
4- Installer GRUB
- grub-install --root-directory ...........
Command de lancement dans grub:
kernel /boot/bzImage root=UUID=xxxxxxxx root-delay=100
initrd /boot/initrd
Mon problème est que lors de démarage voici l'érreur:
Starting up ...
Decompresssing Linux... done.
PCI: BIOS Bug: MCFG area at f80000000 is not E820-reserved
PCI: Not using MMCONFIG
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Aider moi SVP
# Galère ...
Posté par benoar . Évalué à 2.
D'abord, juste un petit truc : fais l'initrd _après_ avoir compilé le kernel et les modules, vu que ce sont certains de ces derniers qui vont se retrouver dedans.
Ensuite, pour ton erreur, as-tu vraiment mis root=UUID=xxxxxxxx comme paramètre ? Il faut mettre l'UID de ta clé USB ... En gros, il te dit qu'il ne trouve pas le système de fichier racine, quoi.
[^] # Re: Galère ...
Posté par naibed . Évalué à 1.
# Si cela peut t'aider ...
Posté par slack . Évalué à 1.
* Pour la configuration du noyau, je te conseille de compiler en dur tous les pilotes utiles au boot.
* Ta distribution se trouve-t-elle entièrement dans l'initrd ou bien sur une partition de ta clé ?
Dans le second cas, ton initrd doit contenir un fichier linuxrc qui doit rechercher la partition de ta clé.
Personnellement, j'utilisais pour une clé Voyager contenant trois partitions (la première sous fat et les suivantes sous système fichiers linux contenant la distribution à lancer) le fichier linuxrc ci-dessous.
Note1 : pour que la clé soit en lecture seule, la racine de la partition est en fait une union réalisé avec unionfs.
Note2 : l'initrd contenait l'éxecutable blkid qui permet de trouver le système de fichiers utilisé sur une partition.
Bon courage
slack
-------------------------------- linuxrc ------------------------------------------
#!/bin/ash
#echo -e "\033[0;32m""* ""\033[39m""$@"
export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin
# garder une trace du message et l'afficher à l'écran après une étoile verte
EchoLog()
{ echo "LIVECD:" "$@" >>/var/log/livelog
echo -e "\033[0;32m""* ""\033[39m""$@"
}
AfficheEnGras()
{ echo -e "\033[0;1m""$@""\033[0;0m"
} # gras texte normal
# Chaque code d'échappement doit débuter par \033
# qui donne le code ascii d'escape (Echap)
#commande lancée en mode débug
debug()
{ echo "===================== mode débug ======================"
echo "Lancez les commandes souhaitées "
echo "puis appuyez surCtrl+D pour poursuivre le boot"
ash < /dev/console
echo # Pour que la suite du texte soit sur une nouvelle ligne
}
#commande lancée quand quelque chose va très mal
sos()
{ echo "L'erreur grave suivante est apparue :"
echo "$1"
echo "Utiliser le shell pour solutionner ou rebooter avec Ctrl+ALt+Del"
ash </dev/console >/dev/console
}
# Titre
AfficheEnGras "exécution du script linuxrc"
EchoLog "montage des systèmes de fichiers /proc et /sys"
mount -t proc proc /proc
mount -t sysfs sysfs /sys
ln -sf /proc/mounts /etc/mtab # cela nous permet d'utiliser umount -a
#DEBUGCMD="debug"
#$DEBUGCMD
EchoLog "prise en compte de la ligne de commande"
# option debug : lancer un shell après chaque étape pour déboguer
DEBUGCMD=""
if cat /proc/cmdline | grep debug 2>/dev/null 1>/dev/null ; then
DEBUGCMD="debug"
EchoLog "débogage activé"
fi
## AFAIRE
## A enlever pour un système en production
#DEBUGCMD="debug"
#$DEBUGCMD
EchoLog "attendre 5 secondes pour que le noyau prenne en compte les supports
usb"
for i in 1 2 3 4 5 6 ; do sleep 1 ; echo -n "." ; done ; echo
$DEBUGCMD
EchoLog "création pour les périphériques bloc des entrées dans /dev"
for BLOCK in `ls -A1d /sys/block/*/dev /sys/block/*/*/dev 2>/dev/null` ; do
DEVICE="/dev/`basename \`dirname $BLOCK\``"
if [ ! -b $DEVICE ]; then
MAJORMINOR="`head -n 1 $BLOCK | tr ':' ' '`"
mknod $DEVICE b $MAJORMINOR
fi
done
ls /dev
$DEBUGCMD
EchoLog "recherche de la partition racine"
TROUVE="non" ; DEVICE_RACINE=""
DEVICE_RACINE="`grep VoyagerGT /sys/block/sd*/device/model | cut -d '/' -f 4`
"
echo $DEVICE_RACINE
TROUVE="oui"
DEVICE_RACINE="/dev/$DEVICE_RACINE"
echo $DEVICE_RACINE
$DEBUGCMD
EchoLog "montage de tmpfs"
mkdir /mnt/temporaire
mount -t tmpfs -o size=90% tmpfs /mnt/temporaire
$DEBUGCMD
EchoLog "montage de la partition racine"
mkdir /mnt/rac2 /mnt/rac3
mount -o ro ${DEVICE_RACINE}2 /mnt/rac2
mount -o ro ${DEVICE_RACINE}3 /mnt/rac3
$DEBUGCMD
EchoLog "création de l'union"
mount -t unionfs -o dirs=/mnt/temporaire:/mnt/rac3:/mnt/rac2 unionfs /mnt/rac
ine
mount -t unionfs -o remount,mode=/mnt/rac3=ro /mnt/racine
mount -t unionfs -o remount,mode=/mnt/rac2=ro /mnt/racine
$DEBUGCMD
# le fichier /proc/partitions contient :
# une ligne d'entêtes
# une ligne vide
# le 4ième champ des lignes suivantes est une partition reconnue par le système
# Attention, les devices comme sda sont renvoyées
# On élimine les périphériques loop éventuellement montés
Liste_des_partitions="`awk '!/loop/&&NR>2 {print $4}' /proc/partitions`"
echo "Liste des partitions : $Liste_des_partitions"
$DEBUGCMD
if [ "$TROUVE" = "non" ]; then
sos " Partition racine non trouvée."
fi
$DEBUGCMD
# Attention le fichier est /mnt/racine/etc/fstab
EchoLog "création du fichier /etc/fstab"
FSTAB="/mnt/racine/etc/fstab"
mkdir -p /mnt/racine/etc /mnt/racine/mnt # au cas où
touch $FSTAB
# ajouter le support pour la racine, les terminaux virtuels, proc, sys
# et le lecteur de disquette
#FS="`blkid -s TYPE $DEVICE | cut -d = -f 2 | tr -d ' \"'`"
#echo "$DEVICE_RACINE / $FS defaults 0 0" >$FSTAB
echo "/dev/root / unionfs defaults 0 0" >$FSTAB
echo "devpts /dev/pts devpts gid=5,mode=620 0 0" >>$FSTAB
echo "proc /proc proc defaults 0 0" >>$FSTAB
echo "sysfs /sys sysfs defaults 0 0" >>$FSTAB
echo "/dev/fd0 /mnt/floppy auto noauto,users,sync 0 0" >>$FSTAB
mkdir -p /mnt/racine/mnt/floppy
# les cdrom
for BLOCK in $Liste_des_cdrom ; do
MOUNTDIR="/mnt/${BLOCK}_cdrom"
mkdir -p /mnt/racine/$MOUNTDIR
echo "/dev/$BLOCK $MOUNTDIR iso9660 noauto,users,exec 0 0" >>$FSTAB
done
# les partitions de disque
#for DEVICE in `awk '!/loop/&&NR>2 {print "/dev/"$4}' /proc/partitions`; do
for DEV in $Liste_des_partitions ; do
DEVICE="/dev/$DEV"
unset REMOVABLE; unset OPT
# DEV="`basename $DEVICE`"
DEV0="`echo $DEV | cut -b 1-3`"
if [ "0`cat /sys/block/$DEV0/removable 2>/dev/null`" -ne 0 ]; then
REMOVABLE="_removable"
fi
MOUNTDIR="/mnt/$DEV$REMOVABLE"
FS="`blkid -s TYPE $DEVICE | cut -d = -f 2 | tr -d ' \"'`"
# if the partition has filesystem, add it to fstab
# sans umask, les systèmes de fichiers ntfs sont montés rwr------ !
if [ "$FS" != "" ]; then
if [ "$FS" = "swap" ]; then
echo "$DEVICE swap swap defaults 0 0" >>$FSTAB
elif [ "$FS" = "ntfs" ]; then
echo "$DEVICE $MOUNTDIR $FS auto,users,umask=022$OPT 0 0" >>$FSTAB
mkdir -p "/mnt/racine/$MOUNTDIR"
else
echo "$DEVICE $MOUNTDIR $FS auto,users,suid,dev,exec$OPT 0 0" >>$FSTAB
mkdir -p "/mnt/racine/$MOUNTDIR"
fi
fi
done
$DEBUGCMD
# La partition racine est montée sur /mnt/racine
# On change la racine / à ce répertoire et on déplace la racine du
# du ramdisk initial vers /mnt/live
# Finalement, on exécute /sbin/init pour lancer la distribution
EchoLog "Déplacement de la racine du système de fichiers"
cd /mnt/racine
umount /sys # Nous n'en avons plus besoin
# Une bonne idée mais à mettre en oeuvre : le remontage de /proc
# dans cleanup bloque le script cleanup. Peut-être enlever le lien /etc/mtab
#umount /proc # à remonter dans le script d'arrêt
if [ ! -e dev/console ]; then mknod dev/console c 5 1; fi
if [ -x /mnt/racine/usr/sbin/chroot ];
then CHROOT=/usr/sbin/chroot
else CHROOT=/usr/bin/chroot
fi
AfficheEnGras "Lancement de la distribution"
mkdir -p mnt/live
mount -o remount,ro /mnt/racine
pivot_root . mnt/live
exec $CHROOT . sbin/init <dev/console >dev/console 2>&1
AfficheEnGras "ERREUR!"
EchoLog "Le processus init n'a pas été lancé correctement."
EchoLog "Le noyau a paniqué. Même Ctrl+Alt+Del ne vous aidera pas."
# reponse
Posté par boanarijesy andronic . Évalué à 1.
Parce que j'ai modifier l'UUID de la partition avec la commande blkid -U xxxxxx.........
Mon grand problème c'est dans les options (make gconfig ou make menuconfig) de compilation du noyau.
J'avais intégré tous les options en dur comme:
- driver scisi, ide, ....
Pouver m'envoyer des doc de préference en fr sur les options de compilations du noyau.
Merci
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.