2017/6/30

v4l-utils , Android

glob.h:
./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/sysroot/usr/include/glob.h
./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/glob.h
./kernel/include/linux/glob.h
./ndk/sources/host-tools/make-3.81/glob/glob.h
./external/openssh/openbsd-compat/glob.h
./external/ltrace/glob.h


我是 clone 這裡的:https://github.com/garbear/v4l-utils
他也是從 linuxtv clone 的,
他大概是 stable-1.0,然後加上 Android.mk

這個需要 stlport
我用 google 的:https://android.googlesource.com/platform/external/stlport
用 tag android05.1.1_r9 (好像是最新的 tag)

先 build stlport (就mm)
再 build v4l-utils

他說指有 utils 下的 folder 有 Android.mk, 可以用 find 找出來。
然後分別進去 mm 就可以。


其實版本有點亂,...反正checkout 出有Android.mk 的就可以。
還有一些新的版本,lib 下也有Android.mk,但是不知道是不是因為 path 的關係,所以 buid fail...
把 lib 下 build faile 的 find no glob.h 的 file 的include comment 掉,lib 就 build Ok

2017/6/28

adb over tcp

ref: https://stackoverflow.com/questions/2604727/how-can-i-connect-to-android-with-adb-over-tcp

首先手機端,要設定 adb service 使用 tcp., 然後重新啟動 adb...
#setprop service.adb.tcp.port 5555
#stop adbd
#start adbd


PC 端,啟動 adb 連線前,要先設定使用 tcp 連線到 裝置的 IP, PORT
$adb connect 10.202.208.55:5555
* daemon not running. starting it now at tcp:5037 *
* daemon started successfully *
connected to 10.202.208.55:5555
看看有沒有出現..
$ adb devices
List of devices attached
10.202.208.55:5555 device
連線:
$ adb shell
OK,
PC 要回到 usb mode,就下
$adb usb

2017/6/23

使用 screen, emacs 做 uart termianl .. (serial port)

ref: serial port rs232 terminal

就是直接用
screen /dev/ttyUSB0 115200
就可以了,用 man screen 可以看一下 command

缺點大蓋是沒有辦法 log

emacs 的話就是開啟 emacs 後,輸入 M x (就是 Alt-x) , 然後輸入 serial-term ,接著照著回答 ttyUSB0, baudrate 115200.. 就可以了。
emacs 會開啟 X/GUI mode, 要開啟console mode, 要用 emacs -nw

2017/6/20

lxc-clone

man:
lxc-clone [-s ] [-K ] [-M ] [-H ] [-B backingstore] [-L fssize] [-p lxcpath] [-P newlxcpath] {-o orig} {-n new} [-- hook arguments]
 

所以從 folder A copy 到 folder B 同時改名...
sudo lxc-clone -p ~/hd/lxc -P ~/60g -o myhd -n myhdr

修改完,手動修改:
  • /etc/network/interfaces : ip adderss
  • /etc/hosts : new guest os hostname

2017/6/19

install pip 9.1 on Jessie

原來安裝過 python-pip 就不行。
裝 python (python-dev) 就好。
然後 follow 這一篇, download get-pip.py
然後用
sudo python get-pip.py
就可以正常安裝 pip 9.1 了。

pip install 會利用執行人的home 目錄的 .cache 做工作目錄。
download and unpack package source.

安裝到 /usr/local/lib/python2.7/...
如果有權限問題。
只好安裝到 自己的 home 目錄下。
會是 ~/.local/
system.journal corrupted or uncleanly shut down, renaming and replacing.
用了幾分鐘,console 開始鈍鈍的...
top 看,systemd 第一名...

2017/6/16

ARM Fast Models

ARM 的 Fast Models 好像是 ARM 出的 emulator。
配合自家的 DS-? 開發環境,可以用來模擬 ARM 的 CPU, 即使還沒 release 的...

2017/6/13

console color not work. TERM vt102

大概是這一篇說的...
For some reason, it appears that "vt102" is compiled into the version of
getty on Ubuntu as default while "linux" is compiled into the version of
getty on Fedora as default.  The man pages also make clear that this
version of getty does not reference /etc/gettydefs.  :-P  Getty is the
culprit and I don't see any other workaround for lxc-console.  That same
change may need to be made in /etc/init/console.conf but I don't quite
see where it's coming into play.
所以解決方法是在 invoke 時,加上 TERM=linux
<-- 沒效
最後是加在 .profile... TERM=linux

nfs 權限問題

nfs server 同一個user 的 uid/gid 和 local 的 uid/gid 不一樣,所以 mount 起來後,會有權權限問題。
正確方法好像是 用 mapid 轉一下 uid/gid。

如果只是為了當 storage 用,可以在 nfs server create 一個專用 folder, set owner 是local uid/gid 的 user,
然後在 /etc/export 中,用
rw,no_root_squash
這樣 mount 起來,local 就可以當自己的 storage 用了。


比較複雜的方法是用 anonuid, anongid 來來對應。
在exports 的share option 中加上 anonuid=1001, anongid=1001 的話,意思是說,凡是被mapping 成為 anonymous 的 client (幾乎就是全部的 client),都會被轉成 uid. gid 1001 的 user。
如果要強制 client root 維持root,不要強制轉為 anonymous的話,option 就要加上 no_root_squash

所以一般使用 anonuid, anongid 指定的話,都是指定為 share folder 的 owner uid/gid

try tensorflow..

先 create 一個 jessie 的 lxc 環境,這次在 nfs mount 的 folder 中..
所以要用 -P 指定 path:
sudo lxc-create -P ~/3rdhome/lxc -n tensorflow -t download
...
...
Distribution: debian
Release: jessie
Architecture: amd64

The cached copy has expired, re-downloading...
Downloading the image index
The cache is already up to date.
Using image from local cache
Unpacking the rootfs

---
You just created a Debian container (release=jessie, arch=amd64, variant=default)

To enable sshd, run: apt-get install openssh-server

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.
就 follow 這一篇 把剩下都做完...

ping 過兩層 nat 的機器..

host/nat (172.16.200.1) ----- 172.16.200.10/nat (172.16.110.1) ----- 172.16.110.2/siteA
從 host 要 ping siteA ping 不到。
用 route -n 檢查一下:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.144.254 0.0.0.0         UG    1024   0        0 eth0
172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.144.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
用 traceroute 172.16.110.2,結果潮 default gw (192.168.144.254) 過去...
所以要把 172.16.110.0 這個network 加到 routing table 中。
這個 network 要靠 nat 172.16.200.10 轉發(ip_forward=1),就是他的 gateway..
route add -net 172.16.110.0 netmask 255.255.255.0 gw 172.16.200.10 eth1
這樣就 OK 了...

2017/6/12

raspberry pi . relay

ref:
pi 的 gpio 好像是 3.3v, 所以買 relay 的時候要這注意要買推得動的。
我是買:這一家, 因為我只要一路,控制有 3.3v。

relay 上的 VCC, GND 用 pi 上面的 5V, Ground。
然後 gpio 用 gpio25,pin 腳22,外側倒數第三跟。

先用 ref 裡面的 relay 程式(因為他是控制 gpio 24, 25),看 relay 可以正常開關。
就可以開始其他的...

用 python..先啟動 python..到 interactive..
pi@raspberrypi:~/Relay$ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import RPi.GPIO as GPIO
>>> GPIO.setup(25,GPIO.OUT)
Traceback (most recent call last):
  File "", line 1, in 
RuntimeError: Please set pin numbering mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)
>>> GPIO.setmode(GPIO.BCM)
>>> GPIO.setup(25,GPIO.OUT)
__main__:1: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
>>> GPIO.output(25,False)
>>> GPIO.output(25,True)
>>> 
原來 GPIO 的數字命名有兩種:依照 排針 pin 腳數字,還是 BCM datasheet 的gpio 數字。
這裡用的是 datasheet 數字。
最後 output False, True 就可以聽到 relay 動作...

接著做自動開關..
關 15 sec
開 10 min
>>> import time
>>> GPIO.output(25,True)
>>> for i in range(10):
...     GPIO.output(25,False)
...     time.sleep(15)
...     GPIO.output(25,True)
...     print i
...     time.sleep(10*60)
...