2019年11月16日 星期六

永豐大戶升級帳戶並且可以自行設定約定帳戶

**** 前提必須要有讀卡機 + 電腦 ****

步驟如下:
1. 首先必須臨櫃告知行員要"開啟網路設定約定帳戶功能",行員會幫你升級帳戶等級,升級後你就有自行設定的權限,臨櫃設定後的次一工作日生效。

2. 接下來你必須申請網路銀行,因為要設定約定帳戶,只有"網路銀行""行動銀行"(手機APP)可以做設定(網路ATM無法設定),網路銀行申請網址如下(必須用到讀卡機):
申請網路銀行/密碼重置 --> WebATM申請(連接讀卡機)
https://mma.sinopac.com/MemberPortal/Member/ApplyMmaIndex.aspx

3. 網路銀行申請完成之後,馬上就可以登錄網路銀行,登陸之後,請選擇:
申請/設定 --> 常用非約定帳號--> 約定轉入帳號 --> 新增帳號


以上步驟完成,就可以了~

2019年10月15日 星期二

一版source code要編譯出兩個版本,#ifdef 加上 -D Macro 的用法

假設今天我有一隻code,我想要讓他編譯的時候可以編譯出VER1與VER2的不同結果,以不動到source code為原則,該怎麼作呢?

首先Code必須這樣寫:

=========== source.c =================
#include <stdio.h>
int main()
{
    #ifdef VER1
        printf("This is VER1 !\n");
    #else
        printf("This is VER2 !\n");
    #endif

    return 0;
}
====================================

編譯的時候,如果要編譯出VER1,則必須如下修改:
gcc source.c -o source -D VER1

如果要編譯出VER2,則必須如下修改:
gcc source.c -o source -D VER2











若是這些#ifdef是要改在 Linux Kernel,在source code 加完之後,-D Macro的部分可以直接加在 Linux Kernel的Makefile裡面,請找看看CFLAGS相關的,並且加在CFLAGS上面試試看,編譯後應該可以成功。













另外Makefile加完成之後,編譯時記得要下:
# make VER1=1

這樣子編譯才會跑到VER1定義的地方

2019年9月24日 星期二

dd 檔案合併,詳細使用方法

dd基本的參數描述如下:

*基本輸入輸出
if=FILE:輸入名稱
of=FILE:輸出名稱

*做相對應的轉換conv=[lcase/ucase/nocreat/notrunc/fdatasync]
lcase:大寫字母轉小寫
ucase:小寫字母轉大寫
nocreat:不要建立輸出檔案
notrunc:input小於output時,仍維持output大小
fdatasync:讓資料同步寫入硬碟

*區塊參數,分別有以下四個參數可以調整:
bs=[bytes]:等同於同時設定ibs和obs,一次讀或寫的block size。
ibs=[bytes]:指定每次讀取的block size(default 512 bytes)
obs=[bytes]:指定每次寫入的block size(default 512 bytes)
count=[number]:只處理前[number]輸入區塊,block size要參考ibs。
seek=[number]:輸出檔案跳過前[number]個區塊,block size要參考obs。
skip=[number]:輸入檔案跳過前[number]個區塊,block size要參考ibs。


下面給幾個使用範例:

[example_1] 使用dd產生一個2MB的檔案,其內容皆為0xff
dd if=/dev/zero ibs=1M count=2 | tr "\000" "\377" >rom.bin

[example_2] 使用dd把一個835KB的檔案(flash.bin)放到 2MB的rom.bin檔案的最前面
$ dd if=flash.bin of=rom.bin bs=1K count=835 conv=notrunc

[example_3] 使用dd把一個64KB的檔案(env.bin)放到2MB的rom.bin檔案的960KB位置之後
$ dd if=env.bin of=rom.bin bs=1K count=64 seek=960 conv=notrunc

[example_4] 使用dd把一個1024KB的檔案(jffs2.bin)放到2MB的rom.bin檔案的1024KB之後的位置
$ dd if=image.jffs2 of=rom.bin bs=1K count=1024 seek=1024 conv=notrunc

最終的rom.bin內容如下圖所示:






















*產生空的1MB 的jffs2 image的指令(jffs2_dir為一個空資料夾):
$ mkfs.jffs2 -r jffs2_dir -o image.jffs2 --pad=0x100000
若是沒有mkfs.jff2指令,請先使用apt-get install mtd-util

2019年9月20日 星期五

C 更改檔名 example

紀錄C當中,一個簡單的改檔名function,rename();

#include <stdio.h>

int main () {
   int ret;
   char oldname[] = "file.txt";
   char newname[] = "newfile.txt";
 
   ret = rename(oldname, newname);

   if(ret == 0) {
      printf("renamed successfully");
   } else {
      printf("unable to rename");
   }
 
   return 0;
}


2019年9月3日 星期二

[shell script] 2進制,10進制,16進制的轉換方法

1. 搭配ibase, obase, bc 能夠達到進制轉換的目的
2. ibase => input base為幾進制,obase => output base為幾進制
3. 注意須先寫obase,再去寫ibase

上面幾點注意事項了解了之後,來看實際範例:

example: 16進制"35"轉10進制
echo "obase=10; ibase=16; 35" | bc
=> 53

example: 16進制"C0"轉10進制
echo "obase=10; ibase=16; C0" | bc
=>192

實際應用可以這樣
value=`echo "obase=10; ibase=16; C0" | bc`
echo $value
=>192


或是可以這樣
tmp=C0
value=`echo "obase=10; ibase=16; $tmp" | bc`
echo $value
=>192

============= 如果沒有 bc 可以使用, 則用下面方式(only 16轉10) ============
echo $((0x35))
=> 53

使用變數的用法
hexVal=35
echo $((0x${hexVal}))
=> 53

2019年8月8日 星期四

使用ethtool開啟/關閉 wol功能的指令

使用說明:
開啟Wake on lan ==> ethtool -s [Interface] wol g
關閉Wake on lan ==> ethtool -s [Interface] wol d

# ethtool -s eth0 wol g
# ethtool -s eth0 wol d

最後可以使用ethtool查看WOL是否有開啟


2019年8月2日 星期五

equal to linux "which" command in windows

在Windows環境下,可以使用"where" command,其功能等同於linux底下的which
例如: 我要查詢g++的路徑

C:\>where g++
C:\Dev-Cpp\bin\g++.exe

2019年7月22日 星期一

iperf3 unable to create a new stream no such file or directory 的解決方法

今天要在Linux環境下,執行iperf3來測試LAN Throughput發生以下的錯誤訊息:

iperf3: error - unable to create a new stream: No such file or directory

會有這個錯誤訊息,是因為iperf3在執行時,會寫一個iper3.XXXXXX的檔案,而要寫入此檔案的路徑我們要從source code的 iperf/src/iperf_api.c 來觀察,如下圖:


















可以看到,在這邊有定義了一個路徑,而我會出現這個錯誤訊息的原因,就是因為沒有/tmp這個資料夾,導致iperf3無法寫入iper3.XXXXXX的檔案

因此在系統中建立好此資料夾,再執行iperf3執行檔,就可以了~

2019年7月16日 星期二

查看目前kernel支援哪些FileSystem

查詢目前Linux 支援的檔案系統(可載入的module)
ls -l /lib/modules/$(uname -r)/kernel/fs



系統目前已載入到記憶體中支援的檔案系統
# cat /proc/filesystems

nodev sysfs
nodev rootfs
nodev proc
nodev tmpfs
ext3
ext2
ext4
nodev fuse
fuseblk

2019年7月11日 星期四

Linux設定IP, BroadCast, netmask的指令

利用ifconfig一行就可以解決,如下指令:

ifconfig eth0 192.168.1.5 broadcast 192.168.1.255 netmask 255.255.255.0

2019年5月24日 星期五

u-boot底下使用指令 mw, md 來寫入/讀取 register的值

寫入
mw [位址] [value] [長度]

example:
    mw 0xf10a8180 1f9e1001 1   ==> 修改位址0xf10a818032bit改為1f9e1001



讀取
md [位址] [長度]

example:
    md 0xf10a8180 1  ==> 讀取位址0xf10a8180的值長度為1個32bit


2019年5月15日 星期三

S5 真無線 MTK 藍芽耳機,無法兩耳同時配對,回覆原廠設置的方法

1. 先長壓,讓兩支耳機都進入關機的狀態
2. 關機狀態下,再長按,直到耳機不會再有燈閃爍(約15s~20s)
3. 放進充電座,已回復原廠設定
4. 下次再拿出來,就可以兩耳同時配對了~

注意: 手機端與S5配對過的記錄,記得也要先取消配對~

2019年5月9日 星期四

解決"-bash: /opt/armv7-marvell-linux-gnueabi-softfp_i686_64K_Dev_20131002/cross/bin/arm-marvell-linux-gnueabi-gcc: 沒有此一檔案或目錄" 的方法

一開始遇到這個問題,覺得很奇怪,網路搜尋了一下,原來發生這個問題是因為32位元的toolchain無法相容在64位元的作業系統,所以發生此問題~

解決方法,安裝以下的32位元library:
#  sudo apt-get install lib32z1 lib32ncurses5

2019年5月6日 星期一

如何用make傳遞參數給Makefile

這邊以buildroot為範例,當你想要re-build package(假設是mysql)的時候,我們下執行下面的指令:
# make mysql-rebuild

那假設我們要在Makefile當中,能夠動態的指定rebuild任何一種package, 可以用下面的方式:

Makefile寫法~
==================================================================

buildroot_rebuild_pkg:
        make $(PKG)-rebuild

=================================================================

因此假若我們現在要rebuild mysql, 可以在Makefile那一層這樣子下就行了:
# make buildroot_rebuild_pkg PKG=mysql

Buildroot要如何重新編譯Package

buildroot在編譯某個package的時候,會去檢查 output/build/package/ 底下的幾個檔案


.stamp_configured
有這個檔案存在,代表此package已經配置過

.stamp_downloaded
有這個檔案存在,代表此package已經下載過,沒有此檔案,buildroot會重新下載

.stamp_patched
有這個檔案存在,代表此package已經patch過

.stamp_extracted
有這個檔案存在,代表此package已經解壓 
 
.stamp_built
有這個檔案存在,代表此package已經編譯過

.stamp_target_installed 
有這個檔案存在,代表此package已經安裝過



想要執行哪一步驟,可把相對應的.stamp文件刪除,在重編譯buildroot即可~


2019年5月2日 星期四

如何修改Ubuntu當中Terminal的hostname

依序完成下面兩個步驟
1. vim /etc/hostname     改成你想要的
2. vim /etc/hosts            把你在Terminal看到的字,改成你想要的

重開機後,就會看到已經被更改了~

2019年4月16日 星期二

制作initial RAM filesystem,以及讓kernel boot into RAM disk filesystem

首先會從u-boot的 bootargs參數開始,關鍵在於這兩個藍色字的參數,可以讓kernel booting到RAM disk

bootargs "root=/dev/ram0 rw console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000 no_console_suspend init=/init rootdelay=3 rootfstype=ext4"


當u-boot開到kernel之後,Kernel就會去把你包的Initial RAM filesystem 掛載到 root參數(也就是/dev/ram0) ,前提是你的 Initial RAM filesystem要記得要建立/dev/ram0

再來當你的 Initial RAM filesystem 掛載好之後,會接著去跑第二個參數 init這個檔案,init通常是一支shell script,也是kernel轉換到filesystem後的第一個檔案,他的動作通常會去掛載一些資料夾之後就幫忙導到linuxrc(也就是busybox),接著就成功進入作業系統


先列出我Build Code環境,各個資料夾的樹狀結構


















下面列出各個階段Programer需要作的事情:

1. U-Boot
修改 bootargs 參數,修改的內容如上面所敘述

2. 編譯Busybox
下載一包Busybox,先去執行make menuconfig,接著去設定要安裝的路徑,如下圖:
 Settings  --->
     --- Installation Options ("make install" behavior)


















接著,可以把Busybox編譯成Static Library的方式,如下圖:
Settings  --->
    [*] Build static binary (no shared libs)

















上面步驟都設定完成後,離開並儲存,在去作make install,最後會生出一個簡易的root filesystem(還不完整)


3. 制作 Initial RAM filesystem
請先到上個步驟當中,安裝Busybox的路徑,會看到如下圖,皆為Busybox所產生:






接著我們要繼續補足 Initial RAM filesystem所缺少的,分別作以下幾個步驟:
3-1. 建立 proc資料夾,sys資料夾 (mkdir proc; mkdir sys)
3-2. 建立 init檔案,其內容如下:
#!/bin/sh -x
MOUNT="/bin/mount"
${MOUNT} -t proc /proc /proc
${MOUNT} -t sysfs /sys /sys
${MOUNT} -t usbfs none /proc/bus/usb
${MOUNT} -t devpts devpts /dev/pts
/linuxrc

3-3. 建立dev資料夾,以及所需要的device node,執行 makedev.sh來建立,內容如下:
(內容較多,我把他補充再文章最後) ...

以上三個小步驟完成後,就建立出基本的 Initial RAM filesystem,如下圖:




4. Kernel
首先要先作make menuconfig,並且把 Initial RAM filesystem選像打開,並且選擇已經編譯好的busybox(我編譯好的busybox在kernel資料夾的上一層資料夾 ../build/fs.initrd/),路徑如下:
General setup ---->
     [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
     (../build/fs.initrd/) Initramfs source file(s)

存檔離開後,執行make,便會把Initial RAM filesystem包進Kernel當中



當上面的Kernel都準備好了之後,讓U-Boot booting進入Kernel. 應該就可以順利進入RAM filesystem了。


如果遇到Failed to execute /init (error -2)的Kernel Panic情形,請確認下面幾件事情
1. Busybox選項是否有開啟mount指令
2. Busybox是否有開啟Static Build
3. 請在安裝完Busybox之後,把產生出的busybox執行檔,權限改為Superuser (chmod +s busybox)


















用法: ./makedev.sh (busybox安裝路徑)

##################  makedev.sh ############################
#!/bin/sh

if [ x$1 == "x" ]; then
        echo ""
        echo "Usage:   makedev ROOTDIR"
        echo ""
        echo "  ROOTDIR is the directory of root FS, please use full path."
        echo ""
        exit 0
fi

rm -rf $1/dev/*
cd $1/dev/

DEVINDEX=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
NODEINDEX=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)
M_NUM=8
N_NUM=0
DEVNODE=sd
TYPE=b

major=${M_NUM}
minor=${N_NUM}

for i in ${DEVINDEX[@]} ; do
        mknod -m 660 ${DEVNODE}${i} ${TYPE} ${major} ${minor}
        let minor=minor+1

        for j in ${NODEINDEX[@]}; do
                mknod -m 660 ${DEVNODE}${i}${j} ${TYPE} ${major} ${minor}
                let minor=minor+1
        done

        if [ $minor -gt 255 ]; then
                let major=65
                let minor=0
        fi
done


mknod -m 600 mem        c 1 1
mknod -m 666 null       c 1 3
mknod -m 666 zero       c 1 5
mknod -m 644 random     c 1 8
mknod -m 444 urandom    c 1 9
mknod -m 600 tty0       c 4 0
mknod -m 600 tty1       c 4 1
mknod -m 600 tty2       c 4 2
mknod -m 600 tty3       c 4 3
mknod -m 600 tty4       c 4 4
mknod -m 600 tty5       c 4 5
mknod -m 600 ttys0      c 3 48
mknod -m 600 ttyS0      c 4 64
mknod -m 600 ttys1      c 3 49
mknod -m 600 ttyS1      c 4 65
mknod -m 600 ttys2      c 3 50
mknod -m 600 ttyS2      c 4 66
mknod -m 666 tty        c 5 0
mknod -m 600 console    c 5 1
mknod -m 755 ram0       b 1 0
mknod -m 755 ram1       b 1 1
mknod -m 755 ram2       b 1 2
mknod -m 755 ram3       b 1 3
mknod -m 755 ram4       b 1 4
mknod -m 660 loop0      b 7 0
mknod -m 660 loop1      b 7 1
mknod -m 660 loop2      b 7 2
mknod -m 660 loop3      b 7 3
mknod -m 644 crypto     c 10 70
mknod -m 644 cesa       c 10 71
mknod -m 660 rtc0       c 254 0

for i in $(seq 0 8)
do
mknod mtd$i c 90 $(expr $i + $i)
mknod mtdblock$i b 31 $i
done

mknod -m 660 fb0 c 29 0

mknod md0 b 9 0
mknod md1 b 9 1
mknod md2 b 9 2
mknod md3 b 9 3
mknod md4 b 9 4

mknod sg0 c 21 0
mknod sg1 c 21 1
mknod sg2 c 21 2
mknod sg3 c 21 3
mknod sg4 c 21 4
mknod sg5 c 21 5
mknod sg6 c 21 6
mknod sg7 c 21 7
mknod sg8 c 21 8
mknod sg9 c 21 9
mknod sg10 c 21 10
mknod sg11 c 21 11
mknod sg12 c 21 12
mknod sg13 c 21 13
mknod sg14 c 21 14
mknod sg15 c 21 15

mknod sr0 b 11 0
mknod sr1 b 11 1
mknod sr2 b 11 2
mknod sr3 b 11 3
mknod sr4 b 11 4
mknod sr5 b 11 5
mknod sr6 b 11 6
mknod sr7 b 11 7
mknod sr8 b 11 8
mknod sr9 b 11 9
mknod sr10 b 11 10
mknod sr11 b 11 11
mknod sr12 b 11 12
mknod sr13 b 11 13
mknod sr14 b 11 14
mknod sr15 b 11 15

mknod -m 666 ptmx       c 5 2

mknod ppp c 108 0

mknod fuse c 10 229

mkdir shm

#i2c
I2C_INDEX=(0 1 2)
for i in ${I2C_INDEX[@]}; do
        mknod -m 600 i2c$i c 89 $i
        mknod -m 600 i2c-$i c 89 $i
done

#for sshd
mknod ptyp0 c 2 0
mknod ptyp1 c 2 1
mknod ptyp2 c 2 2
mknod ttyp0 c 3 0
mknod ttyp1 c 3 1
mknod ttyp2 c 3 2

#pts
mkdir pts; cd pts
mknod -m 640 0          c 136 0
mknod -m 640 1          c 136 1
mknod -m 640 2          c 136 2
mknod -m 640 3          c 136 3
mknod -m 640 4          c 136 4
mknod -m 640 5          c 136 5
cd ..

mknod hiddev0   c 180 96
cd ..

cd ../../

exit 0
###############################################





2019年4月11日 星期四

Linux 進入rootfs之後,查詢u-boot bootcmd變數的方法

進入Kernel後,在檔案系統中,若想要查詢u-boot的bootcmd參數值,可以用下面的指令來查詢~

# cat /proc/cmdline


2019年4月2日 星期二

使用Linux dd command 清除硬碟的 partition table

假設有顆硬碟為 /dev/sda

使用下面指令可以清空硬碟的 partition table

dd if=/dev/zero of=/dev/sda bs=512 count=1

因為硬碟的partition table 通常放在 最前面的 512Byte 的地方

如果想把硬碟回到最初始的狀態,可以這樣作~

2019年3月26日 星期二

使用grep的-v參數,來排除某些字串的方法

目前我們的Code Server為SVN,整個Project裡面有包含整包Linux Source Code,假設這包Code被編譯過,當我們使用svn status的時候,就會多出很多"?"的選項,如下圖:(問號在SVN裡面就是新產生的檔案)













假設我們現在改了一些檔案,又想透過SVN從Project裡面知道改了哪些,可以使用grep -v "?" 就可以把"?"的檔案排除掉,就可以看到"M"的檔案,因此我們可以這樣下:

svn status | grep -v "?"

2019年3月21日 星期四

使用wolcmd.exe wake on lan 工具 喚醒電腦的指令

1. 下載 wolcmd.exe的網址:
https://www.depicus.com/wake-on-lan/wake-on-lan-cmd

2. 下載完成後,把執行檔放在方便執行的地方,ex: C:/ or D:/ 等等

3. 開啟"命令提示字元",切換到command的路徑,執行 "wolcmd.exe"會看到下圖的說明,講解wolcmd.exe詳細的參數與用法










4. wolcmd.exe 009027a322fc 192.168.1.3 255.255.255.0 7
==> 這樣便可以喚醒 MAC:00:90:27:a3:22:fc ,IP為192.168.1.3 的電腦

日本九州-福岡自助旅行,行前需準備的事情

今年預計4月中來一趟日本北九州自由行,因此記錄一下所有事前準備的事項與順序,也可以拿來作之後自由行的參考,每一個項目我都有記錄大概幾月幾號完成的,可以自己預估一下出發日多久前就需要完成~

1. 訂飛機票 (2019/01/04 完成),價錢約NT.6000
- 此次的飛機票,我是訂廉價航空-香草,桃園<==>福岡,我選擇的是包含20公斤行李,以及可以選位置,另外要特別注意的是香草航空除了刷卡會有1.5%的海外刷卡費用之外,還會另外收取一筆付款手續費 NT.210,因此來回機票就被收NT.420






















2. 申請富邦的快樂旅平卡   (2019/01/05 完成)
- 自助出國建議還是要保旅遊不便險&旅遊平安險,富邦的快樂旅平卡就提供這樣的服務,因此需要到富邦網站申辦快樂旅平卡(數位),申請過之後,會email憑證給你(約一個禮拜),申辦時除了填寫你自己的資料,記得也把要一起出國的配偶或小孩一起填寫。大約出國日的前一個月,再來申辦旅遊不便險以及旅遊平安險,兩位大人:$446,兩位小孩:$308,另外我們選的方案,如下圖勾選的:




















申辦網址:https://www.fubon.com/insurance/b2b2c/happy/index.html


3. 自駕租車 (2019/1/18 完成) 租三天+4天KEP(日幣5500) 共日幣 21325
- 到九州玩,需要租車的朋友,可以到tabirai網站租車,用日文網站訂車會比用中文網站還要便宜,訂完之後,看到是跟Budget訂的車子,另外高速公路過路費與中文導航可以等出發前一個月,在網站留言跟對方說,另外最重要的,到達日本要租車時,必須提供台灣護照、台灣駕照、日文譯本駕照,缺一不可
訂車網址:https://www.tabirai.net















4. 開始訂旅館 (2019/1/26 完成)
- 基本上就是上Agoda或是Booking找合乎預算的房間預訂,在訂房之前記得先找找有沒有可以折價的優惠代碼,若是預訂Agoda,雖然有延後付款功能(快到住宿日再付款),但因為Agoda匯差是使用自己的公式計算,非銀行匯差,所以會貴好幾百塊台幣,建議是直接預定當天就付款


5. 預訂九州野生動物園門票&飛買家無線AP & 富邦旅平險 (2019/3/19 完成)
- 預訂九州動物園門票(網路搜尋"用jalan預約九州動物園"會有教學),我們預約的時候都只剩下午時段,聽說是到現場還可以改時段,2大1小門票,預約價錢大人票價少200日元,小孩少100日元,另外總價還會再少2000日元(共7000日元)
- 飛買家無線AP,google搜尋就可以訂了,有時候會有優惠碼,可以注意一下,他可以直接機場取貨,租7天折完價為NT.593
- 富邦旅平險網址:https://b2c.518fb.com/ecmobile/hwc/login.do  2大2小 共NT.754


2019年3月7日 星期四

[shell] shell script的字串處理,取某幾個字元,cut 的用法

shell script當中要取字串有個最簡單的方法,如下:
假設現在有個字串"Hi we are the world!"







上面程式第一個 echo 表示,我要從第三個字元之後開始取,取到最終
上面程式第二個 echo 表示,我要從第三個字元之後開始取,共取8個字元
執行結果會如下圖:





cut
我們也可以用cut指令來取得特定位置字元
一樣用上面的範例 有個字串為 "Hi we are the world!"
假設我要取第4個字元到第9個
我們可以這樣下:



另外cut也可以用來作分割處理,例如我想用"空格"來分割,並取第3個字串






2019年2月25日 星期一

加入Uber eat 外送夥伴,申請流程

要加入Uber eat的送餐行列,首先需準備幾項文件
1.良民證 (線上申請網址:https://www.npa.gov.tw/NPAGip/wSite/np?ctNode=11725),請點選網路申辦,再照著步驟輸入即可,寫完成後大約需要2-5個工作天
如要線上查詢申辦進度,如下圖所示:



另外網路申辦完成後,還是得要親自到警察局領取(工本費100)
新竹市領取地點: 新竹市中山路1號 (進去後右手邊櫃台) 完整文件
其他地區:
● 台北市警察局外事科:臺北市中正區延平南路96號 / 電話: (02) 2381-7494 或 (02) 2381-8251
● 新北市警察局外事科:新北市板橋區府中路32號 / 電話: (02) 8072-5454 分機: 4095 或 4096
● 基隆市警察局外事科:基隆市信二路205號 / 電話: (02)24271857
● 新竹市警察局外事科:新竹市中山路1號 / 電話: (03)5242103
● 桃園市警察局外事科:桃園市桃園區縣府路3號 / 電話: (03) 3335107
● 台中市警察局外事科:台中市西屯區文心路二段588號 / 電話: (04) 23273875
● 高雄市警察局外事科:高雄市前金區中正四路260號 / 電話: (07) 2215796

2.身分證
3.機車駕照、行照、強制險
    *機車駕照過期沒有關係
    *行照正本
    *強制險正本,或是電子檔(我的是富邦強制險,上富邦網站可以取得電子檔)

4.一台機車(不限年份 CC數)
5.需滿19歲 才可申請

當你準備好以上這些資料,接著請先去註冊Uber eat帳號,記得要選機車,不要選成汽車的,另外如果email已經註冊過汽車的,請再用另一個email註冊
註冊的時候推薦人方便的話,請填 F994ZP,只要在兩週內,跑完15趟之後,可以拿到獎勵金1000元~ (目前已無獎勵活動)
另外uber給你的保溫袋,會從你的所得裡面扣除1000元,並非是免費的,所以一定要賺到推薦獎勵1000元,才會划算喔!

新竹: http://t.uber.com/HC_signup
台中: http://t.uber.com/TC_signup

註冊過程中,可以把上面提到的文件,都透過手機拍照作上傳
都完成後,建議直接帶著上述文件,跑一趟Uber,不用30分鐘就可以完成開通了!
Uber eat各縣市的服務處地址與服務時間:

https://www.uber.com/zh-TW/drive/hsinchu/contact/

2019年1月31日 星期四

dhclient 的使用方法

以往都是使用udhcpc 去取得 dhcp的ip address

今天使用的系統,只有dhclient指令可以使用,因此順便記錄一下dhclent使用方法

#/ dhclient [option] [Interface]

EX:
1. 取得dhcp ip
#/ dhclient eth0

2. 釋放ip
#/ dhclient -r eth0


註. 今天假設你已經使用 dhclient eth0 取得了IP,然後你又使用了ifconfig eth0 192.168.2.3(假設設定了這個),接著你再去下 dhclient eth0 你會發現 取不到DHCP的IP了,IP會一直是 192.168.2.3,而此時你就必須作以下步驟:
1. #/ dhclient -r eth0
2. #/ dhclient eth0

這樣就可以再次取得 DHCP的IP

2019年1月25日 星期五

[shell script] 迴圈中,動態變數名稱的使用方法與限制

在Linux4.14.12的環境下

今天我要寫一個Script可以去判斷3顆硬碟的sata速度是否為6.0 Gbps,目前已知Linux底下讀sata硬碟速度的device位置分別為(每台電腦的/sys/class/ata_link/link7/sata_spd  紅字部分會不相同):
        HDD1  ===> /sys/class/ata_link/link7/sata_spd
        HDD2  ===> /sys/class/ata_link/link8/sata_spd
        HDD3  ===> /sys/class/ata_link/link9/sata_spd



完整script寫法,動態變數的方法,如下方粗體字部分:
=================== check_sata_speed.sh ==================
#!/bin/sh
HDD1="7"
HDD2="8"
HDD3="9"

BAY_3=3
i=1

        HDDSPD1=`cat /sys/class/ata_link/link$HDD1/sata_spd | awk -F' ' '{print $1}'`
        HDDSPD2=`cat /sys/class/ata_link/link$HDD2/sata_spd | awk -F' ' '{print $1}'`
        HDDSPD3=`cat /sys/class/ata_link/link$HDD3/sata_spd | awk -F' ' '{print $1}'`

        while [ $i -le $BAY_3 ]
        do
                eval "HDD_SPD=\$HDDSPD$i"
                if [ "6.0" == "$HDD_SPD" ]; then
                        count=$(($count+1))
                else
                        echo "HDD$i Fail"
                fi
                i=$(($i+1))
        done

        if [ $count == $BAY_3 ]; then
                echo "OK"
        fi
=========================================================
如果三顆硬碟都為6.0 Gbps 則最後印出 OK
若是有低於6.0的速度,則會印出Fail


***注意動態變數的使用限制
上面的HDDSPD1~HDDSPD3變數,若是你宣告為 HDD1_SPD ~ HDD3_SPD,則在迴圈內使用(eval "HDD_SPD=\$HDD$i_SPD")動態變數時,是不會成功的,只有把動態變數的數字放在變數名稱最後,才會work

已上~



2019年1月17日 星期四

[Linux] 使用dd 來測試硬碟或是一些儲存裝置的讀寫速度(Read/Write), Throughput testing

我們寫了兩支script 來測試掛載在/mnt/public上的storage throughput(Read/Write)
Write 的部分,我們測試2G的檔案,每次作完dd,我們會去清除cache,sleep 10 秒後,再次執行,總共循環5次

=================== Using dd to test storage write throughput(RX) =================
#!/bin/sh
count="1"
while [ 1 ]
do
dd if=/dev/zero of=/mnt/public/2GGG bs=1M count=2048
sync
echo "sleep 10 sec"
sleep 10
echo 1 > /proc/sys/vm/drop_caches
sync
echo "sleep done"
if [ $count -eq "5" ]; then
 exit
fi
count=$(($count+1))
done
====================================================================


Read 的部分,我們測試2G的檔案,每次作完dd,sleep 5 秒後,再次執行,總共循環5次

=================== Using dd to test storage read throughput(TX) =================
#!/bin/sh
count="1"
while [ 1 ]
do
dd of=/dev/null if=/mnt/public/2GGG bs=1M count=2048
sync
echo "sleep 5 sec"
sleep 5
sync
echo "sleep done"
if [ $count -eq "5" ]; then
 exit
fi
count=$(($count+1))
done
==================================================================:

[shell script] shell script 的無窮迴圈寫法

下面的範例是使用一個while無窮迴圈,每隔1秒,會印出 count值,執行後請按[ctrl+c]來結束程式

==========================================================
#!/bin/sh
count="1"
while [ 1 ]
do
echo $count
count=$(($count+1))
sleep 1
done
=========================================================



另外下面的範例也是使用一個while無窮迴圈搭配判斷式,在跑到第7次時結束並離開程式

==========================================================
#!/bin/sh
count="1"
while [ 1 ]
do
echo "do loop"
if [ $count -eq "7" ]; then
 exit
fi
count=$(($count+1))
done
=============================================================

2019年1月11日 星期五

ibon周五搶好康找不到嗎?告訴你詳細位置

每個禮拜五下午大約 PM2:00 左右,ibon app都會推出周五搶好康的活動,但是常常會讓人不知道該從哪裡去領取,按照下面步驟就可以讓你領到

1. 先開啟ibon APP




















2. 點選"好康紅利"




















3. 點選"會員活動"





















4. 點選"我要領取",領完後在點選"顯示序號"






















最後把序號複製切換到openpoint兌換,就可以了~

Linux清除Caches(快取記憶體)的指令

有的時候再作硬碟的Write Throughput測試時,Cache可能會影響到測試出來的數據,因此就需要用到手動清除快取的指令,在Linux底下,指令如下:

#echo 1 > /proc/sys/vm/drop_caches

然後可以使用以下指令來看到Cache被釋放:

#free -h













*********   備註    **********
要釋放 Linux 的記憶體快取,可以透過更改 /proc/sys/vm/drop_caches 這個檔案的內容來達到,當這個檔案內容被設為 1 時,是表示要求 Linux 釋放沒在使用的一般性快取(pagecache),而設為 2 時,則代表要求釋放 dentry 與 inode 所使用到的快取,若設為 3 則是釋放所有的快取(也就是包含 1 與 2 的狀況)。
****************************

2019年1月9日 星期三

在uboot底下,當沒有mii read/write指令,如何使用phyread phywrite 來設定 LAN 的 Register

首先我們還是得參考mii dump出來的 registaer說明圖,因為沒有mii指令可用,請直接參考底下的圖:

#mii dump 0 0











#mii dump 0 1














phyRead用法:  phyRead <phy-address> <phy-register>
phyWrite用法: phyWrite <phy-address> <phy-register> <values>

Example:
1.      設定phy 0,暫存器0(control register)loopback值為1(default=0)
è  phyRead 0 0x00   --->  0x1140
è  phyWrite 0 0x00 0x5140
è  phyRead 0 0x00   --->  0x5140

2.      讀取phy0,暫存器1(status register15bit)的值
è  phyRead 0 0x01   --->  0x796d

2019年1月4日 星期五

10的負3, 負6, 負9次方(ms, μs, ns)


1 ms = 10-3             //milli-second, 10 的 -3 次方  
1 μs = 10-6             //micro-second, 10 的 -6 次方  
1 ns = 10-9             //nano-second, 10 的 -9 次方   

2019年1月3日 星期四

How to build iperf3 on ARM platform (static build)

1. apt-get install git-core  //install git tool
2. apt-get install make    //install make tool, to make iperf3
3. git clone https://github.com/esnet/iperf   //clone iperf3 source code
4. cd iPerf  //go to the iperf3 source code folder, and compile it
5. ./configure --enable-static --disable-shared ; make ; make install  //static build

按照以上步驟,便可以在你的平台上編譯好 iperf3 並且可以使用~

**若是沒有gcc,而導致configure的時候出錯,請先使用以下指令安裝
apt-get install gcc