레이블이 Tools For Linux인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Tools For Linux인 게시물을 표시합니다. 모든 게시물 표시

10/02/2015

IMX6 YOCTO 기본개발환경 설정

1. iMX6  개발환경 

  • OS: ubuntu-14.04.3 LTS version  (ubuntu-14.04.3-desktop-i386)
  • 개발환경: yocto project 사용 

1.1 Ubuntu 관련설정

  • Ubuntu Package 필요 설치 
Ubuntu 기반으로 기본으로 설치되어져야 하는 Package들로 관련 Manaul 참조
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm

  • 추가적으로 필요한 Package (옵션)
내가 사용하기 위해서 아래 Package들 설치 
$ sudo apt-get install curl
$ sudo sudo apt-get install tree 


  • 커널설정시 문제가 발생
아래와 같이 Kernel 설정을 하려고 하는데, 문제가 발생을 할 경우 ncurse library 설치 
$ make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.

보통기본으로 설치되어있는데, 흐음 
$ sudo apt-get install libncurses5-dev 


Yocto 의 Quick Gude
만약 다른 OS라면, 아래 사이트 혹은 iMX6의 문서를 참고해서  환경설정하자
    http://www.yoctoproject.org/docs/1.8/yocto-project-qs/yocto-project-qs.html


1.2 git 와 repo 설정 

Yocto는 Git 과 repo 기반으로 동작하기 때문에 GIT과 Repo 기반으로 Download 및 관련설정을 해주자.

  • git 설정 
$ git config --global user.name "JeonghunLee" 
$ git config --global user.email "xxx@xxxxx" 
$ git config --list 

  • repo 설정(Git Control)
$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ vi ~/.bashrc    // add following setting 
          PATH=$PATH:~/bin
$ chmod a+x ~/bin/repo



2. IMX6 Yocto 개발관련 문서 

아래의 사이트에서 Yocto 기반으로 BSP를 설치하는 문서가 존재하며, 각각의 BSP Porting 및 관련사항의 문서를 볼 수 있다.
Yocto의 경우 가장먼저 Chip vendor사의 Manual 부터 반드시 확인하고, 관련사항을 점검하도록하자. 
현재 Freescale의 i.MX6는 Yocto 기반으로 Release Version 과 Community Version을 제공하고 있으며 관련부분을 설치하고 진행하자
두 Version의 차이는 일단 공식 Release version 과 Community Version의 차이는 공식 버전과 개발버전의 차이 인것 같다.


Yocto를  Download 위치 와 setup 설정방법 차이가 존재하지만 사용방법은 거의 동일하다
각 두가지 버전을 설치진행을 해보도록하자 


2.1 Yocto release version 설치  

i.MX6의 Release Version으로 설치진행 및 확인 

  • i.MX6 개발문서 
  1. fsl-yocto-3.10.17_1.0.0.tar.gz
  2. fsl-yocto-3.14.28-1.0.0.tar.gz

상위 파일안에, Freescale_Yocto_Project_User's_Guide 문서에  사용방법이 잘 서술이 되어있으며,
아래와 같이 QT를 이용한 빌드방법도 소개하고 있으나, 현재 이방법으로 하지 않는다.

문서의 예제 5.6.2 FB image on i.MX 6Quad SABRE-AI
  • Release  sources download 
$ mkdir fsl-release-bsp   //release version 이 아님 

$ repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.10.53-1.1.0_ga

$ repo sync 


  • Yocto 개발설정 (release 용)
bitbake가 동작되지 않을 경우 재 설정을 해주자
MACHINE에 본인의 Reference Board의 를 설정하고 아래와 같이 build directory를 생성

$ MACHINE=imx6qsabreauto source fsl-setup-release.sh –b build-fb –e fb  
// build-fb directory 생성되며 conf/local.conf 생성 후 자동으로 이 위치로 이동  


  • 본인이 원하는 배포버전으로 빌드진행  
$ bitbake fsl-image-qt5  // QT5지원가능 
// build 가 진행되면서 각각의 소스를 download를 하며 build를 진행
or 
$ bitbake core-image-base
// 기존으로 QT5가 포함 빼고자 하면 fsl-image-gui로 진행 (This builds QT5 on a frame buffer backend) To build without QT5, use image recipe fsl-image-gui.


  • bitbake로 빌드 후 이미지 확인 (uboot/kernel/rootfs)
최종 Image가 상위 MACHINE과 이름이 동일하게 생성 
./build/tmp/deploy/images/machine/imx6qsabreauto


2.2 Yocto community version 설치 

Release Version과 거의 동일하며, 어려움이 없이 쉽게 가능하다. 

  • Community sources download 
$ mkdir fsl-community-bsp   //release version 이 아님 

$ cd fsl-community-bsp

$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master  //(master can be fido or master-next for newer one)

$ repo sync


  • Yocto 개발설정  (community) 
bitbake 관련 명령어가 동작되지 않을 경우 아래와 같이 재설정
$ source setup-environment build  //build directory 생성이 되며 기본 설정인 conf/local.conf 설정 

  • build/conf/local.conf 설정  
$ pwd  
/home/jhlee/IMX6/fsl-community-bsp/build 

$ vi conf/local.conf
MACHINE ??= 'imx6qsabreauto'
DISTRO ?= 'poky'
PACKAGE_CLASSES ?= "package_rpm"

#### modified ################################
EXTRA_IMAGE_FEATURES = "debug-tweaks ssh-server-openssh tools-sdk"

IMAGE_INSTALL_append += " icu directfb"
DISTRO_FEATURES_remove = "x11 wayland"
DISTRO_FEATURES_append = " directfb"
#### end of modified ##########################

USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
    STOPTASKS,${TMPDIR},1G,100K \
    STOPTASKS,${DL_DIR},1G,100K \
    STOPTASKS,${SSTATE_DIR},1G,100K \
    STOPTASKS,/tmp,100M,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K \
    ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
ASSUME_PROVIDED += "libsdl-native"
CONF_VERSION = "1"

BB_NUMBER_THREADS = '4'        // BITBAKE THREAD 수 
PARALLEL_MAKE = '-j 4'              // Make 동작시 패러럴 옵션      4x4 = 16 

DL_DIR ?= "${BSPDIR}/downloads/"
ACCEPT_FSL_EULA = "1"

#OE_TERMINAL = "screen"           // ssh창에서 menuconfig위해 추가했으나 별효과가 없음 


  • 본인이 원하는 배포버전으로 빌드진행 
각 빌드시간마다 상당한 시간이 걸리며, 내 PC에서 5시간 이상걸리는 것 같다.
한번 확인하기가 너무 오래걸리며, 인내하고 참자.

$ bitbake qt4e-demo-image (or core-image-base)    
$ bitbake meta-toolchain-qte (for toolchain sdk)

  • bitbake로 빌드 후 이미지 확인 (uboot/kernel/rootfs)
./build/tmp/deploy/images/machine/imx6qsabreauto


  • 각 디렉토리 를  트리구조 확인하여 분석 
상위에서 설치한 tree package로 각 구조를 File 구조 및 관련사항을 파악
$ tree -d -L 2 -A


3. bitbake 이외 명령어들 확인 

yocto setup을 진행한 후 bitbake는 사용가능하며, 이외에도 아래와 같은 bitbake 관련명령어들이 존재하므로 각각 실행해보자

$ bitbake-layers show-layers  // Layer 구성을 보여준다 

layer                 path                                      priority
==========================================================================
meta                  /home/jhlee/IMX6/fsl-community-bsp/sources/poky/meta  5
meta-yocto            /home/jhlee/IMX6/fsl-community-bsp/sources/poky/meta-yocto  5
meta-oe               /home/jhlee/IMX6/fsl-community-bsp/sources/meta-openembedded/meta-oe  6
meta-multimedia       /home/jhlee/IMX6/fsl-community-bsp/sources/meta-openembedded/meta-multimedia  6
meta-fsl-arm          /home/jhlee/IMX6/fsl-community-bsp/sources/meta-fsl-arm  5
meta-fsl-arm-extra    /home/jhlee/IMX6/fsl-community-bsp/sources/meta-fsl-arm-extra  4
meta-fsl-demos        /home/jhlee/IMX6/fsl-community-bsp/sources/meta-fsl-demos  4

$ bitbake-layers show-recipes  // bitbake의 recipes들을 보여준다. 

// release or community version으로 setup을 하면 build directory 생성과 함께 build/conf/local.conf 와 build/conf/bblayers.conf 생성됨  
// 다만 release 와 comminity 가 setup하는 방법은 다름 

$ vi conf/bblayers.conf   // 상위의 show-layers 부분을 확인 
BBLAYERS = " \
  ${BSPDIR}/sources/poky/meta \
  ${BSPDIR}/sources/poky/meta-yocto \
  \
  ${BSPDIR}/sources/meta-openembedded/meta-oe \
  ${BSPDIR}/sources/meta-openembedded/meta-multimedia \
  \
  ${BSPDIR}/sources/meta-fsl-arm \
  ${BSPDIR}/sources/meta-fsl-arm-extra \
  ${BSPDIR}/sources/meta-fsl-demos \

Freescale의 p1020rdb 예제로 참고만하자
  http://forum.falinux.com/zbxe/index.php?document_srl=828316&mid=lecture_tip


9/08/2015

TCPDUMP 사용법

1. TCPDUMP 란?

wireshark(ethereal)에서 window에서 winpcap기능이라고 생각하면 되겠다.
ethernet에서 들어온 packet을 libpcap을 이용하여 capture를 한다.
tcpdump는 이를 필터링하여 보여주는 프로그램이다. (option으로 필터링이 가능)

  • TCPDUMP 사용 옵션
        tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
               [ -c count ]
               [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
               [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
               [ --number ] [ -Q in|out|inout ]
               [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
               [ --time-stamp-precision=tstamp_precision ]
               [ --immediate-mode ] [ --version ]
               [ expression ]


  https://linux.die.net/man/8/tcpdump

  • TCPDUMP 사용법 
tcpdump와 각 network interface 정의한 후 ssh server가 지원이 가능하다면, scp or sftp로 쉽게 가져오자

// Target Device
$ tcpdump -i eth0 -w data.pcap  // wireshark로 보기위해 저장 scp or sftp로 전송 
// Host Device 
$ scp or sftp로 data.pcap를 가져와서 wireshark로 분석 

상위에는 모든 Packet을 잡지만, Filter를 적용하여 원하는 packet만 capture 진행

  • Capture 시 필터 사용방법 
$ tcpdump -i eth0 port 80 -w data.pcap  // Filter 적용하여 저장 
$ tcpdump -i eth0 tcp port 8080   //  tcp port 8080만 필터 
$ tcpdump -i eth0 udp port 4433   //  udp port 4433만 필터 
$ tcpdump -i eth0 src port 1080   //  src port 1080만 필터  
$ tcpdump -i eth0 src 192.168.0.11 and dst 192.168.0.22     
$ tcpdump -i eth0 tcp          
$ tcpdump -i eth0 udp  

$ tcpdump -l | tee data.pcap  // 동일하게 data.pcap 저장  
$ tcpdump -l > dat & tail -f dat


  • Capture 된 Packet 분석 
$ tcpdum -r data.pcap  // 저장된 Packet 분석  
$ tcpdum -Xqnr data.pcap  // ASCII 값으로 분석 


  • 자세한 사용법
    http://wiki.pchero21.com/wiki/Tcpdump
    http://itnews.tistory.com/218
    https://www.tcpdump.org/manpages/tcpdump.1.html

  • How to build TCPDUMP on ARM  
    wireshark 처럼 libpcap은 필수 이며, tcpdump를 설치해야함
    http://dark2pee.tistory.com/entry/DM368-tcpdump-compile


1.1 SCP 사용방법 


  • Window 7/10  SCP Batch File 작성 Example

@ECHO OFF
TITLE WINDOW SCP EXAMPLE
ECHO ------------------------------------------------------------------------------------------------------
ECHO ---------------------------      Download         ---------------------------------------------------
ECHO ------------------------------------------------------------------------------------------------------
scp jhlee@192.168.1.10:/home/jhlee/test  .
PAUSE 

상위와 같이 Linux SSH Linux Server 로 접속하여 Window에서 가져오기
or
Window 의 경우  SSH Terminal Program SCP/SFTP를 지원을 해주는 프로그램사용
xshell,teraterm

  https://www.howtogeek.com/66776/how-to-remotely-copy-files-over-ssh-without-entering-your-password/


2. TCPDUMP의 Wireshark 분석

위 설명처럼 *.data를 download를 받아 wireshark를 이용하여 분석하자

아래의 링크예는 -s를 주어 packet의 양을 설정하는데, 귀찮아서 ctrl+c가 편함
   https://www.wireshark.org/docs/wsug_html_chunked/AppToolstcpdump.html


  •    linux에서 tcpdump로 잡은 dhcpd.cap 분석




1/04/2014

Linux 소스 분석 Tools

1. Linux 소스 분석 Tools

linux에서 사용하는 편집기는 vim를 사용하며, 소스분석을 간편하게 도와 주는 것이
ctags이다. 그리고 이 부족한 부분을 메워주는 것이 cscope인데, 사실 cscope는 잘사용하지 않게되는 것 같다.


2. How To install tools 

 $ sudo apt-get install vim ctags cscope 

편집기 vim과 catag과 csope를 설치하자.


3. CTAGS 생성 및 CSCOPE 파일 생성


 $ cd ~/linux   // kernel 로 이동 
 $ ctags -R    // tags file 생성  
 $ ls -l tags  // tags 생성확인  


 $ cat./mkcscope.sh
#!/bin/sh
rm -rf cscope.files cscope.files
find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print>cscope.files
cscope -i cscope.files 

$ cd ~/linux        // kernel 로 이동 
$ ./mkcscope.sh     // cscope.file 생성 
$ ls cscope.files   // cscope.file 확인 


4. 관련설정 


$ vi ~/.vimrc
set tags=./tags 
set tags+=~/am437x/works/board-support/u-boot-2014.07+gitAUTOINC+fb6ab76dad-gfb6ab76/tags

set csprg=/usr/bin/cscope

set csto=0 “(숫자 0)
set cst
set nocsverb

if filereadable(“./cscope.out”)
cs add cscope.out
else
cs add /usr/src/linux/cscope.out
endif
set csverb


5. 사용법 

기본적으로 vim에서 연결하여 동작하도록 하며, 아래와 같이 명령을 주어 사용한다.

5.1 CTAGS 기본 사용법

 
Ctrl+]          :  커서에 위치한 정의된 함수로 이동 
Ctrl+t          :  이전위치로 이동 
:ts keyword     :  keyword와 일치하는 태그목록 출력하고 선택한다
:tj keyword     :  ts와 동일하지만 목록이 한개일 경우 해당태그로 이동, 두개 이상 출력
:sts keyword    : tj와 유사하나 새창에 관련정보 출력  
:ta /keyword    :  keyword가 포함된 태그를 검색

:tn             : 다음 태그 이동
:tp             : 이전 태그 이동
tags            : 이동한 태그 히스토리 출력 

5.2 CSCOPE 기본 사용법 

 
:cs help
:cs find c symbol

:cs help
syntax on  : 구문강조 기능 사용
cscope 명령:
add  : 새 데이터베이스 더하기         (사용법: add file|dir [pre-path] [flags])
find : Query for a pattern            (사용법: find c|d|e|f|g|i|s|t name)
       c: 이 함수를 부르는 함수들 찾기
       d: 이 함수에 의해 불려지는 함수들 찾기
       e: 이 egrep 패턴 찾기
       f: 이 파일 찾기
       g: 이 정의 찾기
       i: 이 파일을 포함하는 파일들 찾기
       s: 이 C 심볼 찾기
       t: 이 문자열 찾기
help : 이 메시지 보이기               (사용법: help)
kill : 연결 끊기                      (사용법: kill #)
reset: 모든 연결 다시 초기화          (사용법: reset)
show : 연결 보여주기                  (사용법: show)


https://ysoh.wordpress.com/2012/04/09/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%EA%B0%9C%EB%B0%9C%EC%9D%84-%EC%9C%84%ED%95%9C-vim-%EC%84%A4%EC%A0%95-vimrc/

http://treetale.iptime.org/wordpress/946