Dynamic compiling done
This commit is contained in:
@@ -307,6 +307,217 @@ ps: can't open '/proc': No such file or directory
|
|||||||
|
|
||||||
`mkdir proc` `mkdir sys`
|
`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