검색어 sudo apt-get install ctags에 대한 글을 관련성을 기준으로 정렬하여 표시합니다. 날짜순 정렬 모든 글 표시
검색어 sudo apt-get install ctags에 대한 글을 관련성을 기준으로 정렬하여 표시합니다. 날짜순 정렬 모든 글 표시

2/26/2015

VI 편집기 수정중 (추후정리)

1. VI 편집기 

처음으로 리눅스 및 유닉스를 접하면서 다룬 편집기이며, 다루기도 복잡하지만 보편적인 편집기인 것 같다. 그래서 필수적으로 기본 명령어와 기본 설정정도는 알아둬야하는 것 같다.

1.1 VI,VIM의 기본설정  

  • VIM 설치 

$ sudo apt-get install vim 

  • 탭사이즈 조절 및 Line Number 설정
$ vi ~/.vimrc
set ts=4
set nu      
set ruler
set title
"  "주석  


set ts=4  :  tab size 설정
set nu     :   set number   좌측에 line number 표시
set ruler  :  현재 cursor 위치 표시


1.2 소스분석시 필요한 설정

$ sudo apt-get install ctags cscope 

  • CTAGS 추가  (./vimrc 변경) 
$ vi ~/.vimrc
set tags=./tags,tags    " 
set tags +=~/qtwork/kernel/tags           
"set tags+=~/am437x/works/board-support/u-boot-2014.07+gitAUTOINC+fb6ab76dad-gfb6ab76/tags
"set tags+=~/dm368/mt5/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/kernel/tags
  • CSCOPE 추가  (./vimrc 변경) 
$ vi ~/.vimrc
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
if filereadable("./cscope.out")
    cs add cscope.out
else
    cs add /usr/src/linux/cscope.out
endif
set csverb

  • CSCOPE File 관련 생성 

$ vi 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


상위와 같이 실행하면, 자동으로 cscope가 실행이 되는데, 이때
ctrl+z 로 나가면 된다.

2. VIM의 모드구성

Normal Mode가 Default 이며, 다른모드에서 ESC를 클릭시 Normal로 돌아온다.

  1. Normal Mode : vi로 file open 했을 경우 처음 기본모드 (default)
  2. Insert   Mode : Normal 에서 'i' , 'a', 'o', 's'  입력시 편집가능
  3. Visual   Mode : Normal 'v'

  • Command 이용 및 sed와 유사한 기능 실행 

Normal Mode는 ':'를 이용하여 Command가 실행이 가능하며, sed와 같은 script도 가능하다
'/' 를 이용하여 정의하고 검색도 가능하다


  https://wiki.kldp.org/KoreanDoc/html/Vim_Guide-KLDP/Vim_Guide-KLDP.html
  http://idkwim.tistory.com/66

2.1 단축키 생성 및 치환기능 

Visual 모드에서 아래와 같이 각각의 명령을 이용하여 vi 내부에서 사용되는 기본명령 및 다른 기능들을 단축키로 대체 가능하다.

솔직히 거의 잘 사용하지 않으며,  그냥 알아두기만 하고 추후 사용할 일 있으때 그때보자.

nmap, map, vmap, imap,

일단 nmap에 대해 간단히 알아보자.
위의 visual mode에서 아래와 같이 실행을 해보자.

:nmap - dd
:nmap \ -

위와 같이 실행을 하면,  - 키를 입력하면 자동으로 dd가 실행이되어 한줄이 삭제된다.
\ 키를 입력을 하여도 동일하다.
nmap은 명령어를 mapping 시켜준다.

아래와 같이 실행을 하면, 위에서 mapping 했던 설정이 제거된다.

:nunmap -
:nunmap \


ex) :map _ ddp
'_'를 누르면 해당 줄을 아래로 내림

하지만 입력모드에서 언더스코어는 코딩할 때 자주 쓰이므로, 노멀모드에서만 동작하도록 해야 합니다. 이 때는 모드의 머릿글자+map 으로 동작 범위를 제한할 수 있습니다.

ex) :nmap _ ddp
그런데 만약, p 키를 다른 명령에 맵핑했다면 어떻게 될까요. _ 를 누르면 현재 줄을 삭제하고 p에 할당된 작업을 수행합니다. 따라서 맵핑을 작성할 때는 키시퀀스에 할당된 기능이 아닌 맵핑된 기능만을 처리하도록 해야 합니다.

:noremap _ ddp
noremap 은 키 시퀀스에 맵핑된 기능이 있어도 무시하고 디폴트 기능만을 수행하도록 합니다. 역시 모드의 머릿글자와 덧붙여서 조합이 가능합니다.
그러면 noremap 은 언제 사용해야 할까요? 언제 어떤 맵핑을 추가할지 모르니, "항상" 이렇게 사용해야 합니다.

:help nmap

관련 Manual

    http://learnvimscriptthehardway.stevelosh.com/chapters/05.html
    http://sunshowers.tistory.com/61
    http://jaeheeship.github.io/console/2013/11/15/vimrc-configuration.html


2.2 Command 기본실행 

Normal Mode에서 ':' 을 실행을 하면 sed와 같은 script 구사가 쉽게 가능하며,
':!'를 이용하여 Linux Command를 편집기 안에서 실행이 가능하다.


  • 문자열 치환기능 
기본기능은 sed와 동일하게 s/pattern/pattern/g   g는 전체의 의미
pattern 내부에 /가 존재한다면 \을 이용하여 구분해줘야 한다.

:1,10s/old/new/g :
:3,$s/old/new/g  : line3 부터 설정 끝까지 검색하고 치환
:s/old/new/g     :  전체 치환



  • 복사 및 이동 
Normal Mode에서 기본복사는 'yy'  or  '5yy' , 1줄 or 5줄 복사 하고 원하는 곳에 'p' 붙혀넣기 동작이다.
하지만 Command 이용하여 복사가 아래와 같이 가능하다.  
아래의 실행하기전에 : se nu로 line의 소스의 숫자를 확인하자.

: 1,5 co 7    : 1 ~5 을 line 7 기준으로 다음줄에 복사
: 1,5 t 7     : 1 ~5 을 line 7  기준으로 다음줄에 복사
: 2,4 m 7    : 2 ~4 을 line 7  기준으로 다음줄로 이동



  • 삭제기능 
Normal Mode에서 기본복사는 'dd' or '5dd' , 1줄 삭제 or 5줄 삭제가 가능하지만, Command를 이용하여 가능하다.

:5,10d     : 5~ 10 line 삭제

  • 검색기능 
Normal Mode에서 원하는 단어 위치에서 '*' 지속적으로 누르면 그 단어를 계속 찾아준다.
동일한 기능으로 '/pattern'  하고 'n'을 지속적으로 누르면 이를 지속적으로 찾는다.

define 찾기의 예제 
'/define' 입력 후  n 지속적입력  아래로 검색  'N' 반대방향
'?define' 입력 후  n 지속적입력  위로 검색    'N' 반대방향 


  • 뒤줄에 특수문자 "," 추가 

//1~10 line에 , 추가
:1,10s/$/\,/g

//전체 추가
:%s/$/\,/g


  • 앞줄에 추가 "foo:" 추가 
:10,20s/^/foo: /

:%s/^/foo: /




2.3 Command 확장 

vi가 window 처럼 이용이 되고 window의 다른 editor처럼 편하다면 좋겠지만, 이를 유사하게 사용이 가능하다.

  • Window 처럼 Tab 기능 사용 
vi 내부에서 여러문서를 읽고 편집하기위해서 tab 기능을 사용하며, 상위에 tab이 표시된다.

: tabnew  test.c  : 새로운 탭(문서창)을 작성한다.   ,
: tabnext           : 다음 탭(문서창)을 보여준다.
: tabprev           : 이전 탭(문서창)을 보여준다.
: tabclose          : 현재 탭(문서창)을 닫는다.


각 tab의 제거는 q! or x(save하고 exit) or tabclose 이지만 귀찮다.
위 명령은 길어서 사용하기 힘들다면,  vi ~/.vimrc 열어 단축 단어 설정하자.

$ vi ~/.vimrc
nmap th :tabprev
nmap tl :tabnext
nmap tn :tabnew       
nmap tc :tabclose

  http://vim.wikia.com/wiki/Using_tab_pages


  • 창 분할 
Tab기능과 별도로 현재의 창을 분할하여 File을 열고 닫을수도 있다.


:split 파일명    // 세로 창 분할  위아래 분할
:vs  파일명      // 가로 창 분할   좌우 분할
//Ctrl+w를 누른 후 w 창이동



  • 창분할 의 고급 (탐색기 처럼사용)
앞에 숫자를 넣으면 창의 크기가 결정이 되며, File 명 대신 Directory를 선택시 탐색기로이용


:30vs./     : 30은 세로창의 사이즈이며, ./ 디렉토리 열어 탐색기처럼 사용하여 File open
:split./     :  가로창을 현재 디렉토리 열어 탐색기처럼 사용하여 File open

  • HEX Editor (현재 많이 이용중)
 
:!%xxd
:!%xxd -r



3. Xshell 설정의 단축버튼설정 

Xshell에는 총 12개의 단축버튼이 있으며, vim을 사용할때 이 단축버튼을 각각의 기능에 연결하여 CTAGS/CSCOPE 사용하자.

 VIM에서 사용하는 CTAGS/CSCOPE 기능 
:tj  //TAG 검색
:sts tj   //새창 검색
:tn      //다음태그
:tp     //이전태그  
:tags   //태그 히스토리
:cs find c   // 부른함수
:cs find d   // 불려진함수 
:cs find s   // C심볼
:tabnew      // 새창 
:tabnext     // 다음탭
:tabprev     // 이전탭
:tabclose    // 탭닫기


단축버튼을 만들 경우 반드시 CR을 확인하자 (new line)



Xshell에서 도구->단축버트모음
별도저장 및 다른 기능을 저장


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

12/08/2016

DM814x SDK 설치 및 관련 설정

1. EZSDK 설치

수정중
Memory Map 과 구조도 및 Firmware 이해 필요,
Linux File system 부분 수정 부분

1.1 GCC Tool Chain and SDK Download 

  • arm-2009q1-203-arm-none-linux-gnueabi.bin (Code Sourcery ARM GCC Tool Chain)
  • ezsdk_dm814x-evm_5_05_02_00_setuplinux
  http://www.ti.com/tool/linuxezsdk-davinci

1.2 개발환경구성 

  • 환경변수 재설정
아래의 환경변수는 CROSS_COMPILE과 INSTALL_MOD_PATH 등 Makefile과 Rule.make를
보고 필요한부분을 넣었다.
기본정의 Rule.make에 정의가 되어있으면 동작이 제대로 되어야겠지만,
본인이 원하는 대로 동작이 안된다면, 두 파일을 비교하여 오동작되는 부분을 파악해서
환경변수 고치던지 하는것이 편할 것이다.
나는 source 를 이용하여 아래와 같이 그냥 외부에서 설정을 해놓았다.  

$ vi setPATH.sh
#!/bin/sh
# source setPATH.sh
# INSTALL_MOD_PATH : Kernel Module 
# SYSLINK_INSTALL_DIR : syslink.ko 

export PATH=$PATH:/home/jhlee/dm8148/CodeSourcery/Sourcery_G++_Lite/bin
export EZSDK="${HOME}/dm8148/ti-ezsdk_dm814x-evm_xx_xx_xx_xx" 
export CROSS_COMPILE=arm-none-linux-gnueabi-
export ARCH=arm

export INSTALL_MOD_PATH="${HOME}/dm8148/targetfs"     // Kernel module    

$ source setPATH.sh 

  • 개발환경구성설정 (TI에서 제공)
  1. NFS Server 환경구성 
  2. TFTP 설정 
$ cd ~/dm8148/ti-ezsdk_dm814x-evm_5_05_02_00 
$./setup.sh              // 자동으로 설정 NFS/TFTP 



1.3 EZSDK 설치시 구조 및 빌드방법



  • EZSDK 설치시 구조

$ cd ~/dm8148/ti-ezsdk_dm814x-evm_5_05_02_00 
$ tree -d -L 2 
.
├── bin
├── board-support
│   ├── docs
│   ├── external-linux-kernel-modules
│   ├── host-tools
│   ├── linux-2.6.37-psp04.04.00.01
│   ├── media-controller-utils_3_00_00_05
│   ├── prebuilt-images
│   └── u-boot-2010.06-psp04.04.00.01
├── component-sources
│   ├── bios_6_33_05_46
│   ├── c674x-aaclcdec_01_41_00_00_elf
│   ├── codec_engine_3_22_01_06
│   ├── edma3lld_02_11_05_02
│   ├── framework_components_3_22_01_07
│   ├── graphics-sdk_4.04.00.02
│   ├── gst-openmax_GST_DM81XX_00_07_00_00
│   ├── ipc_1_24_03_32
│   ├── linuxutils_3_22_00_02
│   ├── omx_05_02_00_48
│   ├── osal_1_22_01_09
│   ├── rpe_1_00_01_13
│   ├── slog_04_00_00_02
│   ├── syslink_2_20_02_20
│   ├── uia_1_01_01_14
│   ├── xdais_7_22_00_03
│   └── xdctools_3_23_03_53
├── docs
│   └── licenses
├── dsp-devkit
│   ├── cgt6x_7_3_4
│   ├── docs
│   └── packages
├── etc
├── example-applications
│   ├── am-benchmarks-1.1
│   ├── am-sysinfo-1.0
│   ├── linux-driver-examples-psp04.04.00.01
│   ├── matrix-gui-e-1.3
│   └── omtb_01_00_01_07
├── filesystem
├── linux-devkit
│   ├── arm-none-linux-gnueabi
│   ├── bin
│   ├── etc
│   ├── include
│   ├── lib
│   ├── mkspecs
│   ├── share
│   └── usr
└── usr
    ├── lib
    └── share


$ vi Rules.make  // 아래와 같이 수정 
....
#EXEC_DIR=/home/jhlee/dm8148/targetfs/home/root/dm814x-evm   // 기본으로 이것으로 설정하며, 진행한다. 
EXEC_DIR=/home/jhlee/dm8148/targetfs                         // 필요한 것이 있다면 그 때만 이것으로 설정 
                     // 위와 같이 진행하지 않으면 Filesystem이 필요없는것을 다 포함하게되어서 커진다. 

//예를들어 아래와 같이 진행하면, EXEC_DIR/usr/lib/....   설치되므로 필요할때만 위와 같이 변경 
$ make syslink
$ make syslink_install  

//전체 명령어 확인 및 Install 될 주소 확인                                                                
$ make help

Available build targets are  :

    components_linux               : Build the Linux components
    components_dsp                 : Build the DSP components
    components                     : Build the components for which a rebuild is necessary to enable all other build targets listed below. You must do this at least once upon installation prior to attempting the other targets.
    components_clean               : Remove files generated by the 'components' target

    apps                           : Build all Examples, Demos and Applications
    apps_clean                     : Remove all files generated by 'apps' target
    install                        : Install all Examples, Demos and Applications the targets in /home/jhlee/dm8148/targetfs/home/root/dm814x-evm

    linux-devkit                   : Populate the linux devkit
    dsp-devkit                     : Populate the dsp devkit

    cmem                           : Build the CMEM kernel module
    cmem_clean                     : Remove generated cmem files.
    cmem_install                   : Install cmemk module

    syslink                        : Configure and build SYS Link for HLOS and HLOS without sample examples
    syslink_clean                  : Remove generated SysLink files
    syslink_install                : Install HLOS and RTOS link files

    linux                          : Build Linux kernel uImage and module
    linux_clean                    : Remove generated Linux kernel files
    linux_install                  : Install kernel binary and  modules

    u-boot                         : Build the u-boot boot loader
    u-boot_clean                   : Remove generated u-boot files
    u-boot_install                 : Install the u-boot image

    psp-examples                   : Build the driver examples
    psp-examples_clean             : Remove generated driver example files
    psp-examples_install           : Install the psp examples

    osal                           : Build the OSAL
    osal_clean                     : Remove generated OSAL files

    matrix                         : Build matrix application launcher
    matrix_clean                   : Remove all matrix files
    matrix_install                 : Install matrix

    omx                            : Build OMX and OMX IL Clients
    omx_clean                      : Remove OMX generated files
    omx_install                    : Install OMX IL Clients

    omtb                           : Build OMTB IL Clients
    omtb_clean                     : Remove OMTB generated files
    omtb_install                   : Install OMTB IL Clients

    media-controller-utils         : Build media controller utils
    media-controller-utils_clean   : Remove media controller utils generated files
    media-controller-utils_install : Install media controller utils

    edma3lld                       : Build the EDMA3LLD Libraries
    edma3lld_clean                 : Remove generated EDMA3LLD files

    sgx-driver                     : Build SGX kernel module
    sgx-driver_clean               : Remove SGX generated files
    sgx-driver_install             : Install SGX kernel module

    gstomx                         : Build TI GST OpenMax Plugin
    gstomx_clean                   : Remove TI GST OpenMax generated files
    gstomx_install                 : Install TI GST OpenMax Plugin

    rpe                            : Build Remote Processor Execute
    rpe_clean                      : Remove Remote Processor Execute generated files
    rpe_install                    : Install Remote Processor Execute

    all                            : Rebuild everything
    clean                          : Remove all generated files

    install                        : Install all the targets in 
                            /home/jhlee/dm8148/targetfs/home/root/dm814x-evm // 중요: EXEC_DIR 수정 후 변경됨 


  • TI에서 제공하는 User Manual
  http://processors.wiki.ti.com/index.php/Category:EZSDK

  http://developer.ridgerun.com/wiki/index.php/Getting_Started_Guide_for_DM8148_EVM

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

  http://processors.wiki.ti.com/index.php/DM814x_AM387x_PSP_User_Guide#Linux_Kernel

1.4 Video TEST

  • MPEG4 HDMI Decoding TEST 
$ gst-launch filesrc location= test1.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! omx_videosink enable-last-buffer=false

  • IP Camera TEST
$ gst-launch -v rtspsrc location=rtsp://192.168.1.168:8556/PSIA/Streaming/channels/2?videoCodecType=H.264 caps="video/x-h264,mapping=/video " ! rtph264depay ! queue ! h264parse ! omx_h264dec ! omx_mdeiscaler name=d d.src_00 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! omx_videosink enable-last-buffer=false 

$ gst-launch rtspsrc location=rtsp://192.168.1.168:8556/PSIA/Streaming/channels/2?videoCodecType=H.264 ! rtph264depay ! queue ! \
h264parse output-format=1 ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! omx_videosink enable-last-buffer=false
  • IP Camera TEST (1080P Resize)
$ gst-launch rtspsrc location=rtsp://192.168.1.168:8556/PSIA/Streaming/channels/2?videoCodecType=H.264  ! rtph264depay ! queue ! h264parse access-unit=true ! queue ! omx_h264dec ! omx_mdeiscaler name=d d.src_00 ! 'video/x-raw-yuv, width=(int)1920, height=(int)1080' ! queue ! omx_ctrl \
display-mode=OMX_DC_MODE_1080P_30 ! gstperf print-fps=true print-arm-load=true ! omx_videosink sync=false enable-last-buffer=false

  • Gstreamer Examples
  https://developer.ridgerun.com/wiki/index.php/Gstreamer_pipelines_for_DM816x_and_DM814x
  https://developer.ridgerun.com/wiki/index.php/Gstreamer_pipelines_for_DM816x_and_DM814x#RTSP_-_Video_H264_1080.4030fps_2

  • DM8168 Firmware Debug
  https://developer.ridgerun.com/wiki/index.php?title=How_to_build_DM8168_M3_Firmware_and_debug_messages

3. KERNEL Config & Build 

위의 CROSS_COMPILE과 ARCH 환경변수가 설정이 되지 않을 경우 매번 설정하면서 실행.
미리 설정된 File은 아래 존재하며 이곳에서 보자.

$ cd ~/dm8148/
$ source setPATH.sh 
$ cd ti-ezsdk_dm814x-evm_5_05_02_00/board-support/linux-2.6.37-psp04.04.00.01
$ ls ./arch/arm/configs/       // 지원되는 Configs 확인    


$ make ti8148_evm_defconfig   // Kernel Config 설정 
$ make menuconfig             // 상위 setPATH.sh를 설정을 안했다면, ARCH=arm 선언하자.
$ make uImage                 // 상위 setPATH.sh를 설정을 안했다면  setARCH=arm 와 CROSS_COMPILE=arm-none-linux-gnueabi- 

$ cp /arch/arm/boot/uImage  /tftpboot/uImage

3.1 Kernel 분석 및 수정 

  • CTAGS와 CSCOPE 생성
vi 에서 소스분석을 더 용이하게 하기 위해서 아래와 같이 설치 및 사용하자.
  http://ahyuo79.blogspot.com/search?q=sudo+apt-get+install+ctags

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


$ vi ./arch/arm/mach-omap2/board-ti8148evm.c
....
MACHINE_START(TI8148EVM, "ti8148evm")
        /* Maintainer: Texas Instruments */
        .boot_params    = 0x80000100,
        .map_io         = ti8148_evm_map_io,    // 변경된 device memory map check 
        .reserve         = ti81xx_reserve,
        .init_irq       = ti8148_evm_init_irq,   // 점검 
        .init_machine   = ti8148_evm_init,       // 변경된 device check , EVM과 현재보드와 사용하는 Device가 다름 (HDMI 변경 및 기타 IO및 사용안함)
        .timer          = &omap_timer,       
MACHINE_END


$ make uImage
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h'는 이미 갱신되었습니다.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  LD      vmlinux.o

drivers/built-in.o: In function `pcf8575_ths7375_enable':
notify_shm_drv.c:(.text+0x15f14): multiple definition of `pcf8575_ths7375_enable'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9ce8): first defined here
drivers/built-in.o: In function `vps_ti816x_set_tvp7002_filter':
notify_shm_drv.c:(.text+0x15f8c): multiple definition of `vps_ti816x_set_tvp7002_filter'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9d60): first defined here
drivers/built-in.o: In function `vps_ti816x_select_video_decoder':
notify_shm_drv.c:(.text+0x15f78): multiple definition of `vps_ti816x_select_video_decoder'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9d4c): first defined here
drivers/built-in.o: In function `ti816x_pcf8575_init':
notify_shm_drv.c:(.text+0x15f50): multiple definition of `ti816x_pcf8575_init'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9d24): first defined here
drivers/built-in.o: In function `pcf8575_ths7360_sd_enable':
notify_shm_drv.c:(.text+0x15f28): multiple definition of `pcf8575_ths7360_sd_enable'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9cfc): first defined here
drivers/built-in.o: In function `pcf8575_ths7360_hd_enable':
notify_shm_drv.c:(.text+0x15f3c): multiple definition of `pcf8575_ths7360_hd_enable'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9d10): first defined here
drivers/built-in.o: In function `ti816x_pcf8575_exit':
notify_shm_drv.c:(.text+0x15f64): multiple definition of `ti816x_pcf8575_exit'
arch/arm/mach-omap2/built-in.o:gpmc-nand.c:(.text+0x9d38): first defined here
make: *** [vmlinux.o] 오류 1

$ arm-none-linux-gnueabi-readelf -s arch/arm/mach-omap2/built-in.o | grep -r pcf8575_ths7375_enable
  2521: 00009ce8    20 FUNC    GLOBAL DEFAULT    1 pcf8575_ths7375_enable

$ arm-none-linux-gnueabi-readelf -s drivers/built-in.o | grep -r pcf8575_ths7375_enable
 21182: 00015f14    20 FUNC    GLOBAL DEFAULT    1 pcf8575_ths7375_enable

$ find . -name '*.o' | sed -e 's/o$/c/g' | xargs grep -rs pcf8575_ths7375_enable
./drivers/video/ti81xx/vpss/dctrl.c:  r = pcf8575_ths7375_enable(TI816X_THSFILTER_ENABLE_MODULE);

$ grep -r pcf8575_ths7375_enable .
이진파일 ./drivers/built-in.o 와(과) 일치
이진파일 ./drivers/video/built-in.o 와(과) 일치
이진파일 ./drivers/video/ti81xx/built-in.o 와(과) 일치
./drivers/video/ti81xx/vpss/dctrl.c:  r = pcf8575_ths7375_enable(TI816X_THSFILTER_ENABLE_MODULE);
이진파일 ./drivers/video/ti81xx/vpss/dctrl.o 와(과) 일치
이진파일 ./drivers/video/ti81xx/vpss/built-in.o 와(과) 일치
이진파일 ./drivers/video/ti81xx/vpss/vpss.o 와(과) 일치
./tags:pcf8575_ths7375_enable arch/arm/mach-omap2/board-ti8168evm.c /^EXPORT_SYMBOL(pcf8575_ths7375_enable);$/;" v
./tags:pcf8575_ths7375_enable arch/arm/mach-omap2/board-ti8168evm.c /^int pcf8575_ths7375_enable(enum ti816x_ths_filter_ctrl ctrl)$/;" f
./tags:pcf8575_ths7375_enable arch/arm/mach-omap2/include/mach/board-ti816x.h /^int pcf8575_ths7375_enable(enum ti816x_ths_filter_ctrl ctrl)$/;" f
./arch/arm/mach-omap2/include/mach/board-ti816x.h:int pcf8575_ths7375_enable(enum ti816x_ths_filter_ctrl ctrl);
./arch/arm/mach-omap2/include/mach/board-ti816x.h:int pcf8575_ths7375_enable(enum ti816x_ths_filter_ctrl ctrl)
이진파일 ./arch/arm/mach-omap2/built-in.o 와(과) 일치
./arch/arm/mach-omap2/board-ti8168evm.c:int pcf8575_ths7375_enable(enum ti816x_ths_filter_ctrl ctrl)
./arch/arm/mach-omap2/board-ti8168evm.c:EXPORT_SYMBOL(pcf8575_ths7375_enable);
이진파일 ./arch/arm/mach-omap2/ti81xx_vpss.o 와(과) 일치


$ make menuconfig   // 필요 module을 yes로 변경 및 필요 없은 것들을 제거. 

$ make uImage
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h'는 이미 갱신되었습니다.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  LD      drivers/built-in.o
drivers/media/built-in.o: In function `vps_ti816x_set_tvp7002_filter':        // 이곳에서 에러가 나서 현재 complier가 혼동하는 것 같음 
ti81xxvin_lib.c:(.text+0x30eac): multiple definition of `vps_ti816x_set_tvp7002_filter'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x72d0): first defined here
drivers/media/built-in.o: In function `pcf8575_ths7375_enable':
ti81xxvin_lib.c:(.text+0x30e34): multiple definition of `pcf8575_ths7375_enable'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x7258): first defined here
drivers/media/built-in.o: In function `ti816x_pcf8575_init':
ti81xxvin_lib.c:(.text+0x30e70): multiple definition of `ti816x_pcf8575_init'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x7294): first defined here
drivers/media/built-in.o: In function `ti816x_pcf8575_exit':
ti81xxvin_lib.c:(.text+0x30e84): multiple definition of `ti816x_pcf8575_exit'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x72a8): first defined here
drivers/media/built-in.o: In function `pcf8575_ths7360_sd_enable':
ti81xxvin_lib.c:(.text+0x30e48): multiple definition of `pcf8575_ths7360_sd_enable'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x726c): first defined here
drivers/media/built-in.o: In function `vps_ti816x_select_video_decoder':
ti81xxvin_lib.c:(.text+0x30e98): multiple definition of `vps_ti816x_select_video_decoder'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x72bc): first defined here
drivers/media/built-in.o: In function `pcf8575_ths7360_hd_enable':
ti81xxvin_lib.c:(.text+0x30e5c): multiple definition of `pcf8575_ths7360_hd_enable'
drivers/video/built-in.o:sii9022a_drv.c:(.text+0x7280): first defined here
make[1]: *** [drivers/built-in.o] 오류 1
make: *** [drivers] 오류 2

$ vi drivers/media/.built-in.o.cmd  // compile되어 만들어지는 build-in.o를 다시 분석  (video 가 dm8168로 인식)

$ find . -name plat   //             plat/cpu.h 찾아 설정이 제대로 있는지 확인 
./drivers/dsp/syslink/omap_notify/plat
./arch/arm/plat-pxa/include/plat
./arch/arm/plat-s5p/include/plat
./arch/arm/plat-versatile/include/plat
./arch/arm/plat-samsung/include/plat
./arch/arm/plat-omap/include/plat
./arch/arm/plat-nomadik/include/plat
./arch/arm/plat-spear/include/plat
./arch/arm/plat-s3c24xx/include/plat
./arch/arm/plat-orion/include/plat


$ vi ./arch/arm/mach-omap2/ti81xx_vpss.c 

$ vi ./arch/arm/mach-omap2/devices.c

$ vi arch/arm/mach-omap2/board-flash.c

  • 문제점 분석 및 해결
아래와 같이 빌드된 된 source만 찾아 grep으로 이를 검색

$ find . -name '*.o' | sed -e 's/o$/c/g' | xargs grep -rs omap_mux_init

  http://ahyuo79.blogspot.com/search?q=xargs

상위문제 Linux Kernel 사용이 되는 필요없는 Config를 제거하여 문제해결

현재 나의 Board가 EVM이 아니기 때문에 Kernel config를 점검해가면서 수정해서
필요 없는 부분을 제거하고 변경하고 TEST 하자.

3.2 NAND 변경시 관련설정

Device Drivers -> Memory Technology Devices

  http://processors.wiki.ti.com/index.php/Flash_configuration_in_the_Kernel#Enabling_NAND_Support
  http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/p/177166/641847#641847