**** 前提必須要有讀卡機 + 電腦 ****
步驟如下:
1. 首先必須臨櫃告知行員要"開啟網路設定約定帳戶功能",行員會幫你升級帳戶等級,升級後你就有自行設定的權限,臨櫃設定後的次一工作日生效。
2. 接下來你必須申請網路銀行,因為要設定約定帳戶,只有"網路銀行"或"行動銀行"(手機APP)可以做設定(網路ATM無法設定),網路銀行申請網址如下(必須用到讀卡機):
申請網路銀行/密碼重置 --> WebATM申請(連接讀卡機)
https://mma.sinopac.com/MemberPortal/Member/ApplyMmaIndex.aspx
3. 網路銀行申請完成之後,馬上就可以登錄網路銀行,登陸之後,請選擇:
申請/設定 --> 常用非約定帳號--> 約定轉入帳號 --> 新增帳號
以上步驟完成,就可以了~
2019年11月16日 星期六
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定義的地方
首先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
*基本輸入輸出
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;
}
#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
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是否有開啟
開啟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
例如: 我要查詢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執行檔,就可以了~
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
# 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
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 ==> 修改位址0xf10a8180把32bit改為1f9e1001
讀取
md [位址] [長度]
example:
md 0xf10a8180 1 ==> 讀取位址0xf10a8180的值長度為1個32bit
mw [位址] [value] [長度]
example:
mw 0xf10a8180 1f9e1001 1 ==> 修改位址0xf10a8180把32bit改為1f9e1001
讀取
md [位址] [長度]
example:
md 0xf10a8180 1 ==> 讀取位址0xf10a8180的值長度為1個32bit
2019年5月15日 星期三
S5 真無線 MTK 藍芽耳機,無法兩耳同時配對,回覆原廠設置的方法
1. 先長壓,讓兩支耳機都進入關機的狀態
2. 關機狀態下,再長按,直到耳機不會再有燈閃爍(約15s~20s)
3. 放進充電座,已回復原廠設定
4. 下次再拿出來,就可以兩耳同時配對了~
注意: 手機端與S5配對過的記錄,記得也要先取消配對~
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
解決方法,安裝以下的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
# 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即可~
.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
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
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,接著去設定要安裝的路徑,如下圖:
--- 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)
當上面的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
#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日 星期四
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 的地方
如果想把硬碟回到最初始的狀態,可以這樣作~
使用下面指令可以清空硬碟的 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 "?"
假設我們現在改了一些檔案,又想透過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 的電腦
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
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個字串
假設現在有個字串"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/
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
今天使用的系統,只有dhclient指令可以使用,因此順便記錄一下dhclent使用方法
#/ dhclient [option] [Interface]
EX:
1. 取得dhcp ip
#/ dhclient eth0
2. 釋放ip
#/ dhclient -r eth0
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}'`
今天我要寫一個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
==================================================================:
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
=========================================================
==========================================================
#!/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兌換,就可以了~
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 的狀況)。
****************************
#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
#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 register共15bit)的值
è 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
訂閱:
文章 (Atom)