ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2015年3月31日 星期二

build android 5.0

debian jessie 沒什麼問題。

openjdk-7, 在 mysenvsetup.sh 加上 JAVA_HOME 宣告,指定到 jdk-7
build fail : 缺lsop.

在 ubuntu 10.04 (lucid) 上要 build 有兩個問題:
  • java7
  • python2.7
又要維持能 build 2.3,所以必須要並存。

java7 : 到 Oracle download jdk7 的 tar 檔。
解開放在 /usr/lib/jvm/ 下。
並且 export JAVA_HOME 到 那裡。

python2.7 的話,一樣,download source 下來,configure, make & install
但是要注意,要 install 到 local,所以 configure 時...
./configure --prefix=/home/charles-chang/pyton26/
這樣 build 玩install 才會正確,python lib 才會找到正確的地方。
還有,android build 需要 zip2 module,
configure 會檢查系統有沒有安裝 libbz2-dev,
如果沒有,就不會 build bz2 module。
所以記得要install 玩再configure

install 後,還要改 path:
export PATH=/home/charles-chang/python27/bin/:$PATH
這樣才會用到 python2.7

很奇怪的是,build script 在 linux 指定用 openjdk, 在 Mac, Windows 用 Oracle jdk.
所以上面的安裝build 會有 error,就去改 build script,不要指定 openjdk 就可以。

2015年3月10日 星期二

split video file with ffmpeg

ref: http://stackoverflow.com/questions/5651654/ffmpeg-how-to-split-video-efficiently

結果新版 ffmpeg 要指定 -vcodec, -acodec 才行。
舊版的只需要用 -codec 就可以。

所以 command 是:
ffmpeg -i DOS.mkv -t  1:10:20 -acodec copy -vcodec copy DOS1.mkv
ffmpeg -i DOS.mkv -ss 1:10:20 -acodec copy -vcodec copy DOS2.mkv
以上的例子就是把 DOS.mkv 從 1:10:20 分成前後兩段。

ref: http://superuser.com/questions/820747/slicing-video-file-into-several-segments

比較不好,,要要 encoding...
ffmpeg -i input.mp4 -c:v libx264 -crf 22 -map 0 -segment_time 9 -g 9 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*9)" -f segment output%03d.mp4


ref: https://matthewsdan.wordpress.com/2015/04/16/ffmpeg-split-video-into-custom-number-of-clips/

這個不用 encoding..

for i in *.mp4 *.flv *.avi *wmv; do ffmpeg -i "$i" -f segment -segment_time 5 -c:v copy -reset_timestamps 1 output%d.avi; done
也就是說:
ffmpeg -i XXX.mp4 -f segment -segment_time 5 -c:v copy -reset_timestamps 1 output%d.mp4
其實就是這一篇:http://rachid.koucha.free.fr/tech_corner/pty_pdip.html

2015年3月9日 星期一

logwrapper : show stdout on logcat buffer

在做 vold fsck_msdos 時發現,vold 執行 external program : fsck_msdos,竟然可以把 fsck_msdos 的 stdout 導到 logcat 中。
並且加上 log_tag.

所以看一下,是..
        const char *args[5];
        args[0] = "/system/bin/fsck_msdos";
        args[1] = "-p";
        args[2] = "-f";
        args[3] = fsPath;
        args[4] = NULL;

        rc = logwrap(4, args, 1);

就是用 logwrap( ) 來呼叫。

vold 有實做自己的 logwrap( ), 就在 logwrapper.c

ref: http://developer.android.com/tools/debugging/debugging-log.html#viewingStd

另外,android 也可以把 stdout, stderr 重導到 logcat.
就是上面的說明。

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

fsck_msdos , cluster numbers and alloc memory

因為一做fsck 就一堆 process 被kill,所以想找一下..
好像是 fat.c 的 readfat( ) 的 calloc:
fat = calloc(boot->NumClusters, sizeof(struct fatEntry))
拿 500G hd, 這兩個值 (NumClusters, sizeof fatEntry) 是 (15258357, 16)
拿1G, 是 (251155,16)
拿16G,是(1930019,16)
拿32G,是(1927187,16)

1G 的,把 boot sector data 有關
//system/bin/fsck_msdos(  687): NumSectors: 2013184, ClusterOffset: 3942, SecPerClust: 8
I//system/bin/fsck_msdos(  687): NumClusters:251155
32G:
I//system/bin/fsck_msdos(  687): NumSectors: 61700096, ClusterOffset: 30082, SecPerClust: 32
I//system/bin/fsck_msdos(  687): NumClusters:1927187
16G
I//system/bin/fsck_msdos(  687): NumSectors: 30910462, ClusterOffset: 30158, SecPerClust: 16
I//system/bin/fsck_msdos(  687): NumClusters:1930019
500G
I//system/bin/fsck_msdos(  687): NumSectors: 976773166, ClusterOffset: 238316, SecPerClust: 64
I//system/bin/fsck_msdos(  687): NumClusters:15258357

2015年3月6日 星期五

print to logcat from native c program

在 android 系統,c program, (不是由 dalvik run) 要 print 到 logcat 的方法。
ref:
  • http://stackoverflow.com/questions/10274920/how-to-get-printf-messgaes-written-in-ndk-application
  • http://stackoverflow.com/questions/6426911/c-c-printfs-wheres-it-appears-in-a-android-native-code

android framework 本身的參考 code, 可以看 external/ppp/android/

大概就是:

source code 要 include android/log.h 這個header.
Android.mk 要加上 cutils 這個 library:
LOCAL_SHARED_LIBRARIES := libcutils
然後 source code 中就可以用:
__android_log_print(ANDROID_LOG_INFO, "name", "message with %", argument ...)
來印出message 到 logcat

2015年3月2日 星期一

STM32F4 Discovery board, in Debian Jessie

其實是follow : http://www.wolinlabs.com/blog/linux.stm32.discovery.gcc.html

結果:

啟動 stlink/st-util 時出現 error
2015-03-02T14:22:33 WARN src/stlink-usb.c: Error -3 (Permission denied) opening ST-Link/V2 device 001:003

結果是因為 /etc/udev/rules.d/45-usb-stlink-v3.rules 要加GROUPE:
# STLink Device
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666",GROUP="plugdev"


還有..

啟動 gdb 後..出現:
warning: File "/home/charles-chang/teatime/discovery/stm32_discovery_arm_gcc/blinky/.gdbinit" auto-loading has been declined
 by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
To enable execution of this file add
 add-auto-load-safe-path /home/charles-chang/teatime/discovery/stm32_discovery_arm_gcc/blinky/.gdbinit
line to your configuration file "/home/charles-chang/.gdbinit".
To completely disable this security protection add
 set auto-load safe-path /
line to your configuration file "/home/charles-chang/.gdbinit".

所以就 follow instruction, 在 home 下 create file: ~/.gdbinit
set auto-load safe-path /
就可以 auto-load.


然後是 ref: http://www.wolinlabs.com/blog/stm32f4.semihosting.html

這部份比較沒問題,就照著做,download & build openocd,
semihosting 的 example 在上面就已經download 好了 (git)
所以只要 build 就可以。

然後啟動 openocd, 再啟動 gdb,
semihosting 的 output 會顯示在 openocd 那一端。

* 有點問題的是,進 semihosting 後,用 回 stlink 好像有點問題。最後解決的方法是 nb 重開機..@_@

標籤

網誌存檔