ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2015年5月26日 星期二

wifi on banana pi -- TP-LINK TL-WN725N

banana pi 的 kernel 有內建這個 module driver.
所以插入後,lsusb (package: usbutil):
Bus 002 Device 002: ID 0bda:8179 Realtek Semiconductor Corp.
...

lsmod 的話:
Module  Size   Used by
8188eu  506733 0

這時候,用 ifconfig -a 來看,已經可以看到 wlan0 這個 interface. 只是還沒啟動。
所以 follow : http://www.fars-robotics.net/ 其中,不用 wpa_supplicant (package: wpasupplicant) 的方法。
修改 /etc/network/interfaces:
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "Your-Network-Name"
wpa-psk "Your-Network-Password"
然後,用command: ifup wlan0...
就可以看到 wlan0 起來了 .. 拿到 ip 了。


補一下http://www.fars-robots.net 中,用 wpa_supplicant 的作法:
-- copy..

Configuring your wifi network for Raspbian Jessie.

Default /etc/network/interfaces file as supplied in the raspbian jessie image - do not edit /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Edit the file /etc/wpa_supplicant/wpa_supplicant.conf and add the network={.....} section. Use the command sudo nano /etc/wpa_supplicant/wpa_supplicant.conf to open and edit the file. Exit the editor and save the file using keys cntl-X, Y, Enter.
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="Your-Network-Name"
    psk="Your-Network-Password"
}
You may add additional network={.....} sections defining different networks if your Pi is mobile and you carry it around with you. This will allow you to connect to these other networks at various different locations without needing to change your set up.

2015年5月25日 星期一

build image for nexus 7.

就是 follow 這一頁:https://source.android.com/source/index.html

實際的 instruction 是 從這裡(https://source.android.com/source/building.html) 開始。

download source code 開始..
$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r1

-- branch 是參考:https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
-- device codename 是參考: http://forum.xda-developers.com/wiki/Google/Device_Codenames

然後,要重新指定 java7..(因為我是用 java6).
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

然後就是..參考: https://source.android.com/source/building-running.html
我選 10:

就開始 build 了...
-- 好奇怪,nexus 7 好像沒有proprietry binary,所以直接build 就可以。

2015年5月21日 星期四

build image for banana pi

就 follow wiki.. http://wiki.lemaker.org/Building_u-boot,_script.bin_and_linux-kernel
- 換位置了:(http://wiki.lemaker.org/BananaPro/Pi:Building_u-boot,_script.bin_and_linux-kernel)
這是在 x86 pc 上做的,不是在 banana pi 上。
-- 我在 pi 上做,發現make script 直接寫死 toolchain 名子,所以找不到。
做完config 後,出現訊息叫你 make, 就 make了。

結果會放在 build 目錄。
build 目錄好像是所有 project, subproject 的 output 目錄,
kernel, uboot, tools, boot script 都output 在這裡。

然後就 follow link 到 .. http://wiki.lemaker.org/Setting_up_the_bootable_SD_card
- 換位置了。(http://wiki.lemaker.org/BananaPro/Pi:Setting_up_the_bootable_SD_card)

大慨是為了模擬 raspberry pi ,所以把sd card 分成兩個partition:
  • 1 : FAT : 放 kernel, uboot command.
  • 2 : EXT4, rootfs

但是和 raspberry pi 不一樣,raspberry pi 因為 gpu 有讀取 vfat 能力,所以用 gpu 做 bootloader.
因次 uboot, kernel 都被放在 fat partition.

banana pi 內部的 bootloader 不認識 filesystem,
所以還是要把 uboot + spl 放到某個 sector (1024x8). 讓 A20 bootrom 去 load.
然後 uboot 再到 第一個 partition 去 loader kernel


所以第一個 partition 就是做這些 boot script 和 copy kernel.

第二個 partition 就是 root, 所以利用 debootstrap 來做。
因為用 wget 來抓檔,所以在 proxy 後面的時候,要另外指定。

修改 /etc/wgetrc
把 http_proxy 和 https_proxy 打開。
就可以看到抓 package 的 log..

follow intruction 都做玩,開機。沒有 network, eth0 沒有 config.
所以修改 /etc/network/interfaces: 加上:
auto eth0
iface eth0 inet dhcp

之後,在用 ifup eth0.. 就出現了。

然後啟動 ssh server:
services ssh start
因為 ssh 不允許 root login. 所以要 add 一個 user pi/raspberry
這樣,就可以用 pi ssh 進來。

2015年5月19日 星期二

ntp server

ntp server 是一個階層式的設計。
每一個 ntp server 都會說明他的時間的 "源頭".
源頭可以是 GPS, 原子鐘等硬體。
也可以是另一台 ntp server.

根據時間的取得來源,代表ntp server 的時間是第一手(直接的硬體 GPS, 原子中..),
或是第二手 (令一個 ntp server).
ntp server 有一個參數叫 stratum
stratum = 1 就是第一手。
2 就是第二手。



在 ntp.conf 裡。
要設定 時間的 "源頭"..
一般都是設定 "上一手" 的 ntp server.
所以就是用 server 列出:
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst
這個範例列出他的上游 ntp server 有四個。
ntp daemon 會自動找出最適合的 server 來同步。

另外,如果要使用自己的hw clock, 就要用:
server 127.127.1.0
說明跟自己拿時間。
又因為這樣就沒有說明是第幾手,所以要加令一個command:
fudge 127.127.1.0 stratum 10
說明自己hw color 是第 10 手。

ntp daemon 基本上會去一一詢問這些 server, 然後決定使用那一個 server 的資料。
同時詢問 server 的 stratum (第幾手) number.
好決定自己的 stratum number.

像上游stratum 是 2, 自己就是 3.


ntp.conf 設好以後, service ntp restart 就可以重新啟動 ntp server
ntp server package 提供一個 tool 來看 ntp server 資料。

$ ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.189.89.199   .STEP.          16 u    - 1024    0    0.000    0.000   0.000
*192.168.144.248 59.124.29.241    3 u   16   64  377    0.115   48.283  12.243
 127.127.1.0     .LOCL.          10 l    4   64  377    0.000    0.000   0.001

-p 是 peer
-n 是 show ip address.

可以看到 remote 列出在 ntp.conf 中 server 的列表。
refid 是他的上游 ntp server.
所以 .LOCAL. 就是自己的 hw clock.
.STEP 好像是 sync fail

st 是 stratum ,可以看到 sync fail 的, stratum 是 16

第二個 server 前面有一個 * 符號。
代表 ntp server 決定使用這一個 server 的資料。-- (所以自己的 stratum 就是 4)

當 ntp service 剛剛啟動,* 不會出現,大約需要 5 ~ 10 min 才會決定。
當有 * 出現時, ntp server 才會正常回應 ntp client 的 要求。


測試

可以用 ntpdate 來測試。
$ ntpdate -q 127.0.0.1
server 127.0.0.1, stratum 4, offset -0.000003, delay 0.02562
19 May 17:45:59 ntpdate[4599]: adjust time server 127.0.0.1 offset -0.000003 sec
問自己..

要是出問題,可以用 -dv 列出debug information


ref:
  • http://markelov.org/wiki/index.php/NTP._Server_dropped:_strata_too_high
  • http://docs.oracle.com/cd/E26996_01/E18548/html/manager_ntpconfig.html
  • http://en.linuxreviews.org/NTP_-_Howto_make_the_clock_show_the_correct_time
  • http://www.geego.com.tw/technical-discussion-forum/tech-tips-centos-ntp-server-%E6%9E%B6%E8%A8%AD%E5%BF%83%E5%BE%97

client

client 只要安裝 ntpdate .
他同時會修改 /etc/network/if-up.d/ntpdate
這樣在network up 時,會自動執行 ntpdate 更改時間。

ntp server.. sync to hw clock

只是想讓一些像 raspberry pi, banana pi 這樣沒有 RTC 的板子在每次斷電開機後,可以有正常的時間。
(這樣做 file operation, make 等才不會有 complain).

所以想在 lan 中放一個 ntp server.
因為很倒楣的是,firewall 屏蔽掉 ntp udp port。
所以只能以某台server 的 hw clock 作為 ntp server 的同步時間。

server:

就莊 ntp 就可以。
然後修改 /etc/ntp.conf

因為會被 blocking, 所以 sync 的 ntp server 隨便寫。
但是要使用自己的 hwclock 作為 sync time,
就要加上:
server 127.127.1.0
fudge 127.127.1.0 stratum 9
server 127.127.1.0 說明自己也是 time server.
其中的 fudge 說明自己是 stratum 9.
這樣,自己的 hw clock 就會是一個stratum (位階) 9 的 ntp server.

ntp.conf 的修改,基本上不需要動。
只有 server list 要調整。
因為已經有各 distribution 基本的 server list, 所以不用動也可以。

在local lan 因為 firewall 擋住,所以所有的 ntp server 都無法 sync..
所以只會sync 到 LOCAL.



ref:
  • http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html
  • http://en.linuxreviews.org/NTP_-_Howto_make_the_clock_show_the_correct_time#What_the_fudge.3F

2015年5月18日 星期一

banana pi..

網路上買banana pi, 很便宜,只要 800

然後要download image.. 發現...http://www.bananapi.com/index.php/download
有四種,在 http://www.bananapi.com/index.php 有說明。
所以應該是 M1, 這款 connector 位置都跟 raspberry pi 一樣。

結果 download 了 rasbian image,dd 完啟動直接進 X...

所以,一樣,先改 apt proxy, 然後 update, upgrade.
--- 會出現 out of space...
.. 但是這次 mirrordirector 竟然沒有上次的問題.

重新 dd, 先做 raspi-config 看看..

ctrl-alt-F1.. 先switch 到 console mode 看看..
-- F7 是 GUI

切到 console, sudo raspi-config
把 space expand..,
重開機,
df 看一下是不是已經 expane.

修改 apt.conf.d 加上 02proxy
apt-get update, upgrade..

發現 config 成 boot to consol 後,reboot. upgrade, 再進 desktop mode 後 fail
畫面跳動。



原來有一個較 banania 的 os image..
一樣,dd 後開機。
開機進 console.
login : root
passowrd: pi
之後 run : banana-config
採用問答式,跟 raspi-config 類似。

然後修改 apt proxy, 再依照說明 run banana-update. 出現 fail, 好像不吃 proxy.
只好手動..apt-get update

連 sudo 都沒有,所以 apt-get install sudo

create new user..pi/raspberry. 把他加入 sudo group

可以用 pi/raspberry login 了。sudo 也 OK

2015年5月7日 星期四

mDNSResponder test..

要 bison. flex.
完成後,先啟動 daemon : mdnsd
然後隨便 run 一個 client app:
pi@raspberrypi ~/mDNSResponder-544/mDNSPosix/build/prod $ ./mDNSClientPosix 
socket AF_INET6: Address family not supported by protocol
mDNSClientPosix: Finished with status -65537, result 2


所以要 enable ipv6, 不然就要修改 Makefile, 把 ipv6 disable掉

ref: https://www.raspbian.org/RaspbianFAQ#How_do_I_enable_or_use_IPv6.3F
就 sudo modprobe ipv6

再 run mdnsd 和,,
pi@raspberrypi ~/mDNSResponder-544/mDNSPosix/build/prod $ ./mDNSClientPosix 
Hit ^C when you're bored waiting for responses.

... 不一樣了...

在 jessie 下 build, error:
../mDNSShared/dnsextd_parser.y:188:22: note: each undeclared identifier is reported only once for each function it appears in
../mDNSShared/dnsextd_parser.y: In function ‘ParseConfig’:
../mDNSShared/dnsextd_parser.y:448:8: error: too many arguments to function ‘yyparse’
  err = yyparse( ( void* ) d );
        ^
objects/prod/dnsextd_parser.c:1125:1: note: declared here
 yyparse (void)
 ^
make: *** [objects/prod/dnsextd_parser.y.o] Error 1
.. 這個先跳過...

ref: https://github.com/changyy/mDNSResponder-cmake

原來是這樣用的...mDNSResponderPosix 和 mDNSClientPosix

Makefile 這兩個 ap 的 source:
SPECIALOBJ = $(OBJDIR)/mDNSPosix.c.o $(OBJDIR)/mDNSUNP.c.o $(OBJDIR)/mDNSDebug.c.o $(OBJDIR)/GenLinkedList.c.o \
        $(OBJDIR)/DNSDigest.c.o $(OBJDIR)/uDNS.c.o $(OBJDIR)/DNSCommon.c.o $(OBJDIR)/PlatformCommon.c.o \
        $(OBJDIR)/CryptoAlg.c.o $(OBJDIR)/anonymous.c.o
COMMONOBJ  = $(SPECIALOBJ) $(OBJDIR)/mDNS.c.o
APPOBJ     = $(COMMONOBJ) $(OBJDIR)/ExampleClientApp.c.o

$(BUILDDIR)/mDNSClientPosix:         $(APPOBJ)     $(OBJDIR)/Client.c.o
        $(CC) $+ -o $@ $(LINKOPTS)

$(BUILDDIR)/mDNSResponderPosix:      $(COMMONOBJ)  $(OBJDIR)/Responder.c.o
        $(CC) $+ -o $@ $(LINKOPTS)



follow ref 的作法,看看 option :
$ ./mDNSResponderPosix -h
./mDNSResponderPosix: invalid option -- 'h'
Usage: mDNSResponderPosix [-v level ] [-r] [-n name] [-t type] [-d domain] [-p port] [-f file] [-b] [-P pidfile] [-x name=val ...]
          -v verbose mode, level is a number from 0 to 2
             0 = no debugging info (default)
             1 = standard debugging info
             2 = intense debugging info
             can be cycled kill -USR1
          -r also bind to port 53 (port 5353 is always bound)
          -n uses 'name' as the service name (required)
          -t uses 'type' as the service type (default is '_afpovertcp._tcp.')
          -d uses 'domain' as the service domain (default is 'local.')
          -p uses 'port' as the port number (default is '548')
          -f reads a service list from 'file'
          -b forces daemon (background) mode
          -P uses 'pidfile' as the PID file
             (default is '/var/run/mDNSResponder.pid')
             only meaningful if -b also specified
          -x stores name=val in TXT record (default is empty).
             MUST be the last command-line argument;
             all subsequent arguments after -x are treated as name=val pairs.
和..
$ ./mDNSClientPosix -h
./mDNSClientPosix: invalid option -- 'h'
Usage: mDNSClientPosix [-v level] [-t type] [-d domain]
          -v verbose mode, level is a number from 0 to 2
             0 = no debugging info (default)
             1 = standard debugging info
             2 = intense debugging info
          -t uses 'type' as the service type (default is '_afpovertcp._tcp')
          -d uses 'domain' as the domain to browse (default is 'local.')

所以最簡單的就是:
$ ./mDNSResponder -n mytest
因為沒有加上 -b, 所以要用另一台機器(在同一個 lan)..
$ ./mDNSClientPosix 
Hit ^C when you're bored waiting for responses.
*** Found name = 'mytest', type = '_afpovertcp._tcp.', domain = 'local.'
完成。


****
Debian Jessie 真的不能build...@_@.. 拿部份build成功的 mDNSResponder 來 run, 會出現 Address in use error

實際測試是用 raspberry pi 和 ubuntu 12.10 接在 LAN 上測試成功。

-- 都 disable IPV6.
另外, Bananapi + Android 4.2 和 raspberry pi + raspbian 用 NCM (Usb) 連線測試也 OK
Bananapi + Android 4.2 用的是 Android 內建的..mdnsresponder..
修改 Android.mk:
include $(CLEAR_VARS)

LOCAL_SRC_FILES := mDNSPosix/mDNSPosix.c \
                  mDNSPosix/mDNSUNP.c \
                  mDNSShared/mDNSDebug.c \
                  mDNSShared/GenLinkedList.c \
                  mDNSCore/DNSDigest.c \
                  mDNSCore/uDNS.c \
                  mDNSCore/DNSCommon.c \
                  mDNSShared/PlatformCommon.c \
                  mDNSCore/mDNS.c \
                  mDNSPosix/ExampleClientApp.c \
                  mDNSPosix/Client.c \

LOCAL_MODULE := mDNSClientPosix
LOCAL_MODULE_TAGS := optional

LOCAL_C_INCLUDES := external/mdnsresponder/mDNSPosix \
                    external/mdnsresponder/mDNSCore  \
                    external/mdnsresponder/mDNSShared

LOCAL_CFLAGS := -O2 -g -W -Wall -D__ANDROID__ -D_GNU_SOURCE -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DTARGET_OS_LINUX -fno-strict-aliasing -DHAVE_LINUX -DMDNS_DEBUGMSGS=0 -DMDNS_UDS_SERVERPATH=\"/dev/socket/mdnsd\" -DMDNS_USERNAME=\"mdnsr\" -DPLATFORM_NO_RLIMIT

LOCAL_SYSTEM_SHARED_LIBRARIES := libc libcutils

include $(BUILD_EXECUTABLE)

twitter client in console mode : rainbowstream

http://www.rainbowstream.org/

是用 python 寫的。
就 follow doc 說明。用virtualenv 建立一個工作環境,在用 pip 裝。以後就可以在這個工作還行 run.

要注意的是,有關 proxy.
他會吃環境變數 http_proxy, 但是又不會動。然後 --proxy command 又會受影響。

所以要先把 http_proxy unset, 再用 --proxy option 來 run.

第一次run 會叫出 browser login twitter, 給 rainbowstream 授權。


source venv/bin/activate
unset http_proxy
unset https_proxy
rainbowstream -ph 192.168.0.1 -pp 3128 -pt HTTP



大概說明一下...
virtualenv 是 python 的一個 tool, 會幫你建立一個虛擬環境,在這個環境裡,你可以安裝軟體,設定環境變數..etc
都不會動到主系統。
而且退出後就消失。 virtualenv venv 的命令就是:建立一個 virtualenv 環境,名稱叫 venv.
之後,在home 目錄下就會有 venv 這個目錄。

要進入venv 這個環境,只要:
source venv/bin/activate
就可以。

2015年5月6日 星期三

raspberry pi, apt-get update slow

很奇怪,超慢,竟然要 17hr...

所以 follow : http://allaboutraspberrypi.blogspot.tw/2014/12/slow-apt-get-on-raspberry-pi.html

參考: http://www.raspbian.org/RaspbianMirrors

#deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://free.nchc.org.tw/raspbian/raspbian/ wheezy main contrib non-free rpi

這樣就OK 了。

2015年5月5日 星期二

prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc  
-I external/strace/strace/linux/sh   
-I bionic/libc/kernel/common   
-I bionic/libc/kernel/arch-arm   
-I external/strace/linux   
-I external/strace/android/arch/arm   
-I external/strace   
-I out/target/product/sirfsocv7/obj/EXECUTABLES/strace_intermediates   
-I dalvik/libnativehelper/include/nativehelper   
-I system/core/include   
-I hardware/libhardware/include   
-I hardware/libhardware_legacy/include   
-I hardware/ril/include   
-I dalvik/libnativehelper/include   
-I frameworks/base/include   
-I frameworks/base/opengl/include   
-I frameworks/base/native/include   
-I external/skia/include   
-I out/target/product/sirfsocv7/obj/include   
-I bionic/libc/arch-arm/include   
-I bionic/libc/include   
-I bionic/libstdc++/include   
-I bionic/libc/kernel/common   
-I bionic/libc/kernel/arch-arm   
-I bionic/libm/include   
-I bionic/libm/include/arch/arm   
-I bionic/libthread_db/include  
-c  -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector 
-Wa,--noexecstack 
-Werror=format-security -fno-short-enums 
-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 
-include system/core/include/arch/linux-arm/AndroidConfig.h 
-I system/core/include/arch/linux-arm/ 
-Wno-psabi -mthumb-interwork 
-DANDROID -fmessage-length=0 
-W -Wall -Wno-unused -Winit-self 
-Wpointer-arith -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point 
-DNDEBUG -g -Wstrict-aliasing=2 
-finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop 
-frename-registers 
-DNDEBUG -UDEBUG 
-mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64  
-DHAVE_CONFIG_H -Dd_fileno=d_ino -D_LFS64_LARGEFILE=1     
-MD 
-o out/target/product/sirfsocv7/obj/EXECUTABLES/strace_intermediates/sock.o external/strace/sock.c
CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o

$(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS)
        $(LD) -shared $(LINKOPTS) -o $@ $+
        $(STRIP) $@
dnssd_clientstub.c :

Android:

system/netd/MDnsSdListener.cpp

標籤

網誌存檔