tag:linuxfr.org,2005:/tags/probl%C3%A8me/public
LinuxFr.org : les contenus étiquetés avec « problème »
2023-08-27T14:06:13+02:00
/favicon.png
tag:linuxfr.org,2005:Post/43804
2023-08-26T15:27:53+02:00
2023-08-26T15:27:53+02:00
wine problème lors de la désinstallation
<p>Bonjour,<br>
J'ai un problème avec la désinstallation de Wine pour faire simple j'ai voulu désinstaller Wine mais l'icône de l'appli ne disparaît pas les programmes installé avec sont toujours Dedans mais je ne peux pas les utiliser ni en installer de nouveaux.<br>
Le hic c est que je ne peux pas non plus le réinstaller donc je pense qu'il faut que je le Désinstalle vraiment mais je n y arrive pas est ce que quelqu un a une idée ???</p>
<p>Ps: Si ça peux aider je suis sous Linux mint 21 .</p>
<div><a href="https://linuxfr.org/forums/linux-general/posts/wine-probleme-lors-de-la-desinstallation.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133088/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-general/posts/wine-probleme-lors-de-la-desinstallation#comments">ouvrir dans le navigateur</a>
</p>
tristan
https://linuxfr.org/nodes/133088/comments.atom
tag:linuxfr.org,2005:Post/42787
2022-04-04T23:47:57+02:00
2022-04-04T23:55:42+02:00
Perl - faire ressortir les définitions d'une liste de mots
<p>Bonsoir, <br>
Débutante en perl cette année, nous devons fournir un projet prochainement. J'ai décidé de faire ressortir d'un texte français (si_c'est_un_homme.txt) tous les mots étrangers. Pour se faire, dans un premier script j'ai utilisé des expressions régulières qui testaient l'existence des mots du texte dans un dictionnaire français. Ce premier script m'a permis de sortir une liste ordonnée avec une seule occurence par mot > listemots.txt.</p>
<p>Dans un second script je souhaitais ouvrir cette liste ainsi qu'un second dictionnaire (les-100-mots-de-la-shoah) dans lequel les définitions des termes étrangers apparaissent entre guillemets. Seulement ce second script ne donne rien, pas même un message d'erreurs soulignant une faute à une quelconque ligne, juste rien. Pourriez-vous m'indiquer ce qui semblerait bloquer ?</p>
<p>Voici le code : avec beaucoup de commentaires :</p>
<pre><code class="perl"><span class="k">use</span> <span class="nn">strict</span><span class="p">;</span> <span class="c1"># mode algorithmique</span>
<span class="k">use</span> <span class="nn">warnings</span><span class="p">;</span> <span class="c1"># messages d'alerte</span>
<span class="k">use</span> <span class="nn">utf8</span><span class="p">;</span> <span class="c1"># caractères accentués dans le code Perl</span>
<span class="nb">binmode</span><span class="p">(</span><span class="bp">STDOUT</span><span class="p">,</span><span class="s">':utf8'</span><span class="p">);</span> <span class="c1"># caractères accentués dans le terminal </span>
<span class="c1">#OUVRIR LA LISTE DES MOTS contenu dans listemots.txt </span>
<span class="c1">#enregistrer ces mots dans une variable dans un tableau_</span>
<span class="k">my</span> <span class="nv">@liste</span> <span class="o">=</span> <span class="p">();</span>
<span class="nb">open</span><span class="p">(</span><span class="n">LST</span><span class="p">,</span><span class="s">'listemots.txt'</span><span class="p">);</span> <span class="c1">#ouvrir la liste des mots créée dans le précédent script perl</span>
<span class="nb">binmode</span><span class="p">(</span><span class="n">LST</span><span class="p">,</span><span class="s">':utf8'</span><span class="p">);</span>
<span class="k">while</span> <span class="p">(</span><span class="k">my</span> <span class="nv">$mot</span> <span class="o">=</span> <span class="o">\<</span><span class="n">LST</span> <span class="o">></span><span class="p">)</span> <span class="p">{</span>
<span class="nb">chop</span> <span class="nv">$mot</span><span class="p">;</span>
<span class="nb">push</span> <span class="p">(</span><span class="nv">@liste</span><span class="p">,</span> <span class="nv">$mot</span><span class="p">);</span> <span class="c1">#création d'une liste contenant ces mots dans le second script</span>
<span class="p">}</span>
<span class="nb">close</span><span class="p">(</span><span class="n">LST</span><span class="p">);</span> <span class="c1"># Si j'écris print ici : les mots de la liste s'affichent bien.</span>
<span class="nb">open</span><span class="p">(</span><span class="n">LST</span><span class="p">,</span> <span class="s">'les-100-mots-de-la-shoah.txt'</span><span class="p">);</span>
<span class="nb">binmode</span><span class="p">(</span><span class="n">LST</span><span class="p">,</span><span class="s">':utf8'</span><span class="p">);</span> <span class="c1"># caractères accentués dans le terminal</span>
<span class="k">while</span> <span class="p">(</span><span class="k">my</span> <span class="nv">$ligne</span> <span class="o">=</span> <span class="o">\</span><span class="sr"><LST></span><span class="p">)</span> <span class="p">{</span> <span class="c1">#traitement par ligne</span>
<span class="nb">chop</span> <span class="nv">$ligne</span><span class="p">;</span><span class="c1"># suppression du retour chariot</span>
<span class="k">foreach</span> <span class="k">my</span> <span class="nv">$mot</span> <span class="p">(</span><span class="nv">@liste</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$ligne</span> <span class="o">=~</span><span class="sr"> /$mot,\s"\s(.+?)\si"/</span><span class="p">)</span> <span class="p">{</span>
<span class="k">print</span> <span class="s">"»$ligne«\n"</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nb">close</span> <span class="p">(</span><span class="n">LST</span><span class="p">);</span></code></pre>
<p><strong>PROBLEME</strong> : rien ne s'affiche (sauf les mots de la liste si j'écris print dans le premier tableau)</p>
<div><a href="https://linuxfr.org/forums/linux-debutant/posts/perl-faire-ressortir-les-definitions-d-une-liste-de-mots.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127389/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debutant/posts/perl-faire-ressortir-les-definitions-d-une-liste-de-mots#comments">ouvrir dans le navigateur</a>
</p>
Amz163
https://linuxfr.org/nodes/127389/comments.atom
tag:linuxfr.org,2005:Post/42059
2021-04-19T17:44:48+02:00
2021-04-20T09:33:01+02:00
Détection de branchement USB avec Udev qui ne fonctionne pas
<p>Bonjour à tous, </p>
<p>J'ai parcouru de nombreuses pages webs afin de trouver une solution à mon problème, en vain. </p>
<p>Je cherche à lancer un script que j'ai fait quand je branche un périphérique audio USB sur ma cible (embarquée, imx6, etc.). In fine j'aimerais lancer mon script lorsque n'importe quel périphérique usb de type audio (qui utilise snd-usb-audio comme driver) est branché.<br>
Cependant, mon script n'est jamais lancé. <br>
J'ai essayé de remonter le problème sous différents angles : détection par driver (snd_audio_usb), puis pour une carte son spécifique avec l'idVendor puis même carrément juste quand je branche n'importe quoi sur ma prise USB (clé usb, souris). J'ai essayé de placer mon script à divers endroits : /usr/bin, /etc/udev/scripts, /etc/udev/rules (juste à coté de la règle), /home/root/… ou encore /sbin. Sans succès.<br>
Après plusieurs heures, je me dis qu'il y a peut-être un problème d'utilisateur mais ça reste une supposition et je ne sais pas trop comment gérer ça.</p>
<p>Si quelqu'un a une quelconque idée, ça serait merveilleux.</p>
<p>Je vous donne ce que j'ai écrit.</p>
<p>Fichier udev rules usb-audio.rules : </p>
<pre><code class="sh">ACTION!<span class="o">=</span><span class="s2">"add"</span>, <span class="nv">GOTO</span><span class="o">=</span><span class="s2">"End"</span> SUBSYSTEMS!<span class="o">=</span><span class="s2">"usb"</span>, <span class="nv">GOTO</span><span class="o">=</span><span class="s2">"End"</span> ATTRS<span class="o">{</span>idVendor<span class="o">}==</span><span class="s2">"0d8c"</span>, <span class="nv">RUN</span><span class="o">+=</span><span class="s2">"/etc/udev/scripts/usb-audio.sh"</span>
<span class="nv">LABEL</span> <span class="o">=</span><span class="s2">"End"</span></code></pre>
<p>J'ai tenté une version plus simple aussi : </p>
<pre><code class="sh"><span class="nv">KERNELS</span><span class="o">==</span><span class="s2">"usb1"</span>,ACTION<span class="o">==</span><span class="s2">"add"</span>, <span class="nv">SUBSYSTEMS</span><span class="o">==</span><span class="s2">"usb"</span>, <span class="nv">DEVPATH</span><span class="o">==</span><span class="s2">"/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0c"</span>, <span class="nv">RUN</span><span class="o">+=</span><span class="s2">"/etc/udev/scripts/usb-audio.sh"</span></code></pre>
<p>J'ai changé le devpath avec /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/ ou même juste sans DEVPATH. <br>
J'ai essayé sans "KERNEL" et avec un deuxième SUBSYSTEM : SUBSYSTEM=SOUND</p>
<p>Coté script, j'ai testé, il fonctionne si je l'appelle à la main.</p>
<p>Coté test j'ai ça : </p>
<pre><code class="sh">root@machine:/etc/udev/rules.d# udevadm <span class="nb">test</span> usb-audio.rules
calling: <span class="nb">test</span>
version <span class="m">232</span>
This program is <span class="k">for</span> debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.</code></pre>
<pre><code class="sh"><span class="o">===</span> trie on-disk <span class="o">===</span>
tool version: <span class="m">232</span>
file size: <span class="m">8446385</span> bytes
header size <span class="m">80</span> bytes
strings <span class="m">1848513</span> bytes
nodes <span class="m">6597792</span> bytes
Load module index
Found container virtualization none
timestamp of <span class="s1">'/etc/systemd/network'</span> changed
timestamp of <span class="s1">'/lib/systemd/network'</span> changed
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
timestamp of <span class="s1">'/etc/udev/rules.d'</span> changed
Reading rules file: /etc/udev/rules.d/10-imx.rules
Reading rules file: /lib/udev/rules.d/50-firmware.rules
Reading rules file: /lib/udev/rules.d/50-udev-default.rules
Reading rules file: /lib/udev/rules.d/60-block.rules
Reading rules file: /lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /lib/udev/rules.d/60-drm.rules
Reading rules file: /lib/udev/rules.d/60-evdev.rules
Reading rules file: /lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /lib/udev/rules.d/60-serial.rules
Reading rules file: /lib/udev/rules.d/64-btrfs.rules
Reading rules file: /lib/udev/rules.d/70-mouse.rules
Reading rules file: /etc/udev/rules.d/70-persistent-net.rules
Reading rules file: /lib/udev/rules.d/70-power-switch.rules
Reading rules file: /lib/udev/rules.d/70-touchpad.rules
Reading rules file: /lib/udev/rules.d/70-uaccess.rules
Reading rules file: /lib/udev/rules.d/71-seat.rules
Reading rules file: /lib/udev/rules.d/73-seat-late.rules
Reading rules file: /lib/udev/rules.d/75-net-description.rules
Reading rules file: /lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /lib/udev/rules.d/78-sound-card.rules
Reading rules file: /lib/udev/rules.d/80-drivers.rules
Reading rules file: /lib/udev/rules.d/80-libinput-device-groups.rules
Reading rules file: /lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /lib/udev/rules.d/90-alsa-restore.rules
Reading rules file: /lib/udev/rules.d/90-libinput-model-quirks.rules
Reading rules file: /lib/udev/rules.d/90-pulseaudio.rules
Reading rules file: /lib/udev/rules.d/90-vconsole.rules
Reading rules file: /lib/udev/rules.d/99-systemd.rules
Reading rules file: /etc/udev/rules.d/automount.rules
Reading rules file: /etc/udev/rules.d/autonet.rules
Reading rules file: /etc/udev/rules.d/localextra.rules
Reading rules file: /etc/udev/rules.d/touchscreen.rules
Reading rules file: /etc/udev/rules.d/usb-audio.rules
Reading rules file: /etc/udev/rules.d/usb-cameras.rules
Reading rules file: /etc/udev/rules.d/wayland-tsc2046-calibration.rules
rules contain <span class="m">24576</span> bytes tokens <span class="o">(</span><span class="m">2048</span> * <span class="m">12</span> bytes<span class="o">)</span>, <span class="m">11956</span> bytes strings
<span class="m">1850</span> strings <span class="o">(</span><span class="m">23514</span> bytes<span class="o">)</span>, <span class="m">1223</span> de-duplicated <span class="o">(</span><span class="m">12186</span> bytes<span class="o">)</span>, <span class="m">628</span> trie nodes used
sd-device: syspath <span class="s1">'/sysusb-audio.rules'</span> is not a subdirectory of /sys
unable to open device <span class="s1">'/sysusb-audio.rules'</span> <------------- ERREUR
Unload module index
Unloaded link configuration context.</code></pre>
<p>Avec cette étrange erreur à la fin (avec <------- rajouté). J'ai tenté de googler cette erreur mais sans succès.</p>
<p>Quand je fais un udevadm monitor -p j'obtiens ceci quand je branche une petite carte son USB que j'ai : </p>
<pre><code class="sh"><span class="o">[</span> <span class="m">2396</span>.939499<span class="o">]</span> usb <span class="m">1</span>-1: new full-speed USB device number <span class="m">4</span> using ci_hdrc
KERNEL<span class="o">[</span><span class="m">2397</span>.164823<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">BUSNUM</span><span class="o">=</span><span class="m">001</span>
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/bus/usb/001/004
<span class="nv">DEVNUM</span><span class="o">=</span><span class="m">004</span>
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_device
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">189</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">3</span>
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2086</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.175979<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">1</span>/1/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic01isc01ip00in00
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2087</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.263313<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1 <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2088</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.265742<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/<span class="o">[</span> <span class="m">2397</span>.232485<span class="o">]</span> input: C-Media Electronics Inc. USB PnP Sound Device as /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4
<span class="m">1</span>-1/1-1:1.0/sound/card1/controlC1 <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/snd/controlC1
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/controlC1
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">116</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">32</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2089</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.269908<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0p <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/snd/pcmC1D0p
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0p
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">116</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">48</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2090</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.273493<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0c <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/snd/pcmC1<span class="o">[</span> <span class="m">2397</span>.311439<span class="o">]</span> hid-generic <span class="m">0003</span>:0D8C:013C.0003: input: USB HID v1.00 Device <span class="o">[</span>C-Media Electronics Inc. USB PnP Sound Device<span class="o">]</span> on usb-ci_hdrc.0-1/input3
D0c
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0c
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">116</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">56</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2091</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.275874<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.1 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.1
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">DRIVER</span><span class="o">=</span>snd-usb-audio
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">1</span>/2/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic01isc02ip00in01
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2092</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.278113<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.2 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.2
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">DRIVER</span><span class="o">=</span>snd-usb-audio
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">1</span>/2/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic01isc02ip00in02
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2093</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0<span class="sb">```</span>
<span class="sb">```</span>sh
KERNEL<span class="o">[</span><span class="m">2397</span>.280425<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">3</span>/0/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic03isc00ip00in03
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2094</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.288344<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003 <span class="o">(</span>hid<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003
<span class="nv">HID_ID</span><span class="o">=</span><span class="m">0003</span>:00000D8C:0000013C
<span class="nv">HID_NAME</span><span class="o">=</span>C-Media Electronics Inc. USB PnP Sound Device
<span class="nv">HID_PHYS</span><span class="o">=</span>usb-ci_hdrc.0-1/input3
<span class="nv">HID_UNIQ</span><span class="o">=</span>
<span class="nv">MODALIAS</span><span class="o">=</span>hid:b0003g0001v00000D8Cp0000013C
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2095</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>hid</code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.292701<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4 <span class="o">(</span>input<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4
<span class="nv">EV</span><span class="o">=</span><span class="m">13</span>
<span class="nv">KEY</span><span class="o">=</span><span class="m">78</span> <span class="m">0</span> e0000 <span class="m">0</span> <span class="m">0</span> <span class="m">0</span>
<span class="nv">MODALIAS</span><span class="o">=</span>input:b0003v0D8Cp013Ce0100-e0,1,4,k71,72,73,A3,A4,A5,A6,ram4,lsfw
<span class="nv">MSC</span><span class="o">=</span><span class="m">10</span>
<span class="nv">NAME</span><span class="o">=</span><span class="s2">"C-Media Electronics Inc. USB PnP Sound Device"</span>
<span class="nv">PHYS</span><span class="o">=</span><span class="s2">"usb-ci_hdrc.0-1/input3"</span>
<span class="nv">PRODUCT</span><span class="o">=</span><span class="m">3</span>/d8c/13c/100
<span class="nv">PROP</span><span class="o">=</span><span class="m">0</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2096</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>input
<span class="nv">UNIQ</span><span class="o">=</span><span class="s2">""</span></code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.372400<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4/event0 <span class="o">(</span>input<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/input/event0
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4/event0
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">13</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">64</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2097</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>input</code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.406268<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">BUSNUM</span><span class="o">=</span><span class="m">001</span>
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/bus/usb/001/004
<span class="nv">DEVNUM</span><span class="o">=</span><span class="m">004</span>
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_device
<span class="nv">DRIVER</span><span class="o">=</span>usb
<span class="nv">ID_BUS</span><span class="o">=</span>usb
<span class="nv">ID_MODEL</span><span class="o">=</span>USB_PnP_Sound_Device
<span class="nv">ID_MODEL_ENC</span><span class="o">=</span>USB<span class="se">\x</span>20PnP<span class="se">\x</span>20Sound<span class="se">\x</span>20Device
<span class="nv">ID_MODEL_FROM_DATABASE</span><span class="o">=</span>CM108 Audio Controller
<span class="nv">ID_MODEL_ID</span><span class="o">=</span>013c
<span class="nv">ID_REVISION</span><span class="o">=</span><span class="m">0100</span>
<span class="nv">ID_SERIAL</span><span class="o">=</span>C-Media_Electronics_Inc._USB_PnP_Sound_Device
<span class="nv">ID_USB_INTERFACES</span><span class="o">=</span>:010100:010200:030000:
<span class="nv">ID_VENDOR</span><span class="o">=</span>C-Media_Electronics_Inc.
<span class="nv">ID_VENDOR_ENC</span><span class="o">=</span>C-Media<span class="se">\x</span>20Electronics<span class="se">\x</span>20Inc.<span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span>
<span class="nv">ID_VENDOR_FROM_DATABASE</span><span class="o">=</span>C-Media Electronics, Inc.
<span class="nv">ID_VENDOR_ID</span><span class="o">=</span>0d8c
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">189</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">3</span>
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2086</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397404984</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.436641<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">ID_MODEL_FROM_DATABASE</span><span class="o">=</span>CM108 Audio Controller
<span class="nv">ID_VENDOR_FROM_DATABASE</span><span class="o">=</span>C-Media Electronics, Inc.
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">1</span>/1/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic01isc01ip00in00
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2087</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397434502</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.447076<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.1 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.1
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">DRIVER</span><span class="o">=</span>snd-usb-audio
<span class="nv">ID_MODEL_FROM_DATABASE</span><span class="o">=</span>CM108 Audio Controller
<span class="nv">ID_VENDOR_FROM_DATABASE</span><span class="o">=</span>C-Media Electronics, Inc.
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">1</span>/2/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic01isc02ip00in01
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2092</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397444997</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.468465<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.2 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.2
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">DRIVER</span><span class="o">=</span>snd-usb-audio
<span class="nv">ID_MODEL_FROM_DATABASE</span><span class="o">=</span>CM108 Audio Controller
<span class="nv">ID_VENDOR_FROM_DATABASE</span><span class="o">=</span>C-Media Electronics, Inc.
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">1</span>/2/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic01isc02ip00in02
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2093</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397466492</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.800899<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1 <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1
<span class="nv">ID_FOR_SEAT</span><span class="o">=</span>sound-platform-ci_hdrc_0-usb-0_1_1_0
<span class="nv">ID_PATH</span><span class="o">=</span>platform-ci_hdrc.0-usb-0:1:1.0
<span class="nv">ID_PATH_TAG</span><span class="o">=</span>platform-ci_hdrc_0-usb-0_1_1_0
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2088</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound
<span class="nv">SYSTEMD_WANTS</span><span class="o">=</span>sound.target
<span class="nv">TAGS</span><span class="o">=</span>:systemd:seat:
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397470283</span></code></pre>
<pre><code class="sh">KERNEL<span class="o">[</span><span class="m">2397</span>.801432<span class="o">]</span> change /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1 <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>change
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2098</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound</code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.801840<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3 <span class="o">(</span>usb<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3
<span class="nv">DEVTYPE</span><span class="o">=</span>usb_interface
<span class="nv">ID_MODEL_FROM_DATABASE</span><span class="o">=</span>CM108 Audio Controller
<span class="nv">ID_VENDOR_FROM_DATABASE</span><span class="o">=</span>C-Media Electronics, Inc.
<span class="nv">INTERFACE</span><span class="o">=</span><span class="m">3</span>/0/0
<span class="nv">MODALIAS</span><span class="o">=</span>usb:v0D8Cp013Cd0100dc00dsc00dp00ic03isc00ip00in03
<span class="nv">PRODUCT</span><span class="o">=</span>d8c/13c/100
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2094</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>usb
<span class="nv">TYPE</span><span class="o">=</span><span class="m">0</span>/0/0
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397472252</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.802471<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003 <span class="o">(</span>hid<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003
<span class="nv">HID_ID</span><span class="o">=</span><span class="m">0003</span>:00000D8C:0000013C
<span class="nv">HID_NAME</span><span class="o">=</span>C-Media Electronics Inc. USB PnP Sound Device
<span class="nv">HID_PHYS</span><span class="o">=</span>usb-ci_hdrc.0-1/input3
<span class="nv">HID_UNIQ</span><span class="o">=</span>
<span class="nv">MODALIAS</span><span class="o">=</span>hid:b0003g0001v00000D8Cp0000013C
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2095</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>hid
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397507417</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.803068<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0p <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/snd/pcmC1D0p
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0p
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">116</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">48</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2090</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound
<span class="nv">TAGS</span><span class="o">=</span>:uaccess:
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397505286</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.803932<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0c <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/snd/pcmC1D0c
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/pcmC1D0c
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">116</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">56</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2091</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound
<span class="nv">TAGS</span><span class="o">=</span>:uaccess:
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397554296</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.804783<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4 <span class="o">(</span>input<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4
<span class="nv">EV</span><span class="o">=</span><span class="m">13</span>
<span class="nv">ID_BUS</span><span class="o">=</span>usb
<span class="nv">ID_FOR_SEAT</span><span class="o">=</span>input-platform-ci_hdrc_0-usb-0_1_1_3
<span class="nv">ID_INPUT</span><span class="o">=</span><span class="m">1</span>
<span class="nv">ID_INPUT_KEY</span><span class="o">=</span><span class="m">1</span>
<span class="nv">ID_MODEL</span><span class="o">=</span>USB_PnP_Sound_Device
<span class="nv">ID_MODEL_ENC</span><span class="o">=</span>USB<span class="se">\x</span>20PnP<span class="se">\x</span>20Sound<span class="se">\x</span>20Device
<span class="nv">ID_MODEL_ID</span><span class="o">=</span>013c
<span class="nv">ID_PATH</span><span class="o">=</span>platform-ci_hdrc.0-usb-0:1:1.3
<span class="nv">ID_PATH_TAG</span><span class="o">=</span>platform-ci_hdrc_0-usb-0_1_1_3
<span class="nv">ID_REVISION</span><span class="o">=</span><span class="m">0100</span>
<span class="nv">ID_SERIAL</span><span class="o">=</span>C-Media_Electronics_Inc._USB_PnP_Sound_Device
<span class="nv">ID_TYPE</span><span class="o">=</span>hid
<span class="nv">ID_USB_DRIVER</span><span class="o">=</span>usbhid
<span class="nv">ID_USB_INTERFACES</span><span class="o">=</span>:010100:010200:030000:
<span class="nv">ID_USB_INTERFACE_NUM</span><span class="o">=</span><span class="m">03</span>
<span class="nv">ID_VENDOR</span><span class="o">=</span>C-Media_Electronics_Inc.
<span class="nv">ID_VENDOR_ENC</span><span class="o">=</span>C-Media<span class="se">\x</span>20Electronics<span class="se">\x</span>20Inc.<span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span>
<span class="nv">ID_VENDOR_ID</span><span class="o">=</span>0d8c
<span class="nv">KEY</span><span class="o">=</span><span class="m">78</span> <span class="m">0</span> e0000 <span class="m">0</span> <span class="m">0</span> <span class="m">0</span>
<span class="nv">MODALIAS</span><span class="o">=</span>input:b0003v0D8Cp013Ce0100-e0,1,4,k71,72,73,A3,A4,A5,A6,ram4,lsfw
<span class="nv">MSC</span><span class="o">=</span><span class="m">10</span>
<span class="nv">NAME</span><span class="o">=</span><span class="s2">"C-Media Electronics Inc. USB PnP Sound Device"</span>
<span class="nv">PHYS</span><span class="o">=</span><span class="s2">"usb-ci_hdrc.0-1/input3"</span>
<span class="nv">PRODUCT</span><span class="o">=</span><span class="m">3</span>/d8c/13c/100
<span class="nv">PROP</span><span class="o">=</span><span class="m">0</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2096</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>input
<span class="nv">TAGS</span><span class="o">=</span>:seat:
<span class="nv">UNIQ</span><span class="o">=</span><span class="s2">""</span>
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397567029</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2397</span>.806766<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/controlC1 <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVLINKS</span><span class="o">=</span>/dev/snd/by-id/usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00 /dev/snd/by-path/platform-ci_hdrc.0-usb-0:1:1.0
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/snd/controlC1
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1/controlC1
<span class="nv">ID_BUS</span><span class="o">=</span>usb
<span class="nv">ID_MODEL</span><span class="o">=</span>USB_PnP_Sound_Device
<span class="nv">ID_MODEL_ENC</span><span class="o">=</span>USB<span class="se">\x</span>20PnP<span class="se">\x</span>20Sound<span class="se">\x</span>20Device
<span class="nv">ID_MODEL_ID</span><span class="o">=</span>013c
<span class="nv">ID_PATH</span><span class="o">=</span>platform-ci_hdrc.0-usb-0:1:1.0
<span class="nv">ID_PATH_TAG</span><span class="o">=</span>platform-ci_hdrc_0-usb-0_1_1_0
<span class="nv">ID_REVISION</span><span class="o">=</span><span class="m">0100</span>
<span class="nv">ID_SERIAL</span><span class="o">=</span>C-Media_Electronics_Inc._USB_PnP_Sound_Device
<span class="nv">ID_TYPE</span><span class="o">=</span>audio
<span class="nv">ID_USB_DRIVER</span><span class="o">=</span>snd-usb-audio
<span class="nv">ID_USB_INTERFACES</span><span class="o">=</span>:010100:010200:030000:
<span class="nv">ID_USB_INTERFACE_NUM</span><span class="o">=</span><span class="m">00</span>
<span class="nv">ID_VENDOR</span><span class="o">=</span>C-Media_Electronics_Inc.
<span class="nv">ID_VENDOR_ENC</span><span class="o">=</span>C-Media<span class="se">\x</span>20Electronics<span class="se">\x</span>20Inc.<span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span>
<span class="nv">ID_VENDOR_ID</span><span class="o">=</span>0d8c
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">116</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">32</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2089</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound
<span class="nv">TAGS</span><span class="o">=</span>:uaccess:
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397546404</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2398</span>.142519<span class="o">]</span> change /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1 <span class="o">(</span>sound<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>change
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/sound/card1
<span class="nv">ID_BUS</span><span class="o">=</span>usb
<span class="nv">ID_FOR_SEAT</span><span class="o">=</span>sound-platform-ci_hdrc_0-usb-0_1_1_0
<span class="nv">ID_ID</span><span class="o">=</span>usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00
<span class="nv">ID_MODEL</span><span class="o">=</span>USB_PnP_Sound_Device
<span class="nv">ID_MODEL_ENC</span><span class="o">=</span>USB<span class="se">\x</span>20PnP<span class="se">\x</span>20Sound<span class="se">\x</span>20Device
<span class="nv">ID_MODEL_FROM_DATABASE</span><span class="o">=</span>CM108 Audio Controller
<span class="nv">ID_MODEL_ID</span><span class="o">=</span>013c
<span class="nv">ID_PATH</span><span class="o">=</span>platform-ci_hdrc.0-usb-0:1:1.0
<span class="nv">ID_PATH_TAG</span><span class="o">=</span>platform-ci_hdrc_0-usb-0_1_1_0
<span class="nv">ID_REVISION</span><span class="o">=</span><span class="m">0100</span>
<span class="nv">ID_SERIAL</span><span class="o">=</span>C-Media_Electronics_Inc._USB_PnP_Sound_Device
<span class="nv">ID_TYPE</span><span class="o">=</span>audio
<span class="nv">ID_USB_DRIVER</span><span class="o">=</span>snd-usb-audio
<span class="nv">ID_USB_INTERFACES</span><span class="o">=</span>:010100:010200:030000:
<span class="nv">ID_USB_INTERFACE_NUM</span><span class="o">=</span><span class="m">00</span>
<span class="nv">ID_VENDOR</span><span class="o">=</span>C-Media_Electronics_Inc.
<span class="nv">ID_VENDOR_ENC</span><span class="o">=</span>C-Media<span class="se">\x</span>20Electronics<span class="se">\x</span>20Inc.<span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span>
<span class="nv">ID_VENDOR_FROM_DATABASE</span><span class="o">=</span>C-Media Electronics, Inc.
<span class="nv">ID_VENDOR_ID</span><span class="o">=</span>0d8c
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2098</span>
<span class="nv">SOUND_INITIALIZED</span><span class="o">=</span><span class="m">1</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>sound
<span class="nv">SYSTEMD_WANTS</span><span class="o">=</span>sound.target
<span class="nv">TAGS</span><span class="o">=</span>:systemd:seat:
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397470283</span></code></pre>
<pre><code class="sh">UDEV <span class="o">[</span><span class="m">2398</span>.146002<span class="o">]</span> add /devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4/event0 <span class="o">(</span>input<span class="o">)</span>
<span class="nv">ACTION</span><span class="o">=</span>add
<span class="nv">DEVLINKS</span><span class="o">=</span>/dev/input/by-path/platform-ci_hdrc.0-usb-0:1:1.3-event /dev/input/by-id/usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-event-if03
<span class="nv">DEVNAME</span><span class="o">=</span>/dev/input/event0
<span class="nv">DEVPATH</span><span class="o">=</span>/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/usb1/1-1/1-1:1.3/0003:0D8C:013C.0003/input/input4/event0
<span class="nv">ID_BUS</span><span class="o">=</span>usb
<span class="nv">ID_INPUT</span><span class="o">=</span><span class="m">1</span>
<span class="nv">ID_INPUT_KEY</span><span class="o">=</span><span class="m">1</span>
<span class="nv">ID_MODEL</span><span class="o">=</span>USB_PnP_Sound_Device
<span class="nv">ID_MODEL_ENC</span><span class="o">=</span>USB<span class="se">\x</span>20PnP<span class="se">\x</span>20Sound<span class="se">\x</span>20Device
<span class="nv">ID_MODEL_ID</span><span class="o">=</span>013c
<span class="nv">ID_PATH</span><span class="o">=</span>platform-ci_hdrc.0-usb-0:1:1.3
<span class="nv">ID_PATH_TAG</span><span class="o">=</span>platform-ci_hdrc_0-usb-0_1_1_3
<span class="nv">ID_REVISION</span><span class="o">=</span><span class="m">0100</span>
<span class="nv">ID_SERIAL</span><span class="o">=</span>C-Media_Electronics_Inc._USB_PnP_Sound_Device
<span class="nv">ID_TYPE</span><span class="o">=</span>hid
<span class="nv">ID_USB_DRIVER</span><span class="o">=</span>usbhid
<span class="nv">ID_USB_INTERFACES</span><span class="o">=</span>:010100:010200:030000:
<span class="nv">ID_USB_INTERFACE_NUM</span><span class="o">=</span><span class="m">03</span>
<span class="nv">ID_VENDOR</span><span class="o">=</span>C-Media_Electronics_Inc.
<span class="nv">ID_VENDOR_ENC</span><span class="o">=</span>C-Media<span class="se">\x</span>20Electronics<span class="se">\x</span>20Inc.<span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span><span class="se">\x</span><span class="m">20</span>
<span class="nv">ID_VENDOR_ID</span><span class="o">=</span>0d8c
<span class="nv">LIBINPUT_DEVICE_GROUP</span><span class="o">=</span><span class="m">3</span>/d8c/13c/100:usb-ci_hdrc.0-1
<span class="nv">MAJOR</span><span class="o">=</span><span class="m">13</span>
<span class="nv">MINOR</span><span class="o">=</span><span class="m">64</span>
<span class="nv">SEQNUM</span><span class="o">=</span><span class="m">2097</span>
<span class="nv">SUBSYSTEM</span><span class="o">=</span>input
<span class="nv">USEC_INITIALIZED</span><span class="o">=</span><span class="m">2397706931</span></code></pre>
<p>Je suis infiniement désolée pour l'immense pavé (pour un premier post en plus…). J'espère ne pas m'être trompée d'endroit pour poser ma question.</p>
<p>Merci à vous :)</p>
<div><a href="https://linuxfr.org/forums/linux-embarque/posts/detection-de-branchement-usb-avec-udev-qui-ne-fonctionne-pas.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/124022/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-embarque/posts/detection-de-branchement-usb-avec-udev-qui-ne-fonctionne-pas#comments">ouvrir dans le navigateur</a>
</p>
erinndalria
https://linuxfr.org/nodes/124022/comments.atom
tag:linuxfr.org,2005:Post/42012
2021-04-05T10:00:26+02:00
2021-04-05T17:03:11+02:00
problème avec dma_map_single
<p>Bonjour,<br>
Je travaille sur un imx7d de NxP. Je travaille sur 2 cartes l'eval board de Nxp (la carte sabre) et une board personnelle. J'ai développé un driver memcpy qui utilise le sdma de l'imx7d. Le but étant de copier les données reçu du pci express dans une mémoire vers une autre mémoire. <br>
Ce driver fonctionne de la façon suivante l'utilisateur alloue de la mémoire via un ioctl cette mémoire étant la zone de réception. Puis quand il souhaite faire une memcpy il utilise le read du driver en mettant en paramètre la quantité de lecture qu'il veut copié. C'est la qu'intervient le sdma il va faire une copie de la quantité de données indiqué dans le read de l'adresse physique qui a été préalablement indiqué par l'utilisateur vers la zone mémoire allouée. <br>
J'ai fait des teste de ce driver au début sur la carte Sabre. Et la il fonctionnait tres bien.<br>
J'ai ensuite testé ce driver sur ma board personnel et la problème.<br>
Le problème est sur la fonction dma_map_single. Plus exactement sur dma_cache_maint_page et exactement sur <br>
l'appelle de PageHighMem(page) dans dma_cache_maint_page.<br>
Les deux seule différencew entre ma board personnel et l'eval board sont:<br>
- la taille de la ddr sur ma board j'ai 512M alors que sur la sabre il y a 1G.<br>
- l'adresse physique source 0x90000000 pour ma board et 0xB0000000 pour la sabre.<br>
Les mémoire allouées sont assé grosse de l'odre de 1M et la copie peut être entre 300K et 1M.<br>
J'ai déjà essayé beaucoup de choses. J'ai essayé de reduire la taille copiée à 8K mais pas mieux.<br>
Donc j'avoue que la je suis un peu perdu je pense que j'ai du mal à maitriser ces histoire de dma et d'allocation.<br>
Donc j'ai besoin d'aide merci d'avance pour vos réponses.</p>
<p>Yodalesage<br>
Ci-dessous je mets le log linux <br>
Je vous join aussi mon driver il n'est certainement pas parfait il manque plein de securité donc vos remarque sont le bienvenu pour m'améliorer</p>
<pre><code class="sh">Unable to handle kernel paging request at virtual address 9ee4f240
<span class="nv">pgd</span> <span class="o">=</span> 99e50000
<span class="o">[</span>9ee4f240<span class="o">]</span> *pgd<span class="o">=</span><span class="m">00000000</span>
Internal error: Oops: <span class="m">5</span> <span class="o">[</span><span class="c1">#1] PREEMPT SMP ARM</span>
Modules linked in: usb_f_acm u_serial g_serial libcomposite configfs imx_rpmsg_tty cdc_acm goodix evbug
CPU: <span class="m">1</span> PID: <span class="m">566</span> Comm: testTactile Not tainted <span class="m">4</span>.9.11-1.0.0+gc27010d <span class="c1">#52</span>
Hardware name: Freescale i.MX7 Dual <span class="o">(</span>Device Tree<span class="o">)</span>
task: 9931d280 task.stack: 9ad10000
PC is at dma_cache_maint_page+0x50/0x128
LR is at 0x81000
pc : <span class="o">[</span><<span class="m">80113480</span>><span class="o">]</span> lr : <span class="o">[</span><<span class="m">00081000</span>><span class="o">]</span> psr: 600d0013
sp : 9ad11e20 ip : 9ea19000 fp : 80f030d4
r10: <span class="m">00000000</span> r9 : 8011362c r8 : 80117bf8
r7 : <span class="m">00000002</span> r6 : 000a2b12 r5 : <span class="m">00000000</span> r4 : 0004b05c
r3 : 00021b12 r2 : 0004b05c r1 : <span class="m">00081000</span> r0 : <span class="m">00436240</span>
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
Control: 10c53c7d Table: 9ae5006a DAC: <span class="m">00000051</span>
Process testTactile <span class="o">(</span>pid: <span class="m">566</span>, stack <span class="nv">limit</span> <span class="o">=</span> 0x9ad10210<span class="o">)</span>
Stack: <span class="o">(</span>0x9ad11e20 to 0x9ad12000<span class="o">)</span>
1e20: 80f06384 80fd7644 8016fbfc <span class="m">00000000</span> 9ee4f240 0004b05c <span class="m">00000002</span> <span class="m">00000002</span>
1e40: 8011362c <span class="m">00000000</span> 6c017e54 <span class="m">80113580</span> 80117bf8 801b8d6c 1b6b0b00 9ee4f240
1e60: 990c8210 <span class="m">00000000</span> 0004b05c <span class="m">80113690</span> 99ec2c00 9934c11c <span class="m">00000000</span> <span class="m">80512440</span>
1e80: <span class="m">00000002</span> <span class="m">00000000</span> <span class="m">00000000</span> <span class="m">00000000</span> 9919a998 99bc9d38 99b6e240 <span class="m">00000004</span>
1ea0: <span class="m">00000013</span> 80e6a900 9ad11f04 802085cc <span class="m">00000000</span> 99ec2c00 <span class="m">80512514</span> 0004b05c
1ec0: 9ad11f80 <span class="m">00000000</span> 0004b05c <span class="m">80512540</span> <span class="m">00000000</span> <span class="m">00000013</span> 9ad11f80 <span class="m">00000000</span>
1ee0: <span class="m">00000000</span> <span class="m">00000000</span> 6c017e54 99b7b000 <span class="m">80512514</span> 801ffc30 <span class="m">00000000</span> 01074ee0
1f00: <span class="m">00000013</span> <span class="m">00000001</span> <span class="m">00000000</span> <span class="m">00000000</span> 9ad11f04 <span class="m">00000000</span> 99b6e240 <span class="m">00000000</span>
1f20: <span class="m">00000000</span> <span class="m">00000000</span> <span class="m">00000000</span> <span class="m">00000000</span> <span class="m">00000000</span> 99b6e240 <span class="m">00000000</span> 9b344408
1f40: <span class="m">00000002</span> 99b7b000 <span class="m">00000000</span> 0004b05c 9ad11f80 <span class="m">00000000</span> 0004b05c 80200a08
1f60: 7efff612 <span class="m">00000003</span> 99b7b001 99b7b000 <span class="m">00000000</span> <span class="m">00000000</span> <span class="m">00000000</span> 802017f4
1f80: <span class="m">00000000</span> <span class="m">00000000</span> <span class="m">00000000</span> 0013f6a0 734ee858 7efff612 <span class="m">00000003</span> <span class="m">80107804</span>
1fa0: 9ad10000 <span class="m">80107640</span> 0013f6a0 734ee858 <span class="m">00000023</span> <span class="m">00000000</span> 0004b05c 0004b05c
1fc0: 0013f6a0 734ee858 7efff612 <span class="m">00000003</span> 7efff9f8 6c017f90 <span class="m">00000000</span> 6c017e54
1fe0: <span class="m">00000000</span> 6c017cd0 <span class="m">00000000</span> 76154ed8 800d0010 <span class="m">00000023</span> <span class="m">00000000</span> <span class="m">00000000</span>
<span class="o">[</span><<span class="m">80113480</span>><span class="o">]</span> <span class="o">(</span>dma_cache_maint_page<span class="o">)</span> from <span class="o">[</span><<span class="m">80113580</span>><span class="o">]</span> <span class="o">(</span>__dma_page_cpu_to_dev+0x28/0x90<span class="o">)</span>
<span class="o">[</span><<span class="m">80113580</span>><span class="o">]</span> <span class="o">(</span>__dma_page_cpu_to_dev<span class="o">)</span> from <span class="o">[</span><<span class="m">80113690</span>><span class="o">]</span> <span class="o">(</span>arm_dma_map_page+0x64/0x68<span class="o">)</span>
<span class="o">[</span><<span class="m">80113690</span>><span class="o">]</span> <span class="o">(</span>arm_dma_map_page<span class="o">)</span> from <span class="o">[</span><<span class="m">80512440</span>><span class="o">]</span> <span class="o">(</span>memcpydevSrc+0xfc/0x1d0<span class="o">)</span>
<span class="o">[</span><<span class="m">80512440</span>><span class="o">]</span> <span class="o">(</span>memcpydevSrc<span class="o">)</span> from <span class="o">[</span><<span class="m">80512540</span>><span class="o">]</span> <span class="o">(</span>memcpydev_read+0x2c/0xa0<span class="o">)</span>
<span class="o">[</span><<span class="m">80512540</span>><span class="o">]</span> <span class="o">(</span>memcpydev_read<span class="o">)</span> from <span class="o">[</span><801ffc30><span class="o">]</span> <span class="o">(</span>__vfs_read+0x1c/0x10c<span class="o">)</span>
<span class="o">[</span><801ffc30><span class="o">]</span> <span class="o">(</span>__vfs_read<span class="o">)</span> from <span class="o">[</span><80200a08><span class="o">]</span> <span class="o">(</span>vfs_read+0x8c/0x118<span class="o">)</span>
<span class="o">[</span><80200a08><span class="o">]</span> <span class="o">(</span>vfs_read<span class="o">)</span> from <span class="o">[</span><802017f4><span class="o">]</span> <span class="o">(</span>SyS_read+0x3c/0x90<span class="o">)</span>
<span class="o">[</span><802017f4><span class="o">]</span> <span class="o">(</span>SyS_read<span class="o">)</span> from <span class="o">[</span><<span class="m">80107640</span>><span class="o">]</span> <span class="o">(</span>ret_fast_syscall+0x0/0x3c<span class="o">)</span>
Code: e08e1621 e1a07003 e08162c0 e046300e <span class="o">(</span>e79c2283<span class="o">)</span>
---<span class="o">[</span> end trace a2d887416e214d33 <span class="o">]</span>---</code></pre>
<pre><code class="C"><span class="cm">/* Kernel Programming */</span>
<span class="cm">/**=======================================================</span>
<span class="cm"> * @file memcpydev.c</span>
<span class="cm"> * @brief Manage memcopy to or from device.</span>
<span class="cm"> * If use the function read then the memcopy is mem from dev</span>
<span class="cm"> * if use the function write then the memcopy is mem to dev.</span>
<span class="cm"> * Use ioctl function to manage the memory (size ngb memory in fifo)</span>
<span class="cm"> * Use mmap to manipulate the memory.</span>
<span class="cm"> *</span>
<span class="cm"> * $Author: frdl $</span>
<span class="cm"> * $Date: 2017-12-16 04:38:16 +0100 (sam. 16 déc. 2017) $</span>
<span class="cm"> * $Revision: 559 $</span>
<span class="cm"> *</span>
<span class="cm"> * $LastChangedBy: frdl $</span>
<span class="cm"> * $LastChangedDate: 2017-12-16 04:38:16 +0100 (sam. 16 déc. 2017) $</span>
<span class="cm"> * $LastChangedRevision: 559 $</span>
<span class="cm">========================================================*/</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_probe</span><span class="p">(</span><span class="k">struct</span> <span class="n">platform_device</span><span class="o">*</span> <span class="n">device</span><span class="p">);</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_remove</span><span class="p">(</span><span class="k">struct</span> <span class="n">platform_device</span><span class="o">*</span> <span class="n">device</span><span class="p">);</span>
<span class="k">static</span> <span class="kt">bool</span> <span class="nf">dma_mem_filter</span><span class="p">(</span><span class="k">struct</span> <span class="n">dma_chan</span><span class="o">*</span> <span class="n">chan</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">param</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">imx_dma_is_general_purpose</span><span class="p">(</span><span class="n">chan</span><span class="p">))</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">chan</span><span class="o">-></span><span class="n">private</span> <span class="o">=</span> <span class="n">param</span><span class="p">;</span>
<span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="nf">dma_mem_deinit</span><span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memcpyDev</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">kfree</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_ok</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">dma_mem_init</span><span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memcpyDev</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">dma_cap_mask_t</span> <span class="n">dma_mem_mask</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">imx_dma_data</span> <span class="n">mem_dma_data</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_ok</span> <span class="o">=</span> <span class="n">kmalloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span> <span class="n">completion</span><span class="p">),</span> <span class="n">GFP_KERNEL</span><span class="p">);</span>
<span class="n">init_completion</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_ok</span><span class="p">);</span>
<span class="n">dma_cap_zero</span><span class="p">(</span><span class="n">dma_mem_mask</span><span class="p">);</span>
<span class="n">dma_cap_set</span><span class="p">(</span><span class="n">DMA_SLAVE</span><span class="p">,</span> <span class="n">dma_mem_mask</span><span class="p">);</span>
<span class="n">mem_dma_data</span><span class="p">.</span><span class="n">peripheral_type</span> <span class="o">=</span> <span class="n">IMX_DMATYPE_MEMORY</span><span class="p">;</span>
<span class="n">mem_dma_data</span><span class="p">.</span><span class="n">priority</span> <span class="o">=</span> <span class="n">DMA_PRIO_HIGH</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_chan</span> <span class="o">=</span> <span class="n">dma_request_channel</span><span class="p">(</span><span class="n">dma_mem_mask</span><span class="p">,</span> <span class="n">dma_mem_filter</span><span class="p">,</span> <span class="o">&</span><span class="n">mem_dma_data</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_chan</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="s">"Error opening the SDMA memory to memory channel</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EINVAL</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">static</span> <span class="kt">void</span> <span class="nf">dma_mem_callbackSrc</span><span class="p">(</span><span class="kt">void</span><span class="o">*</span> <span class="n">data</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memcpyDev</span><span class="p">;</span>
<span class="n">memcpyDev</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">data</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">readStatus</span> <span class="o">=</span> <span class="n">MEMCPY_OK</span><span class="p">;</span>
<span class="n">wake_up_interruptible</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">rwq</span><span class="p">));</span>
<span class="p">}</span>
<span class="k">static</span> <span class="kt">void</span> <span class="nf">dma_mem_callbackDst</span><span class="p">(</span><span class="kt">void</span><span class="o">*</span> <span class="n">data</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memcpyDev</span><span class="p">;</span>
<span class="n">memcpyDev</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">data</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">writeStatus</span> <span class="o">=</span> <span class="n">MEMCPY_OK</span><span class="p">;</span>
<span class="n">wake_up_interruptible</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">wwq</span><span class="p">));</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">memcpydevSrc</span><span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memcpyDev</span><span class="p">,</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">dma_async_tx_descriptor</span><span class="o">*</span> <span class="n">dma_m2m_desc</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">dma_chan</span><span class="o">*</span> <span class="n">dma_chan</span> <span class="o">=</span> <span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_chan</span><span class="p">;</span>
<span class="n">dma_addr_t</span> <span class="n">dma_dst</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">dma_slave_config</span> <span class="n">dma_m2m_config</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">status</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="cm">/*struct timeval tv1s, tv1e, tv2s, tv2e;</span>
<span class="cm"> u32 tv_count1, tv_count2;*/</span>
<span class="c1">// do_gettimeofday(&tv1s);</span>
<span class="n">dma_m2m_config</span><span class="p">.</span><span class="n">direction</span> <span class="o">=</span> <span class="n">DMA_MEM_TO_MEM</span><span class="p">;</span>
<span class="n">dma_m2m_config</span><span class="p">.</span><span class="n">dst_addr_width</span> <span class="o">=</span> <span class="n">DMA_SLAVE_BUSWIDTH_4_BYTES</span><span class="p">;</span>
<span class="n">dmaengine_slave_config</span><span class="p">(</span><span class="n">dma_chan</span><span class="p">,</span> <span class="o">&</span><span class="n">dma_m2m_config</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">size</span> <span class="o">%</span> <span class="mi">4</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">dma_dst</span> <span class="o">=</span> <span class="n">dma_map_single</span><span class="p">(</span><span class="n">dma_chan</span><span class="o">-></span><span class="n">device</span><span class="o">-></span><span class="n">dev</span><span class="p">,</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">memAllocate</span><span class="p">,</span>
<span class="n">size</span><span class="p">,</span>
<span class="n">DMA_FROM_DEVICE</span><span class="p">);</span>
<span class="n">dma_m2m_desc</span> <span class="o">=</span> <span class="n">dma_chan</span><span class="o">-></span><span class="n">device</span><span class="o">-></span><span class="n">device_prep_dma_memcpy</span><span class="p">(</span><span class="n">dma_chan</span><span class="p">,</span>
<span class="n">dma_dst</span><span class="p">,</span>
<span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">phyDevSrc</span><span class="p">),</span>
<span class="n">size</span><span class="p">,</span>
<span class="n">DMA_CTRL_ACK</span> <span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">dma_m2m_desc</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">dma_m2m_desc</span><span class="o">-></span><span class="n">callback</span> <span class="o">=</span> <span class="n">dma_mem_callbackSrc</span><span class="p">;</span>
<span class="n">dma_m2m_desc</span><span class="o">-></span><span class="n">callback_param</span> <span class="o">=</span> <span class="n">memcpyDev</span><span class="p">;</span>
<span class="c1">// do_gettimeofday(&tv2s);</span>
<span class="n">dma_cookie_t</span> <span class="n">dmasend</span> <span class="o">=</span> <span class="n">dmaengine_submit</span><span class="p">(</span><span class="n">dma_m2m_desc</span><span class="p">);</span>
<span class="n">dma_async_issue_pending</span><span class="p">(</span><span class="n">dma_chan</span><span class="p">);</span>
<span class="c1">// wait_for_completion(memcpyDev->dma_mem_ok);</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"the transfet phy src dma ok</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="cm">/* enum dma_status statusDma = dma_async_is_tx_complete(dma_chan,</span>
<span class="cm"> dmasend, NULL, NULL);</span>
<span class="cm"> while (statusDma == DMA_IN_PROGRESS || statusDma == DMA_PAUSED)</span>
<span class="cm"> {</span>
<span class="cm"> statusDma = dma_async_is_tx_complete(dma_chan, dmasend, NULL, NULL);</span>
<span class="cm"> }*/</span>
<span class="cm">/* do_gettimeofday(&tv2e);</span>
<span class="cm"> do_gettimeofday(&tv1e);</span>
<span class="cm"> // wake_up_interruptible(&(memcpyDev->rwq));</span>
<span class="cm"> printk(KERN_INFO "le wake interruptible est transmit pour phy src\n\r");</span>
<span class="cm"> tv_count1 = (tv1e.tv_sec - tv1s.tv_sec)</span>
<span class="cm"> * USEC_PER_SEC</span>
<span class="cm"> + tv1e.tv_usec - tv1s.tv_usec;</span>
<span class="cm"> tv_count2 = (tv2e.tv_sec - tv2s.tv_sec)</span>
<span class="cm"> * USEC_PER_SEC</span>
<span class="cm"> + tv2e.tv_usec - tv2s.tv_usec;</span>
<span class="cm"> pr_info("pcie ep: Data transfer is successful."</span>
<span class="cm"> " tv_count1 %dus,"</span>
<span class="cm"> " tv_count2 %dus.\n",</span>
<span class="cm"> tv_count1, tv_count2);</span>
<span class="cm"> pr_info("pcie ep: Data write speed:%ldMB/s.\n",</span>
<span class="cm"> ((memcpyDev->mem.size / 1024)</span>
<span class="cm"> * MSEC_PER_SEC)</span>
<span class="cm"> / (tv_count1));</span>
<span class="cm"> pr_info("pcie ep: Data read speed:%ldMB/s.\n",</span>
<span class="cm"> ((memcpyDev->mem.size / 1024)</span>
<span class="cm"> * MSEC_PER_SEC)</span>
<span class="cm"> / (tv_count2));*/</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"the transfet dma KOKOKOKO</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">readStatus</span> <span class="o">=</span> <span class="n">MEMCPY_ERROR</span><span class="p">;</span>
<span class="n">wake_up_interruptible</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">rwq</span><span class="p">));</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"error size sdma</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">readStatus</span> <span class="o">=</span> <span class="n">MEMCPY_ERROR</span><span class="p">;</span>
<span class="n">wake_up_interruptible</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">rwq</span><span class="p">));</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">status</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">memcpydevDest</span><span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memcpyDev</span><span class="p">,</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">dma_async_tx_descriptor</span><span class="o">*</span> <span class="n">dma_m2m_desc</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">dma_chan</span><span class="o">*</span> <span class="n">dma_chan</span> <span class="o">=</span> <span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_chan</span><span class="p">;</span>
<span class="n">dma_addr_t</span> <span class="n">dma_dst</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">dma_slave_config</span> <span class="n">dma_m2m_config</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">status</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">dma_m2m_config</span><span class="p">.</span><span class="n">direction</span> <span class="o">=</span> <span class="n">DMA_MEM_TO_MEM</span><span class="p">;</span>
<span class="n">dma_m2m_config</span><span class="p">.</span><span class="n">dst_addr_width</span> <span class="o">=</span> <span class="n">DMA_SLAVE_BUSWIDTH_4_BYTES</span><span class="p">;</span>
<span class="n">dmaengine_slave_config</span><span class="p">(</span><span class="n">dma_chan</span><span class="p">,</span> <span class="o">&</span><span class="n">dma_m2m_config</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">size</span> <span class="o">%</span> <span class="mi">4</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">dma_dst</span> <span class="o">=</span> <span class="n">dma_map_single</span><span class="p">(</span><span class="n">dma_chan</span><span class="o">-></span><span class="n">device</span><span class="o">-></span><span class="n">dev</span><span class="p">,</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">memAllocate</span><span class="p">,</span>
<span class="n">size</span><span class="p">,</span>
<span class="n">DMA_TO_DEVICE</span><span class="p">);</span>
<span class="n">dma_m2m_desc</span> <span class="o">=</span> <span class="n">dma_chan</span><span class="o">-></span><span class="n">device</span><span class="o">-></span><span class="n">device_prep_dma_memcpy</span><span class="p">(</span><span class="n">dma_chan</span><span class="p">,</span>
<span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">phyDevDst</span><span class="p">,</span>
<span class="n">dma_dst</span><span class="p">,</span>
<span class="n">size</span><span class="p">,</span>
<span class="n">DMA_CTRL_ACK</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">dma_m2m_desc</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">dma_m2m_desc</span><span class="o">-></span><span class="n">callback</span> <span class="o">=</span> <span class="n">dma_mem_callbackDst</span><span class="p">;</span>
<span class="n">dma_m2m_desc</span><span class="o">-></span><span class="n">callback_param</span> <span class="o">=</span> <span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_ok</span><span class="p">;</span>
<span class="n">dmaengine_submit</span><span class="p">(</span><span class="n">dma_m2m_desc</span><span class="p">);</span>
<span class="n">dma_async_issue_pending</span><span class="p">(</span><span class="n">dma_chan</span><span class="p">);</span>
<span class="n">wait_for_completion</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">dma_mem_ok</span><span class="p">);</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"the transfet dma ok</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="c1">// wake_up_interruptible(&(memcpyDev->wwq));</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"le wake interruptible est transmit</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"the transfet dma KOKOKOKO</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">writeStatus</span> <span class="o">=</span> <span class="n">MEMCPY_ERROR</span><span class="p">;</span>
<span class="n">wake_up_interruptible</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">wwq</span><span class="p">));</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"error size sdma</span><span class="se">\n\r</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="n">memcpyDev</span><span class="o">-></span><span class="n">writeStatus</span> <span class="o">=</span> <span class="n">MEMCPY_ERROR</span><span class="p">;</span>
<span class="n">wake_up_interruptible</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpyDev</span><span class="o">-></span><span class="n">wwq</span><span class="p">));</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">status</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction va allouer la taille mémoire demandée et</span>
<span class="cm">stocker les différents pointeurs dans la structure stAllocateMem_t.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">allocate_cbuffer</span><span class="p">(</span><span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">size_t</span> <span class="n">total_size</span><span class="p">;</span>
<span class="n">dma_addr_t</span> <span class="n">handle</span><span class="p">;</span>
<span class="c1">//Around to PAGE_SIZE (for mmap)</span>
<span class="n">total_size</span> <span class="o">=</span> <span class="p">((</span> <span class="n">size</span> <span class="o">/</span> <span class="n">PAGE_SIZE</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">PAGE_SIZE</span><span class="p">;</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span> <span class="o">=</span> <span class="n">dma_alloc_coherent</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">total_size</span><span class="p">,</span> <span class="o">&</span><span class="n">handle</span><span class="p">,</span> <span class="n">GFP_KERNEL</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"sharedMem: fail dma_alloc_coherent mem of size :%lud and total size:%lud"</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">total_size</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">ENOMEM</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span> <span class="o">=</span> <span class="n">virt_to_phys</span><span class="p">(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span><span class="p">);</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span><span class="p">;</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span><span class="p">;</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">totalSize</span> <span class="o">=</span> <span class="n">total_size</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction va désallouer la mémoire.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">deallocate_cbuffer</span><span class="p">(</span><span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">dma_free_coherent</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">totalSize</span> <span class="p">,</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span><span class="p">,</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">handle</span><span class="p">);</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">totalSize</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction retourne le pointeur de l’adresse physique dans l’espace user</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">long</span> <span class="nf">allocateMem_ioctl_get_phys_add</span><span class="p">(</span> <span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">__user</span><span class="o">*</span> <span class="n">phys</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">return</span> <span class="n">copy_to_user</span><span class="p">(</span> <span class="n">phys</span><span class="p">,</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">off_t</span><span class="p">))</span> <span class="o">?</span> <span class="o">-</span><span class="nl">EFAULT</span> <span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction va appeler allocate_cbuffer pour allouer de la mémoire</span>
<span class="cm">avec le paramètre size spécifié par la structure.</span>
<span class="cm">Puis renvoyer dans la structure de retour, l’adresse physique.</span>
<span class="cm">Remarque __user signifie que le paramètre vient de l’espace user</span>
<span class="cm">et donc on ne peut pas le manipuler comme ça.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">long</span> <span class="nf">allocateMem_ioctl_alloc_buffer</span><span class="p">(</span> <span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span><span class="p">,</span> <span class="n">sharedMem_ioctl_t</span> <span class="n">__user</span><span class="o">*</span> <span class="n">u_alloc</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">sharedMem_ioctl_t</span> <span class="n">k_alloc</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">copy_from_user</span><span class="p">(</span><span class="o">&</span><span class="n">k_alloc</span><span class="p">,</span> <span class="n">u_alloc</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">k_alloc</span><span class="p">)))</span>
<span class="p">{</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">allocate_cbuffer</span><span class="p">(</span><span class="n">sharedMem</span><span class="p">,</span> <span class="n">k_alloc</span><span class="p">.</span><span class="n">size</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"sharedMem: fail to allocate mem of size %lud</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">k_alloc</span><span class="p">.</span><span class="n">size</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">copy_to_user</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">u_alloc</span><span class="o">-></span><span class="n">totalSize</span><span class="p">),</span> <span class="o">&</span><span class="p">(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">totalSize</span><span class="p">),</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">off_t</span><span class="p">)))</span>
<span class="p">{</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">copy_to_user</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">u_alloc</span><span class="o">-></span><span class="n">physAddr</span><span class="p">),</span> <span class="o">&</span><span class="p">(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span><span class="p">),</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">off_t</span><span class="p">))</span> <span class="o">?</span> <span class="o">-</span><span class="nl">EFAULT</span> <span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction va désallouer la mémoire en appelant la fct deallocate_cbuffer.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">long</span> <span class="nf">allocateMem_ioctl_dealloc_buffer</span><span class="p">(</span> <span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">deallocate_cbuffer</span><span class="p">(</span><span class="n">sharedMem</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"sharedMem: fail to deallocate mem</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction alloue et initialise à NULL une structure stAllocateMem_t.</span>
<span class="cm">Cette structure sera la base. Le pointeur alloué sera stocké dans</span>
<span class="cm">le private data du file ouvert.</span>
<span class="cm">Il sera donc possible d’ouvrir autant de driver que l’on souhaite.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_open</span><span class="p">(</span><span class="k">struct</span> <span class="n">inode</span><span class="o">*</span> <span class="n">inode</span><span class="p">,</span> <span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span><span class="p">;</span>
<span class="c1">//prepare the context</span>
<span class="n">memCpy</span> <span class="o">=</span> <span class="n">kmalloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">stMemCpy_t</span><span class="p">),</span> <span class="n">GFP_KERNEL</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">memCpy</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"memcpydev: fail to allocate stMemCpy_t structure</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">ENOMEM</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">phyDevSrc</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">phyDevDst</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">memAllocate</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">physMemAllocate</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">totalSize</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">vma</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">readStatus</span> <span class="o">=</span> <span class="n">MEMCPY_NO_TRANSFERT</span><span class="p">;</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">writeStatus</span> <span class="o">=</span> <span class="n">MEMCPY_NO_TRANSFERT</span><span class="p">;</span>
<span class="n">init_waitqueue_head</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memCpy</span><span class="o">-></span><span class="n">wwq</span><span class="p">));</span>
<span class="n">init_waitqueue_head</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memCpy</span><span class="o">-></span><span class="n">rwq</span><span class="p">));</span>
<span class="n">dma_mem_init</span><span class="p">(</span><span class="n">memCpy</span><span class="p">);</span>
<span class="c1">//store context in private data</span>
<span class="n">file</span><span class="o">-></span><span class="n">private_data</span> <span class="o">=</span> <span class="n">memCpy</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">La fonction libère la mémoire partagé si</span>
<span class="cm">ce n’est pas déjà fait. ET libère l’espace alloué par le contexte.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_release</span><span class="p">(</span><span class="k">struct</span> <span class="n">inode</span><span class="o">*</span> <span class="n">inode</span><span class="p">,</span> <span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">file</span><span class="o">-></span><span class="n">private_data</span><span class="p">;</span>
<span class="c1">//appelle d’une fct de des-allocation du buffer de partage</span>
<span class="n">deallocate_cbuffer</span><span class="p">(</span><span class="o">&</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">);</span>
<span class="n">dma_mem_deinit</span><span class="p">(</span><span class="n">memCpy</span><span class="p">);</span>
<span class="n">kfree</span><span class="p">(</span><span class="n">memCpy</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">fonction ioctl:</span>
<span class="cm">IOCTL_GET_PHYS_ADD_MEM : retourne l'adresse physique de la mémoire</span>
<span class="cm">IOCTL_ALLOCATE_BUFFER : alloue de la mémoire et retourne la structure avec les info mem physique et taille de memoire reellemenet alloue</span>
<span class="cm">IOCTL_DEALLOCATE_BUFFER : desalloue la mémoire</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">long</span> <span class="nf">memcpydev_ioctl</span><span class="p">(</span><span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">arg</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">long</span> <span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">file</span><span class="o">-></span><span class="n">private_data</span><span class="p">;</span>
<span class="kt">void</span> <span class="n">__user</span><span class="o">*</span> <span class="n">ptr</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span> <span class="n">__user</span><span class="o">*</span><span class="p">)</span><span class="n">arg</span><span class="p">;</span>
<span class="k">switch</span> <span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">case</span> <span class="nl">IOCTL_GET_PHYS_ADD_MEM</span><span class="p">:</span>
<span class="k">return</span> <span class="n">allocateMem_ioctl_get_phys_add</span><span class="p">(</span><span class="o">&</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">,</span> <span class="n">ptr</span><span class="p">);</span>
<span class="k">case</span> <span class="nl">IOCTL_ALLOCATE_BUFFER</span><span class="p">:</span>
<span class="k">return</span> <span class="n">allocateMem_ioctl_alloc_buffer</span><span class="p">(</span><span class="o">&</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">,</span> <span class="n">ptr</span><span class="p">);</span>
<span class="k">case</span> <span class="nl">IOCTL_DEALLOCATE_BUFFER</span><span class="p">:</span>
<span class="k">return</span> <span class="n">allocateMem_ioctl_dealloc_buffer</span><span class="p">(</span><span class="o">&</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">);</span>
<span class="k">case</span> <span class="nl">IOCTL_SET_PHY_ADDR_SRC</span><span class="p">:</span>
<span class="p">{</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">phyAddSrc</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">copy_from_user</span><span class="p">(</span><span class="o">&</span><span class="n">phyAddSrc</span><span class="p">,</span> <span class="n">ptr</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)))</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"error no copy from user physical src </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"OK copy from user physical src 0X%x </span><span class="se">\n\t</span><span class="s">"</span><span class="p">,</span><span class="n">phyAddSrc</span><span class="p">);</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">phyDevSrc</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">phyAddSrc</span><span class="p">;</span>
<span class="n">status</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">IOCTL_GET_PHY_ADDR_SRC</span><span class="p">:</span>
<span class="p">{</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">phyAddSrc</span> <span class="o">=</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)</span> <span class="n">memCpy</span><span class="o">-></span><span class="n">phyDevSrc</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">copy_to_user</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="o">&</span><span class="n">phyAddSrc</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)))</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"error no copy from kernel physical src </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"OK copy from kernel physical src </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">IOCTL_SET_PHY_ADDR_DST</span><span class="p">:</span>
<span class="p">{</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">phyAddDst</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">copy_from_user</span><span class="p">(</span><span class="o">&</span><span class="n">phyAddDst</span><span class="p">,</span> <span class="n">ptr</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)))</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"error no copy from user physical dest </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"OK copy from user physical dest </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">phyDevDst</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">phyAddDst</span><span class="p">;</span>
<span class="n">status</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">IOCTL_GET_PHY_ADDR_DST</span><span class="p">:</span>
<span class="p">{</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">phyAddDst</span> <span class="o">=</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)</span> <span class="n">memCpy</span><span class="o">-></span><span class="n">phyDevDst</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">copy_to_user</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="o">&</span><span class="n">phyAddDst</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)))</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"error no copy from kernel physical dest </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="n">EFAULT</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"OK copy from kernel physical dest </span><span class="se">\n\t</span><span class="s">"</span><span class="p">);</span>
<span class="n">status</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">default</span><span class="o">:</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">status</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction donne accès au user space à l’emplacement mémoire allouer par le driver.</span>
<span class="cm">Du coup depuis le user space il est possible d’accéder directement à la mémoire.</span>
<span class="cm">Il faudra s’il y a des problèmes de cache. Rendre cette mémoire non cachable au</span>
<span class="cm">moment de l’allocation.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_mmap</span><span class="p">(</span><span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">,</span> <span class="k">struct</span> <span class="n">vm_area_struct</span><span class="o">*</span> <span class="n">vma</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">ret</span><span class="p">;</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">file</span><span class="o">-></span><span class="n">private_data</span><span class="p">;</span>
<span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span> <span class="o">=</span> <span class="o">&</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">size</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">vma</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">long</span> <span class="n">decphysMemLong</span> <span class="o">=</span> <span class="p">(((</span><span class="kt">long</span><span class="p">)(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span><span class="p">))</span> <span class="o">>></span> <span class="n">PAGE_SHIFT</span><span class="p">);</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">decphysMemULong</span> <span class="o">=</span> <span class="p">(((</span><span class="kt">unsigned</span> <span class="kt">long</span><span class="p">)(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span><span class="p">))</span> <span class="o">>></span> <span class="n">PAGE_SHIFT</span><span class="p">);</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"sharedMemDrv: dec long decphysMemLong==0x%lx and dec ulong decphysMemULong=0x%ulx and vma->vm_pgoff==0x%ulx with PAGE_SHIFT==%d </span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">decphysMemLong</span><span class="p">,</span> <span class="n">decphysMemULong</span><span class="p">,</span> <span class="n">vma</span><span class="o">-></span><span class="n">vm_pgoff</span><span class="p">,</span> <span class="n">PAGE_SHIFT</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">decphysMemULong</span> <span class="o">==</span> <span class="n">vma</span><span class="o">-></span><span class="n">vm_pgoff</span><span class="p">)</span>
<span class="p">{</span>
<span class="cp">#ifdef MEM_NO_CACHE</span>
<span class="n">vma</span><span class="o">-></span><span class="n">vm_page_prot</span> <span class="o">=</span> <span class="n">pgprot_noncached</span><span class="p">(</span><span class="n">vma</span><span class="o">-></span><span class="n">vm_page_prot</span><span class="p">);</span>
<span class="cp">#endif</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">remap_pfn_range</span><span class="p">(</span><span class="n">vma</span><span class="p">,</span> <span class="n">vma</span><span class="o">-></span><span class="n">vm_start</span><span class="p">,</span>
<span class="n">vma</span><span class="o">-></span><span class="n">vm_pgoff</span><span class="p">,</span>
<span class="n">vma</span><span class="o">-></span><span class="n">vm_end</span> <span class="o">-</span> <span class="n">vma</span><span class="o">-></span><span class="n">vm_start</span><span class="p">,</span>
<span class="n">vma</span><span class="o">-></span><span class="n">vm_page_prot</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">ret</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"sharedMemDrv: error function remap_pfn_range</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">sharedMem</span><span class="o">-></span><span class="n">vma</span> <span class="o">=</span> <span class="n">vma</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">ret</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"sharedMemDrv: failed mmap phys Mem Allocate si not around PAGE_SHIFT because physMemAllocate==0x%lx and vma->vm_pgoff==0x%lx with PAGE_SHIFT==%d </span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="p">(</span><span class="kt">long</span><span class="p">)(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span><span class="p">),</span> <span class="n">vma</span><span class="o">-></span><span class="n">vm_pgoff</span><span class="p">,</span> <span class="n">PAGE_SHIFT</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EINVAL</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"sharedMemDrv: failed because physMemAllocate == 0x%lx or sharedMem->size == %uld or sharedMem->memAllocate=0x%lx</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="p">(</span><span class="kt">long</span><span class="p">)(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">physMemAllocate</span><span class="p">),</span> <span class="n">sharedMem</span><span class="o">-></span><span class="n">size</span><span class="p">,</span> <span class="p">(</span><span class="kt">long</span><span class="p">)(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">memAllocate</span><span class="p">));</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EINVAL</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_fsync</span><span class="p">(</span><span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">,</span> <span class="n">loff_t</span> <span class="n">start</span><span class="p">,</span> <span class="n">loff_t</span> <span class="n">end</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">datasync</span><span class="p">)</span>
<span class="p">{</span>
<span class="cp">#ifndef MEM_NO_CACHE</span>
<span class="n">printk</span><span class="p">(</span><span class="s">"###### start memcpydev_fsync ########</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="kt">int</span> <span class="n">ret</span><span class="p">;</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">file</span><span class="o">-></span><span class="n">private_data</span><span class="p">;</span>
<span class="n">stAllocateMem_t</span><span class="o">*</span> <span class="n">sharedMem</span> <span class="o">=</span> <span class="o">&</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">sharedMem</span><span class="o">-></span><span class="n">vma</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="s">"{{{{{{memcpydevDrv: datasync no MS_SYNC because datasync: %uld}}}}}}}}</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">datasync</span><span class="p">);</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">flush_cache_user_range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"memcpydevDrv: failed fsync because no mmap the device</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">ENOMEM</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="cp">#else</span>
<span class="k">return</span> <span class="o">-</span><span class="n">EINVAL</span><span class="p">;</span>
<span class="cp">#endif</span>
<span class="p">}</span>
<span class="kt">ssize_t</span> <span class="nf">memcpydev_write</span><span class="p">(</span><span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">__user</span><span class="o">*</span> <span class="n">buf</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">,</span> <span class="n">loff_t</span><span class="o">*</span> <span class="n">offset</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">ssize_t</span> <span class="n">ret_val</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">file</span><span class="o">-></span><span class="n">private_data</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">size</span><span class="o"><=</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">writeStatus</span> <span class="o">=</span> <span class="n">MEMCPY_WAIT</span><span class="p">;</span>
<span class="c1">//launch a memcpy mem from dev</span>
<span class="n">ret_val</span> <span class="o">=</span> <span class="n">memcpydevDest</span><span class="p">(</span><span class="n">memCpy</span><span class="p">,</span><span class="n">size</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">ret_val</span><span class="p">)</span>
<span class="n">ret_val</span> <span class="o">=</span> <span class="n">wait_event_interruptible</span><span class="p">(</span><span class="n">memCpy</span><span class="o">-></span><span class="n">wwq</span><span class="p">,</span> <span class="n">memCpy</span><span class="o">-></span><span class="n">writeStatus</span> <span class="o">!=</span> <span class="n">MEMCPY_WAIT</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="n">ret_val</span><span class="o">=-</span><span class="mi">1</span><span class="p">;</span>
<span class="k">return</span> <span class="n">ret_val</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">ssize_t</span> <span class="nf">memcpydev_read</span><span class="p">(</span><span class="k">struct</span> <span class="n">file</span><span class="o">*</span> <span class="n">file</span><span class="p">,</span> <span class="kt">char</span> <span class="n">__user</span><span class="o">*</span> <span class="n">buf</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">,</span> <span class="n">loff_t</span><span class="o">*</span> <span class="n">offset</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">ret_val</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">stMemCpy_t</span><span class="o">*</span> <span class="n">memCpy</span> <span class="o">=</span> <span class="p">(</span><span class="n">stMemCpy_t</span><span class="o">*</span><span class="p">)</span><span class="n">file</span><span class="o">-></span><span class="n">private_data</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">size</span><span class="o"><=</span><span class="n">memCpy</span><span class="o">-></span><span class="n">mem</span><span class="p">.</span><span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">memCpy</span><span class="o">-></span><span class="n">readStatus</span> <span class="o">=</span> <span class="n">MEMCPY_WAIT</span><span class="p">;</span>
<span class="c1">//launch a memcpy mem from dev</span>
<span class="n">ret_val</span> <span class="o">=</span> <span class="n">memcpydevSrc</span><span class="p">(</span><span class="n">memCpy</span><span class="p">,</span><span class="n">size</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">ret_val</span><span class="p">)</span>
<span class="n">ret_val</span> <span class="o">=</span> <span class="n">wait_event_interruptible</span><span class="p">(</span><span class="n">memCpy</span><span class="o">-></span><span class="n">rwq</span><span class="p">,</span> <span class="n">memCpy</span><span class="o">-></span><span class="n">readStatus</span> <span class="o">!=</span> <span class="n">MEMCPY_WAIT</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="n">ret_val</span><span class="o">=-</span><span class="mi">1</span><span class="p">;</span>
<span class="k">return</span> <span class="n">ret_val</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/**</span>
<span class="cm">this struct give the different pointer</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="k">struct</span> <span class="n">file_operations</span> <span class="n">fops</span> <span class="o">=</span>
<span class="p">{</span>
<span class="p">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">THIS_MODULE</span><span class="p">,</span> <span class="c1">/// indique que c’est ce driver qui est concerné</span>
<span class="p">.</span><span class="n">mmap</span> <span class="o">=</span> <span class="n">memcpydev_mmap</span><span class="p">,</span>
<span class="p">.</span><span class="n">fsync</span> <span class="o">=</span> <span class="n">memcpydev_fsync</span><span class="p">,</span>
<span class="p">.</span><span class="n">open</span> <span class="o">=</span> <span class="n">memcpydev_open</span><span class="p">,</span>
<span class="p">.</span><span class="n">release</span> <span class="o">=</span> <span class="n">memcpydev_release</span><span class="p">,</span>
<span class="p">.</span><span class="n">read</span> <span class="o">=</span> <span class="n">memcpydev_read</span><span class="p">,</span>
<span class="p">.</span><span class="n">write</span> <span class="o">=</span> <span class="n">memcpydev_write</span><span class="p">,</span>
<span class="p">.</span><span class="n">unlocked_ioctl</span> <span class="o">=</span> <span class="n">memcpydev_ioctl</span><span class="p">,</span>
<span class="p">};</span>
<span class="cm">/**</span>
<span class="cm">this struct allow to identify the device in device-tree</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="k">const</span> <span class="k">struct</span> <span class="n">of_device_id</span> <span class="n">imx_memcpydev_dt_ids</span><span class="p">[]</span> <span class="o">=</span>
<span class="p">{</span>
<span class="p">{</span> <span class="p">.</span><span class="n">compatible</span> <span class="o">=</span> <span class="s">"cam,imx7-memcpydev"</span> <span class="p">},</span>
<span class="p">{</span> <span class="cm">/* sentinel */</span> <span class="p">}</span>
<span class="p">};</span>
<span class="cm">/**</span>
<span class="cm">this struct allow that the device be recognized in platform device</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="k">struct</span> <span class="n">platform_driver</span> <span class="n">memcpydev_driver</span> <span class="o">=</span>
<span class="p">{</span>
<span class="p">.</span><span class="n">driver</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">DRIVER_NAME</span><span class="p">,</span> <span class="c1">//nom du driver qui sera initialisé en haut dans le fichier</span>
<span class="p">.</span><span class="n">owner</span> <span class="o">=</span> <span class="n">THIS_MODULE</span><span class="p">,</span><span class="c1">/// indique que c’est ce driver qui est concerné</span>
<span class="p">.</span><span class="n">of_match_table</span> <span class="o">=</span> <span class="n">imx_memcpydev_dt_ids</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">.</span><span class="n">probe</span> <span class="o">=</span> <span class="n">memcpydev_probe</span><span class="p">,</span>
<span class="p">.</span><span class="n">remove</span> <span class="o">=</span> <span class="n">memcpydev_remove</span><span class="p">,</span>
<span class="p">};</span>
<span class="cm">/**</span>
<span class="cm">La fonction Probe est la fonction d’initialisation du driver. Elle est appelée, au chargement du noyaux ,</span>
<span class="cm">si le driver est en dur ou, au chargement du module, si ce dernier est en module.</span>
<span class="cm">Cette fonction alloue de la mémoire pour la structure générale du driver, enregistrer le drivers</span>
<span class="cm">comme driver caractères.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_probe</span><span class="p">(</span><span class="k">struct</span> <span class="n">platform_device</span><span class="o">*</span> <span class="n">device</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">stMemCpyDev_t</span><span class="o">*</span> <span class="n">memcpydev</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ret</span><span class="p">;</span>
<span class="c1">//alocate memory to struct stSharedMem_t </span>
<span class="n">memcpydev</span> <span class="o">=</span> <span class="n">devm_kzalloc</span><span class="p">(</span><span class="o">&</span><span class="n">device</span><span class="o">-></span><span class="n">dev</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">stMemCpyDev_t</span><span class="p">),</span>
<span class="n">GFP_KERNEL</span><span class="p">);</span>
<span class="c1">//initialize major and minor</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">alloc_chrdev_region</span><span class="p">(</span><span class="o">&</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">DEVICE_NAME</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">ret</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"memcpydevDrv: failed to alloc region</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">//record driver char with struct fops</span>
<span class="n">cdev_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_cdev</span><span class="p">),</span> <span class="o">&</span><span class="n">fops</span><span class="p">);</span>
<span class="k">if</span> <span class="p">((</span><span class="n">ret</span> <span class="o">=</span> <span class="n">cdev_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_cdev</span><span class="p">),</span> <span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"memcpydevDrv: failed to add device to the system</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="n">unregister_chrdev_region</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">kfree</span><span class="p">(</span><span class="n">memcpydev</span><span class="p">);</span>
<span class="k">return</span> <span class="n">ret</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">//record class driver</span>
<span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_class</span> <span class="o">=</span> <span class="n">class_create</span><span class="p">(</span><span class="n">THIS_MODULE</span><span class="p">,</span> <span class="n">DEVICE_NAME</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">IS_ERR</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_class</span><span class="p">))</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"memcpydevDrv: failed to create device class</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="n">unregister_chrdev_region</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">cdev_del</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_cdev</span><span class="p">));</span>
<span class="n">kfree</span><span class="p">(</span><span class="n">memcpydev</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">ENOMEM</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_dev</span> <span class="o">=</span> <span class="n">device_create</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_class</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">MKDEV</span><span class="p">(</span><span class="n">MAJOR</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">),</span> <span class="n">MINOR</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">)),</span>
<span class="nb">NULL</span><span class="p">,</span> <span class="n">DEVICE_NAME</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">IS_ERR</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_dev</span><span class="p">))</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_ERR</span> <span class="s">"memcpydevDrv: failed create device and registers it</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="n">unregister_chrdev_region</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">cdev_del</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_cdev</span><span class="p">));</span>
<span class="n">class_destroy</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_class</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="n">ENOMEM</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"memcpydevDrv: probe successful! <Major,Minor>: <%d, %d></span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">MAJOR</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">),</span> <span class="n">MINOR</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">));</span>
<span class="n">platform_set_drvdata</span><span class="p">(</span><span class="n">device</span><span class="p">,</span> <span class="n">memcpydev</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span><span class="c1">//end of function memcpydev_probe</span>
<span class="cm">/**</span>
<span class="cm">Cette fonction est appelée à la destruction du driver par exemple</span>
<span class="cm">quand un module est déchargé. Elle doit donc tout désallouer et déconnecter.</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">memcpydev_remove</span><span class="p">(</span><span class="k">struct</span> <span class="n">platform_device</span><span class="o">*</span> <span class="n">device</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">stMemCpyDev_t</span><span class="o">*</span> <span class="n">memcpydev</span><span class="p">;</span>
<span class="n">memcpydev</span> <span class="o">=</span> <span class="n">platform_get_drvdata</span><span class="p">(</span><span class="n">device</span><span class="p">);</span>
<span class="n">unregister_chrdev_region</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">cdev_del</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_cdev</span><span class="p">));</span>
<span class="n">class_destroy</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_class</span><span class="p">);</span>
<span class="n">device_destroy</span><span class="p">(</span><span class="n">memcpydev</span><span class="o">-></span><span class="n">memCpy_class</span><span class="p">,</span> <span class="n">memcpydev</span><span class="o">-></span><span class="n">first</span><span class="p">);</span>
<span class="n">kfree</span><span class="p">(</span><span class="n">memcpydev</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">MODULE_LICENSE</span><span class="p">(</span><span class="s">"GPL"</span><span class="p">);</span> <span class="c1">///précise la licence du driver elle sera GPL</span>
<span class="n">MODULE_AUTHOR</span><span class="p">(</span><span class="s">"François Delaurat"</span><span class="p">);</span> <span class="c1">///l’auteur du driver</span>
<span class="n">MODULE_DESCRIPTION</span><span class="p">(</span><span class="s">"memcpy dev"</span><span class="p">);</span> <span class="c1">//description du driver</span>
<span class="n">MODULE_VERSION</span><span class="p">(</span><span class="s">"0.1"</span><span class="p">);</span> <span class="c1">//version du module</span>
<span class="n">MODULE_DEVICE_TABLE</span><span class="p">(</span><span class="n">of</span><span class="p">,</span> <span class="n">imx_memcpydev_dt_ids</span><span class="p">);</span>
<span class="c1">//Register driver as a platform driver</span>
<span class="k">static</span> <span class="kt">int</span> <span class="n">__init</span> <span class="nf">memcpydev_init</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">printk</span><span class="p">(</span><span class="n">KERN_INFO</span> <span class="s">"memcpydev_init"</span><span class="p">);</span>
<span class="k">return</span> <span class="n">platform_driver_register</span><span class="p">(</span><span class="o">&</span><span class="n">memcpydev_driver</span> <span class="p">);</span>
<span class="p">}</span>
<span class="c1">//Unregister driver</span>
<span class="k">static</span> <span class="kt">void</span> <span class="n">__exit</span> <span class="nf">memcpydev_exit</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">platform_driver_unregister</span><span class="p">(</span><span class="o">&</span><span class="n">memcpydev_driver</span> <span class="p">);</span>
<span class="p">}</span>
<span class="n">module_init</span><span class="p">(</span><span class="n">memcpydev_init</span><span class="p">);</span>
<span class="n">module_exit</span><span class="p">(</span><span class="n">memcpydev_exit</span><span class="p">);</span>
<span class="cm">/*</span>
<span class="cm">this struct describe the device generals informations to the driver memcpy</span>
<span class="cm">This information is used to creat linux driver:</span>
<span class="cm">@li sharedMemDrv_cdev: this struct is used to character device</span>
<span class="cm">@li sharedMemDrv_dev</span>
<span class="cm">@li sharedMemDrv_class : this high level struct used to driver abstract.</span>
<span class="cm">@li first contains the major and minir num of device.</span>
<span class="cm">*/</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="n">stMemCpyDev</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">cdev</span> <span class="n">memCpy_cdev</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">device</span> <span class="o">*</span><span class="n">memCpy_dev</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">class</span> <span class="o">*</span><span class="n">memCpy_class</span><span class="p">;</span>
<span class="kt">dev_t</span> <span class="n">first</span><span class="p">;</span>
<span class="p">}</span><span class="n">stMemCpyDev_t</span><span class="p">;</span>
<span class="cm">/*</span>
<span class="cm">this struct describe the memory shared. There are three</span>
<span class="cm">information:</span>
<span class="cm">@li memAlloc the alloc pointer to return by allocation function</span>
<span class="cm">@li handle : parameter return by allocation function and used to free memory</span>
<span class="cm">@li physMemAllocate: physical adress of shared memory</span>
<span class="cm">@li size : alloc memory size asked</span>
<span class="cm">@li totalsize : it is the parameter size multiple of PAGE_SIZE</span>
<span class="cm">the calculate is ((size % PAGE_SIZE) + 1) * PAGE_SIZE</span>
<span class="cm">@li vma : pt of vma after mmap</span>
<span class="cm">*/</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="n">stAllocateMem</span>
<span class="p">{</span>
<span class="kt">void</span> <span class="o">*</span> <span class="n">memAllocate</span><span class="p">;</span>
<span class="n">dma_addr_t</span> <span class="n">handle</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span> <span class="n">physMemAllocate</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">size</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">totalSize</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">vm_area_struct</span> <span class="o">*</span><span class="n">vma</span><span class="p">;</span>
<span class="p">}</span><span class="n">stAllocateMem_t</span><span class="p">;</span>
<span class="cm">/* this struct describe the different address to source and destination</span>
<span class="cm">memory and device. the mem can be the destination memry or the src memory</span>
<span class="cm">If use the function write it is source memroy and if use the read function it is </span>
<span class="cm">the destination memroy.</span>
<span class="cm">@li phyDevSrc : the physical address to the memcpy mem from device (use read fct). phyDevSrc is address of device</span>
<span class="cm">@li phyDevDst : the physical address to memcpy mem to device (use write). phyDevDst is address of device</span>
<span class="cm">@li mem : it is the mem allocate to receive or send data.</span>
<span class="cm">@li dma_mem_ok : validate the sdma transfer</span>
<span class="cm">@li dma_mem_chan : channel dma to send or receive data</span>
<span class="cm">@li wwq: wait queue to write</span>
<span class="cm">@li rwq: read queue to read</span>
<span class="cm">@li readStatus : status memcpy mem from device @see MEMCPY_WAIT and @see MEMCPY_OK and @see MEMCPY_ERROR and @see MEMCPY_NO_TRANSFERT</span>
<span class="cm">@li writeStatus : status memcpy mem from device @see MEMCPY_WAIT and @see MEMCPY_OK and @see MEMCPY_ERROR and @see MEMCPY_NO_TRANSFERT </span>
<span class="cm"> */</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="n">stMemCpy</span>
<span class="p">{</span>
<span class="kt">void</span><span class="o">*</span> <span class="n">phyDevSrc</span><span class="p">;</span>
<span class="kt">void</span><span class="o">*</span> <span class="n">phyDevDst</span><span class="p">;</span>
<span class="n">stAllocateMem_t</span> <span class="n">mem</span><span class="p">;</span>
<span class="c1">//sdma info</span>
<span class="k">struct</span> <span class="n">completion</span> <span class="o">*</span><span class="n">dma_mem_ok</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">dma_chan</span> <span class="o">*</span><span class="n">dma_mem_chan</span><span class="p">;</span>
<span class="n">wait_queue_head_t</span> <span class="n">wwq</span><span class="p">;</span>
<span class="n">wait_queue_head_t</span> <span class="n">rwq</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">readStatus</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">writeStatus</span><span class="p">;</span>
<span class="p">}</span><span class="n">stMemCpy_t</span><span class="p">;</span>
<span class="cp">#endif </span><span class="cm">/* _SHAREDMEM_DRV_H_ */</span><span class="cp"></span></code></pre>
<div><a href="https://linuxfr.org/forums/linux-embarque/posts/probleme-avec-dma_map_single.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/123826/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-embarque/posts/probleme-avec-dma_map_single#comments">ouvrir dans le navigateur</a>
</p>
yodalesage
https://linuxfr.org/nodes/123826/comments.atom
tag:linuxfr.org,2005:Post/40481
2019-09-20T01:13:29+02:00
2019-09-20T01:13:29+02:00
HELP ! Petite bourde avec la résolution d'écran
<p>Bonjour les gens 😬<br>
Alors je pense pas que ce soit un problème hyper sérieux mais je trouve de solution nulle part alors…<br>
J'ai relié mon ordi à ma télé pour pouvoir regarder un film avec un câble hdmi, sauf qu'à ce moment là, l'image sur le pc est partie en couille (elle était même pas juste coupée mais différente, tout était agencé bizarrement). J'ai essayé de baisser la résolution d'écran en me disant que ça résoudrait peut être le souci (peut être pas intelligent mais je pensais que ça se rattrapait au pire 😭) et à ce moment là, l'écran est devenu gris. Maintenant, je ne peux plus rien faire.<br>
L'ordinateur démarre et tout est normal mais au moment où le bureau devrait s'afficher c'est juste gris.<br>
Quelqu'un a-t-il une idée de ce que je pourrais faire ? (sachant que j'ai déjà rallumé, débranché le câble, rebranche le câble, et que ça ne marche pas non plus sur la télé maintenant)</p>
<div><a href="https://linuxfr.org/forums/linux-debutant/posts/help-petite-bourde-avec-la-resolution-d-ecran.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/118164/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debutant/posts/help-petite-bourde-avec-la-resolution-d-ecran#comments">ouvrir dans le navigateur</a>
</p>
Alaska
https://linuxfr.org/nodes/118164/comments.atom
tag:linuxfr.org,2005:Post/39720
2018-12-16T13:26:19+01:00
2018-12-16T13:26:19+01:00
Problème <stdio.h>
<p>Bonjour je débute sous linux mint 19 et je rencontre un problème;<br>
Je voudrait faire un codage en c avec la librairie , cependant lorsque j'inclue la commande dans emacs et je fais la compilation "gcc -o …", le terminal me dit qu'il ne trouve pas de fichiers correspondant à stdio.h. Bien sur j'ai téléchargé stdio.h mais je pense qu'il faut déplacer le fichier. Cependant je ne sais pas où et lorsque j'essaie il me dit "permission non accordée". Donc je suis perdu et j’espère trouver de l'aide ici.</p>
<p>Merci d'avance pour vos réponses.</p>
<div><a href="https://linuxfr.org/forums/linux-debutant/posts/probleme-stdio-h.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/115995/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debutant/posts/probleme-stdio-h#comments">ouvrir dans le navigateur</a>
</p>
alexandreparisien
https://linuxfr.org/nodes/115995/comments.atom
tag:linuxfr.org,2005:Post/39626
2018-11-11T19:40:53+01:00
2018-11-11T19:40:53+01:00
Problème démarrage
<p>Bonjour à tous ! Premièrement sachez que je suis nouveau dans ce forum et que je ne sais pas si mon post est au bon endroit <sup>^</sup> <br>
Voilà mon problème pendant une maj Ubuntu (je suis en 18.04) mon pc s'est décharger (je le pensais sous secteur mais stupide que je suis …) Et depuis quand je veux le relancer j'ai juste le fond violet d'Ubuntu qui apparaît mais rien ne se passe (j'ai attendu plus de 30 min…) Du coup je ne sais pas quoi faire et évidemment j'ai des données personnelles dessus non sauvegardé du coup quelqu'un saurait soit : <br>
-comment redémarrer mon système ?<br>
-comment pouvoir récupérer mes données quitte à réinstaller Ubuntu par la suite ?<br>
Cordialement et merci d'avance :) !</p>
<div><a href="https://linuxfr.org/forums/linux-general/posts/probleme-demarrage-398b5566-bd1d-4ba5-b788-54af4af6b3aa.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/115696/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-general/posts/probleme-demarrage-398b5566-bd1d-4ba5-b788-54af4af6b3aa#comments">ouvrir dans le navigateur</a>
</p>
Skenjy
https://linuxfr.org/nodes/115696/comments.atom
tag:linuxfr.org,2005:Post/38822
2017-12-21T18:08:23+01:00
2017-12-21T18:13:29+01:00
/trash
<blockquote>
<blockquote>
<p>/dev/null</p>
</blockquote>
</blockquote><div><a href="https://linuxfr.org/forums/linux-general/posts/trash.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113370/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-general/posts/trash#comments">ouvrir dans le navigateur</a>
</p>
Troupal
https://linuxfr.org/nodes/113370/comments.atom
tag:linuxfr.org,2005:Post/38376
2017-08-11T13:27:12+02:00
2017-08-11T13:27:12+02:00
ovh problèmes
<p>Bonjour,</p>
<p>Je suis chez OVH depuis 2013. Ca se passait à peu près bien (je n'utilise que le webMail). mais début de semaine, gros message "oups something wen't wrong" pour accéder à mes mails.</p>
<p>J'essaie de les appeler, mais leur numéro "1017" ne marche pas depuis l'étranger!</p>
<p>J'ouvre un ticket: 3 jours aprés, un gars m'écrit que je suis a jour au niveau des factures, mais que c'est bloqué parce que je n'ai pas renseigné ma carte bancaire sur le nouveau site V6. Grrrr! 3 jours sans mails alors que j'ai payés en avance, c'est vraiment culotté de leur part. En plus, je ne veux pas que mon numéro de carte bancaire (avec les 3 chiffres) traine sur leurs servers!</p>
<p>Si quelqu'un à un conseil pour faire cesser ce chantage "avec prise en otage des données"…</p>
<p>JP</p><div><a href="https://linuxfr.org/forums/general-general/posts/ovh-problemes.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/112456/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-general/posts/ovh-problemes#comments">ouvrir dans le navigateur</a>
</p>
jpmail5
https://linuxfr.org/nodes/112456/comments.atom
tag:linuxfr.org,2005:Post/37156
2016-08-12T00:24:31+02:00
2016-08-12T00:42:53+02:00
Photorec tourne en boucle sur une partie du disque dur...
<p>Bonsoir,<br>
j'ai un petit problème avec Photorec, pour ceux qui peuvent m'aider !<br>
Sur un disque dur externe 500Go dont la partition FAT32 est illisible (input/output error), j'essaye de récupérer un maximum de donnée…<br>
Photorec est donc lancé depuis hier après-midi, et depuis ce matin, il tourne en boucle sur les secteurs 637000000 à 669000000 (sur 976000000). Ce n'est pas qu'il est bloqué, puisque il trouve des fichiers de temps en temps (environ 8 par heure seulement), mais ça me semble bizarre.<br>
Est-ce parce que j'aurai autorisé par inadvertance l'option <a href="http://www.cgsecurity.org/wiki/PhotoRec_Etape_par_Etape#Les_options_de_PhotoRec">"allow partial last cylinder"</a> ?<br>
Ou bien est-ce pour une autre raison ?<br>
Question subsidiaire : Testdisk peut-il aider à résoudre cette erreur de "input/output error" (venant d'un funeste redimensionnement) ?<br>
Merci pour votre attention.</p>
<p>EDIT : photorec vient de dépasser la zone en question, mais se remet dans d'autres boucles…</p><div><a href="https://linuxfr.org/forums/linux-debutant/posts/photorec-tourne-en-boucle-sur-une-partie-du-disque-dur.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/109762/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debutant/posts/photorec-tourne-en-boucle-sur-une-partie-du-disque-dur#comments">ouvrir dans le navigateur</a>
</p>
bolikahult
https://linuxfr.org/nodes/109762/comments.atom
tag:linuxfr.org,2005:Post/36896
2016-05-25T14:58:37+02:00
2016-05-25T14:58:37+02:00
erreur au Boot
<p>Bonjour a tous</p>
<p>Voila j'ai une phrase d'erreur au boot ;<br>
drm cpt sett fifo underrun reporting error uncleared pch fifo underrunn on pch transcoder A<br>
drm cpt serr int handler error pch transcoder A fifo underrun </p>
<p>Mon laptop est un samsumg <br>
cpu <br>
intel R core TM I3-3110 M 2.40GHz<br>
carte graphique<br>
vga compatible controler Inbtel 3rd Gen core processeur graphic controler rev 09<br>
vga amd/ati Thame radeon HD7500/7600 Séries révision ff<br>
carte son<br>
audio device Intel C 12 Séries rev 04</p>
<p>Linux version 3 16 0 4 amd 64<br>
gcc version 4.8.4 debian 4.8.4.1<br>
smp Debian 3.16.7 ctk 25.2 </p>
<p>Pas de problème pour démarrer avec debian mais manjaro s’arrête au Logo et ça tourne toujours.<br>
C'est parce que Manjaro a buguée et que j'ai voulu le réinstaller que cela c'est produit</p>
<p>J'ai fait un dmseg et l'erreur apparaît en rouge ligne 7</p>
<p>[ 7.076290] usb 1-1.2: Manufacturer: Atheros Communications<br>
[ 7.076291] usb 1-1.2: SerialNumber: Alaska Day 2006<br>
[ 7.097057] [drm:cpt_set_fifo_underrun_reporting] <em>ERROR</em> uncleared pch fifo underrun on pch transcoder A<br>
[ 7.097059] [drm:cpt_serr_int_handler] <em>ERROR</em> PCH transcoder A FIFO underrun<br>
[ 7.149735] usb 1-1.4: new high-speed USB device number 5 using ehci-pci</p>
<p>un lspci Donne<br>
00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)<br>
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)<br>
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)<br>
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)<br>
00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)<br>
00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)<br>
00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)<br>
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)<br>
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)<br>
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)<br>
00:1f.0 ISA bridge: Intel Corporation HM76 Express Chipset LPC Controller (rev 04)<br>
00:1f.2 SATA controller: Intel Corporation 7 Series Chipset Family 6-port SATA Controller <a href="rev%2004">AHCI mode</a><br>
00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04)<br>
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Thames <a href="rev%20ff">Radeon HD 7500M/7600M Series</a><br>
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 09)<br>
03:00.0 Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01)</p>
<p>Donc dois-je purger les modules concernés et les remplacer par du generic ?<br>
Intervenir en mode texte afin de modifier quelque chose ?</p>
<p>Désolé pour la tartine mais je n'ai pas pu l'expliquer autrement. Merci a tous de votre compréhension<br>
et merci aussi d'avance pour l'aide que je pourrais avoir.<br>
je patauge depuis un mois en écumant le net et les problèmes que d'autres rencontrent mais je crois que si techniquement on débute on passe souvent a cote de la soluce. </p><div><a href="https://linuxfr.org/forums/linux-debutant/posts/erreur-au-boot.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/109081/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debutant/posts/erreur-au-boot#comments">ouvrir dans le navigateur</a>
</p>
keenan
https://linuxfr.org/nodes/109081/comments.atom
tag:linuxfr.org,2005:Post/36869
2016-05-17T17:27:20+02:00
2016-05-17T19:57:33+02:00
Problème configuration Firewall (ufw) - Thunderbird - Wireshark (résolu)
<p>Bonjour !</p>
<p>Mon problème est le suivant: j'essaie de paramétrer <strong>UFW pour Thunderbird</strong>, avec entrée et sortie refusées par défaut et j'ouvre au fur et à mesure les ports dont j'ai besoin. Mais, pour une raison qui m'échappe, même en suivant la doc ubuntu sur UFW qui décrit les ports et services à ouvrir, thunderbird ne relève pas les nouveaux messages.</p>
<p>Alors bon j'ai essayé de sniffer avec wireshark afin de trouver les ports à ouvrir, comme j'avais précédemment fait pour Déluge (un client torrent), mais cette fois ci ça n'a pas marché. Pour Déluge c'était facile, les ports utilisés sont fixes (suffit de cocher l'option) et du coup j'ai facilement plus trouver celui qu'il fallait ouvrir. Mais là les ports sont tous systématiquement différents à chaque fois que je re-sniffe avec wireshark.</p>
<p>Les ports que je soupçonne dans cette affaire sont ceux utilisés par le protocol Tls, mais je ne suis pas un expert, c'est pourquoi je m'en remet à vous !</p>
<p>Merci d'avance !</p>
<p>(Je suis sous ubuntu et nouveau sur linux, donc pas très expérimenté.)</p><div><a href="https://linuxfr.org/forums/linux-debian-ubuntu/posts/probleme-configuration-firewall-ufw-thunderbird-wireshark-resolu.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/109010/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debian-ubuntu/posts/probleme-configuration-firewall-ufw-thunderbird-wireshark-resolu#comments">ouvrir dans le navigateur</a>
</p>
HolàCabron
https://linuxfr.org/nodes/109010/comments.atom
tag:linuxfr.org,2005:News/34222
2013-05-17T17:50:42+02:00
2013-05-19T14:38:45+02:00
Root exploit sur les noyaux linux 2.6.38 à 3.8.8
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr
<div><p>Un nouveau root exploit est apparu mardi et concerne les noyaux Linux de 2.6.38 à 3.8.8 ayant CONFIG_PERF_EVENTS activé.</p>
<p>Tapez la commande suivante pour savoir si vous êtes impacté :<br /><code>zgrep CONFIG_PERF_EVENTS /proc/config.gz</code></p>
<p>Si zgrep répond cette ligne, vous êtes impacté.<br /><code>CONFIG_PERF_EVENTS=y</code></p>
<p>Le patch existe depuis plusieurs semaines mais n'a pas été forcement intégré dans toutes les distributions - cherchez le code CVE-2013-2094 dans les derniers security advisory.</p>
<p>La Debian Wheezy a été patchée ce matin (je mets le lien vers le mail de la liste de diffusion « security » car je ne trouve pas l'annonce de sécurité debian sur le site).</p>
<p>Pour ceux qui ne peuvent pas patcher immédiatement leur noyau, il faut suivre le lien vers l'outil de suivi de bug de redhat qui propose plusieurs solutions temporaires plus ou moins efficaces.</p></div><ul><li>lien nᵒ 1 : <a title="http://arstechnica.com/security/2013/05/critical-linux-vulnerability-imperils-users-even-after-silent-fix/" hreflang="en" href="https://linuxfr.org/redirect/86398">Critical Linux vulnerability imperils users, even after “silent” fix</a></li><li>lien nᵒ 2 : <a title="http://lists.debian.org/debian-security-announce/2013/msg00077.html" hreflang="en" href="https://linuxfr.org/redirect/86399">[DSA 2669-1] linux security update</a></li><li>lien nᵒ 3 : <a title="https://bugzilla.redhat.com/show_bug.cgi?id=962792" hreflang="en" href="https://linuxfr.org/redirect/86400">Solutions de mitigation du probleme</a></li></ul><div></div><div><a href="https://linuxfr.org/news/root-exploit-sur-les-noyaux-linux-2-6-38-a-3-8-8.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/98330/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/root-exploit-sur-les-noyaux-linux-2-6-38-a-3-8-8#comments">ouvrir dans le navigateur</a>
</p>
Guillaume Estival
Nÿco
rootix
Benoît Sibaud
https://linuxfr.org/nodes/98330/comments.atom