一開始因為我的l4linux上面 只有ram disk 所以說在上面解H.264的話 應該要準備一個答案在上面
所以說我先在別的地方產生出這個答案 就用原本davinci上的linux來產生
還有因為compiler不同的關係 所以說我打算davinci上面的linux是用nfs掛載的
好現在的工作很簡單 掛載linux的root在nfs上面
一開始我一直掛載不上去 後來才發現是因為我在linux上面的bootargs設錯了
以下這個才是正確的bootargs 總共有三的u-boot的command
setenv nfshost 192.168.48.244
setenv rootpath /home/liuin/fm/filesys
setenv bootargs console=ttyS0,115200n8 noinitrd rw ip=192.168.48.243:192.168.48.244::255.255.255.0::eth0:off root=/dev/nfs nfsroot=${nfshost}:${rootpath},nolock mem=120M
這裡主要的差別是ip的部份 我一開始是用dhcp 但是我這裡沒有dhcp的server 所以說他抓不到我的host
ip第一個是client的ip 第二個是host的ip 第三個是gateway不知道要設什麼 第四個是netmask(亂設)
第五個是名稱 第六個是哪一張網卡 第七個不知道(再查)
掛在nfs後 我本來算在上面執行 由另一個compiler所編譯出來的ffmpeg
我本來以為換掉原本file system中的shared library就可以了
我就照者執行的時候抓不到library一個一個替換掉了
替換到一半就發現居然ls不能用了 愈替換跑出愈來愈多需要的library
我就發現這樣不行 ffmpeg不能在這裡執行
(我ffmpeg的library是拿compile他的compiler的library來用)
這個時候我發現我沒辦法產生出ffmpeg decode的答案
不過這時我早就想到了解決的方法了
因為l4linux上面只有ram disk 好吧 沒辦法就用serial output來output影片檔吧
但是影片檔是有編碼過的 而且serial outupt不知道是不是只能output ASCII
我就想到可以用xxd將影片檔變成xxd的輸出檔 在把serial output存成檔來做處理
不過這時候發現 l4linux上面的ramdisk好像沒有xxd
還好這時發現了uuencode跟uudecode這兩個好東西
先來說明一下uuencode跟uudecode
這兩個東西主要是將binary轉換成ASCII來輸出(完全就是我要的檔案)
uuencode是binary => ASCII
uudecode是ASCII => binary
在ubuntu預設是沒有安裝的 要安裝sharutils 才會有
接下來是這兩個指令的使用方法(主要是uuencode)
假設我現在有一個binary a要轉換成只有ASCII的檔b 就可以打以下的指令
uuencode a <> b
這裡會覺得很奇怪 為什麼a要打兩次 因為uuencode預設輸入跟輸出是std input跟std output
但是在編碼後的b檔中 又要有a的名稱 所以說還要給uuencode檔名作為參數
傳完後我要將b變回a
uudecode b
這樣就行 不過要注意 解碼完會產生一個跟a一模一樣的檔 所以說解碼的資料夾不能也有檔的檔名是a
如果說minicom要將serial output存起來的話
要多設一個flag是-C 檔名 這樣就會紀錄下serial output了
有了以上的工具 我就可以不需要先做答案在l4linux的ram disk中了
將ffmpeg擺到ram disk還蠻容易的
因為就利用學長做好的makefile就好 初步執行一下 可以產生出ffmpeg的help資訊
就作到這裡
沒有留言:
張貼留言