2015年10月12日 星期一

[Raspberry Pi 2] 防止DHCP client修改/etc/resolv.conf


一、簡介

  最近碰Raspberry PI 2遇到一個問題,/etc/resolv.conf內總是被修改多了一項nameserver 192.168.0.1,導致DNS service總是有問題。怎麼看都覺得跟dhcp有關係。

       就在透過find查詢/etc下檔案內容後,果然發現在/etc/dhcp3/dhclient-enter-hooks.d/與/etc/dhcp/dhclient-enter-hooks.d內的shell script有點嫌疑。

2015年10月1日 星期四

[Linux C] strtok與strtok_r使用教學、程式實作


前言

當我們在使用C語言做字串分割時,大家都知道string.h的library裡面,有很好用的function可以調用,而這function就是strtokstrtok_r

不知道有沒有人跟我一樣國文造詣實在很差,看了看網路上的文章還是不是很懂在這函式的運作方法…所以我就來看一下Source Code,並寫一個簡易的程式來讓大家理解理解用法吧!


2015年8月18日 星期二

[Linux] 在Linux上終端機如何背景執行程式教學



此篇主要是要講解如何再背景執行程式的方法。

---

簡單介紹


在Linux上,如果直接在終端機下開啟程式,該tty得stdin、stdout與stderr就會被導向至該執行緒上。而且如果該tty關閉,該tty正運行的前景(Foreground)程式也同時會被結束掉。

如果是在一般圖形化的Linux OS可能無所謂,再開一個終端機就好啦~但是如果今天是要運行在只有command line的環境時該怎麼做呢?

2015年8月17日 星期一

[仙境傳說] Linux下執行Openkore遇到Unable to load the file config.txt.問題



基本上,閱讀完上一篇[仙境傳說]在ubuntu上運行OpenkoreTW後,照理說環境就已經建構完成。

但是為什麼有人再打開終端機,嘗試開啟外掛時卻會遇到Unable to load the file config.txt的問題,如下圖:





由於config.txt應該處於 openkore/control資料夾內,如果資料夾內檔案是存在的那又是為什麼找不到呢?

2015年8月8日 星期六

[Linux C] ANSI逃脫碼與printf顏色教學


注意:Windows的console是不支援ANSI逃脫碼,想在Windows的console換色,本篇並不適合。
  •  ANSI逃脫碼介紹

 要在終端機(Console / Terminal )上印出顏色,其實是透過在console上印出一種叫做ANSI逃脫碼(ASCII Escape Code)來改變接下來輸出的文字結果。接下來我們實際抓一個例子來看逃脫碼怎麼用吧!


圖一、CSI標準格式

上圖就是CSI標準的格式,n1, n2是所謂的SGR (Select Graphic Rendition) parameters,這些數值只要上維基百科查詢一下其功能,將相對應的值填入就可以囉!而最後方的 m,查詢一下表格就可以發現,它是將前面設定的SGR設定輸出的意思。


注意:通常n1是填入 \x1b,為什麼呢?因為在ASCII TABLE內0x1B代表的就是escape,也就是所謂的逃脫字元!

圖二、ASCII TABLE - 0x1B

2015年8月4日 星期二

[Linux C] C語言MD5雜湊運算教學

本篇稍為記錄一下如何使用openssl的library快速的做MD5雜湊運算。

--

首先,要在C語言計算MD5,有一些公開的library可以幫助我們快速計算一些雜湊運算,當然MD5也是被包含在內的。

這邊介紹使用OpenSSL,基本上這個package在各版本的linux上的package list內都找的到。

筆者本次是使用Ubuntu 15.04版本,所以像我就是使用 sudo apt-get install openssl 快速透過package manager安裝。

基本上使用方法很簡單,步驟就是

[Linux C] C語言檢查檔案是否存在


在C上是有函式可以檢查該process是否有足夠權限存取某個檔案的。

該函式叫做access(const char *pathname, int mode)

來檢單看一下man page上關於access函式的介紹吧!


--

2015年7月10日 星期五

[Linux C] C語言上Modbus RTU CRC16計算教學與實作


一、Modbus CRC-16

Modbus CRC-16是屬於邏輯運算的一種,假設現在有一個串資料是0x01, 0x25,想要運算,其算法如下:


  • 步驟一:先將一個16bit(在C中可以使用unsigned short)暫存器設為0xFFFF,這邊先命名該暫存器為crc。
  • 步驟二:將crc與資料的1個byte做XOR運算,這邊的舉例第一次就是與0x01做XOR,第二次就是0x25
  • 步驟三:接下來,將crc向右位移1個bit,並且最高有效位元(MSB)填0。
  • 步驟四:在位移前的crc,若其最低有效位元(LSB)是1,則將位移後的CRC對0xA001做運算。
  • 接下來繼續重複步驟3~4,直到做滿8次
  • 步驟五:接下來將Data的下一個byte拿來做步驟二到四,直到全部資料皆運算完為止。

我們來看個圖例吧!下圖是將1個byte的資料:0x01拿來運算的過程。

[Linux C] libwebsocket 隨手筆記


此篇稍為記錄一下在C上面時做websocket時遇到的問題...


---

(a)  callback function

return 0;

之前不小心return ;造成websocket的connection都無法建立


---

(b)libwebsocket_write

想要將資料寫出去必須使用libwebsocket_write的函式回傳

下面來個簡單的範例!

char *text = "Hello World!";
   int len = strlen (text) + 1;
   unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING);
   /* copy string including terminating NUL */
   memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, text, len );
   libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, len, LWS_WRITE_TEXT);
   free(buf);




2015年7月9日 星期四

[Linux] libudev抓取裝置描述


本篇是打算記錄一下使用libudev抓取device某些描述的方法。

例如:VID/PID本身是兩串數字,但是在/usr/share/misc/usb.ids這個文件裡面是有對應的字串的。

題外話..VID跟PID可以再http://www.linux-usb.org/usb.ids找到其對應

所以有需要的時候可以從上述網址更新一下你的usb.ids

--

我們來看一下簡單的範例,透過linux指令lsusb -v可以看到很多裝置的資訊。

2015年7月7日 星期二

[Linux C] C語言程式中,在BSON裡加入JSON


JSON是JavaScript Object Notation的縮寫,而BSON內的成員也是跟JSON類似,不過是擺二進位(Binary)



而BSON是 MongoDB使用的格式,怎麼使用JSON跟BSON這就不贅述了!

想必再搜尋這樣功能時的讀者應該都已經清楚兩者格式

----

測試環境

作業系統:Ubuntu - 15.04 x64
Library: libjson-c & libmongoc

2015年6月29日 星期一

[Raspberry Pi] 在Raspberry Pi 上安裝 MongoDB


MongoDB是最近一個很夯的NoSQL資料庫系統,而其內部儲存資料是使用BSON。

BSON跟JSON是完全相同的格式,只是所有的Name&Value是以二進位為儲存。

MongoDB的介紹就等有空一點再打了…

----

2015年6月26日 星期五

[Linux]在Raspberry Pi上安裝Node.js


本篇要記錄的是在Raspberry pi如何安裝node.js的runtime

其實非常非常簡單的唷!

首先,將apt.adafruit.com將入/etc/apt/sources.list裡面。可以簡單使用下列指令
curl -sLS https://apt.adafruit.com/add | sudo bash

接著,使用apt-get指令即可:
 sudo apt-get install node 

安裝完成後輸入「node -v」應該就可以看到node.js回饋的版本
pi@raspberrypi ~$ node -v
v0.12.0



2015年6月22日 星期一

[仙境傳說]在ubuntu上運行OpenkoreTW教學

注意:Openkore就是RO的外掛,不喜歡外掛者就不用花費精力往下讀囉。 

 ----本文開始---- 


 因為好奇,所以想在Ubuntu的作業系統上執行看看openkore,成功之後想說紀錄一下。

我執行的環境是:
  (1)作業系統: Ubuntu 15.04 - 64位元
  (2)虛擬機器: Vmware player

2015年5月11日 星期一

[Linux] 編譯Openwrt for Beaglebone Black Rev B.

首先,我們先查詢openwrt的wiki發現下圖:
可以發現我們要選用Trunk版本的Openwrt而不是barrier breaker版本。
接下來編譯好menuconfig且make之後,將產生的rootfs丟進SD卡裡面,並插入Beaglebone上並開機。
透過COM port可以發現下圖情況:

2015年4月14日 星期二

[Linux] 安裝Udev-173 for libudev.so.0.12

2015/04/14

因為有在openwrt上使用libudev的需要,而libudev.so.1版被包在systemd裡面,若要燒入systemd又需要燒錄eglibc,使得kernel容量過大。Openwrt上內建的udev與libudev版本是udev173與libudev.so.0.12,目前使用的方法就是將開發環境的版本也將udev與libudev降版測試。

-------------------------------------------------------------------------------------------------------------------------