Dynamic compiling done

This commit is contained in:
2024-11-07 16:51:37 +01:00
parent 34f38e23b9
commit 65d96ca8f2

211
tp4.md
View File

@@ -307,6 +307,217 @@ ps: can't open '/proc': No such file or directory
`mkdir proc` `mkdir sys`
```
~ # ps
PID USER VSZ STAT COMMAND
```
En allant inspecter /sys et /proc on ne voit rien. Je ne sais pas si c'est normal mais en même temps on a pas lancé de processus donc j'imagine que oui.
J'ai changé le fichier inittab pour qu'il ressemble à ca :
```
::sysinit:/etc/init.d/rcS
# Mount proc and sysfs
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mount -t sysfs sysfs /sys
::respawn:-/bin/sh
```
Grâce à ca on peut refaire la commande ps et voila le resultat :
```
~ # ps
PID USER VSZ STAT COMMAND
1 0 1484 S init
2 0 0 SW [kthreadd]
3 0 0 SW [pool_workqueue_]
4 0 0 IW< [kworker/R-slub_]
5 0 0 IW [kworker/0:0-eve]
6 0 0 IW< [kworker/0:0H]
7 0 0 IW [kworker/u2:0-xp]
8 0 0 IW< [kworker/R-mm_pe]
9 0 0 SW [ksoftirqd/0]
10 0 0 SW [kdevtmpfs]
11 0 0 IW< [kworker/R-inet_]
12 0 0 IW [kworker/u2:1-nf]
13 0 0 SW [oom_reaper]
14 0 0 IW< [kworker/R-write]
15 0 0 SW [kcompactd0]
16 0 0 IW< [kworker/R-kbloc]
17 0 0 SW [watchdogd]
18 0 0 IW [kworker/0:1-eve]
19 0 0 IW< [kworker/R-rpcio]
20 0 0 IW< [kworker/R-xprti]
21 0 0 IW< [kworker/R-cfg80]
22 0 0 SW [kswapd0]
23 0 0 IW< [kworker/R-nfsio]
24 0 0 SW [hwrng]
25 0 0 SW [spi0]
26 0 0 SW [spi1]
29 0 0 SW [irq/38-atmel_us]
30 0 0 IW [kworker/0:2-eve]
31 0 0 IW [kworker/u2:2-nf]
32 0 0 IW [kworker/u2:3-nf]
33 0 0 IW [kworker/0:3-pm]
34 0 0 IW< [kworker/R-mld]
35 0 0 IW< [kworker/R-ipv6_]
39 0 0 IW [kworker/u2:4-xp]
40 0 0 IW [kworker/u2:5-nf]
41 0 0 IW [kworker/u2:6]
45 0 1492 S -/bin/sh
46 0 1492 R ps
```
On peut y voir la liste des process en cours et on peut inspecter nos directory /proc et /sys
```
~ # cd proc
/proc # ls
1 26 8 interrupts pagetypeinfo
10 29 9 iomem partitions
11 3 asound ioports scsi
12 30 buddyinfo irq self
13 31 bus kallsyms slabinfo
14 32 cgroups key-users softirqs
15 33 cmdline keys stat
16 34 consoles kmsg sys
17 35 cpu kpagecount sysvipc
18 39 cpuinfo kpageflags thread-self
19 4 crypto loadavg timer_list
2 40 device-tree locks tty
20 41 devices meminfo uptime
21 45 diskstats misc version
22 48 driver modules vmallocinfo
23 5 execdomains mounts vmstat
24 6 filesystems mtd zoneinfo
25 7 fs net
/proc # cd ..
~ # cd sys
/sys # ls
block class devices fs module
bus dev firmware kernel power
```
Le mount a donc bien réussi
Par contre le test un peu bizarre ou il faut faire un sleep de 10s et l'arrêter j'ai pas réussi à le faire fonctionner. Ctrl+C ca l'interromp mais pas Ctrl+Z. Et je ne vois juste absolument pas comment on est sensé debug ca du coup bah... dommage quoi je sais pas.
J'ai bien verifié et le message d'erreur `can ' t access tty : job control turned off` n'est pas présent donc... bref j'éspère que ca va pas me poser de problème plus tard "C'est tellement sur que si"
## Utilisation de librairies partagées
On fait un petit programme c pas bien complexe :
```c
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("Hello, world !\n");
}
```
On peut le compiler avec notre petit gcc maison fait pour linux.
`arm-buildroot-linux-musleabi-gcc test.c -o test`
Et ne pas oublier dans le repertoire partagé NFS
`chmod +x test`
Ensuite on peut le poser quelque part sur le rootfs de notre linux embarqué
J'ai créé un repertoire à la racine qui s'appelle "TP" dans lequel j'ai posé le programme que l'on vient de compiler
```
/tp # ./test
-/bin/sh: ./test: not found
```
Et avec la version statique
`arm-buildroot-linux-musleabi-gcc test.c -o test_static -static`
ce qui nous donne
```
/tp # ./test_static
Hello, world !
/tp #
```
### [Q5] : Pourquoi est-ce que la première version du programme compilé ne sexécute pas correctement ?
Il n'arrivait pas à utiliser le permier script car les librairies n'existent juste pas sur notre système embarqué. Stdlib et Stdio n'existent pas et donc le programme c a envie de mourir et il ne peut pas tourner.
Quand on compile statiquement la on arrive à lancer le programme car stdlib et stdio sont built-in avec l'executable.
### [Q6] : De quelles librairies dynamiques dépend donc votre petit programme ?
Normalement les deux librairies dont mon petit programme a besoin sont stdio.h et stdlib.h
```
arm-buildroot-linux-musleabi-gcc test.c -o test_static -static -print-sysroot
/home/moi/tp/toolchain/arm-buildroot-linux-musleabi/sysroot
```
dans sysroot sous lib on peut faire un ls -a
```
ls -l
total 6284
-rw-r--r-- 1 moi moi 1404 Aug 17 09:48 Scrt1.o
-rw-r--r-- 1 moi moi 1404 Aug 17 09:48 crt1.o
-rw-r--r-- 1 moi moi 824 Aug 17 09:48 crti.o
-rw-r--r-- 1 moi moi 788 Aug 17 09:48 crtn.o
lrwxrwxrwx 1 moi moi 7 Aug 17 09:49 ld-musl-arm.so.1 -> libc.so
-rw-r--r-- 1 moi moi 70798 Aug 17 09:53 libatomic.a
-rwxr-xr-x 1 moi moi 1059 Aug 17 09:53 libatomic.la
lrwxrwxrwx 1 moi moi 18 Aug 17 09:53 libatomic.so -> libatomic.so.1.2.0
lrwxrwxrwx 1 moi moi 18 Aug 17 09:53 libatomic.so.1 -> libatomic.so.1.2.0
-rwxr-xr-x 1 moi moi 57512 Aug 17 09:53 libatomic.so.1.2.0
-rw-r--r-- 1 moi moi 2494014 Aug 17 09:48 libc.a
-rwxr-xr-x 1 moi moi 939268 Aug 17 09:48 libc.so
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libcrypt.a
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libdl.a
-rw-r--r-- 1 moi moi 132 Aug 17 09:53 libgcc_s.so
-rw-r--r-- 1 moi moi 2800704 Aug 17 09:53 libgcc_s.so.1
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libm.a
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libpthread.a
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libresolv.a
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 librt.a
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libutil.a
-rw-r--r-- 1 moi moi 8 Aug 17 09:48 libxnet.a
-rw-r--r-- 1 moi moi 2364 Aug 17 09:48 rcrt1.o
```
On peut voir une libc.a et libc.so
Après discussion avec mes collègues, on peut utiliser juste le .so car il est compilé dynamiquement mais ca devrait marcher quand même.
On va donc copier cette lib dans /lib de notre nfs (que on a créé à la racine)
### [Q7] : Quelles librairies (fichiers) avez-vous ajoutées à votre système embarqué ? Où se trouvent ces fichiers sur votre système hôte et où les avez-vous copié sur votre système embarqué ?
La libc.so ET ld-musl-arm.so.1
Il faut aussi les passer en autorisations d'execution
Quand on a pu faire ca la même la version dynamique de test fonctionne !!