9.22.2012

linux 硬體時間hwclock 也有時區!

今天在處理ntp功能才發現
因為在我把/etc/localtime改為+8的台灣時間後
使用ntpdate把時間調整過後,並 hwclock -w寫入RTC中
再重新開機,結果時間就錯了!!
hwclock 是正確的+8時間
但date得到的時間就是這個時間再+8,整個大錯亂
詳細了解後才知道,原來除了date有時區設定檔/etc/localtime以外
hwclock也有時區設定檔 /etc/TZ
cat /etc/TZ 得到 「MST7MDT」
上網查得知這是-7的時區-->我會得到差8,也許是日光節約吧…(maybe)
所以就把它改為「TAIST-8TAIDT」  --> 網路上查來的,+8台灣時區

!!but!!重開後沒有用!!

所以囉,再找
找到這一篇
http://wiki.debian.org.hk/w/Set_date_and_time
上面說明使用
hwclock --systohc --utc        # 將UTC時間存入RTC
hwclock --systohc --localtime  # 將LOCAL時間存入RTC
hwclock --systohc
沒有指定LOCAL or UTC,hwclock 根據配置來確定RTC裡面存LOCAL orUTC
找 配置文件的優先級順序為:
    $ADJTIME_PATH、/var/state/adjtime、/var/lib/hwclock/adjtime、/etc/adjtime
配 置文件內有寫LOCAL 或 RTC
沒有配置文件的話,hwclock認為RTC裡面存的是LOCAL

加上--utc,指定要用utc設定時間硬體時間
這樣重開機date得到的時間就正常了
而hwclock的時間則變成了utc的時間
但…產生另一個問題,不過也不是很重要吧!!
hwclock -l  記了utc時間  -->正常應該是localtime
hwclock -u 記了localtime時間 --> 正常應該是 utc!!

我強烈的感覺,是不是hwclock在build的時候就指定了它的時區了?
不然怎麼會設定都沒用!!

ps:後來看到網路上,一位高手的解釋,才恍然大悟
hwclock --local/--utc 的意義是:假設BIOS時鐘的時間是當地/UTC時間,將它讀出來,再按當時時間顯示出來。

所以
hwclock 若是11:30:00  (預設為local)
hwclock --utc 為19:30:00   -->因為把RTC(BIOS)視為UTC時間,再轉為當地時間就是19:30:00了
hwclock --local   --> 把RTC視為Local時間,所以讀出來後不再轉換

  

6.25.2012

FTP Server vsftpd in openWrt

真的要下傳下載東西到裝置上還是要有FTP比較方便
因此,就開始了安裝FTP的測試


因為sftp (ssh ftp)沒有辨法匿名登入,下載東西
因此安裝vsftpd來提供ftp服務

一、手動安装vsftpd
opkg update
opkg install vsftpd

這是在openwrt中已經預先compile好的軟體清單中的一件
說明如下:

Package: vsftpd
Version: 2.3.4-3
Depends:
Provides:
Source: feeds/packages/net/vsftpd
Section: net
Status: unknown ok not-installed
Essential: no
Priority: optional
Maintainer: Cezary Jackiewicz
Architecture: ar71xx
Installed-Size: 41186
Filename: vsftpd_2.3.4-3_ar71xx.ipk
Size: 41585
MD5Sum: a2935f298825ebe89b7fd6eb78de4752
Description:  A fast and secure FTP server

整個清單資料,下指令可取得
cat opkg-lists/snapshots |less

裝好後,即使重開機也不會執行
因為目前存在一個bug,所以如果你希望vsftpd自啟動,就需要手工將啟動腳本加入rc.d目錄
(在openwrt中好像習慣在init.d中放script檔,而在rc.d中放要執行的命令,這些命令都是連到 init.d中的
ln -s   /etc/init.d/vsftpd /etc/rc.d/S50vsftpd

二、使用網頁的方式安裝,這個方式真的很方便丫!


1. 先選擇「System / Software」,然後點選「Update lists」,取得最新的套件清單

 2. 然後再Filter中填入「vsftp」,再按Find Package,就可以找到vsftpd,點進去
「Available packages (vsftp)」頁面中,就可以安裝軟體了!!  簡單又好用,裝完記得要重開機




6.19.2012

wr-740 change firmware to openwrt + luci webUI

之前介紹過了使用RS232的方式更新firmware後,想到我還沒有介紹過如何從剛買回來時就直接改機為openwrt,這邊來說明一下
其實我一開始也是參考這篇文章:http://www.mobile01.com/topicdetail.php?f=110&t=2226398
 因為一開始也不知道怎麼改…非常感謝有人熱心放上網路

一、一開始就先進到這邊準備升級吧

 二、下載openwrt的firmware (其實是OS image啦)
參考這邊下載:http://wiki.openwrt.org/toh/tp-link/tl-wr740n
或是直接由這個連結下載:http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr740n-v1-squashfs-factory.bin
但是請注意一下,這是給V1.x和V2.x升級用的喔
我的是V2.4版,所以使用openwrt-ar71xx-generic-tl-wr740n-v1-squashfs-factory
如果是其它版本的,請到下面的連結去找你的版本,裡面也有V3.x和V4.x的
http://downloads.openwrt.org/snapshots/trunk/ar71xx/

三、下載下來後,就由(一)的畫面選擇你的檔案,並按軟體升級,然後靜靜等待,剛更新完的時候是沒有網頁的,也許有人問要怎麼知道已經完成了
我是看它上面的燈號,韌體升級完後,會自動開機,等到WAN或是LAN的燈號開始閃應該就是完成了
另外: 其它的文章都說要先把原廠的設定值改回出廠設定,但依我觀查RS-232的結果,應該是不需要這個動作的,因為在網頁更新時,可以從RS-232上看到的畫面如下,這表示他只是利用html傳檔的方式,放到它的/tmp下(這是ram),然後再把資料寫到flash中,是不是原廠設定應該沒關係


四、.更新完後,把電腦的IP設為192.168.1.2,再以telnet連線進去,不需要帳密
若看到下面的畫面就代表你成功了!!!!

五、再用「passwd」指令設定root的password(這是指向busybox的指令,表示busybox就有這個功能,不清楚busybox沒關係,這不是重點)
設完後telnet會關閉,然後sshd會啟動(因sshd一定要有密碼)
(其實sshd已經啟動了,只是因為沒有root的密碼,所以你也無法登入-->這是由comport更新firmware時看出來的)

六、因為沒有網頁的介面,所以我們來安裝個介面吧,這邊我裝過幾個版本,我還是覺得luci比較好用,所以這邊就以此為例

七、用sshd連線完成後,先下指令(這邊我是使用putty連線的)
opkg update
先取得目前的opkg的清單

八、安裝所有的LuCI套件,非https版本
opkg install luci
或是安裝LuCI套件,且支援HTTPS 的版本
opkg install luci-ssl

九、啟動uhttpd,並讓它在以後每次開機都會執行(剛安裝完並不會馬上啟動)
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start
接著用 http://192.168.1.1  連到網頁

十、網頁的登入介面如下,使用的是你在ssh登入的帳密


十一、目前使用起來還蠻多功能的,但…沒有原廠的直覺…(我的感覺啦,原廠的比較簡單)
不過基本功能,連圖表統計功能都有了,感覺還蠻棒的!!
另外還可以新增wifi button的功能,超方便的!!-->就是為了它,我才刷的!!

最後補充一下,下面是我安裝 luci時產生的訊息,不管有沒有用,就先貼出來再說了
以下為安裝過程中的訊息:
root@OpenWrt:~# opkg install luci
Installing luci (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci_trunk+svn8187-1_ar71xx.ipk.
Installing uhttpd (30) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/uhttpd_30_ar71xx.ipk.
Installing luci-mod-admin-full (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-mod-admin-full_trunk+svn8187-1_ar71xx.ipk.
Installing luci-mod-admin-core (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-mod-admin-core_trunk+svn8187-1_ar71xx.ipk.
Installing luci-lib-web (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-lib-web_trunk+svn8187-1_ar71xx.ipk.
Installing luci-lib-core (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-lib-core_trunk+svn8187-1_ar71xx.ipk.
Installing lua (5.1.4-8) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/lua_5.1.4-8_ar71xx.ipk.
Installing liblua (5.1.4-8) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/liblua_5.1.4-8_ar71xx.ipk.
Installing libuci-lua (2011-11-14.1-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libuci-lua_2011-11-14.1-1_ar71xx.ipk.
Installing luci-lib-sys (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-lib-sys_trunk+svn8187-1_ar71xx.ipk.
Installing luci-lib-nixio (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-lib-nixio_trunk+svn8187-1_ar71xx.ipk.
Installing luci-sgi-cgi (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-sgi-cgi_trunk+svn8187-1_ar71xx.ipk.
Installing luci-lib-lmo (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-lib-lmo_trunk+svn8187-1_ar71xx.ipk.
Installing luci-proto-core (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-proto-core_trunk+svn8187-1_ar71xx.ipk.
Installing luci-i18n-english (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-i18n-english_trunk+svn8187-1_ar71xx.ipk.
Installing luci-lib-ipkg (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-lib-ipkg_trunk+svn8187-1_ar71xx.ipk.
Installing luci-theme-openwrt (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-theme-openwrt_trunk+svn8187-1_ar71xx.ipk.
Installing luci-theme-base (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-theme-base_trunk+svn8187-1_ar71xx.ipk.
Installing luci-app-firewall (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-app-firewall_trunk+svn8187-1_ar71xx.ipk.
Installing luci-proto-ppp (trunk+svn8187-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/luci-proto-ppp_trunk+svn8187-1_ar71xx.ipk.
Installing libiwinfo-lua (23) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libiwinfo-lua_23_ar71xx.ipk.
Installing libiwinfo (23) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libiwinfo_23_ar71xx.ipk.
Configuring luci-lib-sys.
Configuring liblua.
Configuring libuci-lua.
Configuring lua.
Configuring luci-lib-core.
Configuring luci-lib-nixio.
Configuring luci-sgi-cgi.
Configuring luci-lib-lmo.
Configuring luci-lib-web.
Configuring luci-proto-core.
Configuring luci-i18n-english.
Configuring luci-mod-admin-core.
Configuring libiwinfo.
Configuring libiwinfo-lua.
Configuring luci-theme-base.
Configuring luci-theme-openwrt.
Configuring luci-app-firewall.
Configuring luci-lib-ipkg.
Configuring luci-proto-ppp.
Configuring luci-mod-admin-full.
Configuring uhttpd.
Configuring luci.
root@OpenWrt:~#

6.17.2012

anroid手機客制化程式移除


手上一隻華為的U8650 中華電信客製機
上面滿滿的是Hami 應用程式,想刪都刪不掉
研究了好久,原來這些東西不是單純的只是安裝在你的系統而已
當我刷完機後,發現「它們」還在…,但是佔有的空間都是0kb ????
而在你點選了之後,就會開始安裝

如果有努力去找的人,一定會在root後去看/data/app/ 或是/system/app/ 中是不是有這些程式的.apk存在
你會發現根本找不到…
後來我在 /cust/cht/tw/app/ (指的應該是custom) 中找到了他們,直覺就是刪了他們!!
但這是不會成功的,因為這一個資料夾是被 掛載為 read only的
雖然root後,可以把/ 和/sys 都掛載為 rw (read & write) 但並不會動到這個資料夾
 因為這個資料夾是一個獨立的partition的型式存在的 (或是一個 cust.img)
所以不會被 remount到 ,你需要自己remout他們為 rw

以下是我的方式:

1. 先安裝ssh server,比如DropBear SSH Server(我是用這一個),或是ssh-droid,讓你的手機有ssh server,可以使用putty去登入,然後用命令的方式去remount

2. remount的方式為:
mount -o remount, rw /cust
這樣就會把 /cust 改成可讀可寫
然後下指令 remount
mount -o remount, rw /cust
刪除所有不要的apk (因為我全部都不想要…)
rm /cust/cht/tw/app/*
你也可以在這邊找找看有沒有其它你不想要的東西,推想所以客製化的東西都在這樣

3. 再remount回 read only
mount -o remount, ro /cust

這樣就大功告成了!! 請重新開機,一隻乾乾淨淨的機子就出現了!!


6.16.2012

Uart and u-boot to factory firmware for wr-740n


其實…會測到serial port的原因,不外乎就是刷機刷掛了…
我想看看dd-wrt 是不是有如網路所說的這麼好用,所以直接從open-wrt改到dd-wrt…
結果就製造了一塊磚頭出來了…痛…
後來也由Uart配合tftp,把dd-wrt弄好了…結果…我真的覺得比open-wrt還不好用,也許是我不夠強,所以不好用吧,目前就覺得dd-wrt最多就是有中文化而已
(改了這一次後,就有點想把USB也拉出來說~)

一、為了救回來,只好把Uart的線拉出來,由這邊下指令才有辨法再燒東西進去
首先來看一下線路圖吧!
由於在OpenWrt的Wr740n型號中只有介紹V1.2版硬體的配置
所以需要到Wr741nd中找配線方式,如下圖就是要接出來的地方
(http://wiki.openwrt.org/toh/tp-link/tl-wr741nd#serial)
pin 86 for UART RX
pin 87 for UART TX


二、當然,從上面這麼密的地方接線,要注意的事比較多,若不小心短路到了就死了!
因此,我們從背面來,右到左為,TX, RX, GND,這二個腳位都是由上面打通孔到背面的,所以由這邊接最方便





三、接好Uart後,就先把com port先打開,上電,可以看到LED亮一下就馬上關閉再閃爍
這是因為它的bootloader預設一秒沒有辨法進入開機點,若是沒收到正確的指令就會再重開機
請在這時,不斷的一直連打「tpl」,這是通關密語~


四、接著就是要由uboot,經由網路,從我們自己架的tftp server把firmware的image抓進來,放到ram中,再由ram燒到flash中
    所以我們要先收集到我們所需要的資料才行,分別是:「flash燒錄的起始位址」、「ram的起始位址」、「IP」
1. 我們要先知道firmware (即kernel + filesystem)是在哪一個區域
由好的wr740中得到的資訊為:


這們可以了解到firmware的大小

2. 接著就是要設定bootloader的參數
由 ipaddr=192.168.1.123
serverip=192.168.1.100
得知目前wr-740的IP為192.168.1.123 ,而目標的server為192.168.1.100 -->可以改為我們的IP
>setenv ipaddr 192.168.1.1
>setenv serverip 192.168.1.10
(如果有注意在看,會發現圖和我寫的指令不一樣…這是因為我一開始用Win7 64bit,後來沒想法 tftp沒辨法連的起來,才又換了XP繼續進行 xd)


3. 又於參數中的 bootcmd=bootm 0x9f020000
可以了解到開機時,bootloader 由此處載入我們的firmware的
所以等一下要燒錄的起啟位址就是0x9f020000 !!
PS. 依經驗,這0x9Fxx-xxxx,應該是flash定址的起始位置,所以真正的寫入位址應該是0x20000 -->也就是從128KB處寫起
    也代表上面的mtd列表寫的,size 20000  "u-boot"就是bootloader所佔的空間大小

4. 然後因為我們的flash大小(即ROM)為4MB --> 0x400000
    所以(0x0040 0000) - (0x0002 0000) = 0x003E 0000  有這樣大小的flash是可以erase的

5. 由網路查到,要由tftp把firmware的image載到ram中的位址是 0x8000 0000
> tftpboot 0x80000000 1.bin
這可能代表AR7240這個CPU的RAM是由0x8000 0000這個位址開始定址的
(在網路上也找不到使用手冊,就只找的到datasheet,所以可能只有開發商才拿的到這資料吧)

五、開始燒錄!! 說了這麼多,重點還是要了解怎麼燒才行
1. 先到tftp32的網頁下載tftp server的軟體
http://tftpd32.jounin.net/tftpd32_download.html
這軟體解壓縮即可使用,很方便
指定我們已下載下來的原廠firmware,我解壓後改名為「wr740n.bin」
這邊找你機器的版本 (but.... 為何只有英文…沒有中文!!)
http://www.tp-link.com/en/support/download/?model=TL-WR740N
下載點
http://www.tp-link.com/resources/software/TL-WR740N_v1v2_100910.zip
下面是tftp的畫面,點「Browse」指定你的firmware的資料次即可


2. 首先把自己的IP設定為192.168.1.10

3. 這邊寫到一半,發現在Win7 x64的環境好像沒辨法工作,因此改到XP的環境下工作
(1)這時就要先把wr-740n 的Wan (就是原來對外的網路孔)和電腦的ethernet用網路線接起來了  
(2) 下 tftpboot 0x80000000 tplink.bin 指令 把image放到ram中


4. 這邊的 (3c0000 hex) 就是我們要寫入flash的大小
erase 0x9f020000 +0x3c0000
cp.b 0x80000000 0x9f020000 0x3c0000


最後再下一個
bootm 0x9f020000
新的firmware就開始跑了!!
大功告成!!呼~

5、補述一下,後來確認之前的猜想是對的
當我由原廠的firmware改為openwrt時-->用網頁更新
在Uart所吐出來的資訊為

確實0x20000 ~ 0x3E0000 這部份都是放firmware的

6.09.2012

Wifi button with OpenWrt in WR740N

試了好幾天終於成功的在WR740N上實作了使用QSS按鈕來快速開啟Wifi

為何要這樣做作,因為筆者在公司已經整天都在玩無線的東西了,回到家實在不喜歡又是一整個都是無線的環境,但是現在又都有android手機,難免有時會想要安裝點新東西來玩玩,這時就可以不用再去打開電腦,連到IP分享器去打開Wifi的功能,只要把IP分享器的QSS鈕按一下,這樣就把Wifi打開了,用完了,再按一下QSS鈕,就可以關閉它!!實在很方便
(不過話說,現在已經是個:你不射別人,別人也會射你的世界了…。指的是用無線射…別想偏了。)

好!!~~廢話不話,就來動手把已經改為OpenWrt的WR740,打造成有Wifi實體開關的功能
首先,先用Putty連到OpenWrt中,進到 /etc/hotplug.d/button/ 這個資料夾中
新增 「01onoff」這個檔案,並設為可執行


(1) cd /etc/hotplug.d/button
(2) vi 01onoff
內容為:
#!/bin/sh

[ "$BUTTON" = "wps" ] && [ "$ACTION" = "pressed" ] && {
 SW=$(uci get wireless.@wifi-iface[0].disabled)
 [ $SW == '0' ] && uci set wireless.@wifi-iface[0].disabled=1
 [ $SW == '0' ] || uci set wireless.@wifi-iface[0].disabled=0
 wifi
}

(3) chmod +x 01onoff

即可開始使用(記得是不用重開機…)

此功能是參考OpenWrt的網頁得來的,參考網頁如下:
http://wiki.openwrt.org/toh/tp-link/tl-wr741nd#wifi.onoff.toggle.by.qss.button
只是這個網頁的內容我試過是行不通的,可能是因為WR741和WR740還是有些不同處

我有變動的地方主要是把本來「wireless.@wifi-device[0].disabled」的地方改為「wireless.@wifi-iface[0].disabled」
會這樣改的原因是,我查wireless裝置中,wifi開關的參數名稱有所不同,如下:

 希望以上內容對想要此功能,但又找不到方法的人有點幫助,因為如果沒有花點時間了解uci的系統,真的找不到這地方要修丫!!

6.03.2012

所見即所得的網頁編輯器 KompoZer

這陣子需要製作網頁,寫PHP
因此開始找個免費的網頁編輯軟體
以前有Dream Weaver,確實好用
那時配合Java + javascript,寫的不亦樂乎

但現在離開了學校,就想要找個免費的軟體來使用
沒想到要找個合用的真的不容易
1. eclipse 只能寫code,要規劃HTML畫面時,就不是很方便
2. NVU.... 這東西很久前有抓來玩玩,但真的很難用…
3. KompoZer,後來就找到了這東西,是NVU的延續版

網路上有這個軟體的教學動畫,學起來也蠻快的
http://c2.dhps.tp.edu.tw/~b6/l1/l1.htm
 但是實際上在配合PHP寫程式時,還真的不是很方便
尤其是它會「自動的」幫你 程式碼重新排版
然後你手動修改的Html碼,不合他意的,就「幫你」改回來他認為的
常會用到一整個火的

後來就改變使用的方式,單純使用KompoZer來產生網頁的HTML碼
然後把需要的碼複製出來,在codeBlocks中寫程式
這樣目前就處於尚可以接受的情形在撰寫網頁程式…

希望未來可以再找到一套比較好用的軟體!!
自由軟體加油丫!