發表文章

Disable Weston video playback offset

現在目標與狀況 目標 Disable Weston video playback User hardware decode 遇到狀況 Enable Weston video playback normally gst-launch-1.0 filesrc location=/home/root/demo.mp4 ! \ qtdemux name=d d.video_0 ! queue ! h264parse ! vpudec ! \ queue ! waylandsink Disable Weston video playback offset gst-launch-1.0 -v \ filesrc location=/home/root/demo.mp4 ! \ qtdemux name=d d.video_0 ! queue ! h264parse ! \ vpudec ! glimagesink 驗證分析 同一支影片、同一個 decoder,在不同video sink,行為不同 更換video sink glimagesink: 是 OpenGL 視窗/GL render 路徑 kmssink: 是直接走 DRM/KMS plane 的路徑 如果要避開 Weston,又想低 CPU,應該要是decoder → KMS plane 簡單測試kmssink gst-launch-1.0 -v videotestsrc ! kmssink # 發現顯示 Caught SIGSEGV,所以kmssink有bug 用 modetest 去看DRM支援什麼 modetest -M imx-drm # formats: XR24 AR24 RG16 XB24 AB24 RX24 RA24 AR15 XR15 ...

Network tool

 Network tool Ifconfig 看已啟動的網卡資訊 ip addr 將所有ip位置列出來 ping 傳輸連接 iperf3 網路的頻寬流量 dhcp 主動設定DHCP Server WIFI tool iw 顯示wifi裝置的詳細資訊與ifconfig類似但只顯示無線裝置 wpa_passphrase 建WPA PSK .conf檔 wpa_supplicant 連接wpa wifi工具

Android studio 連接 SQL Server

 Android studio 連接 SQL Server 前言 我們使用JTDS與SQL Server做連線 去 下載JTDS.jar 放入Android studio libs裡(本篇使用1.2.8) 如果不知道如何導入.jar檔可以參考 Android Studio JAR/AAR檔打包、導入 獲得SQL Server資料 初始化 JTDS driver String driverName = "net.sourceforge.jtds.jdbc.Driver" ; Class. forName ( driverName driverName) ; 與SQL Server連線並獲取資料 conn = DriverManager. getConnection ( url , username , password ) ; //(url, 帳號 , 密碼 ) ps = conn.prepareStatement( "SELECT [table1].[ID],[table1].[Name],[table1].[Color] \n " + "WHERE [table1]" ) ; //SQL 搜尋語法 rs = ps.executeQuery() ; // 查詢資料 while (rs.next()) // 用 while 迴圈列出每行資料 { String Name = rs.getString( "Name" ) ; // 獲得紀錄每行資料 } 記錄下表table1 Name資料列內容 table1的表格 ID Name Color 1 Red #FF0000 2 G...

ALSA

 ALSA(advanced linux sound architecture) 測試檔 gst-launch-1.0 audiotestsrc ! audioconvert ! alsasink device-name=realtekrt5651co 播放 gst-launch-1.0 filesrc location = 檔名路徑 !\ mpegaudioparse!\ avdec_mp3!\ audioconvert!\ alsasink devic=hw:0  (alsa走哪個裝置 系統資訊 可以到/proc搜尋系統資訊 /proc/uptime 可以看到系統啟動執行時間及系統空閒時間 /proc/cpuinfo CPU資訊 /proc/asound Audio資訊 如音效卡、HDMICODEC、devices、PCM...等 ALSA Tool aplay 播放聲音 arecord 錄音 amixer audio參數設定 alsamixer audio參數設定介面 amixer & alsamixer的差異在於alsamixer有介面而amixer只是文字

SQL UPDATE 更新修改資料

 SQL UPDATE 更新修改資料 UPDATE用法 table1的表格 ID Name Color 1 Red #FF0000 2 Green #00FF00 3 Blue #0000FF UPDATE基本用法 UPDATE [table1] SET [table1].[Color] = #0000cd WHERE [table1].[ID] = 3 執行結果: ID Name Color 1 Red #FF0000 2 Green #00FF00 3 Blue #0000cd ...

Gstreamer

 Gstreamer 測試檔 gst-launch-1.0 videotestsrc ! video/x-raw, width=1280, height=720 ! kmssink gst-launch-1.0 filesrc location = 檔名路徑 !\ decodebin name =dec !\ videoconvert !\ kmssink 影像 gst-inspect  列出GStreamer plugins gst-inspect-1.0 | grep -i videosink  gst-launch  播放 gst-typefind  查詢檔案的decodebin gst- typefind -1.0 | grep -i videosink 

Cross compilation toolchain

Cross compilation toolchain 簡單明瞭就是在不同的開發平台做交叉編輯 大多數使用的電腦都是 x86如果 直接在電腦上 compiler, 只能編譯出 x86 辨識的執行檔 所以如果要 compile 出其他 CPU 可以辨識的執行檔就要使用 cross compiler 使用 ARM 系列 CPU

X Window & wayland

圖片
 X Window & Wayland X Window & Wayland 簡單關係 X window以點陣圖方式顯示的軟體視窗系統 Wayland是用來取代改善X windows 的桌面系統protocol X Window  X server 接收到X Client回傳的需求後 須要再將需求傳遞給Compositor合成器將畫面疊加 再返回給X server 才能做display Wayland 將Compositor與server包在一起 Client將動作直接傳遞給 Wayland Compositor 在執行display 1. Devise input trigger Driver 收到event傳遞給Wayland Compositor 2. Wayland Compositor 將 event傳遞給 Client 3.  Client 要做的動作傳給 Wayland Compositor 4.  Wayland Compositor 經由KMS做display  controller 走KMS吃CPU效能 走DRM吃GPU效能 KMS (Kernel Model Set) -> color,resolution,refresh -> 訊號有關的 DRM(Direct Renddering Manager) -> 記憶體有觀的 FrameBuffer包含在DRM內 Application 將影像資料寫入Memory(FrameBuffer)  MMAP將資料轉到driver driver將資料傳至display顯示 weston linux 使用Weston主要原因為Weston使用Wayland的protocol 燒入版本Yocto

Linux嵌入式系統啟動流程

 Linux嵌入式系統啟動流程 流程說明 Soc啟動ROM Code一上電就動作 根據HW設計的boot select //讀取mini boot 放置sram  //Init ddr 將u-boot 放置ddr SRAM mini boot 將u-boot讀取至ddr ram U-boot 起來後會將linux kernel 放置ddr ram 執行 Linux 啟動後會依去boot loader 來決定RootFS BootLoader是嵌入式設備中用來啟動操作系統內核的一段程序。 uboot(universal bootloader)是一種可以用於多種嵌入式CPU的BootLoader程序,換言之,uboot是bootloader的一個子集。 uboot的核心作用就是啟動操作系統內核

Userland

 Userland Userland 分成User Space & Kernel Space內存保護和硬件保護,防止惡意或錯誤的軟件行為 User Space 指操作系統中位於Kernel之外的所有代碼,例如操作系統都預裝了各種功能的工具、編程語言和圖形工具,這些都是User Space控制。 User Space不能直接操作系统资源必須通過system call,才能向Kernel發出指令。 Kernel Space 控制系統資源處理驅動程序,較為底層核心的操作

Android Studio .csv檔讀寫

圖片
 Android Studio .csv檔讀寫 可以先參考 Android Studio 檔案讀寫 內有寫關於Android Studio讀寫檔案基礎介紹 本次使用ArrayList存放CSV資料,使用RecyclerView顯示資料 建立ArrayList Data Model 新增DataModel的Java class public class DataModel { private String ID ; private String Name ; private String Score ; public DataModel (String ID , String Name , String Score){ this . ID = ID ; this . Name = Name ; this . Score = Score ; } public String getID (){ return ID ; } public String getName (){ return Name ; } public String getScore (){ return Score ; } } 並在Activity內宣告ArrayList ArrayList<DataModel> datalist = new ArrayList<>() 建立RecyclerView & Adapter 在建立Adapter之前可以先建立ViewHolder public class ViewHolder extends RecyclerView.ViewHolder { public TextView idtext , nametext , scoretext ; public ViewHolder ( @NonNull View itemView) { super (itemView) ; i...

Android Studio 寫入檔案PC無法顯示

Android Studio 寫入檔案PC無法顯示 寫入檔案後需要使系統重新掃描檔案 可以使用以下方式 1. Intent intent = new Intent(Intent. ACTION_MEDIA_SCANNER_SCAN_FILE ) ; Uri uri = Uri. fromFile (newTextFile) ; intent.setData(uri) ; context .sendBroadcast(intent) ; 2. MediaScannerConnection. scanFile ( context ,new String[]{file.getAbsolutePath()} ,null,null ) ;

Android Studio 檔案讀寫

圖片
 Android Studio 檔案讀寫 讀寫權限 <uses-permission android :name ="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android :name ="android.permission.WRITE_EXTERNAL_STORAGE" /> 取得儲存路徑 getDataDirectory() 取得手機內存根目錄 getDownloadCacheDirectory() 取得手機暫存 getRootDirectory() 取得手機系統目錄 getExternalStorageDirectory() 取得手機外部儲存SD Card目錄 取得路徑的格式 getPath() 取得定義的路徑 getAbsolutePath() 取得絕對路徑 getCanonicalPath() 取得符合路徑規範的路徑 File file = new File( "TXT/./test.txt" ) ; Log. d ( "frilgetPath" , "==" +file.getPath()) ; Log. d ( "frilAbsolutePath" , "==" +file.getAbsolutePath()) ;...

Android Studio RecyclerView JSON API

圖片
 Android Studio RecyclerView JSON API AndroidManifest權限設定 在AndroidManifest中加入網路訪問權限> <uses-permission android :name ="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android :name ="android.permission.INTERNET" /> Layout activity_main <LinearLayout xmlns: android ="http://schemas.android.com/apk/res/android" xmlns: tools ="http://schemas.android.com/tools" android :layout_width ="match_parent" android :layout_height ="match_parent" android :orientation ="vertical" tools :context =".MainActivity" > <androidx.recyclerview.widget.RecyclerView android :id ="@+id/recyclerlist" android :layout_width ="match_parent" android :layout_height ="wrap_conte...