PageSourceSearch

https://tn-docusaurus.vercel.app/assets/js/ad3d360e.5b51a9bf.js

js tn-docusaurus.vercel.app collected 2026-10-03 07:54:16 UTC 36,885 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunktechnexion_wiki=globalThis.webpackChunktechnexion_wiki||[]).push([[10351],{5960(e,n,i){i.d(n,{A:()=>v});var s=i(96540),r=i(66274);var t=i(77618),o=i(34002),a=i(74848);const l={exclude:[],include:[]},d={exclude:[],include:[]},c={exclude:[],include:[]},h={exclude:[],include:[]},u={exclude:[],include:[]},m={exclude:[],include:[]},p=(e,{exclude:n=[],include:i=[]}={})=>[...t.G.filter(e=>!n.includes(e)),...i].map(n=>`${e}-${n}`),x={TEVI:["TEVI-AR0144","TEVI-AR0234","TEVI-AR0521","TEVI-AR0522","TEVI-AR0821","TEVI-AR0822","TEVI-AR1335"],TEVS:p("TEVS",{exclude:[],include:[]}),TEVM:p("TEVM",l),VLS_FPD3:r.J,VLM_FPD3:p("VLM-FPD3",h),VLS_GM2:p("VLS-GM2",u),VLM_GM2:p("VLM-GM2",m),VCI:o.L,VCS:p("VCS",d),VCM:p("VCM",c)},v=({series:e,prefix:n=""})=>{const i=x[e]||[];return(0,a.jsx)("div",{children:i.map(e=>(0,a.jsxs)(s.Fragment,{children:[n,e,(0,a.jsx)("br",{})]},e))})}},8919(e,n,i){i.d(n,{Y:()=>l,Z:()=>d});i(96540);var s=i(37773);const r=["TEVS","TEVM"],t="_blank",o="noopener noreferrer";var a=i(74848);const l=({href:e,children:n,...i})=>(0,a.jsx)("a",{href:e,target:t,rel:o,...i,children:n}),d=({series:e=r})=>(0,a.jsx)(s.A,{series:e})},11470(e,n,i){i.d(n,{A:()=>w});var s=i(96540),r=i(34164),t=i(17559),o=i(23104),a=i(56347),l=i(205),d=i(57485),c=i(31682),h=i(70679);function u(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})?.filter(Boolean)??[]}function m(e){const{values:n,children:i}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:i,default:s}})=>({value:e,label:n,attributes:i,default:s}))}(i);return function(e){const n=(0,c.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e},[n,i])}function p({value:e,tabValues:n}){return n.some(n=>n.value===e)}function x({queryString:e=!1,groupId:n}){const i=(0,a.W6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,d.aZ)(r),(0,s.useCallback)(e=>{if(!r)return;const n=new URLSearchParams(i.location.search);n.set(r,e),i.replace({...i.location,search:n.toString()})},[r,i])]}function v(e){const{defaultValue:n,queryString:i=!1,groupId:r}=e,t=m(e),[o,a]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!p({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const i=n.find(e=>e.default)??n[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:t})),[d,c]=x({queryString:i,groupId:r}),[u,v]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[i,r]=(0,h.Dv)(n);return[i,(0,s.useCallback)(e=>{n&&r.set(e)},[n,r])]}({groupId:r}),g=(()=>{const e=d??u;return p({value:e,tabValues:t})?e:null})();(0,l.A)(()=>{g&&a(g)},[g]);return{selectedValue:o,selectValue:(0,s.useCallback)(e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),c(e),v(e)},[c,v,t]),tabValues:t}}var g=i(92303);const b="tabList__CuJ",f="tabItem_LNqP";var j=i(74848);function I({className:e,block:n,selectedValue:i,selectValue:s,tabValues:t}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.a_)(),d=e=>{const n=e.currentTarget,r=a.indexOf(n),o=t[r].value;o!==i&&(l(n),s(o))},c=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const i=a.indexOf(e.currentTarget)+1;n=a[i]??a[0];break}case"ArrowLeft":{const i=a.indexOf(e.currentTarget)-1;n=a[i]??a[a.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},e),children:t.map(({value:e,label:n,attributes:s})=>(0,j.jsx)("li",{role:"tab",tabIndex:i===e?0:-1,"aria-selected":i===e,ref:e=>{a.push(e)},onKeyDown:c,onClick:d,...s,className:(0,r.A)("tabs__item",f,s?.className,{"tabs__item--active":i===e}),children:n??e},e))})}function y({lazy:e,children:n,selectedValue:i}
1){const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=t.find(e=>e.props.value===i);return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:t.map((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==i}))})}function M(e){const n=v(e);return(0,j.jsxs)("div",{className:(0,r.A)(t.G.tabs.container,"tabs-container",b),children:[(0,j.jsx)(I,{...n,...e}),(0,j.jsx)(y,{...n,...e})]})}function w(e){const n=(0,g.A)();return(0,j.jsx)(M,{...e,children:u(e.children)},String(n))}},19365(e,n,i){i.d(n,{A:()=>o});i(96540);var s=i(34164);const r="tabItem_Ymn6";var t=i(74848);function o({children:e,hidden:n,className:i}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.A)(r,i),hidden:n,children:e})}},28453(e,n,i){i.d(n,{R:()=>o,x:()=>a});var s=i(96540);const r={},t=s.createContext(r);function o(e){const n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(t.Provider,{value:n},e.children)}},34002(e,n,i){i.d(n,{L:()=>s});const s=["VCI-AR0144","VCI-AR0234","VCI-AR0521","VCI-AR0522","VCI-AR0821","VCI-AR0822","VCI-AR1335"]},37773(e,n,i){i.d(n,{A:()=>u});var s=i(96540),r=i(11470),t=i(19365),o=i(5960),a=i(74848);const l={TEVI:"TEVI",TEVS:"TEVS",TEVM:"TEVM",VLS_FPD3:"VLS-FPD3",VLM_FPD3:"VLM-FPD3",VLS_GM2:"VLS-GM2",VLM_GM2:"VLM-GM2"};function d(e){return"string"==typeof e?{productSeries:e,label:l[e]??e.replaceAll("_","-"),extraProducts:[]}:{productSeries:e.productSeries??e.series,label:e.label??l[e.productSeries??e.series]??(e.productSeries??e.series).replaceAll("_","-"),extraProducts:e.extraProducts??[]}}function c({series:e}){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.A,{series:e.productSeries}),e.extraProducts.map(e=>(0,a.jsxs)(s.Fragment,{children:[e,(0,a.jsx)("br",{})]},e))]})}function h({series:e}){return(0,a.jsxs)("table",{children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{children:(0,a.jsx)("strong",{children:"Camera Series"})}),(0,a.jsx)("th",{children:(0,a.jsx)("strong",{children:"Products"})})]})}),(0,a.jsx)("tbody",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{children:e.label}),(0,a.jsx)("td",{children:(0,a.jsx)(c,{series:e})})]})})]})}function u({series:e=["TEVS"],groupId:n="supported-cameras",showImage:i=!0}){const s=e.map(d);return(0,a.jsxs)("div",{className:"flex-container supported-camera-modules"+(i?"":" supported-camera-modules--table-only"),children:[(0,a.jsx)("div",{className:"flex-item-table",children:1===s.length?(0,a.jsx)(h,{series:s[0]}):(0,a.jsx)(r.A,{groupId:n,children:s.map(e=>{return(0,a.jsx)(t.A,{value:(n=e.label,n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")),label:`${e.label} Series`,children:(0,a.jsx)(h,{series:e})},e.label);var n})})}),i&&(0,a.jsx)("div",{className:"flex-item-image",children:(0,a.jsx)("img",{src:"/img/camera-seneor-comparsion.jpg",alt:"Camera Sensor Comparison"})})]})}},54036(e,n,i){i.r(n),i.d(n,{assets:()=>h,contentTitle:()=>c,default:()=>p,frontMatter:()=>d,metadata:()=>s,toc:()=>u});const s=JSON.parse('{"id":"embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm/yocto-6.0-wrynose-release","title":"IMX8MM Camera Usage Guide","description":"IMX8MM Camera Usage Guide","source":"@site/docs/embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm/yocto-6.0-wrynose-release.md","sourceDirName":"embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm","slug":"/embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm/yocto-6.0-wrynose-release","permalink":"/docs/embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm/yocto-6.0-wrynose-release","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"IMX8MM Camera Usage Guide","description":"IMX8MM Camera Usage Guide","sidebar_position":1,"sidebar_label":"Yocto 6.0 Wrynose Release"},"sidebar":"embVisionSidebar","previous":{"title":"Overview","permalink":"/docs/embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm/"},"next":{"title":"Yocto 5.3 Whinlatter Release","permalink":"/docs/embedded-vision/mipi-csi-2/nxp/technexion-development-kits/imx8mm/yocto-5.3-whinlatter-release"}}');var r=i(74848),t=i(28453),o=i(8919),a=i(11470),l=i(19365);const d={title:"IMX8MM Camera Usage Guide",description:"IMX8MM Camera Usage Guide",sidebar_position:1,sidebar_label:"Yocto 6.0 Wrynose Release"},c=void 0,h={},u=[{value:"\ud83d\ude80 Introduction",id:"-introduction",level:2},{value:"\ud83d\udcf8 Supported Camera Modules",id:"-supported-camera-modules",level:2},{value:"\ud83e\udde9 Supported Boards",id:"-supported-boards",level:2}
1,{value:"\ud83d\udd27 Hardware Setup Instructions",id:"-hardware-setup-instructions",level:2},{value:"1. Power Supply Preparation",id:"1-power-supply-preparation",level:4},{value:"2. Debug Console Connection",id:"2-debug-console-connection",level:4},{value:"3. Display Output Connection",id:"3-display-output-connection",level:4},{value:"4. Camera Interface (CSI) Overview",id:"4-camera-interface-csi-overview",level:4},{value:"\ud83d\udcbb Prepare Yocto demo image for testing TechNexion camera",id:"-prepare-yocto-demo-image-for-testing-technexion-camera",level:2},{value:"\ud83d\udd3d Downloading the Demo Image",id:"-downloading-the-demo-image",level:3},{value:"Download Link",id:"download-link",level:4},{value:"\ud83d\udcbe Flashing the Image",id:"-flashing-the-image",level:3},{value:"Method 1. Using the UUU Tool",id:"method-1-using-the-uuu-tool",level:4},{value:"Method 2. Using the U-Boot UMS Command",id:"method-2-using-the-u-boot-ums-command",level:4},{value:"Method 3. For Windows Users",id:"method-3-for-windows-users",level:4},{value:"\ud83d\udee0\ufe0f Build Yocto",id:"\ufe0f-build-yocto",level:2},{value:"\ud83d\udce6 Supported Linux Kernel",id:"-supported-linux-kernel",level:3},{value:"\ud83d\udcc1 Source and Build Instructions",id:"-source-and-build-instructions",level:3},{value:"\ud83d\udcf8 Camera Testing Instructions",id:"-camera-testing-instructions",level:2},{value:"\ud83c\udf33 Specify Camera DTBO in U-Boot",id:"-specify-camera-dtbo-in-u-boot",level:3},{value:"\ud83c\udf9b\ufe0f Setup the media controller before camera streaming",id:"\ufe0f-setup-the-media-controller-before-camera-streaming",level:3},{value:"\ud83c\udfa5 Start Camera Video Stream via GStreamer",id:"-start-camera-video-stream-via-gstreamer",level:2},{value:"\ud83c\udfac Launch GStreamer Pipeline",id:"-launch-gstreamer-pipeline",level:3},{value:"\u2705 Check Media Controller",id:"-check-media-controller",level:3},{value:"\ud83d\udea8 Troubleshooting",id:"-troubleshooting",level:2},{value:"Check DTB Overlay in U-Boot",id:"check-dtb-overlay-in-u-boot",level:4},{value:"Verify Camera Initialization",id:"verify-camera-initialization",level:4},{value:"Confirm Board and Camera DTB",id:"confirm-board-and-camera-dtb",level:4},{value:"Check Available Video Devices",id:"check-available-video-devices",level:4}];function m(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"-introduction",children:"\ud83d\ude80 Introduction"}),"\n",(0,r.jsxs)(n.p,{children:["This guide shows you how to get started using TechNexion camera modules on ",(0,r.jsx)(n.strong,{children:"TechNexion IMX8MM development kits"}),". You must have the background knowledge to modify the kernel configuration, rebuild, and replace the kernel and the device tree source (DTS). This article is based on ",(0,r.jsx)(n.a,{href:"/docs/embedded-software/linux/yocto/release-notes/release-notes-yp60-2026q3",children:(0,r.jsx)(n.strong,{children:"Yocto 6.0 (Wrynose) 2026Q3 Release"})})," with Linux kernel version ",(0,r.jsx)(n.strong,{children:"6.18.20-2.0.0"}),"."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-supported-camera-modules",children:"\ud83d\udcf8 Supported Camera Modules"}),"\n",(0,r.jsx)(o.Z,{series:["TEVS","TEVM"]}),"\n",(0,r.jsx)(n.admonition,{title:"Example",type:"info",children:(0,r.jsxs)(n.p,{children:["This article uses the ",(0,r.jsx)(n.strong,{children:"TEVS-AR0521"})," as an example."]})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-supported-boards",children:"\ud83e\udde9 Supported Boards"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"SoM"}),(0,r.jsx)(n.th,{children:"Board"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"https://www.technexion.com/products/system-on-modules/edm/edm-g-imx8m-mini/",children:"EDM-G-IMX8M-MINI"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"https://www.technexion.com/products/system-on-modules/evk/wb-edm-g-imx8m-mini/",children:"WB-EDM-G-IMX8M-MINI"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"https://www.technexion.com/products/system-on-modules/pico/pico-imx8m-mini/",children:"PICO-IMX8M-MINI"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.a,{href:"https://www.technexion.com/products/system-on-modules/evk/pico-pi-imx8m-mini/",children:"PICO-PI-IMX8M-MINI"}),(0,r.jsx)("br",{}),(0,r.jsx)(n.a,{href:"https://www.technexion.com/products/system-on-modules/evk/pico-wizard-imx8m-mini/",children:"PICO-WIZARD-IMX8M-MINI"})]})]})]})]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-hardware-setup-instructions",children:"\ud83d\udd27 Hardware Setup Instru
1ctions"}),"\n",(0,r.jsx)(n.h4,{id:"1-power-supply-preparation",children:"1. Power Supply Preparation"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use a ",(0,r.jsx)(n.strong,{children:"DC 5V or 12V"})," power cable to supply power to the board."]}),"\n",(0,r.jsxs)(n.li,{children:["If you are using ",(0,r.jsx)(n.strong,{children:"FPD-Link III"})," SerDes, use a ",(0,r.jsx)(n.strong,{children:"12V power adapter (minimum 3A)"})," connected through the barrel jack."]}),"\n"]}),"\n",(0,r.jsx)("img",{src:"/img/wb-edm-g-12vdc-power.png",width:"360",height:"300"}),"\n",(0,r.jsx)(n.h4,{id:"2-debug-console-connection",children:"2. Debug Console Connection"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Prepare a ",(0,r.jsx)(n.strong,{children:"USB-to-UART cable"})," when connecting to a PC."]}),"\n",(0,r.jsxs)(n.li,{children:["Connect it to the ",(0,r.jsx)(n.strong,{children:"CONSOLE1"})," connector."]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"3-display-output-connection",children:"3. Display Output Connection"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Prepare a panel for output display."}),"\n",(0,r.jsxs)(n.li,{children:["Connect it to the ",(0,r.jsx)(n.strong,{children:"LVDS1 connector"})," on the board."]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"About display",type:"tip",children:[(0,r.jsx)(n.p,{children:"The provided DTBs include configuration for 10.1-inch and 15.6-inch LVDS display panels, as well as 5-inch MIPI panel."}),(0,r.jsx)(n.p,{children:"This output is useful for verifying the camera stream on screen."})]}),"\n",(0,r.jsx)(n.h4,{id:"4-camera-interface-csi-overview",children:"4. Camera Interface (CSI) Overview"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The board has one MIPI CSI-2 interface, ",(0,r.jsx)(n.strong,{children:"CSI1"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["It uses a 70-pin board-to-board connector manufactured by ",(0,r.jsx)(n.strong,{children:"Hirose"}),"."]}),"\n"]}),"\n",(0,r.jsx)("img",{src:"/img/wb-edm-g-imx8mp-csi1-camera-connected.png",width:"480",height:"360"}),"\n",(0,r.jsx)(n.admonition,{title:"About camera",type:"tip",children:(0,r.jsx)(n.p,{children:"Although the board has two CSI interfaces, only CSI1 is enabled. The IMX8M-MINI only supports one MIPI CSI-2 interface."})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-prepare-yocto-demo-image-for-testing-technexion-camera",children:"\ud83d\udcbb Prepare Yocto demo image for testing TechNexion camera"}),"\n",(0,r.jsx)(n.p,{children:"Use a Yocto demo image that includes the required device tree blobs and camera drivers."}),"\n",(0,r.jsx)(n.h3,{id:"-downloading-the-demo-image",children:"\ud83d\udd3d Downloading the Demo Image"}),"\n",(0,r.jsx)(n.p,{children:"The prebuilt demo image is available on TechNexion's download server."}),"\n",(0,r.jsx)(n.h4,{id:"download-link",children:"Download Link"}),"\n",(0,r.jsxs)(a.A,{groupId:"imx8mm-yocto-6.0-wrynose-board-selector",children:[(0,r.jsx)(l.A,{value:"edm-g-imx8mm",label:"EDM-G-IMX8MM",children:(0,r.jsxs)(n.p,{children:["\ud83d\udd17 ",(0,r.jsx)(o.Y,{href:"https://download.technexion.com/demo_software/EDM-G/IMX8/edm-g-imx8mm/DiskImage/edm-g-imx8mm_edm-g-wb_yocto-6.0-qt6_qca9377_lvds-1280x800_20260827.zip",children:"Download Prebuilt Image for EDM-G-IMX8MM"})]})}),(0,r.jsx)(l.A,{value:"pico-imx8mm",label:"PICO-IMX8MM",children:(0,r.jsxs)(n.p,{children:["\ud83d\udd17 ",(0,r.jsx)(o.Y,{href:"https://download.technexion.com/demo_software/PICO/IMX8/pico-imx8mm/DiskImage/pico-imx8mm_pico-pi-8m_yocto-6.0-qt6_qca9377_mipi5-1280x720_20260828.zip",children:"Download Prebuilt Image for PICO-IMX8MM"})]})})]}),"\n",(0,r.jsx)(n.h3,{id:"-flashing-the-image",children:"\ud83d\udcbe Flashing the Image"}),"\n",(0,r.jsx)(n.p,{children:"Flash the image to e.MMC or an SD card using one of these methods:"}),"\n",(0,r.jsx)(n.h4,{id:"method-1-using-the-uuu-tool",children:"Method 1. Using the UUU Tool"}),"\n",(0,r.jsxs)(n.p,{children:["\ud83d\udd17 ",(0,r.jsx)(n.a,{href:"/docs/embedded-software/linux/usage-guides/loading-software/using-uuu-to-flash-emmc",children:"How to Flash with UUU"})]}),"\n",(0,r.jsx)(n.admonition,{title:"Boot Mode",type:"tip",children:(0,r.jsxs)(n.p,{children:["Set the board to ",(0,r.jsx)(n.strong,{children:"Serial Download Mode"})," before flashing."]})}),"\n",(0,r.jsx)(n.h4,{id:"method-2-using-the-u-boot-ums-command",children:"Method 2. Using the U-Boot UMS Command"}),"\n",(0,r.jsxs)(n.p,{children:["\ud83d\udd17 ",(0,r.jsx)(n.a,{href:"/docs/embedded-software/linux/usage-guides/loading-software/using-u
1-boots-ums-command-to-write-flash-storage-over-usb-otg",children:"Using UMS in U-Boot"})]}),"\n",(0,r.jsx)(n.admonition,{title:"U-Boot Requirement",type:"tip",children:(0,r.jsxs)(n.p,{children:["The board must boot a U-Boot version that supports the ",(0,r.jsx)("code",{children:"ums"})," command."]})}),"\n",(0,r.jsx)(n.h4,{id:"method-3-for-windows-users",children:"Method 3. For Windows Users"}),"\n",(0,r.jsxs)(n.p,{children:["\ud83d\udd17 ",(0,r.jsx)(n.a,{href:"/docs/embedded-software/linux/usage-guides/loading-software/using-u-boots-ums-command-to-write-flash-storage-over-usb-otg#cross-platform-tool-balena-etcher",children:"Using Balena Etcher"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://www.balena.io/etcher/",children:(0,r.jsx)("img",{src:"/img/balenaetcher-vector-logo.png",width:"250",height:"50"})})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"\ufe0f-build-yocto",children:"\ud83d\udee0\ufe0f Build Yocto"}),"\n",(0,r.jsx)(n.p,{children:"TechNexion supports building a Yocto-based Linux image with the following kernel and branch."}),"\n",(0,r.jsx)(n.h3,{id:"-supported-linux-kernel",children:"\ud83d\udce6 Supported Linux Kernel"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Linux Kernel Version"}),(0,r.jsx)(n.th,{children:"Yocto Branch"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"6.18.20"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"https://github.com/TechNexion/linux-tn-imx/tree/tn-imx_6.18.20_2.0.0-stable",children:"tn-imx_6.18.20_2.0.0-stable"})})]})})]}),"\n",(0,r.jsx)(n.h3,{id:"-source-and-build-instructions",children:"\ud83d\udcc1 Source and Build Instructions"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/TechNexion/tn-imx-yocto-manifest/tree/wrynose_6.18.y-stable",children:"Fetch Yocto Source"})}),"\n",(0,r.jsxs)(a.A,{groupId:"imx8mm-yocto-6.0-wrynose-board-selector",children:[(0,r.jsx)(l.A,{value:"edm-g-imx8mm",label:"EDM-G-IMX8MM",children:(0,r.jsxs)(n.p,{children:["\ud83d\udcd6 ",(0,r.jsx)(n.a,{href:"https://github.com/TechNexion/tn-imx-yocto-manifest/tree/wrynose_6.18.y-stable?tab=readme-ov-file#for-edm-g-imx8mm",children:"Build Yocto for EDM-G-IMX8MM"})]})}),(0,r.jsx)(l.A,{value:"pico-imx8mm",label:"PICO-IMX8MM",children:(0,r.jsxs)(n.p,{children:["\ud83d\udcd6 ",(0,r.jsx)(n.a,{href:"https://github.com/TechNexion/tn-imx-yocto-manifest/tree/wrynose_6.18.y-stable?tab=readme-ov-file#for-pico-imx8mm",children:"Build Yocto for PICO-IMX8MM"})]})})]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-camera-testing-instructions",children:"\ud83d\udcf8 Camera Testing Instructions"}),"\n",(0,r.jsx)(n.h3,{id:"-specify-camera-dtbo-in-u-boot",children:"\ud83c\udf33 Specify Camera DTBO in U-Boot"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Connect the debug console cable to the carrier board."}),"\n",(0,r.jsxs)(n.li,{children:["Power on the board and interrupt boot when ",(0,r.jsx)("code",{children:"Hit any key to stop autoboot:"})," appears."]}),"\n",(0,r.jsx)(n.li,{children:"Set the camera overlay:"}),"\n"]}),"\n",(0,r.jsx)(a.A,{groupId:"csi-connector",children:(0,r.jsx)(l.A,{value:"csi1",label:"CSI1 connector",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"u-boot=> setenv dtoverlay tevs\n"})})})}),"\n",(0,r.jsxs)(n.ol,{start:"4",children:["\n",(0,r.jsx)(n.li,{children:"Continue booting."}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"u-boot=> saveenv\nu-boot=> boot\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"Append the display-panel overlay when you need on-screen camera output."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"u-boot=> setenv dtoverlay=tevs sn65dsi84-vl10112880\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"\ufe0f-setup-the-media-controller-before-camera-streaming",children:"\ud83c\udf9b\ufe0f Setup the media controller before camera streaming"}),"\n",(0,r.jsx)(n.p,{children:"Starting from kernel 6.12, the CSI driver supports media-ctl for configuring the pipeline on the i.MX8M Mini platform."}),"\n",(0,r.jsx)(n.p,{children:"Inspect the media topology:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ media-ctl -p\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example output:"}),"\n",(0,r.jsx)("div",{className:"scrollable-code",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:'Media controller API version 6.18.20\n\nMedia device information\n------------------------\ndriver          imx7-csi\nmodel           imx-media\nserial\nbus info        platform:32e20000.csi\nhw revision     0x0\ndriver version  6.18.20\n\nDevice topology\n- entity 1: csi (2 pads, 2 links, 0 routes)\n            type V4L2 subdev subtype Unknown flags 0\n            device node name /dev/v4l-subdev0\n        pad0: SINK\n                [stream:0 fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]\n                <- "csis-32e30000.mipi-csi":1 [ENABLED,IMMUTABLE]\n        pad1: SOURCE\n                [stream:0 fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]\n                -> "csi capture":0 [ENABLED,IMMUTABLE]\n\n- entity 4: csi capture (1 pad, 1 link)\n            type Node subtype V4L flags 0\n            device node name /dev/video2\n        pad0: SINK\n                <- "csi":1 [ENABLED,IMMUTABLE]\n\n- entity 10: csis-32e30000.mipi-csi (2 pads, 2 links, 0 routes)\n             type V4L2 subdev subtype Unknown flags 0\n             device node name /dev/v4l-subdev1\n        pad0: SINK,MUST_CONNECT\n                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]\n                <- "tevs 1-0048":0 [ENABLED]\n        pad1: SOURCE,MUST_CONNECT\n                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]\n                -> "csi":0 [ENABLED,IMMUTABLE]\n\n- entity 15: tevs 1-0048 (1 pad, 1 link, 0 routes)\n             type V4L2 subdev subtype Sensor flags 0\n             device node name /dev/v4l-subdev2\n        pad0: SOURCE\n                [stream:0 fmt:UYVY8_1X16/1280x800@1/60 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range\n                 crop.bounds:(0,0)/1280x800\n                 crop:(0,0)/1280x800]\n                -> "csis-32e30000.mipi-csi":0 [ENABLED]\n'})})}),"\n",(0,r.jsx)(n.p,{children:"The graph view can make the topology easier to understand."}),"\n",(0,r.jsx)("img",{src:"/img/edm-g-wb-imx8mm-media-ctl.png",width:"140",height:"300"}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsx)(n.p,{children:"Generate the graph with:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ media-ctl --print-dot > graph.dot\n$ dot -Tpng graph.dot > graph.png\n# Install Graphviz if needed:\n# sudo apt-get install -y graphviz\n"})})]}),"\n",(0,r.jsx)(n.p,{children:"Set the resolution and format of every media entity to match the camera output. Check supported formats, resolutions, and frame intervals:"}),"\n",(0,r.jsx)("div",{className:"scrollable-code",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"# formats\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-mbus-codes\n  ioctl: VIDIOC_SUBDEV_ENUM_MBUS_CODE (pad=0,stream=0)\n          0x200f: MEDIA_BUS_FMT_UYVY8_1X16\n          0x300a: MEDIA_BUS_FMT_SGRBG10_1X10\n          0x3011: MEDIA_BUS_FMT_SGRBG12_1X12\n\n# resolutions\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-framesize code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_SIZE (pad=0,stream=0)\n          Size Range: 640x480 
1- 640x480\n          Size Range: 1280x720 - 1280x720\n          Size Range: 1280x960 - 1280x960\n          Size Range: 1920x1080 - 1920x1080\n          Size Range: 2560x1440 - 2560x1440\n          Size Range: 2592x1944 - 2592x1944\n\n# frame interval of resolution\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals width=640,height=480,code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0,stream=0)\n          Interval: 0.008s (120.000 fps)\n\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals width=1280,height=720,code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0,stream=0)\n          Interval: 0.017s (60.000 fps)\n\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals width=1280,height=960,code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0,stream=0)\n          Interval: 0.017s (60.000 fps)\n\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals width=1920,height=1080,code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0,stream=0)\n          Interval: 0.017s (60.000 fps)\n\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals width=2560,height=1440,code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0,stream=0)\n          Interval: 0.031s (32.000 fps)\n\n$ v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals width=2592,height=1944,code=0x200f\n  ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0,stream=0)\n          Interval: 0.042s (24.000 fps)\n"})})}),"\n",(0,r.jsx)(n.p,{children:"Set the resolution to 1280\xd7720, for example:"}),"\n",(0,r.jsxs)(a.A,{groupId:"set-media-ctl",children:[(0,r.jsx)(l.A,{value:"cli",label:"Command Line",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ media-ctl -V \"'csi':0 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]\"\n$ media-ctl -V \"'tevs 1-0048':0 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]\"\n"})})}),(0,r.jsx)(l.A,{value:"script",label:"Script",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:'#!/bin/bash\n\n# Define the format and resolution as a variable\nmdev="/dev/media0"\nmediactl="media-ctl -d $mdev"\ncam="tevs 1-0048"\ncsi="csi"\ncode="UYVY8_1X16"\nwidth="1280"\nheight="720"\nformat="fmt:${code}/${width}x${height} field:none"\n\n# Function to run media-ctl commands with error handling\necho "Set media controller..."\n\n$mediactl -V "\\"$cam\\":0 [$format]"\n$mediactl -V "\\"$csi\\":0/0 [$format]"\n'})})})]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-start-camera-video-stream-via-gstreamer",children:"\ud83c\udfa5 Start Camera Video Stream via GStreamer"}),"\n",(0,r.jsx)(n.h3,{id:"-launch-gstreamer-pipeline",children:"\ud83c\udfac Launch GStreamer Pipeline"}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)("code",{children:"<res_w>"})," and ",(0,r.jsx)("code",{children:"<res_h>"})," with the selected resolution:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:'$ gst-launch-1.0 v4l2src device=/dev/video2 ! \\\n  "video/x-raw, format=UYVY, width=<res_w>, height=<res_h>" ! \\\n  waylandsink sync=false\n'})}),"\n",(0,r.jsx)(n.h3,{id:"-check-media-controller",children:"\u2705 Check Media Controller"}),"\n",(0,r.jsxs)(n.p,{children:["Run ",(0,r.jsx)("code",{children:"media-ctl -p"})," again after setting the resolution and link:"]}),"\n",(0,r.jsx)("div",{className:"scrollable-code",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:'Media controller API version 6.18.20\n\nMedia device information\n------------------------\ndriver          imx7-csi\nmodel           imx-media\nserial\nbus info        platform:32e20000.csi\nhw revision     0x0\ndriver version  6.18.20\n\nDevice topology\n- entity 1: csi (2 pads, 2 links, 0 routes)\n            type V4L2 subdev subtype Unknown flags 0\n            device node name /dev/v4l-subdev0\n        pad0: SINK\n                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]\n                <- "csis-32e30000.mipi-csi":1 [ENABLED,IMMUTABLE]\n        pad1: SOURCE\n                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]\n                -> "csi capture":0 [ENABLED,IMMUTABLE]\n\n- entity 4: csi capture (1 pad, 1 link)\n            type Node subtype V4L flags 0\n            device node name /dev/video2\n        pad0: SINK\n                <- "csi":1 [ENABLED,IMMUTABLE]\n\n- entity 10: csis-32e30000.mipi-csi (2 pads, 2 links, 0 routes)\n             type V4L2 subdev subtype Unknown flags 0\n             device node name /dev/v4l-subdev1\n        pad0: SINK,MUST_CONNECT\n                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]\n                <- "tevs 1-0048":0 [ENABLED]\n        pad1: SOURCE,MUST_CONNECT\n                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]\n                -> "csi":0 [ENABLED,IMMUTABLE]\n\n- entity 15: tevs 1-0048 (1 pad, 1 link, 0 routes)\n             type V4L2 subdev subtype Sensor flags 0\n             device node name /dev/v4l-subdev2\n        pad0: SOURCE\n                [stream:0 fmt:UYVY8_1X16/1280x720@1/60 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range\n                 crop.bounds:(0,0)/1280x800\n                 crop:(0,0)/1280x720]\n                -> "csis-32e30000.mipi-csi":0 [ENABLED]\n'})})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-troubleshooting",children:"\ud83d\udea8 Troubleshooting"}),"\n",(0,r.jsx)(n.h4,{id:"check-dtb-overlay-in-u-boot",children:"Check DTB Overlay in U-Boot"}),"\n",(0,r.jsx)(a.A,{groupId:"u-boot-dtbo",children:(0,r.jsx)(l.A,{value:"csi1",label:"CSI1 connector",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"  u-boot=> printenv dtoverlay\n    dtoverlay=tevs vxt-vl050-070-8048nt\n"})})})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"The vxt-vl050-070-8048nt overlay is for the 5-inch LCD display panel."})}),"\n",(0,r.jsx)(n.h4,{id:"verify-camera-initialization",children:"Verify Camera Initialization"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"  $ dmesg -t | grep tevs\n    /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48: Fixed dependency cycle(s) with /soc@0/bus@32c00000/mipi-csi@32e30000\n    /soc@0/bus@32c00000/mipi-csi@32e30000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48\n    /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48: Fixed dependency cycle(s) with /soc@0/bus@32c00000/mipi-csi@32e30000\n    /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48: Fixed dependency cycle(s) with /soc@0/bus@32c00000/mipi-csi@32e30000\n    /soc@0/bus@32c00000/mipi-csi@32e30000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48\n    /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48: Fixed dependency cycle(s) with /soc@0/bus@32c00000/mipi-csi@32e30000\n    /soc@0/bus@32c00000/mipi-csi@32e30000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/tevs_mipi@48\n    tevs 1-0048: tevs_probe() device node: tevs_mipi@48\n    tevs 1-0048: Version:26.3.0.1\n    tevs 1-0048: Product:TEVS-AR0144, HeaderVer:3, MIPI_Rate:800\n    tevs 1-0048: Chip ID: 0x0356\n    tevs 1-0048: probe success\n"})}),"\n",(0,r.jsx)(n.h4,{id:"confirm-board-and-camera-dtb",children:"Confirm Board and Camera DTB"}),"\n",(0,r.jsxs)(a.A,{groupId:"imx8mm-yocto-6.0-wrynose-board-selector",children:[(0,r.jsx)(l.A,{value:"edm-g-imx8mm",label:"EDM-G-IMX8MM",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"  $ dmesg -t | grep -i model\n    Machine model: TechNexion EDM-G-IMX8MM and WB baseboard\n    exc3000 2-002a: Retry 1 get EETI EXC3000 model: -6\n    exc3000 2-002a: Retry 2 get EETI EXC3000 model: -6\n    exc3000 2-002a: Retry 3 get EETI EXC3000 model: -6\n"})})}),(0,r.jsx)(l.A,{value:"pico-imx8mm",label:"PICO-IMX8MM",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"  $ dmesg -t | grep -i model\n    Machine model: TechNexion PICO-IMX8MM and PI baseboard\n    exc3000 2-002a: Retry 1 get EETI EXC3000 model: -6\n    exc3000 2-002a: Retry 2 get EETI EXC3000 model: -6\n    exc3000 2-002a: Retry 3 get EETI EXC3000 model: -6\n"})})})]}),"\n",(0,r.jsx)(n.h4,{id:"check-available-video-devices",children:"Check Available Video Devices"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ v4l2-ctl --list-device\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example output:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"imx-capture (platform:32e20000.csi):\n        /dev/video2\n        /dev/media0\n\nvsi_v4l2dec (platform:vsi_v4l2dec):\n        /dev/video1\n\nvsi_v4l2enc (platform:vsi_v4l2enc):\n        /dev/video0\n"})}),"\n",(0,r.jsx)(n.p,{children:"Typically, /dev/video2 is the primary camera capture device when using CSI1."})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},66274(e,n,i){i.d(n,{J:()=>s});const s=["VLS-FPD3-AR0144","VLS-FPD3-AR0145","VLS-FPD3-AR0234","VLS-FPD3-AR0521","VLS-FPD3-AR0522","VLS-FPD3-AR0821","VLS-FPD3-AR0822","VLS-FPD3-AR1335"]},77618(e,n,i){i.d(n,{G:()=>s});const s=["AR0144","AR0145","AR0234","AR0235","AR0246","AR0521","AR0522","AR0544","AR0821","AR0822","AR0830","AR1335","AR2020"];s.map(e=>`TEVS-${e}`)}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.