2022年7月22日星期五

linux當中,查詢ubi的一些相關資訊,以及一些ubi製作與掛載指令

 在Linux的作業系統當中,UBI的相關資訊都會在 /sys/class/ubi
 這些資訊會包含
 - 對應的 MTD編號  =>  cat /sys/class/ubi/ubi0/mtd_num
 - Volum名稱  =>  cat /sys/class/ubi/ubi0/ubi0_0/name
 等等....

接下來講幾個UBI的指令,並說明其用途

ubinfo -a /dev/ubi0
這個指令可以列出此ubi0詳細的訊息,其資訊如下圖所示:








ubidetach -m 0
這個指令可以把掛在ubi0的 ubi卸載的指令

ubiformat /dev/mtd0
這個指令可以把mtd0格式化成ubi可以用的格式

ubiattach /dev/ubi_ctrl -m 0 -b 1  (底線表示mtd0,若是 -m 1則為 mtd1)
把mtd0 attach為 ubi

ubimkvol /dev/ubi0 -m -N rootfs (建立後,就會出現ubi0_0)
把ubi0建立Volum名稱為rootfs

mount -t ubifs /dev/ubi0_0 /tmp
把ubi0掛載到 /tmp資料夾


實際上要讓一個ubi可以使用,也就是做下面這幾個步驟

ubidetach -m 0
ubiformat /dev/mtd0
ubiattach /dev/ubi_ctrl -m 0 -b 1
ubimkvol /dev/ubi0 -m -N rootfs
mount -t ubifs /dev/ubi0_0 /tmp


2022年7月21日星期四

[shell script] mv 所有的檔案,排除特定檔案,移動到同一層的特定目錄內

 今天遇到一個用法,這邊來記錄一下
 在目前路徑下有以下這些檔案,包含 6個檔案,以及兩個資料夾










假設我想要把除了333的所有的資料,全部移往final資料夾,該怎麼做呢?
可以使用下面的作法

# mv $(ls --ignore=333 --ignore=final) final

我們來看一下執行結果
可以在mv執行之後,原本路徑只留下 333 與 final資料夾
另外印出final資料夾,該移動的檔案都移動過去了!





2022年7月20日星期三

gstreamer 簡單介紹,以及如何透過文件,正確使用plug-in and element

 首先介紹一下 gstreamer,會有三個可執行黨,分別如下

gst-inspect-1.0 可以查看當前gst-launch-1.0 有哪些 element可以使用
        gst-discoverer-1.0 後面帶入音檔名稱,可以查看音檔的詳細格式
        gst-launch-1.0 gstreamer主要的程式,可以帶入很多的element用pipeline實現


另外會有幾個比較重要的library,這些Library也可以認知為plug-in,分別如下

gstreamer1.0-plugins-base
gstreamer1.0-plugins-good
gstreamer1.0-plugins-bad
gstreamer1.0-plugins-ugly
gstreamer1.0-libav
gstreamer1.0-omx
gstreamer1.0-rtsp-server
gstreamer1.0-vaapi


使用 gstreamer時,我們會看到有 pipeline的作法,gstreamer的pipeline是用 "!" 來做串接,下面指令是播放 wav音檔,並把聲音導到 hw:0,0的介面:
=> gst-launch-1.0 filesrc location=Track1.wav ! decodebin ! audioconvert ! audioresample ! audio/x-raw,rate=32000,channels=1,format=S16LE ! alsasink device="hw:0,0"

上面的指令當中,我們會看到很多個驚嘆號"!",驚嘆號後面,會跟著一行英文字,我們稱他為 "element",
這些element,我們都可以在 gstreamer文件中找到,文件中也會跟你說這個 element,是屬於哪個 plug-in,當gst-launch-1.0有某個 element無法使用時,你就可以透過文件,知道要去哪個plug-in來開啟這個element來使用!

gstreamer文件,關於element & plug-in的介紹,請參考此 link:

接著我們舉個例子,講解一下怎麼對照來看,假設現在我們想要使用到 voamrwbenc 這個功能



這個element的功能,主要是用來把wav音檔,轉換成 amr-wb的格式,
我們可以注意到 Module的欄位為 gst-plugins-bad
因此我們就可以知道,要使用此element的功能,你的gstreamer必須要有安裝 gstreamer1.0-plugins-bad 這個plug-in ,並且有開啟 voamrwbenc這個element

另外如果想知道這個 element怎麼使用,可以直接點選 voamrwbenc,會link到這個 element的介紹與使用範例,如下圖
這邊就有直接把使用的指令,列在example裡面



需要特別注意的是,文件中有一行不起眼的文字,"Please note that the above stream misses the header, that is needed to play the stream"
他這行的意思是,你轉出來的 AMR音檔,是無法直接播放的,需要再自行加上 AMR的 Header才可以正確撥放

所以這邊順邊介紹一下兩種 AMR的 Header,以下都是單聲道的Header
1. AMR-WB
0x2321414d522d57420a in hex ("#!AMR-WB/n")

2. AMR-NB
0x2321414d520a in hex  ("#!AMR/n")

我這邊也有確認過,轉檔完成之後,在檔案最前面append header,確實是可以播放的
順便紀錄我如何用shell的方式把header append上去的,使用以下的指令
######## Add AMR-WB Header ##########
echo -n -e '\x23\x21\x41\x4d\x52\x2d\x57\x42\x0a' | cat - test_wb.amr > temp && mv temp test_wb.amr


######## Add AMR-NB Header #########
echo -n -e '\x23\x21\x41\x4d\x52\x0a' | cat - test_nb.amr > temp && mv temp test_nb.amr

2022年7月9日星期六

使用vim貼上多行內容,如何避免換行(使用putty)

 現在vim(vi) 越做越聰明,有時候輸入Enter,下一行還會自動幫你對齊
但有時卻會造成困擾,例如你需要貼入多行內容的時候,若當中有一些tab
那接下面的那行,也會自動幫你tab,而造成困擾

解決方法就是,進入vim之後,下面幾個步驟
1. 先在command模式,輸入":r! cat"
2. 貼上想貼的文字(使用putty,按滑鼠右鍵貼上)
3. 輸入Enter,會看到換行
4. 按鍵盤 Ctrl+D

以上步驟做完,你就會看到可以正確地貼上



shell script 一行一行讀檔案,並且以變數方式印出

 假設有個檔案file_list.txt,內容如下:
# cat file_list.txt
1111
2222
3333

範例如下:

================== echo_value_from_file.sh ==================

#!/bin/sh
echo_file() {
    exec < "file_list.txt"
    while read want_param    #把檔案內的值,assing給want_param參數
    do
            echo $
want_param
    done
}
echo_file

========================================================

執行結果如下:








用shell script 撰寫一支function,在呼叫function時,後面帶入未知個數的數值,把變數寫到檔案內

首先說明,我的系統是 dash
# ls -al /bin/sh 
/bin/sh -> dash

範例如下:

===================== get_dynamic_value.sh ===========================

#!/bin/sh

get_dynamic_value() {
    total=$#          #取得帶入參數的個數
    array=($*)      #宣告陣列,把get到的參數,assign給陣列
    
    for ((i=1;i<=$total;i++));
    do
            echo ${array[$i-1]} >> file_list.txt    #把參數一行一行寫入檔案
    done
}

get_dynamic_value    1111    2222    3333

====================================================

執行結果,會產生檔案 file_list.txt



使用 lsblk 印出 emmc 每個 partition的"名字"與"size"

使用以下的command可以印出 eMMC的 partition資訊 lsblk --bytes --output name,partlabel,size   參數說明 --bytes: partition的大小,以byte的方式輸出 --output: 後面可以指定要輸出的內容...