0%

  1. SPI通訊應用:

    • 大多應用Microcontroller,與Microcontroller,或其他週邊如:EEPROM、Shift Register、Display driever、A/D Converter等,進行通訊。
  2. SPI介面包含:

    • SS (Slave Select)
    • SCK (Serial Clock)
    • SDI (Serial Data Input)
    • SDO (Serial Data Output)
  3. SPI接續說明:

    • SPI是一種4線全雙工同步序列通訊協定,採用Master-Slave控制方式;可採Single Master對Single Slave,也可採Single Master對Multi-Slave進行接續。

  4. SPI傳輸/接收方法:

    • 當Slave的SS腳位被拉為Low准位時,此Slave在Master開始送出Clock信號後,將與Master,透過SPI Pin與SDO Pin進行傳送/接收。

      • 其中Clock信號,可依照idle State為high/ low;以及傳輸資料時,是由clock idle至clock active,或clock active至clock idle分為4種波形。
      • Master要進行資料傳送時,SCK才會有Clock信號,因此SPI傳輸/接收,可依下面3種狀況進行:
        • Master與Slave皆要進行資料傳輸與接收:Master sends useful data and slave sends useful data.
        • 僅Master進行資料傳輸:Master sends useful data and slave sends dummy data.
        • 僅Master進行資料接收:Master sends dummy data and slave useful dummy data.

  1. I2C通訊應用:

    • 於Microcontroller中,利用兩根通用的輸入輸出接腳及軟體的規劃,可以讓微控制器控制一個小型網路。週邊應用部份包含,AD Converter、DA Converter、RTC等。
  2. I2C介面包含:

    • SCL (Serial Clock),由Master產生Clock信號。
    • SDA (Serial Data),SDA使用一上拉電阻,將電壓準位拉為High。
  3. I2C接續說明:

    • I2C是一種單工同步串列通訊協定,採用2線接續(SCL、SDA),為Multi-Master - Muti-Slave架構,將所有裝置的SCL並聯、SDA並聯。(http://zh.wikipedia.org/wiki/I%C2%B2C)
  4. I2C通訊說明:

    • I2C採用7 bits /10 bits Address進行Slave定址,符合Master定址的Slave裝置,與Master進行通訊。
  5. I2C專有名詞:

    • Idle State:SDA與SCL皆為High,2 Bus未被任一Master裝置佔用。
    • Active State:SDA與SCL被任一Master裝置佔用。
    • Start Condition:Master發出的訊號 (SCL為high時,使SDA由high->low)。
    • Addressed Slave:
      • 使用7bits address定址:
        Master傳送Start Condition後,會傳送7 bits Address、1 bit Read/ Write Request,
        共1Byte的資料至SDA上,Slave裝置的address,若與該address相符, 將會回覆ACK給Master裝置,並開始進行Transmit/ Receive

      • 使用10bits address定址:
        Master傳送Start Condition後,之後會先傳送11110、10th Address、
        9th bit Address、1 bit Read/ Write Request,共1Byte的資料至SDA上,
        Slave裝置的address,若與該address相符,將會回覆ACK給Master裝置,
        Master再傳送8th~1th address,共1Byte的資料至SDA上,Slave裝置的address,若與該address相符,將會回覆ACK給Master裝置。

      • Read / Write Request

        • 若Read/ Write Request為low,Addressed Slave將進行Data接收;
        • 若Read/ Write Request為high,Addressed Slave將進行Data傳送;
      • Acknowledge

        • Receiver (Master/ Slave)接收每一Byte Address or Data後,會回覆ACK或NACK給Transmitter((Master/ Slave)),告知Transmitter是否繼續通訊。
      • Clock Stretching:
        Slave利用將SCL維持拉至Low,來暫停通訊,可獲得時間處理接收資料,通常再Acknowledge前或Acknowledge後實施。

      • Stop/ Restart Condition:

        • 若Master想結束通訊,釋放SDA和SCL,使Bus重新處於Idle狀態,可發送Stop Condition (SCL為high時,使SDA由low->high)。
        • 若Master不想釋放SDA和SCL,重新進行Addressed Slave和Read/ Write Request,可再次發送Start Condition,稱之Restart Condition (SCL為high時,使SDA由high->low)。
      • Bus Collision and Arbitration

        • Bus Collision: 當兩個裝置以上,通常為兩個master裝置,同時使用SDA,SCL時,進行資料傳送;當然也有可能是兩個slave裝置(ex:兩個slave設定相同address),但這情況非一般狀況。
      • Arbitration:

        • 確保同時間一個master裝置佔住Bus傳輸的方法,當進行傳輸時,若傳送high準位時,會觀察輸出的準位是否為high,若為low的話,則進行停止傳送;因此,若兩裝置(A,B)同時進行傳送時,其中一裝置A輸出為low準位,另一裝置B輸出為high準位,則裝置A贏得Arbitration,可以確保訊息不被篡改。 (http://www.2cm.com.tw/technologyshow_content.asp?sn=0701010539)

Gitolite Server,是一款基於Perl語言開發的Git管理工具,
使用SSH Key認證,可依不同使用者,對Repo、Branch、Tag,
進行不同授權(讀取、重置、創建、刪除等)

Gitolite server在MAC上安裝與建置方法:

  • Step1: 安裝Gitolite server

     git clone git://github.com/sitaramc/gitolite
     gitolite/install -to -ln /usr/local/bin
    
  • Step2: 產生1組ssh key

  • Step3: 將Public Key Copy至gitolite server底下

  • Step4: 產生Gitolite Administrator

     gitolite setup -pk /path/to/YourName.pub
    
  • Step5: Administrator管理用戶

  • 建立一般用戶:

  • 設定一般用戶權限:

Debian/ Ubuntu的套件管理工具有apt-get
RedHat/ Suse的套件管理工具有yum
相對應的MAC的套件管理工具則有MacPorts

  • 安裝方法

  • 可以根據MAC OS版本(Sierra, El Capitan, Yosemite,…)直接下載.pkg檔案

  • https://www.macports.org/install.php

  • 執行.pkg 檔案,按照步驟提示完成安裝,就可以完成 MacPorts 的基礎安裝

  • 使用方法

  • 安裝後系統提供一個port命令列指令。

  • 打開終端機程式,先進行軟體清單更新。

         sudo port -d selfupdate
    
  • 列出所有軟體使用:

         port list
    
  • 搜尋某個軟體:

         port search <name> 
    
  • 安裝個軟體,則使用:

         port install <name>
    

Git on MAC [By Homebrew]

  1. Install XCode for (GCC tools)

  2. Install Homebrew

     ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"
    
  3. Install Git (By homebrew)

     brew install git
    
  4. brew list

     brew list git
    

Git on MAC [By Macports]

  1. Install Macports

  2. Install Git (By Macports)

     sudo port install git-core
    

Gerrit on MAC:

  1. Install MYSQL

    • Get Mysql from official site (Mysql Community version)
  2. Get Mysql Java Connector (Connector/J, .jar)

    • Copy to /Library/Java/Extensions/
  3. Setup Mysql-DB

     mysql -u root -p
     CREATE USER 'gerrit'@'localhost' IDENTIFIED BY 'password';
     CREATE DATABASE reviewdb;
     ALTER DATABASE reviewdb charset=latin1;
     GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost';
     FLUSH PRIVILEGES;
    
  4. Get Gerrit from http://code.google.com/p/gerrit/downloads/list

  5. Install Gerrit

     java -jar gerrit.war init -d review_sit
    
  6. Setup Gerrit Authentication by Http

  7. Setup Apache /etc/apache2/httpd.conf as:

     Listen 9090
     #Gerrit Reverse Apache for Authentication
     <VirtualHost *:9090>
       ServerName Gerrit
       ProxyRequests Off
       ProxyVia Off
       ProxyPreserveHost On
       <Proxy *>
             Order deny,allow
             Allow from all
       </Proxy>
       <Location /gerrit/login/>
          AuthType Basic
          AuthName "Gerrit Code Review"
          AuthBasicProvider file
          AuthUserFile /Users/shiunyi/gerrit/review_site/etc/gerrit.passwd
          Require valid-user
       </Location>
       ProxyPass /gerrit/ http://localhost:8081/gerrit/
     </VirtualHost>
    
  8. Setup account of Gerrit

     htpasswd -m /Users/shiunyi/gerrit/review_site/etc/gerrit.passwd NeilLee
    
  9. Start Gerrit

     gerrit/review_site/bin/gerrit.sh start
    
  10. Web login

    http://192.168.11.5:9090/gerrit/

  11. gerrit.config

    [gerrit]
            basePath = git
    [database]
            type = MYSQL
            hostname = localhost
            database = reviewdb
            username = gerrit
    [auth]
            type = HTTP
    [sendemail]
            enable = true
            smtpServer = smtp.gmail.com
            smtpServerPort = 465
            smtpEncryption = SSL
            smtpUser = user@gmail.com
            smtpPass = 
            user = gerrit
            javaHome = /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    [sshd]
            listenAddress = *:29418
    [httpd]
            listenUrl = proxy-http://*:8081/gerrit
    [cache]
            directory = cache
    
  12. Using Gerrit

    • SSH authentication

      • client:

          ssh-keygen -t rsa
          pbcopy < ~/.ssh/id_rsa.pub
        
    • Gerrit server:

      • Add your ssh key to gerrit
      • Restart gerrit server
    • Gerrit client:

        ssh -p 29418 <your username in gerrit>@<gerrit's IP>
      

  • 安裝gitweb

      git clone git://git.kernel.org/pub/scm/git/git.git
      cd git/
      sudo make GITWEB_PROJECTROOT="/Users/<user>/repositories" \
      GITWEB_CSS="/gitweb/gitweb.css" \
      GITWEB_LOGO="/gitweb/git-logo.png"  \
      GITWEB_FAVICON="/gitweb/git-favicon.png"  \
      bindir=//usr/local/bin \
      gitweb
    
      sudo make gitwebdir=/var/www/gitweb install-gitweb
    
  • 設定gitweb

    sudo vim /etc/gitweb.conf

      projectroot = "/Users/<user>/repositories";
      GIT = "/usr/local/bin/git" #重要-git執行擋的位置
    
  • 設定apache

    sudo vim /etc/apache2/httpd.conf

      Listen 8080
      #Gitweb        
      <VirtualHost *:8080>        
          ServerName gitserver        
          DocumentRoot /var/www/gitweb        
          SetEnv GITWEB_CONFIG /etc/gitweb.conf        
          <Directory /var/www/gitweb>        
              Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch        
              AllowOverride All        
              order allow,deny        
              Allow from all        
              AddHandler cgi-script cgi        
              DirectoryIndex gitweb.cgi        
          </Directory>        
      </VirtualHost>
    
  • 設定repo目錄權限

  • 目錄權限如果不對,gitweb無法顯示專案
    chmod -R 755 /Users/<user>/repositories

  • 架站工具
  • WinAppServ 2.5.9
    • Apache 2.2.4 ,PHP 5.2.3 ,MySQL* 5.0.45 ,phpMyAdmin-2.10.2
  • Linux(ubuntu)
    • Xampp
  • Mac OSX(ubuntu)Mamp:
    1. 安裝完成後,進入Finder/應用程式/MAMP/,啟動MAMP。
    (/MAMP/資料夾有停供Widget可使用)
    2. 打開MAMP,可看到star server、open start page、preference
    * start server:可啟動apache web server和mysql server。
    * open start page:打開mamp設定狀態的網頁,也可從中連到mysql的web設定頁phpmyadmin。
    * preference:內容有start/stop,ports,php,apache:四個標籤頁
    - preference設定說明
    + start/stop:start url用來設定先前open start page的位置,原則上不動預設為(/mamp/)
    + ports:apache port改為80。
    + php:看個人需求設定。

    * apache:document root用來設定web起始頁所在資料夾,為:/Users/Shiunyi/Sites

    3. 打開finder,個人資料夾(ex:Shiunyi),裡面有資料夾-桌面、音樂、網站…,將其中”網站”資料夾拖到finder側邊欄,以後將編輯的網頁(ex:index.htm)放入其中,以後啟動apache web server後,即可從safari的url link:http://localhost/index.htm連到網頁。
    4. Web Homepage Address:
    - http://127.0.0.1/
    - http://localhost/
    - Web phpmyadmin:
    5. http://127.0.0.1/phpmyadmin/

  • screen

    screen -h 1024 /dev/ttyS0 115200

  • Turn on output logging: -L

  • Copy mode: Ctrl+a,esc

  • Close session: Ctrl+a,k

  • Logging on/ off: Ctrl+a,H

  • ** minicom**

  • 設定minicom: ctri+a, o

  • Log: ctrl+a, l

  1. 安裝SSH Server

     apt-get install openssh-server
    

    或者

     apt-get install ssh
    
  2. 設定SSH Server

    • SSH設定檔(ssh_config)

        sudo gedit /etc/ssh/sshd_config
      
    • 開啟SSH Port(更改ssh_config)

        PORT 22
      
    • 禁止root帳戶登入(更改ssh_config)

        PermitRootLogin no
      
    • 限定特定使用者群組ssh登入(更改ssh_config)

        AllowGroups ssh
      
  3. 檢查SSH服務是否啟動

     ps ax | grep ssh
    
  4. Client端使用ssh連線至SSH server

     ssh user@server_ip
    
  5. Client端使用SSH Key連線至SSH Server

    • Client建立SSH Key (key1.pub與key1)

      ssh-keygen

    • Client上傳SSH Key公鑰(key1.pub)

      • Client操作上傳

          ssh-copy-id -i key1.pub user@server_ip
        
      • Server端操作,先藉由其他方法將公鑰複製至Server

          cat /path/to/key1.pub >> /home/user1/.ssh/authorized_keys
        

        注:不同使用者則為

          cat /path/to/key1.pub >> /home/user2/.ssh/authorized_keys
        

        注:單個使用者可有多組SSH Key

          cat /path/to/key2.pub >> /home/user1/.ssh/authorized_keys
        
      • Server端,調整authorized_keys檔案權限

          chmod 600 /home/user1/.ssh/authorized_keys
        

Linux作業系統開啟Telnet服務

  1. 安裝xinted

    sudo apt-get install xinetd telnetd

  2. 設定xinted config

     sudo vi /etc/xinetd.conf
    

    加入以下內容:

     # Simple configuration file for xinetd# # Some defaults, and include /etc/xinetd.d/ 
     defaults
     { 
         # Please note that you need a log_type line to be able to use log_on_success # and log_on_failure. The default is the following : # log_type = SYSLOG daemon info 
         instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30
     } 
     includedir /etc/xinetd.d
    
     sudo vi /etc/xinetd.d/telnet
    

    加入以下內容:

     # default: on
     # description: The telnet server serves telnet sessions; it uses
     # unencrypted username/password pairs for authentication.
     service telnet 
     { 
         disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID 
     }
    
  3. 重啟網路服務

    sudo /etc/init.d/xinetd restart

  4. 使用TELNET Client遠程登錄,即可進行非root用戶訪問

  5. 使用root登錄:

    修改/etc/pam.d/login,下面一行註釋掉即可。

     #auth required lib/security/pam_securetty.so 
    
  6. 設定/etc/xinetd.d/telnet

     service telnet 
     { 
         disable =no 
         bind =192.168.1.2 
         only_from=192.168.1.0/24 
         #上面這兩行說明僅提供內部網段! 
         Instance =UNLIMITED 
         Nice =0 
         Flags =REUSE 
         socket_type=stream 
         wait =no 
         user =root 
         #server =/usr/sbin/telnetd 
         server =/usr/sbin/in.telnetd 
         server_args =-a none 
         log_on_failure +=USERID 
     } 
    
     service telnet 
     { 
         disable =no 
         bind =140.116.142.196 
         only_from=140.116.0.0/16 
         no_access=140.116.32.{10,26} 
         #上面三行設置外部較為嚴格的限制 
         instance =10 
         umask =022 
         nice =10 
         flags =REUSE 
         socket_type=stream 
         wait =no 
         user =root 
         #server =/usr/sbin/telnetd 
         server =/usr/sbin/in.telnetd 
         log_on_failure +=USERID 
     }
    
    • 加設防火牆,使用iptables:
      針對193.16.0.0/24這個網段及61.xxx.xxx.xxx這個IP進行telnet開放,增加下面幾行規則:

        /sbin/iptables -A INPUT -p tcp -i eth0 -s 193.16.0.0/24 --dport 23 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -i eth0 -s 61.xxx.xxx.xxx --dport 23 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp -i eth0 --dport 23 -j DROP
      
    • 加設防火牆,使用/etc/hosts.allow(deny):
      上面開放了193.16.0.0/24這個網段,如果只想讓其中的193.16.0.1~5進入,

        vi /etc/hosts.allow
      
        in.telnetd:193.16.0.1,193.16.0.2,193.16.0.3,193.16.0.4,193.16.0.5:allow