2017年9月9日 星期六

DNS設定中各項紀錄的功用

一個新的網站申請網域之後,

要讓使用者能夠從網際網路中找到這個網站,

就必須經過域名解析找到該網站的IP位址,

為了方便記憶,

以申請的網域(也就是域名) 作為媒介,

經過DNS伺服器解析域名之後才有辦法找到IP位址

在DNS設定中,

必然會看到例如: A, AAAA,NS ,CNAME等等各種不同的紀錄,

這些紀錄提供給DNS伺服器做域名解析之用,

今天就是要來介紹:

DNS設定中各項紀錄的功用



1. A紀錄

直接將域名指向IPv4位址,

如果網站IP位址 123.456.789.123,

A紀錄的值就必須是IP位址(123.456.789.123),

簡單說A紀錄就是直接把設定的域名指到網站IP.

寫法為 [name] IN A [ip]

name 與 ip 分別是域名, 網站ip


2.CNAME紀錄:

這個紀錄可以設定此域名的別名

[alias] IN CNAME  [name]

name填入自己的域名,

alias填入想設定的別名

舉例來說

申請的域名假設為 abc.com

想把網址www.abc.com轉到 web.abc.com

www IN CNAME web

3.MX紀錄:

這個設定是宣告mail伺服器的位址,

可設定多台郵件伺服器以優先權做為區隔

例如:

@ IN 0 mail1

@ IN 10 mail2

@ 就是域名的一個特殊代號, 也就是剛才假設的域名abc.com

這樣設定的意思就是

有兩台郵件伺服器分別為

mail1.abc.com

mail2.abc.com

其中以 mail1 為優先權較高的伺服器

4. NS 紀錄:

宣告 DNS 伺服器位址

@ IN NS dns1.xxx.com

如果該域名架設在同一域名內

必須再加上

dns1 IN A [dns 伺服器ip 位址]


2017年8月31日 星期四

Woocommerce安裝教學


Woocommerce 建立於wordpress基礎上,

是目前常見的免費網路商店系統,

搭配豐富的外掛,

不管在功能上與外觀上,

都是現有解決方案中,

值得推薦的一種,


Woocommerce安裝教學:


1. 安裝精靈會一步一步帶領使用者進行相關設定

第一步告知使用者,

會在wordpress中建立數個頁面,

提供給網路商店應用


2. 設定商店位置與使用的幣別


3. 設定運送方式



4. 設定付款方式,

原本應該可以使用預設的PayPal模組進行收費,

礙於法規,

台灣賣家無法向台灣買家收費,

除了直接轉帳以外,

只能使用國內第三方支付,







5. 設定一個佈景主題

如果想要使用其他適合網路商店的主題也能在此設定



6. 商店建立完畢,

就能夠開始新增商品了



7. 如果有別的網路商店,

可以將商品匯出成csv檔案

在匯入到Woocommerce中


8. 相對應資料庫的各個欄位,

必須自行手動設定,



9. 完成後直接匯入即可減少商品上架時間



2017年7月28日 星期五

從驅動程式原始碼認識USB OTG

USB OTG,

是USB-On-The-Go 的縮寫,

為USB 規格中的一個延伸,

擁有USB OTG功能的系統,(例如: 手機)

可以根據ID pin狀態的不同,

自行切換為host端或者client端,

已達到不同的目的使用.

例如:

a. 以手機接電腦,

手機會切換為client端,

這時可以把手機當隨身碟使用

b. 以手機接隨身碟,

手機會轉為host端,

讓手機能夠不透過電腦直接存取隨身碟裡面資料,





Google Git 上面可找到otg.c

可以讓我們

從驅動程式原始碼認識USB OTG


/**
* ci_otg_work - perform otg (vbus/id) event handle
* @work: work struct
*/
static void ci_otg_work(struct work_struct *work)
{
struct ci_hdrc *ci = container_of(work, struct ci_hdrc, work);
if (ci_otg_is_fsm_mode(ci) && !ci_otg_fsm_work(ci)) {
enable_irq(ci->irq);
return;
}
if (ci->id_event) {
ci->id_event = false;
ci_handle_id_switch(ci);
} else if (ci->b_sess_valid_event) {
ci->b_sess_valid_event = false;
ci_handle_vbus_change(ci);
} else
dev_err(ci->dev, "unexpected event occurs at %s\n", __func__);
enable_irq(ci->irq);
}
當ID pin產生變化,

系統偵測到事件觸發,

執行ci_handle_id_switch(ci);

#define CI_VBUS_STABLE_TIMEOUT_MS 5000
static void ci_handle_id_switch(struct ci_hdrc *ci)
{
enum ci_role role = ci_otg_role(ci);
if (role != ci->role) {
dev_dbg(ci->dev, "switching from %s to %s\n",
ci_role(ci)->name, ci->roles[role]->name);
ci_role_stop(ci);
/* wait vbus lower than OTGSC_BSV */
hw_wait_reg(ci, OP_OTGSC, OTGSC_BSV, 0,
CI_VBUS_STABLE_TIMEOUT_MS);
ci_role_start(ci, role);
}
}
ci_otg_role(ci);

根據ID pin 腳位的不同

會選擇USB功能為:

CI_ROLE_GADGET (client)

CI_ROLE_HOST (host)

/**
* ci_otg_role - pick role based on ID pin state
* @ci: the controller
*/
enum ci_role ci_otg_role(struct ci_hdrc *ci)
{
enum ci_role role = hw_read_otgsc(ci, OTGSC_ID)
? CI_ROLE_GADGET
: CI_ROLE_HOST;
return role;
}

接著driver 會將此變化傳到應用層,

如果是Android 系統,

USB功能的變化就會傳給Android 做相對應的處理