diff options
Diffstat (limited to '2016/33c3')
-rw-r--r-- | 2016/33c3/33c3-modems.adoc | 72 | ||||
-rw-r--r-- | 2016/33c3/images/diag.dot | 8 | ||||
-rw-r--r-- | 2016/33c3/images/qualcomm_le.svg | 394 |
3 files changed, 202 insertions, 272 deletions
diff --git a/2016/33c3/33c3-modems.adoc b/2016/33c3/33c3-modems.adoc index dc4070d..815ec96 100644 --- a/2016/33c3/33c3-modems.adoc +++ b/2016/33c3/33c3-modems.adoc @@ -207,35 +207,79 @@ image:images/legato_flash.png[width="80%"] // Show it is a highly complex SoC... with even more things // that are unknown.. device tree file, periperhal, etc -== MDM SW Overview +== MDM 9615 AP SW Overview image:images/gandroid_logo.png[height=200,role="gimmick_right"] -* GNU libc, busybox userland -* Android Debug Bridge (adb) -* Android Linux kernel +The software stack seems to be called *Qualcomm LE* + * Android Bootloader +* Android Linux kernel +* Android Debug Bridge (adb) +* but: GNU libc, busybox userland * Using OpenEmbedded to build images * Developed and maintained by Qualcomm +== Qualcomm Linux kernel overview + +* Qualcomm Android Linux kernel +* Huge changes compared to mainline `git diff -w | wc -l` +** `v3.0.21` in EC20: 1.5 million lines +** `v3.18.20` in EC25: 1.9 million lines +* Expected: CPU + peripheral drivers +* Less expected: +** smem_log, ipc_log, remote spinlocks, etc. +== Qualcomm Linux kernel subsystems -== Linux kernel overview +[cols="20%,80%"] +|=== +|SMD|Shared Memory Device +|IPC|Inter Processor Communications +|RMNET|Remote Network +|BAM|Bus Access Manager +|IPA|Internet Packet Accelerator +|DIAGFWD|DIAG Forwarding +|=== -* Qualcomm Android Linux kernel -* Huge changes compared to mainline -* CPU and peripheral support -* <List frameworks here> +== Qualcomm LE System Architecture + +image:images/qualcomm_le.svg[width="50%",role="gimmick_right"] + +* simplified block diagram +* USB interface fully controlled by Linux AP +** very complex Qualcomm Android USB Gadget +** some endpoints mapped to SMD queues +** other endpoints handled by _regular_ Linux +** GPS NMEA takes completely different path than AT commands, despite +both being serial ports? +** DIAG and QMI handled in more complex ways + +== DIAG in Qualcomm LE + +* DIAG interface of Modem exposed on SMD +* diagfwd distributes messages between USB, SMD and `/dev/diagchar` +* Linux userspace processes don't use syslog, but diag msg for logging via `libdiag.so` + +image:images/diag.svg[width="100%"] + +== QMI in Qualcomm LE + +every `rmnet` data device has associated QMI control + +* on your Linux PC: `qmi_wwan` and `/dev/cdc-wdm` +* on Qualcomm LE modem: `/dev/smdcntlN`, multiplexed by `qmuxd` -== ... +image:images/qmi_smd_qmuxd.svg[width="100%"] == Funny commands -* AT+QLINUXCMD, e.g. switch usb config to get adb -* AT+QFASTBOOT, switch to the bootloader -* AT+QPRINT, print dmesg -* AT for system("echo mem > /sys/power/state") +* `AT+QLINUXCMD`, e.g. switch usb config to get adb +** arbitrary shell commands executed as root on r/w rootfs! +* `AT+QFASTBOOT`, switch to the bootloader +* `AT+QPRINT`, print dmesg +* AT for `system("echo mem > /sys/power/state")` diff --git a/2016/33c3/images/diag.dot b/2016/33c3/images/diag.dot index 66dcec8..4114e52 100644 --- a/2016/33c3/images/diag.dot +++ b/2016/33c3/images/diag.dot @@ -3,9 +3,9 @@ digraph G { graph [ dpi = 50 ]; rankdir = RL; - MDSP[ label = "Modem DSP" ]; + MDSP [ label = "Modem DSP" ]; - SMD [ label = "Shared Memory Devices" ]; + SMD diagfwd f_diag USB @@ -21,8 +21,8 @@ digraph G { subgraph cluster_userspace { label = "Linux Userspace" qmuxd -> diagchar [ label = "/dev/diag" ]; - atfwd_daemon -> qmuxd [ label = "/dev/diagt" ] - QCMAP -> qmuxd [ label = "/dev/diagt" ] + atfwd_daemon -> qmuxd [ label = "/dev/diag" ] + QCMAP -> qmuxd [ label = "/dev/diag" ] quectel_daemon -> qmuxd [ label = "/dev/diag" ] } Host -> USB diff --git a/2016/33c3/images/qualcomm_le.svg b/2016/33c3/images/qualcomm_le.svg index 051cd7a..a1c76ba 100644 --- a/2016/33c3/images/qualcomm_le.svg +++ b/2016/33c3/images/qualcomm_le.svg @@ -9,9 +9,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="210mm" - height="297mm" - viewBox="0 0 744.09448819 1052.3622047" + width="156.46683mm" + height="180.56444mm" + viewBox="0 0 554.41002 639.79525" id="svg2" version="1.1" inkscape:version="0.91 r13725" @@ -20,329 +20,191 @@ id="defs4"> <marker inkscape:isstock="true" - style="overflow:visible;" + style="overflow:visible" id="marker8075" - refX="0.0" - refY="0.0" + refX="0" + refY="0" orient="auto" inkscape:stockid="Arrow1Lend"> <path - transform="scale(0.8) rotate(180) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path8077" /> + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path8077" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:isstock="true" style="overflow:visible" id="marker7921" - refX="0.0" - refY="0.0" + refX="0" + refY="0" orient="auto" inkscape:stockid="Arrow1Lstart"> <path - transform="scale(0.8) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path7923" /> + transform="matrix(0.8,0,0,0.8,10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path7923" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:stockid="Arrow1Lend" orient="auto" - refY="0.0" - refX="0.0" + refY="0" + refX="0" id="marker7771" - style="overflow:visible;" - inkscape:isstock="true" - inkscape:collect="always"> - <path - id="path7773" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) rotate(180) translate(12.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0.0" - refX="0.0" - id="marker7629" style="overflow:visible" inkscape:isstock="true" inkscape:collect="always"> <path - id="path7631" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) translate(12.5,0)" /> + id="path7773" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:stockid="Arrow1Lend" orient="auto" - refY="0.0" - refX="0.0" + refY="0" + refX="0" id="marker7491" - style="overflow:visible;" + style="overflow:visible" inkscape:isstock="true"> <path id="path7493" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) rotate(180) translate(12.5,0)" /> + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:isstock="true" style="overflow:visible" - id="marker7361" - refX="0.0" - refY="0.0" - orient="auto" - inkscape:stockid="Arrow1Lstart" - inkscape:collect="always"> - <path - transform="scale(0.8) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path7363" /> - </marker> - <marker - inkscape:isstock="true" - style="overflow:visible;" id="marker7235" - refX="0.0" - refY="0.0" + refX="0" + refY="0" orient="auto" inkscape:stockid="Arrow1Lend" inkscape:collect="always"> <path - transform="scale(0.8) rotate(180) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path7237" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0.0" - refX="0.0" - id="marker7117" - style="overflow:visible" - inkscape:isstock="true" - inkscape:collect="always"> - <path - id="path7119" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) translate(12.5,0)" /> - </marker> - <marker - inkscape:isstock="true" - style="overflow:visible" - id="marker6991" - refX="0.0" - refY="0.0" - orient="auto" - inkscape:stockid="Arrow1Lstart" - inkscape:collect="always"> - <path - transform="scale(0.8) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path6993" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0.0" - refX="0.0" - id="marker6877" - style="overflow:visible" - inkscape:isstock="true" - inkscape:collect="always"> - <path - id="path6879" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) translate(12.5,0)" /> + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path7237" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:stockid="Arrow1Lend" orient="auto" - refY="0.0" - refX="0.0" + refY="0" + refX="0" id="marker6771" - style="overflow:visible;" + style="overflow:visible" inkscape:isstock="true" inkscape:collect="always"> <path id="path6773" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) rotate(180) translate(12.5,0)" /> + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:stockid="Arrow1Lend" orient="auto" - refY="0.0" - refX="0.0" + refY="0" + refX="0" id="marker6683" - style="overflow:visible;" + style="overflow:visible" inkscape:isstock="true"> <path id="path6685" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) rotate(180) translate(12.5,0)" /> + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:isstock="true" - style="overflow:visible;" + style="overflow:visible" id="marker5697" - refX="0.0" - refY="0.0" + refX="0" + refY="0" orient="auto" inkscape:stockid="Arrow1Lend" inkscape:collect="always"> <path - transform="scale(0.8) rotate(180) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path5699" /> + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path5699" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:isstock="true" style="overflow:visible" - id="marker5603" - refX="0.0" - refY="0.0" - orient="auto" - inkscape:stockid="Arrow1Lstart" - inkscape:collect="always"> - <path - transform="scale(0.8) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path5605" /> - </marker> - <marker - inkscape:isstock="true" - style="overflow:visible;" id="marker5351" - refX="0.0" - refY="0.0" + refX="0" + refY="0" orient="auto" inkscape:stockid="Arrow1Lend" inkscape:collect="always"> <path - transform="scale(0.8) rotate(180) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path5353" /> - </marker> - <marker - inkscape:isstock="true" - style="overflow:visible" - id="marker5281" - refX="0.0" - refY="0.0" - orient="auto" - inkscape:stockid="Arrow1Lstart" - inkscape:collect="always"> - <path - transform="scale(0.8) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path5283" /> + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path5353" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:stockid="Arrow1Lend" orient="auto" - refY="0.0" - refX="0.0" + refY="0" + refX="0" id="marker5215" - style="overflow:visible;" - inkscape:isstock="true" - inkscape:collect="always"> - <path - id="path5217" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) rotate(180) translate(12.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0.0" - refX="0.0" - id="marker5157" style="overflow:visible" inkscape:isstock="true" inkscape:collect="always"> <path - id="path5159" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) translate(12.5,0)" /> + id="path5217" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:isstock="true" - style="overflow:visible;" + style="overflow:visible" id="marker5103" - refX="0.0" - refY="0.0" + refX="0" + refY="0" orient="auto" inkscape:stockid="Arrow1Lend" inkscape:collect="always"> <path - transform="scale(0.8) rotate(180) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path5105" /> - </marker> - <marker - inkscape:isstock="true" - style="overflow:visible" - id="marker5057" - refX="0.0" - refY="0.0" - orient="auto" - inkscape:stockid="Arrow1Lstart" - inkscape:collect="always"> - <path - transform="scale(0.8) translate(12.5,0)" - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - id="path5059" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0.0" - refX="0.0" - id="Arrow1Lstart" - style="overflow:visible" - inkscape:isstock="true" - inkscape:collect="always"> - <path - id="path4741" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) translate(12.5,0)" /> + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path5105" + inkscape:connector-curvature="0" /> </marker> <marker inkscape:stockid="Arrow1Lend" orient="auto" - refY="0.0" - refX="0.0" + refY="0" + refX="0" id="Arrow1Lend" - style="overflow:visible;" + style="overflow:visible" inkscape:isstock="true" inkscape:collect="always"> <path id="path4744" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" - transform="scale(0.8) rotate(180) translate(12.5,0)" /> + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> </marker> </defs> <sodipodi:namedview @@ -353,8 +215,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.311357" - inkscape:cx="292.32284" - inkscape:cy="537.96199" + inkscape:cx="163.33123" + inkscape:cy="361.79664" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -362,14 +224,20 @@ inkscape:object-paths="true" inkscape:snap-intersection-paths="true" inkscape:object-nodes="true" - inkscape:window-width="1386" - inkscape:window-height="1057" + inkscape:window-width="1920" + inkscape:window-height="1080" inkscape:window-x="0" inkscape:window-y="0" - inkscape:window-maximized="0"> + inkscape:window-maximized="0" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0"> <inkscape:grid type="xygrid" - id="grid3336" /> + id="grid3336" + originx="-34.43307" + originy="-176.16536" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -380,13 +248,31 @@ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /> </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/3.0/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#Notice" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#Attribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#ShareAlike" /> + </cc:License> </rdf:RDF> </metadata> <g inkscape:label="Layer 1" inkscape:groupmode="layer" - id="layer1"> + id="layer1" + transform="translate(-34.433071,-236.40158)"> <text xml:space="preserve" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:125%;font-family:'Andale Mono';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" @@ -466,7 +352,7 @@ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:17.5px;font-family:Arial;-inkscape-font-specification:'Arial Bold'">USB Gadget</tspan></text> <text xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="177.16534" y="680.31494" id="text4205" @@ -941,57 +827,57 @@ id="tspan4678-8-5" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:Arial;-inkscape-font-specification:Arial">Linux Kernel</tspan></text> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend);marker-start:url(#Arrow1Lstart)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#Arrow1Lend)" d="M 389.76378,644.88189 496.06299,591.73228" id="path4735" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5057);marker-end:url(#marker5103)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker5103)" d="m 442.91339,591.73228 -88.58268,53.14961" id="path5049" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5157);marker-end:url(#marker5215)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker5215)" d="m 318.89764,644.88189 35.43307,-53.14961" id="path5149" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5281);marker-end:url(#marker5351)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker5351)" d="m 248.0315,644.88189 0,-53.14961" id="path5273" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5697);marker-start:url(#marker5603)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker5697)" d="M 88.582677,361.41732 212.59843,644.88189" id="path6643" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker6683);marker-start:url(#marker6877)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker6683)" d="M 177.16535,644.88189 88.582677,361.41732" id="path6675" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6991);marker-end:url(#marker6771)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker6771)" d="M 53.149606,361.41732 141.73228,644.88189" id="path6983" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7117);marker-end:url(#marker7235)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker7235)" d="M 53.149606,361.41732 106.29921,644.88189" id="path7109" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7361);marker-end:url(#marker7491)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker7491)" d="M 248.0315,520.86614 124.01575,361.41732" id="path7353" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7629);marker-end:url(#marker7771)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker7771)" d="m 159.44882,361.41732 124.01575,53.14961" id="path7621" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7921);marker-end:url(#marker8075)" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:;marker-end:url(#marker8075)" d="m 212.59843,325.98425 70.86614,0" id="path7913" inkscape:connector-curvature="0" /> @@ -1030,37 +916,37 @@ sodipodi:role="line">fwd</tspan></text> </g> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="m 283.46457,414.56693 17.71653,0" id="path8245" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="m 496.06299,343.70079 0,159.44882" id="path8247" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="m 318.89764,325.98425 88.58267,0" id="path8249" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="m 442.91339,396.85039 -17.71654,35.43307" id="path8251" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="m 407.48031,467.71654 17.71654,70.86614" id="path8253" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="m 425.19685,432.28346 0,-35.43307" id="path8255" inkscape:connector-curvature="0" /> <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:" d="M 425.19685,432.28346 407.48031,396.85039" id="path8257" inkscape:connector-curvature="0" /> |