Dynamic compiling done
This commit is contained in:
211
tp4.md
211
tp4.md
@@ -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 s’exé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 !!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user