Social Icons

twitterfacebookgoogle plusrss feedemail

11/15/2013

[verilog][c] CRC 循環冗餘校驗 實踐

沒有留言:
最近幾位學弟妹在問verilog的作業(QAM 16、QAM256以及CRC),順便也學習寫了一下

CRC的概述我這邊就不說明了,請參考WiKi 或者是這篇文章,在這邊只介紹程式碼。
(不過稍微注意一下維基百科裡面原理是對的,但下面舉的例子有點問題)


CRC 16 的 Verilog 程式碼(P(x) = x16+ x12+ x5+ x0)

module CRC_Unit(BITVAL, BITSTRB, CLEAR, CRC);
   input        BITVAL;                            // Next input bit
   input        BITSTRB;                           // Current bit valid (Clock)
   input        CLEAR;                             // Init CRC value
   output [15:0] CRC;                               // Current output CRC value

   reg    [15:0] CRC;                               // We need output registers
   wire         inv;
   
   assign inv = BITVAL ^ CRC[15];                   // XOR required?
   
   always @(posedge BITSTRB or posedge CLEAR) begin
      if (CLEAR) begin
         CRC = 0;                                  // Init before calculation
         end
      else begin
         CRC[15] = CRC[14];
         CRC[14] = CRC[13];
         CRC[13] = CRC[12];
         CRC[12] = CRC[11] ^ inv;
         CRC[11] = CRC[10];
         CRC[10] = CRC[9];
         CRC[9] = CRC[8];
         CRC[8] = CRC[7];
         CRC[7] = CRC[6];
         CRC[6] = CRC[5];
         CRC[5] = CRC[4] ^ inv;
         CRC[4] = CRC[3];
         CRC[3] = CRC[2];
         CRC[2] = CRC[1];
         CRC[1] = CRC[0];
         CRC[0] = inv;
         end
      end
   
endmodule


11/14/2013

特殊質數數列

沒有留言:
最近很喜歡數列,剛剛在看質數時發現幾個有趣的質數數列,在這邊分享給大家

數列1
33333331這個質數,是可以由左至右依序拿掉一位數,仍然是質數
33333331
3333331
333331
33331
3331
331
31
可惜的333333331(17×19607843) 並不是質數。

數列2
73939133這個質數是可以由右至左依序拿掉一位數,仍然是質數

73939133
7393913
739391
73939
7393
739
73
7

11/10/2013

Galaxy android 開發人員選項開啟

沒有留言:
最近我妹拿了一隻Samsung Galaxy系列的手機,想說要裝點東西在上面,結果找不到開發人員選項 的問題..在這邊提供解決方法。

貌似android 4.X 板之後,不管是哪間廠商的手機開發人員選項都被隱藏了

1.首先 先至"設定" > "更多" >> "關於設備"

6/11/2013

eclipse使用SWT/Swing Designer 作JAVA視窗程式開發

沒有留言:

eclipse 在開發JAVA swing 或者是AWT程式時,應該很多人都會遇到元件擺放的問題,這時候我們可以安裝SWTDesigner/Swing  Designer 來設計更漂亮的介面

安裝方式:
Help→Install New Software,work with:依照你的版本輸入下面的連結

Eclipse 3.7 (Indigo)
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.7

Eclipse 3.6 (Helios)
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.6

Eclipse 3.5 (Galileo)
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.5
連結來源:https://developers.google.com/java-dev-tools/download-wbpro?hl=zh-CN

6/09/2013

Matlab 驗證碼辨識系統

1 則留言:

網路上經常下載東西或者要登入帳號密碼時都會出現一組文字的驗證碼要求使用者輸入完畢後才可以登入下載,這時候我們可以嘗試著使用電腦幫我們做影像辨識,然後自動輸入這組文字,以下是程式碼暫時就不解是原理了。

當然以下這個程式只能辨識簡易的辨識系統或者辨識整篇文章...太複雜的圖片可能就沒辦法了



用MATLAB做Arduino的GUI界面

沒有留言:
Arduino與matlab結合,看來Arduino真的很強大




6/03/2013

解決匯入圖片至android模擬器中找不到的問題

沒有留言:

以前匯入圖片製Android模擬器中都可以正常顯示,最近在寫android的程式卻遇到把圖片上傳至模擬器中卻不能顯示(如影片前半段)

模擬器上傳圖片的方式可以如同影片中的操作,但建議可以練習一下打指令~下面稍為介紹一下怎麼使用指令上傳,然後再說明要怎麼解決無法查看圖片的這個問題。

上傳圖片

$ adb shell mount -o remount rw /sdcard


$ adb push images/ /sdcard/
push: images/1.png -> /mnt/sdcard/1.png

6/02/2013

[OpenCV] 人臉偵測 (Face Detection)

沒有留言:
點圖可放大

Paul Viola等人利用了三個演算法,來快速找到人臉。第一個是Integral Image,第二個是 AdaBoost,第三個是Cascade classifier。
Cascade Detection

詳細步驟可以參考"Robust Real-Time Face Detection" 這篇paper,或者可以看下面我整理的幾份文章
1.robust-real-time-face-detection 介紹
載點
2.robust-real-time-face-detection 投影片
載點

[OpenCV]在DEVC++中安裝openCV

沒有留言:



(1)下載 OpenCV
   原版:
   載點1   載點2 
   程式碼修正版 
   載點1 
(2)
如果您是下載原版 安裝OpenCV2.0在C:\OpenCV2.0
如果您是下載修正版 解壓縮在C:\OpenCV2.0
(3)在DEV 工具/編譯器選項/編譯器/編譯器設定組態
新增編譯器設定(綠色加號按鈕)並命名為"OpenCV2.0″



解決Win7 framework4.0 失敗錯誤 0xc8000222

沒有留言:



解決辦法


方法/步驟
1.用工作管理員執行cmd( 命令提示字元)


2.輸入 net stop WuAuServ

5/30/2013

C語言製作音樂 -小蜜蜂

沒有留言:

其實寫程式並沒有那麼的無趣~
大家可以用C語言寫些歌曲出來XD

以下程式碼如果不能執行,應該是編碼問題~ 可以直接下載.C檔
載點一
載點二

5/27/2013

JAVA 網路程式-基本的Client & Server 檔案傳送

沒有留言:
因為有人來問我JAVA版的網路程式要怎麼寫,所以這邊就稍微解釋一下簡單的JAVA檔案傳送!
程式可以用來傳送文字檔、影片檔...等檔案,但是在網路不穩定時會出問題唷~
因為這只是簡單的範例程式,想要更進一步請參考檔案傳送與效能分析
server

client

5/21/2013

ISOLinux 如何製作開機光碟

沒有留言:
前面已經講過如何製作USBlinux

相關連結
[USB linux] 1.打造2MB 的 linux USB 隨身碟
[USB linux] 2.核心編譯
[USB linux] 3.建立ramdisk的root filesystem (initrd)
[USB linux] 4.建置busybox
[USB linux] 5.最後步驟建置boot loader

至於要如何把自己做的kernel做成開機光碟或者iso檔給別人下載呢?
ISOLinux中告訴我們要這麼做
  • Make sure you have a recent enough version of mkisofs. I recommend mkisofs 1.13 (distributed with cdrecord 1.9), but 1.12 might work as well (not tested). Binary versions for Windows can be found on the web.
  • Download Syslinux
  • Create a directory called "CD_root". This is the ISO image master file tree
    • Copy all files you want to have on the CD into this directory
  • Create a directory called "isolinux" underneath the directory "CD_root"
  • Create directories "images" and "kernel" underneath the directory "CD_root"
    • Copy any floppy images you want to boot into "images"
    • Copy "memdisk/memdisk" from the Syslinux archive into "kernel"
  • Use the following command to create your ISO image:
mkisofs -o output.iso \
   -b isolinux/isolinux.bin -c isolinux/boot.cat \
   -no-emul-boot -boot-load-size 4 -boot-info-table \
   CD_root
The file boot.cat will be automatically created.

[USB linux] 5.最後步驟建置boot loader

沒有留言:
boot loader的責任是接手BIOS的開機任務,負責找出kernel image的所在位置,
載入kernel到記憶體中,傳給kernel image適當的參數,接著將執行權交給kernel,完成開機

我們要先為隨身碟寫入boot loader,我們使用syslinux
syslinux是一個Linux的boot loader,專為fat檔案系統設計的,
一般的隨身碟通常為fat32,軟碟也適用
 syslinux /dev/sdc1
sdc1請更改為你的裝置名稱

如果你不確定你的隨身碟在哪一個裝置,可以用df指令看掛載點

再來要編輯boot loader的設定檔
vi syslinux.cfg
內容如下:
default linux
prompt 1
timeout 10
label linux
kernel bzImage
append initrd=initrd.img vga=792
內容主要指定kernel映像檔、ramdisk、螢幕的參數等

[USB linux] 4.建置busybox

沒有留言:


Linux下常見的指令,都是由「程式」所組成,但是這些程式如果全部放進來,也會佔掉不少空間,因此有了busybox
busybox包含了數十種Linux下常見的標準工具,例如ls, cp, cat, more....
甚至包含了http server,但是全部加起來都只有幾百k的大小,是作為嵌入式系統工具庫更好的選擇。

下面就來介紹該怎麼組態、編譯、安裝busybox

回到我們的工作目錄,並解開busybox

 cd ~/build-usb-linux
 tar -jxf busybox-1.13.2.tar.bz2
 cd busybox-1.13.2
先進行組態設定
 make menuconfig

先設定安裝目錄,將installation prefix設為剛剛所建立的ramdisk掛載點
這邊不能使用"~"來作為家目錄,所以你必須填上完整的路徑。
  Busybox Settings  --->
    Installation Options  --->
      (/home/koukai/build-usb-linux/initrd
) BusyBox installation prefix
設定交叉編譯器的選項如下的cross compiler prefix,但因為我們要跑在自己電腦上,所以可以忽略交叉編譯器的設定無所謂,
  Busybox Settings  --->
    Build Options  --->
      [*] Build BusyBox as a static binary (no shared libs)
      ()  Cross Compiler prefix
例如你所用的是arm-linux-gcc,就要將prefix設為arm-linux-

然後要選取將busybox編為靜態連結!!!!

[USB linux] 3.建立ramdisk的root filesystem (initrd)

沒有留言:
接下來,要建立Linux的root filesystem,也就是打造整個Linux下面的檔案系統環境
為什麼要放在ramdisk呢?一來速度快,二來ramdisk映像檔經過壓縮可以變得更小。
缺點是檔案系統要更新的話很麻煩,要重新掛載映像檔、修改、卸載、壓縮。
不過嵌入式系統的變更頻率不高,這樣做還是ok的。
這個ramdisk叫做是initrd,initial ramdisk。

首先,建立一個zero-filled的檔案,全設為0可以讓壓縮未用的空間更有效率。
我們從/dev/zero處複製一共8192個block到ramdisk這個檔案中,每個block大小為1k,因此這個檔案為8MB
 cd ~/build-usb-linux
 dd if=/dev/zero of=ramdisk bs=1k count=8192


接著,將他格式化成ext2的格式。
 mkfs.ext2 -v -F -m0 ramdisk

我們將他掛載起來,就像掛載虛擬光碟一樣。
 mkdir initrd
 sudo mount -o loop ramdisk initrd/

[USB linux] 2.核心編譯

沒有留言:
核心是Linux最重要的部份,也是最久的部分

直接來吧!
回到我們的工作目錄,並解開核心原始檔 cd ~/build-usb-linux
 tar -jxf linux-2.6.26.8.tar.bz2

 cd 
linux-2.6.26.8
再來,進行組態設定
 make menuconfig
選單的操作方式,與怎麼選擇kernel的內部鳥哥的Linux私房菜 核心編譯 

這邊暫時全部都使用默認選項,打開
menuconfig直接 存檔離開即可,接著便可以開始編譯了
 make
大概會跑個好幾十分鐘,如果你用虛擬機器的話,可能會更久Orz
最後在kernel資料夾/arch/$(ARCH)/boot/目錄會產生bzImage,將他複製到隨身碟
$(ARCH)請自行代換成你的cpu架構,可能是ARM、i386(較舊的核心)、x86、x86-64!



檔案傳送與效能分析(4)-程式下載

沒有留言:
雖然還沒開始看程式碼,但這邊我還是要先稍微說明一下我程式上的幾個問題點。
(寫在後面就沒人想看了(=...=)

1.由於在寫這份作業時得到重感冒...程式碼的部分寫得非常不好...,這邊很抱歉之後有空我會再改改。
2.不該使用nonblock因為會使效能變差
3.應該要設定SO_SENDTO,在這邊要注意一下select並不能完全的取代掉SO_SENDTO!問題點在於write的buffsize大小會出問題(傳送者大,接收者小時,有機會發生問題)
4.盡量少使用fwrite,盡量使用system calls 也就是write。
5.改使用UDP在傳送時,記得每個封包前面要加上Sequence number,以及最後要判斷data是否遭到串改(類似checksum)。
6.在嵌入式系統的設備上盡量使用udp,因為嵌入式系統的晶片如果用來處理tcp的話,在某些方面來說處理可能太過於複雜。
....等

檔案傳送與效能分析(2)-基本的檔案傳送

沒有留言:
因為有太多人不知道怎麼寫檔案傳送..(汗)
在這邊弄一個簡單的範例給各位,不過請別忘了將以下程式修改達到以下目的
------------------------------------------------

1. 將作業一改成用 select, 不需使用http, 只需傳一個大檔, 譬如 1G 的 zip 檔
2. 設計 client, 不需顯示UI, 只需存檔, 只需用 zip 驗證正確性
3. 請不要用 sendfile 來處理, 這是練習
4. 當1個client 連線, 仍夠正確傳完, 分析您的處理過程
5. 當1個client 連線,  但是您的網路頻寬有限, 仍夠正確傳完.
6. 當多個(2個以上)client 連線, 仍夠正確傳完
7. 當接收端 (client), 程式異常終止, 製造SIGPIPE, 參考 man 7 siganl, 與範例
8. 處理 SIGPIPE
9. Server 與  Client 網路速度不匹配, 或bandwidth 不夠, 發生 send 這 system call, block 現象
10. 同時使用 Wireshark 分析TCP 現象
11. 不穩定網路續傳, 這需處理續傳問題, 如同http partial get 的問題
12. 連續傳送過程中, 設計 recv 或 read 回傳值 與期望大小不同的現象
13. 使用pthread 處理多工傳送
14. man 7 socket , SO_SNDTIMEO, 處理  send blocking 問題
15. 不要太相信 SO_LINGER 是好方法

16. pthread如果傳入參數時,會有什麼bug!
17. thread 中的結果如何用一般 stdout/stdin 或透過 unix domain socket  取代 (請參考http/cgi 程式), 這是下份作業


------------------------------------------------
以下附上"簡單"的檔案傳送接收範例,這只是參考的範例架構並不是本次實驗的目的...!!如果你拿這份來交作業...那我真不知道要說什麼了...
請不要直接複製下面程式碼,因為裡面會包含亂碼唷~ 請盡量自己打

common.h
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <string.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
  
#define PORT 6000  
#define LISTENQ 20  
#define BUFFSIZE 4096  
#define FILE_NAME_MAX_SIZE 512 

檔案傳送與效能分析(3)-斷線分析

沒有留言:
延續上一篇文章檔案傳送與效能分析(1)-實驗過程與結果
這篇要開始講解當程式發生問題時封包的狀態為何?以及一些斷線分析的範例程式碼。

斷線 RST封包問題

當伺服器 close一個連接時,若client端接著發數據。根據TCP協定的規定,會收到一個RST響應,client再往這個服務器發送數據時,系統會發出一個SIGPIPE信號給進程,告訴進程這個連接已經斷開了,不要再寫了。
    根據信號的默認處理規則SIGPIPE信號的默認執行動作是terminate(終止、退出),所以client會退出。若不想客戶端退出可以把SIGPIPE設為SIG_IGN

    如:    signal(SIGPIPE,SIG_IGN);//    這時SIGPIPE交給了系統處理。


 註:服務器採用了fork的話,要收集垃圾進程,防止僵屍進程的產生,可以這樣處理:  signal(SIGCHLD,SIG_IGN); //交給系統init去回收。
    這裡子進程就不會產生僵屍程序了。
這邊拿unpv13e 裡面的範例來修改當例子

解決XP 無法安裝 android deiver

沒有留言:
今天發現到原來某些 adnroid 設備在XP環境中沒辦法順利的安裝USB驅動,於是找了一些解決辦法,在這邊做一下紀錄~!

1.首先先至裝置管理員中選擇androdi裝置>右鍵內容

5/15/2013

資料結構 Tree 建置 與 印出

沒有留言:
有很多人不知道怎麼用C建立一顆簡單的樹...這邊PO上一個小範例
請注意這很久之前做的,程式上我有稍微修改~很多地方會有BUG (疑,主要是為了不讓同學直接抄答案...)

請將下面的程式碼做修改,達到以下目的
0.找出BUG
1.做交集聯集。
2.將樹改成 Complete. Binary Tree 完整(完美)二元樹
3.增加刪除節點

點圖可放大

5/14/2013

檔案傳送與效能分析(1)-實驗過程與結果

沒有留言:



建議切換全螢幕高畫質欣賞~!

本程式在實際網路可以正常執行,為了錄影方便所以才在同一台機器上做測試

看影片可能覺得很簡單...,平常的檔案傳輸都是在穩定的網路下做傳輸,而本程式在不穩定的網路下可以做到大檔傳送、斷線續傳、多工、timeout、pipe、reconnect...等功能...,雖然只是單純的傳送檔案...但寫起來要考慮的東西還真不少....。
影片內容忘記錄多工的部分.... ( 0 . 0)

實驗結果如下,之後有空再對步驟以及程式碼做解釋
(以下圖片點及都可以放大)
62byteTXT文字檔
49.9kb小圖檔(jpg)
1.1Mb大圖檔(jpg)
1014.5Mb壓縮檔(zip)

實驗測試網路環境:
1.都在同一台機器中
2.兩台有線網路
3.一台有線網路 一台無線網路 (此為影片拍測的環境)
4.兩台無線網路



傳輸時百分比進度


傳送文字檔封包分析


C語言 如何知道檔案大小

沒有留言:

1.利用fseek(或lseek)
FILE* f = fopen(fileName, "r+");
fseek(f, 0, SEEK_END);
size = ftell(f);
fseek(f, 0, SEEK_SET);


2.用stat函式
struct stat st;
stat(fileName, &st);
size = st.st_size;


其中stat結構如下

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

5/05/2013

解決 linux 沒有 itoa 問題解法

沒有留言:

因為在ANSI-C 與一些compiler中並沒有支援
所以在linux裡沒有itoa(int , char[] ,int) 這個函數
不過可用sprintf(str , "%d" ,i) 代替

itoa( 456 , str , 10)
sprintf(str, "%d" ,456)

4/28/2013

arduino 藍芽小車 +GPS

沒有留言:
暨這篇文章之後FCUCE 無線通訊避障小車,學弟把之前做的GPS給加上小車當中,這麼一來小車跑到哪邊都會回傳GPS位址回來,這麼一來就可以將小車在地圖上作定位了。




[繪圖] 國高中繪畫作品

沒有留言:
好久沒畫圖了~ 在這邊放上一些以前的作品好了

4/17/2013

[Beagleboard] 6.啟動linux

沒有留言:

  1、配置Putty串口終端  
    在加電啟動bb前,將bb的串口連接到PC上。在設備管理器中找到新的串口設備,確定其工作的端口,比如COM1。
    下載putty 或者 pietty 程序,並且啟動。​
    如下配置:
完成後,點擊Open按鈕,打開。

4/15/2013

Ubuntu 安裝 VMware Tools

沒有留言:

在windows中有內建支援VMware tools 的功能,可使在虛擬機器與原本主機中互相傳遞檔案複製文字~ 而 Ubuntu也有 內建 VMware 支援,但未提供此功能,所以還是要灌 VMware Tools。

VMware Workstation 裡面的 Ubuntu 開機進入桌面

VMware Workstation 主選單 -> VM -> Install VMware Tools...

等待幾秒,Ubuntu 裡出現 VMware Tools,裡面有一個壓縮檔跟文字檔~

開啟終端機輸入:
tar xzf /media/VMware\ Tools/VMwareTools-8.4.6-385536.tar.gz


4/14/2013

[USB linux] 1.打造2MB 的 linux USB 隨身碟

沒有留言:

這篇主要講解如何將從usb隨身碟開機,並進入到Linux中! 打造一個可以帶著跑的作業系統。
在這邊並不是使用UNetbootin或者是一些已經寫好的工具來幫我們製作linux USB,而是從核心編譯、root filesystem、Linux utilities全都手工打造。

本開發環境為 ubuntu 10.04.04,其它版本應該只有套件庫不一樣,不用擔心~稍微做點變更即可~

USB linux開機原理流程圖大致如下,一些原理與資訊大概可以參考這篇文章 (備份連結)

先建立我們的工作目錄,避免跟其它目錄混在一塊~
 mkdir ~/build-usb-linux
 cd ~/build-usb-linux

  a. toolchain
因為我們要安裝在x86主機上,所以其實很簡單,
build-essential是編譯軟體所需要的一些套件,libncurses是進行make menuconfig會用到的函式庫
 sudo apt-get install libncurses5-dev build-essential
RPM系的Linux可以用
 yum groupinstall "Development Tools"

影像處理 -透明遮罩

沒有留言:
在前面幾篇文章中已經介紹了許多影像處理的方法,今天稍微介紹一下怎麼加一個透明遮罩在影像上面。

其實稍微想一下應該就可以知道~,只要在矩陣的某一個區塊,把那個區域的值加上一個數值,就可以得到這個效果。

影像處理 -圖片濾光

沒有留言:

影像主要由RGB所構成,如果要將一張彩色圖片過濾成只有單一顏色,只要將其它兩者設成0即可!

影像處理 -均值濾波器 (mean Filter)

沒有留言:

在影像上如果有一些圖片銳度如果太高(上圖),我們可以使用均值濾波器來做一些平滑的處理,讓某些圖片看起來比較自然一點(下圖)
點圖可放大
所謂的均值,也就是平均值的意思,意思就是先找一個點為中心,把3*3的範圍加總起來做平均寫入覆蓋原本的值。

影像處理 -中值濾波器 (Median Filter)

沒有留言:
點圖可放大
圖片上經常會看到有一點一點雜訊這種雜訊稱之為胡椒鹽雜訊(Salt and pepper noise),這種雜訊我們可以利用中值濾波器將它給濾除,讓圖片比較接近原始的狀態。
什麼是中值濾波器呢?
假設圖檔裡面有一組矩陣內容如下,我們以97為中心點找出3*3的範圍所有的數字,然後將這組數字依照大小經過排列得到0,2,3,3,4,6,10,15,97,接下然我們選擇中間那個數字4 取代原本的97做輸出,這樣的做法則稱為中值濾波器。


4/13/2013

[Beagleboard] 5.建立啟動用的TF卡

沒有留言:

Beagleboard 可以通過多種方式啟動Linux系統,如通過Nandflash、TF卡或者通過NFS網絡啟動。本人選擇採用TF卡啟動的方式。因此,需要準備一張空白TF卡,在其之上建立雙分區:一個FAT32分區和一個EXT3(或EXT4)分區。FAT32分區用於存放bootloader、Image文件和一些boot參數相關的文件。EXT3分區用於存放Linux的Root filesystem。

具體步驟如下:
    1、TF卡分區
        將TF通過讀卡器連接到Linux開發環境上,找到掛載的設備,如本人系統上掛載為/dev/sdb。按照http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat 教程完成分區。
        完成分區後,重新掛載TF卡。在/media下可以看到FAT32和EXT3兩個分區目錄。

[Beagleboard] 4.建立Linux rootfs

沒有留言:

rootfs的是系統非常重要的一部分。
Linux kernel 啟動後,必須掛載rootfs,然後從rootfs中加載其它所需的內核模塊,啟動各種系統服務。rootfs有問題的話,啟動過程會出現各種詭異的錯誤。
這邊使用ARM Fedora 12的rootfs上成功完成了整個啟動過程。

下面是基於該rootfs的建立過程:
    1、下載ARM Fedora 12 rootfs
        下載地址:http://ftp.arm.linux.org.uk/pub/armlinux/fedora/rootfs/rootfs-f12.tar.bz2
        下載其中的rootfs-f12.tar.bz2壓縮包
          bzip2 -d rootfs-f12.tar.bz2          tar xvf rootfs-f12.tar 
         解壓至rootfs-f12目錄下


[Beagleboard] 3.創建Linux kernel uImage

沒有留言:

Linux發行版已融入對OMAP處理器和bb的支持,因此,可以直接下載最新的Linux發行版內核源碼,自己編譯生成內核鏡像。

具體步驟:
(1)從www.kernel.org下載Linux kernel
    這邊我是下載2.6.39版內核源碼至omap_linux目錄下
    wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
    下載完後解壓縮至omap_linux資料夾中

(2)編譯生成uImage文件
    1、修改Makefile文件中以下兩行
        ARCH            ?= arm
        CROSS_COMPILE   ?= arm-linux-

[Beagleboard] 2.創建bootloader 和 boot.scr

沒有留言:

TI OMAP系列處理器上的bootloader通常是指x-loader(MLO)和u-boot(u-boot.bin),兩者用於Linux內核啟動前的配置、部分硬件系統配置以及解壓縮並加載內核Image文件並引導內核啟動。

u-boot在執行過程中會讀取boot.scr文件中的內核啟動參數,傳給即將引導啟動的Linux內核。
具體步驟:
(1)bootloader下載和編譯
    1、執行git clone git://git.denx.de/u-boot.git target_directory
         從DENX官方下載最新的u-boot至target_directory目錄。

    2、編譯u-boot,生成MLO文件u-boot.bin文件

        打開Makefile文件,修改CROSS_COMPILE ?= arm-linux-
        依順序執行
            make mrproper   //清除以往的配置信息
            make omap3_beagle_config  //針對bb進行編譯配置
            make //編譯生成MLO和u-boot.bin文件
        完成後,在目錄下生成MLO文件和u-boot.bin文件



4/11/2013

[Beagleboard] 1. 建立ARM嵌入式開發環境(Cross compiler)

沒有留言:

利用ARM Cross compiler交叉編譯環境,可以讓我們在x86系統上,編譯ARM處理器上可執行的程式碼。這邊主要用於編譯Beagleboard上的bootloader、kernel image,以及其它ARM可執行程序。

具體步驟如下:


(1)在VMware上創建一個虛擬機,安裝發行版的ubunt​u系統,用於建立ARM嵌入式開發環境。

(2)安裝arm-linux-gcc,建立ARM交叉編譯環境(需要root權限)
    1、下載arm-linux-gcc-4.3.x.tgz壓縮包(請自己挑一個版本)
          ARM-Linux GCC 4.4.3  載點1
          ARM-Linux GCC 4.3.2  MEGA  載點1 載點2 載點3
          (這邊我使用4.3.2)

    2、將壓縮檔自動解壓至/user/local/arm/目錄下。讓ARM交叉編譯器的所有可執行程序都在 /usr/local/arm/4.3.2/bin/ 目錄下
          tar -xzvf arm-linux-gcc-4.3.2.tgz -C /
         -C  某目錄 為解壓縮至某目錄下,詳細請看鳥哥

    3、配置root用戶環境變量,修改/etc/bash.bashrc文件
 #vim ~/.bashrc
          在最後加上,加完之後存檔關閉
PATH=$PATH:/new_path:/another_new_path
export PATH
         更新
#source ~/.bashrc

[matlab] 如何將 MATLAB 轉成(exe)給予他人使用?

沒有留言:

利用MATLAB Compiler將MATLAB函式轉成執行檔(*.exe),並置於沒有MATLAB
的環境下使用。

4/10/2013

ubuntu 安裝rpm檔案

沒有留言:
如果在 Ubuntu 想要安裝的軟件只提供 RPM 檔案,而沒有提供 debian 的 .deb 檔案,可以使用 Alien Package Converter 來解決。

Alien 是一個將 rpm, dpkg, ....檔案格式間轉換的工具,而在 Ubuntu 上安裝 Alien 也只需用 apt-get 即可安裝,相當方便,以下是具體實現方法:

$sudo apt-get install alien

輸入以上指令後,需要輸入密碼,然後按 “Y” 確認即可。安裝完成後,就可以用以下指令將 rpm 檔案轉換:

$sudo alien -k xxx.rpm
接下來就可以安裝
$sudo dpkg -i xxx.deb
又或者可以直接使用
$alien -i  xxx.rpm(會轉完後自行安裝,並移除.deb檔)

4/02/2013

Netlink 介紹

沒有留言:

Netlink使用標準的socket介面來作為kernel與使用者介面的溝通,其address family填PF_NETLINK,而socket type為SOCK_RAW、SOCK_DGRAM,protocol則根據不同的netlink group不同而有所不同(詳細資訊可以man 7 netlink)。

socket = socket(AF_NETLINK, SOCK_RAW, netlink_family);

Netlink Socket Address Structure
Netlink也需要socket address,其socket address為:
struct sockaddr_nl {

    sa_family_t     nl_family;  /* AF_NETLINK */

    unsigned short  nl_pad;     /* Zero. */

    pid_t           nl_pid;     /* Process ID. */

    __u32           nl_groups;  /* Multicast groups mask. */

};


如果傳送的對象是kernel或者以multicast傳送,則nl_pid設為0。
如果是kernel傳送給user-space上面的application時(multicast),就會填入正確的pid,然而nl_pid實際的意義並不是指PID,而只是用於識別一個netlink socket而已,對於application在建立一個netlink socket時,可以將nl_pid設為0,然後bind(),kernel會自動將PID填入。而nl_groups是用multicast,採用bit mask方式,所以每個netlink family有32個multicast group。

4/01/2013

Arp Spoofing 欺騙攻擊-實作

沒有留言:
上一篇文章講到怎麼查看ARP封包的資訊,現在這邊開始要講一些ARP封包的應用,在開始之前必須聲明一下 本實驗僅供學術實驗用途...請勿拿來打你鄰居阿...

一、步驟:

攻擊者: IP:192.168.136.131 MAC: {0x00, 0x0c, 0x29, 0xab, 0x9a, 0xd7}
被攻擊者:IP: 192.168.136.132 MAC: {0x00, 0x0c, 0x29, 0xd1, 0xab, 0x11}
gateway: IP:192.168.136.2 MAC:{0x00,0x50,0x56,0xf0,0xdd,0x74}

攻擊者發送arp封包給被攻擊者,告知被攻擊者 錯誤的gateway MAC address

二、實驗操作影片


建議切換至HD畫質欣賞

3/31/2013

抓取網路ARP封包

沒有留言:
點圖可放大
前面幾篇文章談到過Sock_RAW用法ARP介紹以及攻擊防禦方法,在這邊我們要先學習如何抓取封包資訊,這樣我們才能夠去更改封包欄位資訊~!
以下系列文章只用於學術學習,請不要拿來攻擊別人電腦

完整程式碼會在教完作業後發佈上來,這邊稍為介紹一下怎麼抓ARP封包
記得使用root權限執行!
一、步驟:
1.假設自己IP為192.168.1.131
2.假設arp請求發起方的IP為192.168.1.254
3.在自己電腦中開啟程式
4.觀察程式的輸出

linux sock raw

沒有留言:

sock_raw可以接收到本機網卡上的數據幀或者數據包,對與監聽網絡的流量和分析是很有作用的.一共可以有3種方式創建這種 socket
1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)
發送接收ip數據包
2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
發送接收以太網數據幀
3.socket(AF_INET, SOCK_PACKET, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
過時了,不要用啊

PF_PACKET 與 AF_INET 兩個值是相同的,一個主要用在協定,另一個主要用在位址,不過現在比較少人使用AF_INET了

理解一下SOCK_RAW的原理, 比如網卡收到了一個 14+20+8+100+4 的udp的以太網數據幀.
首先,網卡對該數據幀進行硬過濾(根據網卡的模式不同會有不同的動作,如果設置了promisc混雜模式的話,則不做任何過濾直接交給下一層輸 入例程,否則非本機mac或者廣播mac會被直接丟棄).
按照上面的例子,如果成功的話,會進入ip輸入例程.但是在進入ip輸入例程之前,系統會檢查系 統中是否有通過socket(PF_PACKET, SOCK_RAW, ..)創建的套接字.如果有的話並且協議相符,在這個例子中就是需要ETH_P_IP或者ETH_P_ALL類型.系統就給每個這樣的socket接收緩 沖區發送一個數據幀拷貝.然後進入下一步.

國際大師人文講座 邁克 桑德爾 -錢買不到的東西

沒有留言:

ARP spoofing (ARP 欺騙攻擊)-原理

沒有留言:
ARP spoofing(ARP 欺騙攻擊,是針對IPv4的一種攻擊技術。此種攻擊可讓攻擊者取得區域網路上的"資料封包"甚至可"篡改"封包,且可讓網路上特定電腦或所有電腦無法正常連線。


簡單案例分析:
這裡用一個最簡單的案例來說明ARP欺騙的核心步驟。
假設在一個局網裡,只有三台主機A, B, C 而  C是攻擊者。

1.攻擊者聆聽局網上的MAC位址。它只要收到兩台主機洪泛的ARP Request,就可以進行欺騙活動。
2.主機A,B都洪泛了ARP Request.攻擊者現在有了兩台主機的IP、MAC位址,開始攻擊。
3.攻擊者發送一個 ARP Reply給主機B,把此包protocol header 里的sender IP設為A的IP位址, sender mac設為攻擊者自己的MAC位址。
4.主機B收到ARP Reply後,更新它的ARP表,把主機 A的條目 (IP_A, MAC_A)改為(IP_A, MAC_C)。
5.當主機B要發送資料包給主機A時,它根據ARP表來封裝資料包的Link報頭,把目的MAC位址設為MAC_C,而非MAC_A.
6.當交換機收到B發送給A的資料包時,根據此包的目的MAC位址 (MAC_C) 而把資料包轉發給攻擊者C.
7.攻擊者收到資料包後,可以把它存起來後再發送給A,達到偷聽效果。攻擊者也可以篡改資料後才發送資料包給A,造成傷害。

當然今天如果假設A是gateway,則攻擊者C則可以故意不把MAC_A改成MAC_C,改成其它任意的MAC Adress這時候B就會發生不能上網的情形。


Address Resolution Protocol (ARP) 介紹

沒有留言:
最近在寫ARP 攻擊與防禦的程式,在開始之前要先了解一下什麼是ARP!了解後我們就可以撰寫程式攻擊或者針對ARP攻擊做防禦。

ARP(Address Resolution Protocol),ARP的基本功能就是通過目標設備的IP位址,查詢目標設備的MAC地址,以保證通信的順利進行。IPv6中已不再適用,並被ICMPv6取代。
在每台安裝有TCP/IP協議的電腦或路由器裡都有一個ARP緩存表,表裡的IP位址與MAC地址是一對應的,如下表所示。
主機名稱IP位址MAC地址
A192.168.38.1000-AA-00-62-D2-02
B192.168.38.1100-BB-00-62-C2-02
C192.168.38.1200-CC-00-62-C2-02
D192.168.38.1300-DD-00-62-C2-02
E192.168.38.1400-EE-00-62-C2-02
.........
以主機A(192.168.38.10)向主機B(192.168.38.11)發送數據為例。
當發送數據時,主機A會在自己的ARP緩存表中尋找是否有目標IP位址。如果找到了,也就知道了目標MAC地址為(00-BB-00-62-C2-02),直接把目標MAC地址寫入幀裡面發送就可以了;如果在ARP緩存表中沒有找到相對應的IP位址,主機A就會在網路上發送一個廣播(ARP request),目標MAC地址是「FF.FF.FF.FF.FF.FF」,這表示向同一網段內的所有主機發出這樣的詢 問:「192.168.38.11的MAC地址是什麼?」網路上其他主機並不響應ARP詢問,只有主機B接收到這個幀時,才向主機A做出這樣的回應(ARP response):「192.168.38.11的MAC地址是(00-BB-00-62-C2-02)」。 這樣,主機A就知道了主機B的MAC地址,它就可以向主機B發送信息了。同時它還更新了自己的ARP緩存表,下次再向主機B發送信息時,直接從ARP緩存表裡查找就可以了。

3/30/2013

老鼠走迷宮-簡易版

沒有留言:
由於前幾個老鼠走迷宮版本可能對有些人來說可能比較難,所以這邊提供幾個最基本的版本~
不要看到下面一大堆程式碼就嚇到了...我只是把它放在一起而已~~

在提供版本之前先來講解一下老鼠怎麼走迷宮
所有的遊戲地圖基本上都是由矩陣所構成,而矩陣中美一個元素可能代表著不同的意思,下圖試一個迷宮的矩陣,我們可以看到裡面有許多的數字:
其中4表示外牆、3表示內牆、1表示起點、2表示終點而0表示可以走的通道!

當然我們一般在玩遊戲時根本不知道原來地圖是長這樣的,因為這些數字對於玩家來說只會眼花撩亂而已,當電腦只要知道這些數字,再將這些數字利用不同的圖片或者符號印出時,就可以得到我們平常玩遊戲時的場景,比如說下面這張圖:

點圖可放大
這張圖片我只是將剛剛第一張圖片不能走的區域弄成黑色,在經由程式印出,這樣就可以畫出遊戲的迷宮了!!這樣大家有沒有比較有概念了?

老鼠走迷宮-easyx版本

沒有留言:

最近資料結構已經邁入第三個作業了,所以在這邊我也把之前做的東西跟一些參考資料給放上來~
本篇這個版本是使用easyx這套繪圖引擎來幫忙製作的,這套繪圖引擎我很推薦大家使用,主要是因為使用上簡單,而且很適合教學!
程式碼的部分感覺起來好像很長,但其實還好有問題在留言即可~我想程式碼應該很好理解!在這邊說明一下這個程式碼是論壇中某位大大寫的,我再稍微修改一下裡面的內容~

ubuntu 安裝JDK

沒有留言:
ubuntu下如果想要開發android APP、JAVA程式...就必須得安裝JDK,如果只是單純想執行只要安裝JRE即可! 以下就稍微簡單的介紹怎麼安裝JDK

1.下載JDK
請先至 官網 ,選擇自己的linux版本32位元請裝x86  , 64 位元請裝x64下載!

2.創建資料夾,並且將剛剛下載的檔案解壓縮,這邊可以使用以下指令
#sudo mkdir /usr/lib/jvm
#sudo tar -C /usr/lib/jvm -xzf jdk-7u11-linux-x64.tar.gz
     "jdk-7u11-linux-x64.tar.gz" 請改為自己檔案名稱
     可以檢查一下jvm資料夾下使否有jdk1.7的資料夾
 $ls /usr/lib/jvm
3.查看
是否電腦之前已經有安裝過java
$ java -version
The program 'java' can be found in the following packages:
 * default-jre
 * gcj-4.6-jre-headless
 * openjdk-6-jre-headless
 * gcj-4.5-jre-headless
 * openjdk-7-jre-headless
Try: sudo apt-get install <selected package>

     如果出現以上訊息表示java還沒安裝

Ubuntu 使用Eclipse 編譯C/C++程式

沒有留言:
本篇將稍微介紹如何在ubuntu中安裝eclipse 與eclipse CDT來幫助我們開發C程式
步驟如下
1.電腦必須安裝Java Development Kit(JDK) 或者JRE,因為eclipse必須在JAVA環境中執行
2.下載eclipse CDT
直接到eclipse 官網中下載即可
官網:http://www.eclipse.org/cdt/
下載: JUNO版 

3.下載完後解壓縮,接著執行eclipse

4.創建專案>編譯>執行,即可。

整體操作請查看影片,因為最近比較忙所以影片沒有聲音,之後有空會補上

linux C - popen() 開啟其它指令程式

沒有留言:
popen man page 我們可以知道,popen的資訊如下

#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

描述:
popen() 函數使用建立管道的方式, 並使用 shell.  因為管道是被定義成單向的, 所以 type 參數只能定義為 read 或 write, 不能是read/write 兩者同時定義, result stream也只可read或write.

command 參數是一個string pointer, 指向的是一個以null 為結尾的字串,這個字串包含一個shell命令. 這個命令被送到 /bin/sh 以 -c 參數執行,即由shell來執行.

type 參數也是一個指向以null為結尾的string pointer, 這個字串必須是'r'或者'w'來定義是讀還是寫.
popen() 函數的回傳值是一個普通的標準I/O stream,它只能用 pclose() 函數來關閉,而不是fclose().函數.

演算法與資料結構

沒有留言:
演算法與資料結構解說一覽


概論

演算法簡介 - Introduction of Algorithm
資料結構簡介 - Introduction of Data Structure - coming soon...
複雜度分析 - Complexity Analysis
非確定性多項式理論 - Non-deterministic Polynomial Theory - coming soon...
遞迴函式 - Recursive Function


資料結構

堆疊 - Stack
佇列 - Queue
連結串列 - Linked List
樹 - Tree
雜湊表 - Hash Table - coming soon...
這是網路上看到有人整理的文章
裡面解釋的還蠻仔細的 可以參考看看

3/28/2013

[資料結構] 資料搜尋

沒有留言:

字串搜尋
本程式只是一篇範例,用於搜尋文章中的關鍵字
並沒有使用到課本的失敗函數,如果想要加速搜尋請自行修改pmatch函數!
本程式是我教導別人一步一步慢慢寫出來的,可能會有許多問題(參數命名、...等)
但如果想學字串搜尋的人是個可以參考的程式!

當如果會這個程式之後,那麼我們就可以直接使用 strstr 來做字串搜尋!這樣會比較方便一點~ 不過一開始對於寫程式不熟的人來說,最好可以練習一下怎麼重頭自己寫!

3/25/2013

架站軟體 - WampServer

沒有留言:


WampServer 是一套很簡便的架站軟體,WAMP是代表Windows+Apache+MySQL+PHP,整合了許多架站常用的工具,還內建MySQL管理工具PHPMyAdmin及SqlBuddy等軟體,要在Windows系統上架站並不是難事!

官方網站:WampServer 
介面語言:多國語系
下載連結: 載點1
安裝完成後我們就可以在右下角中查看選單,來進行網站架設。在這邊我就不詳細解釋怎麼使用了,個人是習慣在linux中架設網站...畢竟Windows...恩。

超快棉被換被單

沒有留言:

好神啊!!! 學起來

3/21/2013

WebServer 建置(1)-Apache

沒有留言:
在linux上如何建置WebServer 讓使用者能夠透過瀏覽器(Client),看到網頁呢?方法很多,以下會介紹大概3種方法來架設個人的WebServer

使用已經做好的apache來幫我們建立WebServer

1.Apache
1-1.建置環境 
透過apt-get安裝 apache
sudo apt-get install apache2
或者可以安裝lamp-server
sudo tasksel install lamp-server
    不知道怎麼安裝的話還可以參考此文:
    [Ubuntu]安裝LAMP Server+phpMyAdmin,在自己的電腦輕鬆架網站!

    (只要看第一部分LAMP就可以~)

1-2.開啟網頁測試
在網址列中輸入:127.0.0.1 , localhost或 自己的IP,成功看到It works!的html網頁表示環境建置完成。
註:html網頁在var/www下。

1-3.圖片傳輸
   這是我自己架設的網站,影音圖片基本上一定都沒問題

蘇打綠 sodagreen - 【小時候】

沒有留言:

聽了感觸良多