mini2440. Séance 3 : construction d'un système de fichiers root minimal

Salut.

Pour cette séance 3 de mise en oeuvre de la carte mini2440, nous allons voir comment construire un système de fichiers root minimal.

Avoir un système de fichiers root est indispensable pour avoir un noyau Linux fonctionnel car l'un ne marche pas sans l'autre. Le système de fichiers root peut être local en RAM, en mémoire NAND Flash ou sur la carte SD pour la carte mini2440 ou bien distant monté par NFS. Le choix se fera par des paramètres passés au boot du noyau Linux, paramètres sauvegardés comme variables d'environnement (setenv) du bootloader u-boot.

Pour construire le système de fichiers root, on doit respecter le standard FHS (Filesystem Hierarchy Standard) dont la structure globale est la suivante :

rootfs (/)
|--bin
|--dev
|--etc
|  |--init.d
|--lib
|--mnt
|--proc
|--sys
|--sbin
|--tmp
|--usr
|  |--bin
|  |--sbin
|--var

Nous allons donc construire le système de fichiers root en s'aidant du document Build Root File System...

Tout sera mis dans le répertoire root_fs/ :

$ cd mini2440
$ mkdir root_fs

Le système de fichiers root ainsi construit sera minimal (et non opérationnel) car cela ne sera qu'un squelette qu'il faudra compléter avec busybox, avec les bibliothèques dynamiques pour le processeur ARM sous root_fs/lib/ ainsi qu'éventuellement les modules du noyau Linux. On verra cette étape à la prochaine séance consacrée à busybox...

On crée les répertoires de base :

$ cd root_fs
$ mkdir dev
$ mkdir -p etc/init.d
$ mkdir lib
$ mkdir mnt
$ mkdir proc
$ mkdir sys
$ mkdir -m 777 tmp
$ mkdir var

On crée l'entrée console sous root_fs/dev/ :

$ cd root_fs/dev
$ su
# mknod -m 622 console c 5 1

Les principaux fichiers de configuration, notamment ceux qui seront utilisés par busybox sont sous root_fs/etc/.

On créera le fichier root_fs/etc/inittab utilisé par le processus init dont le contenu est le suivant :

::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
::restart:/sbin/init
#::respawn:/sbin/getty -L 115200 /dev/ttySAC0 vt100
console::respawn:/sbin/getty -L 9600 tty0 vt100

On créera le fichier root_fs/etc/init.d/rcS, shell script exécuté après le lancement du processus init dont le contenu est le suivant :

#! /bin/sh

# Setup the bin file location and export to system PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin
umask 022
export PATH

# mount the filesystem directories
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts -o mode=0622

# create device nodes and directories
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
mkdir /var/lock

# start logging utility services
klogd
syslogd

# set system clock from RTC
hwclock -s

# set host and config loopback interface
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.0.100

On créera le fichier root_fs/etc/mdev.conf pour le processus mdev de création dynamique des points d'entrée sous /dev dont le contenu est le suivant :

# system all-writable devices
full  0:0 0666
null  0:0 0666
ptmx  0:0 0666
random  0:0 0666
tty  0:0 0666
zero  0:0 0666

# console devices
tty[0-9]* 0:5 0660
vc/[0-9]* 0:5 0660

# serial port devices
s3c2410_serial0 0:5 0666 =ttySAC0
s3c2410_serial1 0:5 0666 =ttySAC1
s3c2410_serial2 0:5 0666 =ttySAC2
s3c2410_serial3 0:5 0666 =ttySAC3

# loop devices
loop[0-9]* 0:0 0660 =loop/

# i2c devices
i2c-0  0:0 0666 =i2c/0
i2c-1  0:0 0666 =i2c/1

# frame buffer devices
fb[0-9]  0:0 0666

# input devices
mice  0:0 0660 =input/
mouse.*  0:0 0660 =input/
event.*  0:0 0660 =input/
ts.*  0:0 0660 =input/

# rtc devices
rtc0  0:0 0644 >rtc
rtc[1-9] 0:0 0644

# misc devices
#mmcblk0p1 0:0 0600 =sdcard */bin/hotplug
#sda1  0:0 0600 =udisk * /bin/hotplug

On créera le fichier root_fs/etc/fstab pour le montage des divers systèmes de fichiers (virtuels) dont le contenu est le suivant :

# device mount-point type options dump fsck order
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
var /var tmpfs defaults 0 0

On créera le fichier root_fs/etc/profile qui est exécuté quand on se connecte au système dont le contenu est le suivant :

USER="`id -un`"                                                 
LOGNAME=$USER                                                  
PS1='[\\u@\\h \\W]\\# '                                            
PATH=$PATH                                                     
HOSTNAME=`/bin/hostname`                                       
export USER LOGNAME PS1 PATH HOSTNAME

On créera le fichier root_fs/etc/issue qui contient le message de bienvenue dont le contenu est le suivant :

Welcome to Mini2440
Kernel \\r on an \\m (\\l)
On créera le fichier root_fs/etc/passwd avec un seul utilisateur, root dont le contenu est le suivant :
root::0:0:root:/:/bin/sh
On créera le fichier root_fs/etc/group dont le contenu est le suivant :
root:x:0:root
Enfin, nous réajustons les droits attribués à root du répertoire root_fs/ qui sera recopié soit sur une carte SD, soit transformé en fichier image JFFS2 :
$ cd mini2440
$ su
# chown -R root:root root_fs
$
Nous en avons fini avec ce système de fichiers root minimal. Il n'est pas encore opérationnel car il convient de le compléter avec :
  • busybox
  • Les bibliothèques pour processeur ARM
  • les modules du noyau Linux ainsi que les firmwares si nécessaire

Le résultat de la construction de ce système de fichiers root est disponible ici.


Prochaine séance : compilation et mise en oeuvre de busybox et intégration dans le système de fichiers root minimal...

++

Sources :

Vus : 2465
Publié par Eddy33 : 81