7/25/2017

LPC Cameras / LPR Camera 의 차이 및 기능

최근 Camera 관련기능을 알아보다가 LPC/LPR 관련 Camera까지 알아보게 되었으며, 간단히 개념이해만 하고 추후 개발할일 있다면 그때 자세히 기술한다. 

License Plate은 자동차의 번호판을 말하며, 이를 번호판을 Capture 하여 번호를 인식가능한 Camera를 아래와 같이 분류해서 말한다.

정확히 말하면, OCR 기능까지 들어간 것이 LPR Camera 기능이 되겠다.
  • License Plate Capture    / LPC Cameras
  • License Plate Recognition / LPR Camera

  https://www.securitycameraking.com/securityinfo/license-plate-capture-camera-vs-license-plate-recognition-camera/

7/24/2017

Camera 관련용어 (HLC,BLC,WDR)

1. Camera 센서 

카메라 센서는 CCD(charge coupled device) 와 CMOS (complementary metal oxide semiconductor) 있으며 정확한 차이를 알고자 한다.

카메라 센서의 목적은 빛을 전하로 변화하여 전자신호로 처리를 진행하는 기능을 처리한다.




카메라 센서의 감도 (Analog Gain)
  https://blog.envision.co.kr/5?category=539349
  https://blog.envision.co.kr/9?category=539349
  https://www.edmundoptics.com/resources/application-notes/imaging/basics-of-digital-camera-settings-for-improved-imaging-results/


1.1 CCD 센서

CCD센서는 아날로그 카메라에서 고품질로 사용된다고 하며, 아래의 WDR기술에서 사용이 된다고 한다.


  • 장점 
빛의 감도 CMOS에 비해 높아 더 빛에 민감하고 , 낮은 조명에서도 좋은 이미지를 캡쳐할수 있다.
하지만 모든 용도에서 적합하지 않다고 한다. CCD센서의 경우 CMOS에 비해 노이즈가 적어 더 선명한 이미지를 생성이 가능하다고 하여 품질이 우수하다고 한다.


  • 단점
가격이 비싸므로, 시장에서는 거의 사용되지 않는다.


1.2 CMOS 센서 

  • 장점 
가격이 저렴하고, 낮은 소비전력을 가지고 있으며, Analog 에서 Digital Gain으로 변환하는 속도 역시 CCD에 비해 훨씬 빠르다.

  • 단점
CCD에 비해 전기적인 Noise가 많아 CCD에 비해 정확한 이미지 정보를 얻기가 힘들다.


CMOS vs CCD
  https://www.cctvcameraworld.com/all-about-ccd-images-and-cmos-chips.html
  http://www.teledynedalsa.com/en/learn/knowledge-center/ccd-vs-cmos/
  https://blog.udemy.com/ccd-vs-cmos/
  https://www.techhive.com/article/246931/security-cameras/cmos-is-winning-the-camera-sensor-battle-and-heres-why.html

2. Camera 관련 보정기술 용어 정리 

Camera 관련정보 수집하기 위해 아래와 같이 관련된 용어 및 보정기술을 간단히 정리하고자한다.
Camera에 관련된 기술이 상당히 많은 것 같으며, 아직 정확한 이해를 하지 못하고 있어 관련사항들을 기술구현방법을 간단히 기술한다.

  1. HLC(High Light Compensation)
  2. BLC (Back Light Compensation)
  3. WDR(Wide Dynamic Range) 

  • HLC/BLC/WDR 의 용어설명  
  https://www.cctvcameraworld.com/blc-hlc-wdr-in-camera-image-sensors/

우선 상위 기술을 알기전에 Camera의 센서부터 대충알고 넘어가자, 지금까지 CMOS센서밖에 써보지를 못해 대충만 들어 알고 있지
미세한 차이는 정확하게 알지를 못하겠다.


2.1 HLC( High Light Compensation) 

HLC의 필요성은 예를들면 야간의 강한 빛(spot light, head light)에 의해 과노출되었을 경우 영상의 전체가
강한 빛으로 인해 눈이 부시는 효과가 발생하는데 이런부분을 없애주고자 하는 보정기술이다.
주로 LPC(License Plate Capture)에서 사용되는 기술이라고 한다.

백번의 말보다 한번의 그림을 보고 판단하는 것이 이해하기가 편하다.








주로 발생문제를 살펴보면 주의에 비해 상대적으로 어두운곳에서 물체에서 갑자기 빛의양이 많이 들어와 발생하는 문제라는 것을 알수 있다


  • Color vs Black & White 

일반적으로 야간카메라는 Black & White모드로 사용을 한다고 하지만, 아래를 보면 Color 와 Black & White Version을 비교해보면
Black & white가 더 눈부심을 알수가 있다.


  • Shutter 속도제어 
보정해주는 방법은 주로 노출시간(exposure) 를 조절해주는 것이 관건인 것 같다.
일단 기본방법은 노출시간을 줄여 광량을 줄이는 방법으로 가야 할 것 같지만 , 너무 줄이며 배경도 같이 어두워지는 문제발생하기때문에 적정량으로 줄이는 것이 관건인 것 같다.



이와 관련된 Video Filter와 정확한 이해가 필요한 것 같은데 이부분은 자세히 알아봐야겠다




HLC와 LPC 관련 기술내용설명
  https://ipvm.com/reports/headlights-harm-video-surveillance

Hikvision의 HLC 기능설명
  http://www.hikvision.com/europe/Press-Release-details_90_i3270.html
  http://www.hkvstar.com/technology-news/hlc-highlight-compensation-vs-blc-backlight-compensation.html

이 부분은 LPC/LPR에서도 중요한 문제로 생각이 되는 부분이다.

2.2 BLC (Back Light Compensation)
한글로 보면 역광보정이라고 할수 있으며, 누군가 창문 앞에 있거나 밖에서 들어오는 경우 주로 발생을 하며
카메라 입장에서 보면 앞의 물체와 뒷물체 혹은 배경에서 자연채광이 모두 표시가 되기때문에, 앞 물체가 상대적으로 어둡게 보이는 현상이다.
주로 사용되는 곳은 사람을 인식하는 곳에서 많이 사용이 된다고 한다.  BLC의 경우 앞물체와 뒷배경 노출을 최적화하는 DSP에서 제공하는 기능이라고 한다.

보정방법은 각 영역마다 다른 노출을 사용한다고 하는데 주요 포커스가 되는 부분은 정상적이고 사용가능한 빛을 유지하고
극단적으로 높거나 낮은 빛의 영역을 수정한다고 한다.
어떻게 하는지는 좀 더 자세히 알아봐야겠다.





2.3 WDR(Wide Dynamic Range)
BLC에서 발생하는 한계점을 좀 더 극복하고자 나온기술이라고 하며 이부분은  BLC와 마찬가지로 주로 사무실의 창문과 같이 자연채광이 많은 곳에서 사용된다.
상위에서 설명한 BLC와 비슷하지만, 더 발전된 기술이 WDR이라고 한다.

WDR에서는 이미지의 가장 밝은 요소와 가장 어두운 요소간의 비율 나타낸다고 한다.
WDR의 카메라의 경우  두 개의 CCD(Charge Coupled Device) 장착된 센서를 제공한다고 하며, 이 센서 중 하나는 고속용이고 다른하나는 저속 이미지/비디오용이라고 한다.
이 두개의 이미지는 함께 작업하며, 장면을 여러번 스캔하여 작업한다고 한다.

개인 생각으로는 노출시간이 다르게 작동하니 두개의 이미지 DSP를 이용하여 최적화하는 것 같다.




AXIS에서 개발을 했다고 하는데 아직  HLC/BLC/WDR 정확한 보정기술 및 세부기술은 이해해가자.
  https://www.axis.com/kr/ko/technologies/wide-dynamic-range

2.4 HDRI(High Dynamic Range Imaging)

개인생각으로는 WDR과 유사한 개념과 같으며, 서로 다른 밝기 노출시간을 주어 이를 점차 개선해나가는 것 같다.
아래의 라온피플에서는 DSP가 아닌, OpenCV를 이용하여 여러 Image를 보정해나가는데,
이를 고속을 하면 WDR이 되는 것 같다. 

  https://laonple.blog.me/220830099505

7/23/2017

Docker Redmine 기본설치

1. Redmine 소개 

SVN or GIT  소스를 관리만을 하지만, Redmine or Track 은 Project 관리와 버그 추적을 쉽게 해주기 위해서 만들어진 통합된 프로젝트 관리 프로그램이다.
흔히 ITS(Issue Tracking Ssystem) 이라고도 불리우기도 하며,Redmine이전에도 다양한 오픈소스가 존재한다. 

최근에는 거의 오픈소스는 Redmine으로 사용으로 가거나, 유료인 JIRA 사용하는 것으로 보인다.

오픈소스 ITS(Issue Tracking Ssystem)/BTS관련소개 
Redmine 기능 및 소개
  https://www.redmine.org/
  https://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C%EB%A7%88%EC%9D%B8

Redmine 설치 전 기본환경사항파악
  http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Supported-database-back-ends

Redmine은 Database를 필요하며, 기본적으로 Database도 설치를 해줘야 한다.
이전에는 각 서버에 다 설치해주었지만, 요즘 Docker가 있어서 편하다. 


2. Docker로 Redmine 설치방법 

아래의 설치방법을 보면, Redmine Image는 Database 필요하고, SQlite3가 포함하고 있지만, Multi-User로는 사용이 불가능하다고 한다.
Database를 MySQL or PostgreSQL로 변경하여 2개의 Container를 설치 및 연결해보자.

설치전 Docker의 기본환경을 구축하자
  https://ahyuo79.blogspot.com/2017/07/docker.html

Docker 기본 명령어 파악
  https://docs.docker.com/engine/reference/commandline/docker/

Redmine 설치방법
  https://docs.docker.com/samples/library/redmine/
  https://github.com/sameersbn/docker-redmine


2.1 Docker Images 찾기

Docker로 Redmine/MySQL/Postgres Image를 찾아 많이 사용하는 것을 찾아보자.

  • Docker Image 검색하여 설치할 Image 찾기  
Docker Hub내에서 존재하는 관련 Image들을 검색을 해보자

Docker Hub에서 검색
  https://hub.docker.com/search?q=redmine
  
$ sudo docker search redmine
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redmine                           Redmine is a flexible project management w...   621       [OK]       
sameersbn/redmine                                                                 284                  [OK]
bitnami/redmine                   Bitnami Docker Image for Redmine                30                   [OK]
74th/redmine-all-in-one           Redmine includes hosting SVN & Git , backl...   9                    [OK]
inspiredgeek/redmine-alpine       Simple Docker images to run Redmine tracke...   6                    [OK]
eeacms/redmine                    EEA Redmine docker setup                        2                    [OK]
themill/redmine                   fork for redmine to add/test theming            1                    [OK]
fjudith/redmine                   Dockerized Redmine based on redmine:3.3 of...   1                    [OK]
minimaru/openshift-redmine        A Debian8 based Redmine v3.2 image for use...   1                    
arm64v8/redmine                   Redmine is a flexible project management w...   1                    
tkeydll/docker-redmine-backlogs   Redmine with backlogs plugin.                   1                    [OK]
arm32v7/redmine                   Redmine is a flexible project management w...   1                    
commonms/redmine                  Docker image for Redmine.                       1                    [OK]
sorintdev/redmine                 Redmine with custom theme                       0                    
nitra/redmine_priority_tasks      redmine_priority_tasks                          0                    [OK]
robobeerun/redmine                Redmine image that runs as non-privileged ...   0                    [OK]
togent2/redmine_ttdlx_enabled     redmine_ttdlx_enabled                           0                    [OK]
amd64/redmine                     Redmine is a flexible project management w...   0                    
stackbrew/redmine                 Deprecated; use 'redmine' from https://hub...   0                    
trollin/redmine                                                                   0                    
mikroways/redmine                 redmine passenger image                         0                    [OK]
rubykube/redmine                  Redmine 4.0 container                           0                    [OK]
honsiorovskyi/redmine             Official Redmine + Git + Mercurial              0                    [OK]
dockerpicosoft/redminemisfat                                                      0                    


 $ sudo docker search mysql
NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                                                  MySQL is a widely used, open-source relati...   6972      [OK]       
mariadb                                                MariaDB is a community-developed fork of M...   2226      [OK]       
mysql/mysql-server                                     Optimized MySQL Server Docker images. Crea...   512                  [OK]
percona                                                Percona Server is a fork of the MySQL rela...   369       [OK]       
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       126                  [OK]
hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          96                   
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server ...   67                   [OK]
centurylink/mysql                                      Image containing mysql. Optimized to be li...   59                   [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          44                   [OK]
centos/mysql-57-centos7                                MySQL 5.7 SQL database server                   39                   
mysql/mysql-cluster                                    Experimental MySQL Cluster Docker images. ...   34                   
tutum/mysql                                            Base docker image to run a MySQL database ...   32                   
schickling/mysql-backup-s3                             Backup MySQL to S3 (supports periodic back...   23                   [OK]
bitnami/mysql                                          Bitnami MySQL Docker Image                      19                   [OK]
zabbix/zabbix-proxy-mysql                              Zabbix proxy with MySQL database support        15                   [OK]
linuxserver/mysql                                      A Mysql container, brought to you by Linux...   14                   
centos/mysql-56-centos7                                MySQL 5.6 SQL database server                   10                   
circleci/mysql                                         MySQL is a widely used, open-source relati...   6                    
openshift/mysql-55-centos7                             DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
mysql/mysql-router                                     MySQL Router provides transparent routing ...   4                    
jelastic/mysql                                         An image of the MySQL database server main...   1                    
openzipkin/zipkin-mysql                                Mirror of https://quay.io/repository/openz...   1                    
cloudfoundry/cf-mysql-ci                               Image used in CI of cf-mysql-release            0                    
cloudposse/mysql                                       Improved `mysql` service with support for ...   0                    [OK]
ansibleplaybookbundle/mysql-apb                        An APB which deploys RHSCL MySQL                0                    [OK]


$ sudo docker search postgres
NAME                                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
postgres                                 The PostgreSQL object-relational database ...   5498      [OK]       
sameersbn/postgresql                                                                     135                  [OK]
paintedfox/postgresql                    A docker image for running Postgresql.          77                   [OK]
orchardup/postgresql                     https://github.com/orchardup/docker-postgr...   48                   [OK]
kiasaki/alpine-postgres                  PostgreSQL docker image based on Alpine Linux   42                   [OK]
centos/postgresql-96-centos7             PostgreSQL is an advanced Object-Relationa...   29                   
bitnami/postgresql                       Bitnami PostgreSQL Docker Image                 22                   [OK]
begriffs/postgrest                       Moved to https://hub.docker.com/r/postgres...   16                   [OK]
centos/postgresql-94-centos7             PostgreSQL is an advanced Object-Relationa...   15                   
schickling/postgres-backup-s3            Backup PostgresSQL to S3 (supports periodi...   13                   [OK]
crunchydata/crunchy-postgres             Crunchy PostgreSQL is an open source, unmo...   12                   
circleci/postgres                        The PostgreSQL object-relational database ...   11                   
wrouesnel/postgres_exporter              Postgres metrics exporter for Prometheus.       9                    
postdock/postgres                        PostgreSQL server image, can work in maste...   9                    [OK]
clkao/postgres-plv8                      Docker image for running PLV8 1.4 on Postg...   8                    [OK]
centos/postgresql-95-centos7             PostgreSQL is an advanced Object-Relationa...   6                    
blacklabelops/postgres                   Postgres Image for Atlassian Applications       4                    [OK]
frodenas/postgresql                      A Docker Image for PostgreSQL                   3                    [OK]
camptocamp/postgresql                    Camptocamp PostgreSQL Docker Image              3                    [OK]
fredboat/postgres                        PostgreSQL 10.0 used in FredBoat's docker-...   0                    
ansibleplaybookbundle/postgresql-apb     An APB which deploys RHSCL PostgreSQL           0                    [OK]
cfcommunity/postgresql-base              https://github.com/cloudfoundry-community/...   0                    
relatable/postgrest                      Nginx container to serve web requests to t...   0                    [OK]
cfcommunity/postgresql                   https://github.com/cloudfoundry-community/...   0                    
ansibleplaybookbundle/rds-postgres-apb   An APB that deploys an RDS instance of Pos...   0                    [OK]



2.2  Docker Container/Image 설치 

Redmine은 Database를 사용하는데, MySql or Postgres로 설치하여 연결할 것이다.
docker run을 이용하여 새로운 Container에 이름을 할당하고, 상위에서 찾은 Image 이름으로 설치 와 동시에 실행해보자



docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options Description
--detach , -d Run container in background and print container ID
--name Assign a name to the container
--env , -e Set environment variables
--link Add link to another container
--publish , -p Publish a container’s port(s) to the host


-p 옵션을 통해 Redmine에 접속할수 있는 port를 변경이 가능하다.
http://localhost:3000 or http://host-ip:3000 으로 redmine 접속이 가능하다.
이 옵션이 없다면, 기본적으로 http://localhost:8080, or http://host-ip:8080 로 동작한다.

  • MySql or Postgres Container / Image 설치 및 실행 
$ sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=redmine mysql 
or 
$ sudo  docker run -d --name postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=redmine postgres

-e 옵션은 Environment Variables 부분 참조
마지막에 반드시 찾은 Image 이름
  • Redmine  Container / Image 설치 및 실행 
$ sudo docker run -d --name redmine -p 3000:3000 --link mysql:mysql redmine // Database: MySQL
or 
$ sudo docker run -d --name redmine -p 3000:3000 --link postgres:postgres redmine  // Database: Postgres


Redmine 설치방법

  https://docs.docker.com/engine/reference/commandline/run/

2.3 Docker Container/Image 삭제 

상위에서 Container와 Image를 생성했기 때문에, 관련사항들을 다 삭제해보자.

  • Container/ Image 제거 

$ sudo docker ps  // 동작중인 Container 파악 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
1fd4d477c23b        redmine:latest      "/docker-entrypoint.   4 months ago        Up 3 minutes        0.0.0.0:3000->3000/tcp   redmine             
89d3dc20a51a        mysql:latest        "docker-entrypoint.s   4 months ago        Up 3 minutes        3306/tcp                 mysql 
 
$ sudo docker stop mysql redmine  // 동작중인 Container 멈춤, 상위 CONTAINER ID 가능  

$ sudo docker rm mysql redmine   // Containers 제거   

$ sudo docker rmi mysql redmine  // Images 제거 

$ sudo docker images             // 설치된 Image 재확인 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE


2.4  Docker Containers 실행/정지 

현재 Ubuntu를 사용하고 있으며, 기본적으로 재부팅을 하면, Docker Engine도 멈추기 때문에, 다시 Container를 가동하여 Image를 동작해야한다.

  • Docker-MySql 과 Redmine 동작실행 
$ sudo docker start mysql redmine
mysql
redmine

  • Docker-MySql 과 Redmine 동작멈춤 
$ sudo docker stop mysql redmine
mysql
redmine


2.5 Docker Container/Images 확인 및 동작확인

Docker에서 Container or Images의 상태를 각각 확인을 해보자.

  • 설치된 Docker-Images 확인
$ sudo docker images // MySQL 설치시
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
redmine             latest              1b5ebc39dc3e        4 months ago        662.5 MB
mysql               latest              08fa4e794b8b        5 months ago        371.4 MB

$ sudo docker images  //Postgres 설치시 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
redmine             latest              e297148f3bd1        10 hours ago        687.2 MB
postgres            latest              a283a33b6783        10 days ago         228.4 MB

  • 동작 중인 Docker-Container/Images 확인 

$ sudo docker ps // MySQL 사용시 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
1fd4d477c23b        redmine:latest      "/docker-entrypoint.   4 months ago        Up 3 minutes        0.0.0.0:3000->3000/tcp   redmine             
89d3dc20a51a        mysql:latest        "docker-entrypoint.s   4 months ago        Up 3 minutes        3306/tcp                 mysql 

$ sudo docker ps // Postgres 사용시 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
33f9f499cef9        redmine:latest      "/docker-entrypoint.   12 seconds ago      Up 11 seconds       0.0.0.0:3000->3000/tcp   redmine             
0e33f82bb946        postgres:latest     "docker-entrypoint.s   6 minutes ago       Up 6 minutes        5432/tcp                 postgres 


  • Docker의 Container 상태 (CPU/MEM/NET 정보)


$ sudo docker stats mysql redmine  // 각 container가 미동작 확인  
CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
mysql               0.00%               0 B/0 B             0.00%               0 B/0 B
redmine             0.00%               0 B/0 B             0.00%               0 B/0 B

$ sudo docker stats mysql redmine  // 각 container 동작 Image 실행 
CONTAINER           CPU %               MEM USAGE/LIMIT       MEM %               NET I/O
mysql               0.10%               244.1 MiB/3.778 GiB   6.31%               55.03 KiB/282.5 KiB
redmine             0.01%               124.5 MiB/3.778 GiB   3.22%               284.1 KiB/52.86 KiB


  • Docker Container의 Log 파악 


$  sudo docker logs redmine  // redmine or mysql 각 Image 선택 
........


  • Docker 관련사항 찾아보기 

$ sudo find / -name redmine  // redmine image 찾기 
/var/lib/docker/vfs/dir/06d0898d2ee8f722f5dbb5db412ec12f44ab8ca997398367612a442570f5b580/redmine
/var/lib/docker/aufs/diff/07edb9d05a16af091a3eb354febfa11691632aba9faed3df2985aea033d5b06b/usr/src/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine/lib/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine/test/unit/lib/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine/test/integration/lib/redmine
/var/lib/docker/aufs/diff/716af2fdc4bfa300f02e52e3676615ee00faa82d2ffe011f5b8dc03f2edff416/usr/src/redmine
/var/lib/docker/aufs/diff/1fd4d477c23b613b7d6c463f9548dc89b10cc11e5dfbf871390c5af34de5c80c/usr/src/redmine

$ sudo find / -name mysql  // mysql  image 찾기 
/etc/apparmor.d/abstractions/mysql
/etc/apparmor.d/snap/abstractions/mysql
/etc/init.d/mysql
/etc/mysql
/var/lib/docker/vfs/dir/06d0898d2ee8f722f5dbb5db412ec12f44ab8ca997398367612a442570f5b580/mysql
/var/lib/docker/aufs/diff/9ca537d00bf27e382442900487f836aedb7f2eb4805e87fa6bca90921e840f49/etc/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/etc/init.d/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/etc/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/var/lib/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/var/log/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/usr/lib/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/usr/bin/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/usr/share/mysql
...

$ sudo ls /var/lib/docker/   
aufs  containerd  graph  init   network   plugins        runtimes  tmp vfs
builder  containers  image  linkgraph.db  overlay2  repositories-aufs  swarm  trust volumes



2.6 Docker 설치 및 실행시 Network 상태확인

상위에서 Docker를 설치 한 후, Docker Image들을 설치하고 실행을 한 후 네트워크 상태를 확인해보면
아래와 같이 두 종류의 Link가 새로 생성되었다.

  1. docker0:  docker 명령어 설치시 생성됨 
  2. vethx : docker image 실행시 생성됨 


$ ifconfig
docker0   Link encap:Ethernet  HWaddr 8e:12:bf:f6:e3:e5  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::5c9b:24ff:fea2:322/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1100 (1.1 KB)  TX bytes:10832 (10.8 KB)

eth0      Link encap:Ethernet  HWaddr 08:00:27:0f:63:43  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe0f:6343/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5777 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2116 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7996724 (7.9 MB)  TX bytes:192119 (192.1 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:288 errors:0 dropped:0 overruns:0 frame:0
          TX packets:288 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:23759 (23.7 KB)  TX bytes:23759 (23.7 KB)

veth15bcff9 Link encap:Ethernet  HWaddr 8e:12:bf:f6:e3:e5  
          inet6 addr: fe80::8c12:bfff:fef6:e3e5/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:348 errors:0 dropped:0 overruns:0 frame:0
          TX packets:408 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:289303 (289.3 KB)  TX bytes:56696 (56.6 KB)

veth1c96ca0 Link encap:Ethernet  HWaddr f6:bb:61:16:e3:09  
          inet6 addr: fe80::f4bb:61ff:fe16:e309/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:390 errors:0 dropped:0 overruns:0 frame:0
          TX packets:365 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:54193 (54.1 KB)  TX bytes:291716 (291.7 KB)


3. Redmine 설정 및 사용

브라우저에서 http://192.168.1.100:3000/login  로그인

ID: admin
PW: admin


내계정->비밀번호 바꾸기
PW변경
Atom 접근키 생성

현재 기본사용만 했을 뿐 다른 플러그인이나, 관련사항을 설치하지 않았다.


Redmine 설치 후 설정부분
  http://www.whatwant.com/367
  http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Supported-database-back-ends

7/17/2017

Camera 기본지식과 ISP(AE,AWB/AF) 이해 및 적외선 개념

1. 기본지식 

카메라관련 지식이 다시 필요해서 관련지식을 다시 수집하며, 이전에 기억나는대로 CMOS의 Bayer Pattern 과 Interpolation 기능

추후 시간이 되면, 다시 CCD/CMOS의 차이 관련사항을 알아보자.

  • Bay Pattern과 Interpolation (보간법)
  https://en.wikipedia.org/wiki/Bayer_filter
  http://darkpgmr.tistory.com/97
  http://cilab.knu.ac.kr/research/Color/Interpolation.htm

1.1 Camera의 ISP의 지식 

일반적으로 Camera의 ISP 라고 하면 3A인 (AE/AWB/AF) 의 기능인 것 같다. 이 부분은 예전 TI Camera 관련문서를 통해서도 많이 접했지만,
관련기술에 대한 세부내용을 자세히 알지 못했다. 나의 목적의  CMOS Sensor 동작역할 및 Bayer Pattern 관련부분 설정 이었던 것 같다.

TI의 경우 아래의 부분을 HW에서 기본적으로 제공을 해주고 있지만, 이부분을 정확하게 이해하고 넘어가자


  1. AE(Auto Exposure)  
  2. AWB(Auto White Balance)   
  3. AF( Auto Focus) 


DM385와 DM8127은 공통사항이 많으며, 저가형으로 DM385를 이용을 한다.
  http://www.ti.com/product/DM385

ISS
  http://www.ti.com/lit/ug/spruhl6a/spruhl6a.pdf

HW Face detect
  http://www.ti.com/lit/ug/spruhq3a/spruhq3a.pdf

  • ISP 관련전반 부분을 전부 설명 
  http://laonple.blog.me/220753863640
  https://www.ciscorp.co.jp/algorithm_3a_en.php

  • Gamma Correction 
  https://en.wikipedia.org/wiki/Gamma_correction


1.2 영상관련 필터 지식 

  • 영상처리 Filter 
  http://laonple.blog.me/220853922659


1.3 적외선의 이해 

적외선카메라를 다루기 때문에 관련부분에 대한 자료를 간단히 정리하자.

  •   적외선 
  http://laonple.blog.me/220830099505
  https://www.axis.com/files/whitepaper/wp_ir_in_surveillance_72295_ko_1808_lo.pdf
  • 적외선의 이해 
  http://laonple.blog.me/220881752611

7/16/2017

Docker 기본환경설치 및 기본용어

1. Docker 기본구조 이해  

Virtual Machin 과 유사하게 아래처럼 각각의 Container 기반으로 Docker에서 동작되어지도록 구성되어진다.


자료
  https://www.aquasec.com/wiki/display/containers/Docker+Architecture

  1. Docker Engine:  Container 구동 및 통신, 설정 Docker에 관련된 것을 관리
  2. Container : Image를 실행하며, 환경설정 및 통신가능  
  3. Images : 상위 App/Bin/Libs 해당하며, 실행가능한 Image 

Docker 기본 명령어 파악
  https://docs.docker.com/engine/reference/commandline/docker/

Docker 기본용어   
  https://docs.docker.com/glossary/

Docker 제공하는 Sample들
  https://docs.docker.com/samples/

Docker Hub
현재 나도 가입을 했으며, Docker 사용을 위해서 가입을 하도록하자.
  https://hub.docker.com/

Docker Hub 의 기본사용법 
  https://docs.docker.com/get-started/#prepare-your-docker-environment
  https://docs.docker.com/network/#network-driver-summary
  https://docs.docker.com/engine/reference/commandline/stop/#options
  https://docs.docker.com/engine/reference/builder/#expose


1.1 Docker Old Version 설치 

Ubuntu 14.04_64bit LTS Version에서 설치 진행

  • Docker Old version Engine 설치 
$ sudo curl -sSL https://get.docker.com/ | sh
$ sudo apt-get update && apt-get upgrade
$ sudo apt-get install docker.io


  • Docker Old version Engine 제거 
제거하기전에 만약 사용하던 Container와 Image 및 연결된 설정파일도 같이 제거 한후에 실행하자.

$ sudo apt-get remove docker docker-engine docker.io

  • Docker Version 및 위치확인
현재 사용중인 Docker Engine의 Version과 설치된 위치를 파악하자.

$ sudo docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.2.1
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64

$ which docker         // docker 설치위치 파악 
/usr/bin/docker



  • Docker 기본사용법 

$ sudo docker --help // or man docker
[sudo] password for jhlee: 
Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.

Options:
  --api-cors-header=                   Set CORS headers in the remote API
  -b, --bridge=                        Attach containers to a network bridge
  --bip=                               Specify network bridge IP
  -D, --debug=false                    Enable debug mode
  -d, --daemon=false                   Enable daemon mode
  --default-ulimit=[]                  Set default ulimits for containers
  --dns=[]                             DNS server to use
  --dns-search=[]                      DNS search domains to use
  -e, --exec-driver=native             Exec driver to use
  --fixed-cidr=                        IPv4 subnet for fixed IPs
  --fixed-cidr-v6=                     IPv6 subnet for fixed IPs
  -G, --group=docker                   Group for the unix socket
  -g, --graph=/var/lib/docker          Root of the Docker runtime
  -H, --host=[]                        Daemon socket(s) to connect to
  -h, --help=false                     Print usage
  --icc=true                           Enable inter-container communication
  --insecure-registry=[]               Enable insecure registry communication
  --ip=0.0.0.0                         Default IP when binding container ports
  --ip-forward=true                    Enable net.ipv4.ip_forward
  --ip-masq=true                       Enable IP masquerading
  --iptables=true                      Enable addition of iptables rules
  --ipv6=false                         Enable IPv6 networking
  -l, --log-level=info                 Set the logging level
  --label=[]                           Set key=value labels to the daemon
  --log-driver=json-file               Containers logging driver
  --mtu=0                              Set the containers network MTU
  -p, --pidfile=/var/run/docker.pid    Path to use for daemon PID file
  --registry-mirror=[]                 Preferred Docker registry mirror
  -s, --storage-driver=                Storage driver to use
  --selinux-enabled=false              Enable selinux support
  --storage-opt=[]                     Set storage driver options
  --tls=false                          Use TLS; implied by --tlsverify
  --tlscacert=~/.docker/ca.pem         Trust certs signed only by this CA
  --tlscert=~/.docker/cert.pem         Path to TLS certificate file
  --tlskey=~/.docker/key.pem           Path to TLS key file
  --tlsverify=false                    Use TLS and verify the remote
  -v, --version=false                  Print version information and quit

Commands:
    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders from a container's filesystem to the host path
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container
    export    Stream the contents of a container as a tar archive
    history   Show the history of an image
    images    List images
    import    Create a new filesystem image from the contents of a tarball
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive
    login     Register or log in to a Docker registry server
    logout    Log out from a Docker registry server
    logs      Fetch the logs of a container
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT
    pause     Pause all processes within a container
    ps        List containers
    pull      Pull an image or a repository from a Docker registry server
    push      Push an image or a repository to a Docker registry server
    rename    Rename an existing container
    restart   Restart a running container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save an image to a tar archive
    search    Search for an image on the Docker Hub
    start     Start a stopped container
    stats     Display a stream of a containers' resource usage statistics
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Lookup the running processes of a container
    unpause   Unpause a paused container
    version   Show the Docker version information
    wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.



  • Docker run 사용법 
docker image를 container에 넣어 실행하는 동작으로 container가 생성이 되며 Proecess는 1개로 시작됨

$ docker run --help // or $ man docker run 

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

  -a, --attach=[]            Attach to STDIN, STDOUT or STDERR
  --add-host=[]              Add a custom host-to-IP mapping (host:ip)
  -c, --cpu-shares=0         CPU shares (relative weight)
  --cap-add=[]               Add Linux capabilities
  --cap-drop=[]              Drop Linux capabilities
  --cgroup-parent=           Optional parent cgroup for the container
  --cidfile=                 Write the container ID to the file
  --cpuset-cpus=             CPUs in which to allow execution (0-3, 0,1)
  -d, --detach=false         Run container in background and print container ID
  --device=[]                Add a host device to the container
  --dns=[]                   Set custom DNS servers
  --dns-search=[]            Set custom DNS search domains
  -e, --env=[]               Set environment variables
  --entrypoint=              Overwrite the default ENTRYPOINT of the image
  --env-file=[]              Read in a file of environment variables
  --expose=[]                Expose a port or a range of ports
  -h, --hostname=            Container host name
  --help=false               Print usage
  -i, --interactive=false    Keep STDIN open even if not attached
  --ipc=                     IPC namespace to use
  -l, --label=[]             Set meta data on a container
  --label-file=[]            Read in a line delimited file of labels
  --link=[]                  Add link to another container
  --log-driver=              Logging driver for container
  --lxc-conf=[]              Add custom lxc options
  -m, --memory=              Memory limit
  --mac-address=             Container MAC address (e.g. 92:d0:c6:0a:29:33)
  --memory-swap=             Total memory (memory + swap), '-1' to disable swap
  --name=                    Assign a name to the container
  --net=bridge               Set the Network mode for the container
  -P, --publish-all=false    Publish all exposed ports to random ports
  -p, --publish=[]           Publish a container's port(s) to the host
  --pid=                     PID namespace to use
  --privileged=false         Give extended privileges to this container
  --read-only=false          Mount the container's root filesystem as read only
  --restart=no               Restart policy to apply when a container exits
  --rm=false                 Automatically remove the container when it exits
  --security-opt=[]          Security Options
  --sig-proxy=true           Proxy received signals to the process
  -t, --tty=false            Allocate a pseudo-TTY
  -u, --user=                Username or UID (format: <name uid="">[:<group gid="">])
  --ulimit=[]                Ulimit options
  -v, --volume=[]            Bind mount a volume  (e.g., from the host: -v /host:/container, from Docker: -v /container)
  --volumes-from=[]          Mount volumes from the specified container(s)
  -w, --workdir=             Working directory inside the container


내가 설치한 docker.io는 오래된 Version이며, 현재는 docker.ce로 변경이 되어 운영된다.
일단 이전 Version으로 한번 설치를 해본 후에 최신 Version으로도 다시 해보자.

Docker Command Line
  https://docs.docker.com/engine/reference/commandline/cli/


1.2  Docker CE/EE 버전

docker.io 와 docker.ce 차이
  https://stackoverflow.com/questions/45023363/what-is-docker-io-in-relation-to-docker-ce-and-docker-ee
  https://docs.docker.com/install/linux/docker-ce/ubuntu/

  • Uninstall old version 
$ sudo apt-get remove docker docker-engine docker.io containerd runc


  • Set up Repository 
$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


$ sudo apt-key fingerprint 0EBFCD88
    
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) 
sub   rsa4096 2017-02-22 [S]


$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"



  • Install Docker CE

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

$ sudo docker version
Client:
 Version:           18.09.3
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        774a1f4
 Built:             Thu Feb 28 06:40:58 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.3
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       774a1f4
  Built:            Thu Feb 28 05:59:55 2019
  OS/Arch:          linux/amd64
  Experimental:     false


  • Uninstall Docker CE


$ sudo apt-get purge docker-ce
$ sudo rm -rf /var/lib/docker


7/12/2017

TensorFlow 관련자료링크 와 비교되는 Open Source

Tensorflow를 관련내용만 자료수집하며, 추후 사용할 일이 있다면, 별도로 공부를 해야할 것 같으며,  Deep Learning이나 Machine Learning에 대해 
구조적인 세부사항까지 알아야 할 것 같다. 

Tensorflow 공식사이트 
Google에서 만든 Deep/Machine Learning  Free Open Source로 현재 많이 사용 
  https://www.tensorflow.org/


Tensorflow 및 Machin Learning 강의자료 (책 및 Youtube)
  https://tensorflow.blog/

7/06/2017

계산기소스 분석

1. 계산기소스 분석 

Flex와 Bison을 이용한 기본적인 계산기 Program으로  Lex와 Yacc의 개념을 익히기에 가장 좋은것 같아 분석하기로 했다.

  • 관련소스 download 
  https://github.com/meyerd/flex-bison-example


1.1 기본소스 구성 

기본소스를 이해하기 전의 File구성과 Makefile의 구성이해하고 GCC를 사용하기 전까지의
절차를 정확하게 이해하고 이를 이해해보자.

상위 소스를 보면 아래와 같이 Flex과 Bison을 위한 File 밖에 존재하지 않는다.

$ tree
.
├── LICENSE  
├── Makefile
├── README
├── calc.l      // flex file 
└── calc.y      // bison file  

기본 Makefile의 구성을 알아보고 기본동작이 어떻게 동작이 되는 지 알아보자.

$ vi Makefile 
all: calc

calc.tab.c calc.tab.h:  calc.y
        bison -d calc.y

lex.yy.c: calc.l calc.tab.h
        flex calc.l

calc: lex.yy.c calc.tab.c calc.tab.h
        gcc -o calc calc.tab.c lex.yy.c

clean:
        rm calc calc.tab.c lex.yy.c calc.tab.h

Make를 실행을 하면 바로 calc이라는 프로그램이 나오지만, 과정이 어떻게 되어 나오는지 정확하게 알아보자

$ flex calc.l                          //   lex.yy.c   생성확인   
$ bison -d calc.y                      //   calc.tab.c , calc.tab.h 생성확인 
$ gcc -o calc calc.tab.c lex.yy.c      //   GCC를 이용하여 C File을 빌드 


2. Flex 기본특징 

Flex의 기본구조적인 특징은 거의 유사하며 메뉴얼을 보면서를 이해를 하자

  • definitions  

name     definition

  • rules        

definition  action


definitions
%%
rules
%%
user code


Input Format 과 Pattern
  http://dinosaur.compilertools.net/flex/flex_6.html#SEC6
  http://dinosaur.compilertools.net/flex/flex_7.html

Rule의 Action
  http://dinosaur.compilertools.net/flex/flex_9.html

2.1 계산기 Flex File 분석 

  • calc.l


7/01/2017

MSP430 Project 관리 및 Debug

1. CCSV6의 MSP430 지원 및 확인사항 

CCSv6에서는 현재의 MSP430을 지원 해주고 있지만 CCS의 Version에 따라 Compiler의 Version이 달라진다.

특히 MSP430의 TI Compiler 의 Version은 상당히 민감한 것 같다. 이부분은 반드시 확인을 해놔야 하며 ,
기존 TI Compiler version 을 사용할 수 있다면 기존 Version으로 사용하도록 노력해야겠다.

MSP430의 Compiler는 TI Compiler 와 GCC를 동시 지원해주고 있지만, Compiler에 따라 사용하는 방법 역시 조금씩 다르다.

특히 ISR 부분을 보면 다른 부분을 쉽게 알수 있을 것이다. Link Script인 *.cmd File과
연동하는 부분 역시 다르다.

  • MSP430 Debugger 확인
기본의 XDS와 다르게 아래의 전용 USB Debugger 사용
- MSP-FET430UIF

CCS Version에 따라 상위에 Firmware version이 변경이 될수 있으므로 가능하면 상위 Version을 사용하는것이 좋을 것 같다.

  http://www.ti.com/tool/msp-fet430uif

특징은 UART로 ISP(in-system programming)기능을 가지고 있으며, JTAG기능도 포함을 하고 있다. (이부분은 AVR과 동일)
MSP430으로 내부 Flash에 저장할때는 ISP를 이용하고, JTAG 관련하여 HW Debug 가능.


  • MSP430 CCS  User Manual
  https://drive.google.com/open?id=0B_ehveuLi8MVd2ZCS3d5bjR3RHM


1.1 CCS의 Project의 기본정보확인

아래에서 둘중 하나로 Project의 기본속성을 확인하고 Compiler version을 확인하고,
File Format 확인 하자


File->Properties 선택
General 확인

Project Explorer창에서 Project의 선택
우측 마우스 클릭 후 Property 선택
General 확인




  • CCSv6  MSP430 추가설치 
만약 본인의 CCSv6에서 MSP430관련부분이 없다면, 추가 Package로 설치를 해야한다.

  View->CCS App Center




1.2 MSP430의 Project 관리 (Properties 세부설정)  

상위 Project의 Properties를 세부 설정을 살펴보면 아래와 같다.
아래의 항목들은 참조하여도 좋다

CCS의 기본사용법에서 Project관리에 대한 설명을 하지 않은 것 같아 이부분을 추가설명하고자 이부분을 넣으며, 이 부분은 구지 MSP430으로 제한적으로 생각하지 말자.

  • CCS의 기본사용법 

  https://ahyuo.blogspot.com/2015/07/ccs-v6.html

  • CCS Project 생성 및 기본 Project 가져오는 방법 

  https://ahyuo.blogspot.kr/2017/06/ccsv6-project.html


  • Linked Resource (Link가 될때, 참조되는 PATH) 
   추가방법은 변수를 이용하던지 직접 추가하면, 본인의 Project에 추가가 된다.




  • Build->MSP430 Compiler->include Options
Include 에러가 났을 경우 아래를 검토하고, 만약 Configuration을 두개를 사용한다면 둘다 별도로 설정



  • General->Manage Configuration 

현재 Access Point와 End Device를 Application을 동시에 진행을 하기 때문아래와 같이 분리하여 진행하고 있다.



  • Build->MSP430 Compiler->Advanced Options->Predefined Symbols
   직접 define해서 사용해서 사용하고 있음



  • Build->MSP430 Compiler->Advanced Options->Command Files


  아래와 같이 End Device 와 Access Point 와 --define을 적용하여 사용하고 있다.




2. CCS를 이용한 Debug 소개

- MSP-FET430UIF

상위 Debugger가 ISP기능과 JTAG을 지원해주기 때문에,  CCS에서 JTAG을 이용한 고급 Debug기능이 가능하다.

*ISP기능은 일반적으로 Serial로 SPI통신으로 File을 Upload해주는 기술 (AVR도 동일하게사용)


소스를 빌드 후 Project에서 아래와 같이 *.out 생성되었다면 Debug 순서는 다음과 같다.

  1. Debug As->Code Composer Debug Session 실행  or F11 실행 or Run->Debug
  2. ISP로 Firmware Download 진행 
  3. CCS Debug 창에서 JTAG을 Debug 진행 




  • 실행 및 Debug 
빌드시 최종파일 형식은 A.out Format으로 나올 것이다. 그리고 또한 이 File에 Debug 정보를 포함하여
Debug를 시작하면 CMD 정보기반으로 MSP430의 Flash에 저장 및 RAM에 Loading 된다. 그리고 더불어 Source에서 Line에 더블 클릭을해서 HW Break pointer설정도 가능하여 JTAG기반의 Debugging도 가능하다.
Linkscript는  *.cmd  File로 해보면, 간단히 분석이 가능하며,쉽게 분석이 가능하다.

  • JTAG 기능 사용시 같이 봐야할 Debug기능 
  1. View->Register를 이용하여 각종 Register 확인 및 수정가능 
  2. View->Breakpointers: JTAG을 이용하여 소스에 BreakPointer를 설정가능 
  3. View->Variables: JTAG을 이용하여 Debug시 Suspend일 경우 변수 값을 볼수 있다.
  4. View->Expressions: JTAG을 이용하여 Variables 값을 추적하여 볼수 있다. 
  5. View->Disassembly: JTAG을 이용하여 Debug시 자동으로 Assembly 언어로 보여준다. 
  6. View->Modules: 현재 COFF (a.out) 파일의 정보 및 Symbol Table 정보를 정확하게 볼수 있다. 
  7. View->Outline : 현재 File의 함수이름과 전역변수 정보, Include 정보만 알려준다. 
  8. View->Other ( MSP430 -> Target)  MSP430의 Voltage도 감지가능

* 1번은 Suspend Mode에서 사용
* 2번은 Source의 Line에 더블클릭하고 설정하고, Breakpointers 창에서 이를 확인


2.1 CCS Debug 사용법 (JTAG Debug)
상위대로 ISP를 이용하여 진행하면, Source에 원하는 Line에 HW Break Point 사용하여, 관련 정보를 보는 것이 가능하다.
이 정보 뿐만 아니라, 현재 사용 중인 변수 값도 실시간으로 변화 값을 알수 있다.
정말 편리한 기능이므로 이용하여 사용해 보자.

  • View->Breakpoints
본인이 원하는 Source Line에 더블 Click하게 될 경우 아래에 Breakpoints 창에 추가가 된다.
View->Breakpoints를 설정하여 Debug를 설정
아래의 JTAG Debug 기능과 같이 사용해보고, Run Menu를 보면 다양한 기능을 제공해주고 있다.

  1. Run->Resume 
  2. Run->Suspend
  3. Run->Step info 
  4. Run->Step over
  5. Run->Step return 
  6. Run->Go Main 
  7. Run->Reset->Hard Reset or Soft Reset

아래의 창은 각각의 Source Line에 Breakpoint를 설정해 놓고 사용할 것 인지 설정하는 것이다.
한번 설정하면, 이 List에 기록이 되어져 있다.


  • View->Expressions

View->Expressions창은 본인이 원하는 전역변수 or Register를 직접추가하여 변수의 변화를 알수 있어 Debug하기가 쉬어진다.
다만 추가할 경우, 본인이 직접 이름을 추가해서 넣어야 한다.
그리고, 더불어 아래의 Disassembly 와 Source 창을 함께 놓고 보면 좋다.
Suspend Mode 일 경우 각 Source 창에서 변수를 마우스로 가르키면, 변수의 값을 알수 있다.


  • View->Variables
변수지만, Stack을 사용하는 Local 변수가 추적해주는 시스템이기에, 이것을 사용하기위해서는 상위의 Line 별로 Debug를 해야한다.
예를 들면, Step info 로 지속적으로 함수를 디버그하면 함수내의 변수 변화를 추적가능하다.





  • View->Registers 
Register 창을 이용하여 현재 MSP430의 상태를 정확하게 파악이 가능하며 Debug가 쉽다.
그리고, Expression에 이를 등록하여 봐도 된다.



  C:\ti\ccsv6\ccs_base\common\targetdb\boards
  C:\ti\ccsv6\ccs_base\common\targetdb\cpus

  http://processors.wiki.ti.com/index.php/Creating_Custom_Memory_Mapped_CCStudio_Register_Windows

  • View->Outline 과  View->Module 
View->Module창은 현재 올라간 COFF 파일의 Symbol Table 및 각종 정보를 쉽게 파악이 가능하며,
View->Outline은 현재 File의 함수 와 전역변수 및 Include 정보를 제공하여 쉽게 볼수 있다.




  • View->Memory Browser 
Pointer or RAM 의 Address를 정확한 정보를 보기 위해서 아래와 같이 본다.



2.2 CCS Debug 사용법 (Board 동작중)

상위는 항상 CCS에서 *.out을 ISP로 올려서 CCS로 Debug하는 방식이지만, 기본 동작 중에
Debugging 하고 싶을 경우가 발생한다.

** 2.1과 다른점은 ISP를 이용하지 않고, 보드가 동작 중에 CCS Debug를 사용하는 점이 다르다.
하지만 기능상의 제약은 따른다.


이럴 경우 아래와 같은 경우 절차로 실행하면 된다.
  1. View->Target Configuration 창 CCS Debug 추가 
  2. 본인의 *.ccxml을 선택 후 우측마우스 클릭 (MSP430F5438A.ccmxl)
  3. Launch selected configuration 실행 
  4. Run->Connect Target 실행 
  5. 각 View를 통해 현재의 정보를 확인 



아래와 같이 Target Configuration의 ccxml로 제어를 한다.





2.3 MSP430 의 기본 TEST 및 Debug

  • EVM 기본 TEST 
EVM 일 경우, 각 CLOCK 및 전류도 측정이 가능하여 다양하게 TEST가 가능하다.

  1. Clock 설정 후 각 CLOCK의 Output을 확인 ( ACLK, SMCLK, MLCK)  ( PINxSEL 확인)
  2. UCSI의 UART기능이 처음 구현이 되어있지 않다면 LED or 여분의 PIN을 이용하여 Debugging (스코프 이용)
  3. CCS는 Debug Mode를 적극 이용 


3. Hex File 생성 방법 

Hex File을 생성하는 방법을 소개하고 이를 이용하여 Flash하는 방법을 알아보자

IAR도 Hex File 생성이 가능하며 내 경우는 IAR에서 MSP430을 사용해보지 않았아서 이부분은 생략


3.1 CCS에서 Hex File 생성방법 

CCS에서 Hex File을 생성하는 방법을 제공을 하며 이를 이용하여 Gang으로 Flash가 가능하다.



  • How to Generate MSP430 Binary Files
MSP430의 HEX File 생성 시키는 방법

  http://processors.wiki.ti.com/index.php/Generating_and_Loading_MSP430_Binary_Files
  http://processors.wiki.ti.com/index.php/Hex_Utility_in_CCS


3.2  MSP-FET430UIF을 이용하여 Hex Flash 방법 


  • Hex File 기반으로 MSP430 Flash 하는 방법 
  Gang 과 MSP-FET430UIF 을 이용하여 Flash 방법소개
  https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/237820/833683


  • 방법-1 ( 사실 Gang의 위한 Program들) 
아래의 프로그램은 기본적으로 무료 프로그램은 아니며, 일단 유료지만, 무료로 이용가능한 기간이 있다
그리고, MSP-FET430UIF의 Firmware Version이 맞아야 제대로 동작이 가능하다.
이부분을 체크해야한다. 현재 Reset 만 확인했으며, 나의 경우는 Firmware Version이 맞지 않아 현재 Update 고려중

  https://www.elprotronic.com/productdata

  1. FET-Pro-430 Software Pkg. - LITE
  2. FET-Pro-430 Software Pkg. - STD

  • 방법-2 
아직 사용해보지 못한 방법
  http://www.ti.com/tool/msp430-flasher

  • 방법-3 
아직 사용해보지 못한 방법
  http://dlbeer.co.nz/mspdebug/


4. GDB관련정보 

Compiler를 GCC를 사용할 경우, GDB 사용하는 법

  http://processors.wiki.ti.com/index.php/GDB_with_MSP430_and_CCSv6