9/20/2015

H.264 관련 자료 수집

1. H.264의 소개 

ITU-T에서 만든 Codec 이며, 영상과 음성을 압축이 가능하며, Network로 전송이 가능하다.
이전의  Codec 모델인 H.263이 존재하며, 차세대로는 H.265(HEVC) 이 존재한다.
기본적으로 ITU-T가 이 Codec을 만든 목적은 압축도 중요하겠지만, Network의 호환성이 우선이 된다고 봐야겠다.

처음 H.32x (VoIP) Protocol을 만들때, Video쪽에 H.263을 염두에 두고 만든것 같다.
그리고나서 H.264가 나왔으며, 그 기능이 좀더 Network에 최적화가 되고 압축률 또한 좋아졌다.
하지만 안타깝게도 VoIP는 IETF의 SIP에게 기울어졌으며 거의 H.323는 찾아보기가 힘들꺼 같다.


이곳에서는 Codec에 관한 자세한 내용은 가급적 언급하지 않으며, Network 관련부분만
서술한다.

1.1 H.264 개념


  https://namu.wiki/w/H.26x
  https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC
  http://blog.naver.com/onlyou_4ever/40048654140
  http://blog.naver.com/onlyou_4ever/40048568804
  http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf


1.2 H.264/H.265 의 NAL (Network Abstraction Layer)

H.264의 Codec Part도 중요하지만, Network Part 역시 중요하며, 이는 즉, Stream 부분이기 때문이다.


  https://tools.ietf.org/html/rfc3984
  http://blog.naver.com/onlyou_4ever/40048828597
  http://egloos.zum.com/yajino/v/782492
  https://en.wikipedia.org/wiki/Network_Abstraction_Layer



9/18/2015

Video 관련글 (추후 정리)

1. 비디오 개념


2. NTSC 와 PAL 소개


3. Interlace 와 Progressive

4. Deinterlacing 기능


4. 비디오 버퍼링


5. Frame buffer

6. Frame buffer 성능 DirectFB 기능

APP들

한계


6. MPEG4와 H.264소개

7. Frame 소개


DM368 SDBOOT-NANDWRITER

1. SDBOOT-NAND WRITER


   A. 관련파일 
         
        dm3xx_sd_boot-6.1.zip 

DM368 RDK에 포함이 되어있으며, 기본 동작방식은 아래와 같다.
보드가 SDBOOT를 한 다음, 자신의 SD FAT의 dm3xx.dat 데이타를 읽어 UBL, UBOOT, KERNEL 등,
NAND에 원하는 장소에 writing 및 erasing 하는 프로그램이다.
dm3xx.dat 은 각종 데이타를 포함하고 있다.



   B. 크로스컴파일러 설치  
 
     빌드 하기 위해서, 기존 크로스 컴파일러를 설정하거나 존재하지 않는다면 아래의 사이트에서 Tool을 다운 받은 후 진행하자. ARM용 크로스 컴파일러.
   
    http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_2_10/latest/index_FDS.html
 
    위사이트에서  MVL 5.0 Tools Download 
  •  SDK 버전 : mvl_5_0_0801921_demo_sys_setuplinux.bin
     
 export PATH=$PATH:/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/


2. 기본파일 구성 

아래와 같이 dm3xx_sd_boot-6.1 안에 모든 파일이 포함이 되어있다.
그래서 SD BOOT와 혼동이 되지만, 이는 SDBOOT가 아니다.

   A. 설정파일 
  • dm3xx_sd.config  : 각 binary 설정 및 (original의 ubl,uboot 등) 및 dm3xx.dat 위치
  • original               :  자신의 UBL 및 UBOOT 와 Kernel을 Bin 파일을 넣는곳

   B. Main 프로그램
  • dm3xx_sd_boot   :  전체를 실행하는 main shell scripter  (설정파일과 같이 연동)

   C. UBL Descriptor
  • dm3xx_boot_rec  :  UBL Desicriptor 정의된 Hex Code 값. 매번 새로 생성됨

   D. PC에서 SD의 FAT에 IMAGE를 만드는 프로그램 (dm3xx_boot_make_image)
  • bin.x86 or bin.arm:  dm3xx_boot_make_image.c의  bin 파일 저장장소
  • dm3xx_boot_make_image.c :  PC에서 ARM에서 Image를 만들 때 사용.
  • Makefile :  확인부분 -DDM368_IPNC 및 -I sdcard_flash 가 제대로 되었는지 확인 

   E. TARGE에서 SD BOOT 후 NAND WRITE하는 프로그램
  • sdcard_flash: SD BOOT로 실행,dm3xx.dat기반으로 NAND에 install 
  • sdcard_flash/sdboot_flash_cfg.h : 설정값 변경가능


3. 수정사항 및 확인사항 

   A. 수정사항 
  • dm3xx_sd.config : 파일이름 수정 및 orginal에 파일 변경

$ pwd
/home/jhlee/dm368/dm3xx_sd_boot-6.1

$ cat dm3xx_sd.config
#!/bin/sh

# Adjust this file for your needs

a=${modelname:=DM368_IPNC} # default modelname
a=${platform:=DM36x} # default platform

case $modelname in
DM365_IPNC)
 ubl=original/ubl_297arm_270ddr_ipnc_dm365_1.0.0.bin
 uboot=original/u-boot-1.3.4_ipnc_dm365_1.0.0.bin
 diagnostic=original/diagnostic_ipnc_dm365_1.0.0.bin
 kernel=original/uImage_ipnc_dm365_2.0.0
    rootfs=original/cramfsImage_ipnc_dm365_2.0.0
 ;;
DM368_IPNC)
 ubl=original/ubl_432arm_340ddr_ipnc_dm368.bin
 uboot=original/u-boot-1.3.4-dm368_ipnc.bin
 diagnostic=original/diagnostic_ipnc_dm368.bin
 kernel=original/uImage_ipnc_dm368
 rootfs=original/ipnc_dm368_ubifs
 ;;
esac 

# Expected location boot data file on autimatically mounted SD card.
# Change if it is mounted at another location.
#data_file=`echo /media/disk/dm3xx.dat`
data_file=`echo /media/sdc/dm3xx.dat`


$ ls original/
diagnostic_ipnc_dm368.bin  nandwriter_ipnc_dm368.out    uImage_ipnc_dm368                 ubl_486arm_360ddr_ipnc_dm368.bin
ipnc_dm368_ubifs           u-boot-1.3.4-dm368_ipnc.bin  ubl_432arm_340ddr_ipnc_dm368.bin

  • sdcard_flash/sdboot_flash_cfg.h 

#define IPNC_DM368                 //Makeifle에서 추가가 안되서 넣음 

#if defined(IPNC_DM365) || defined( IPNC_DM368)
#define KERNEL_SIZE (2*MB)  -> (4*MB)   // KERN SIZE 조정
#define ROOTFS_SIZE (14*MB) -> (40*MB)  // FS SIZE 조정
#define DP_SIZE (160*KB)                // diagnostic size 유지 
#else
~~~~~
#endif 

#define ROOTFS_SDC      0x800000   // KERN SIZE 때문에 위치 조정  

현재 sdboot_flash_cfg가 dm3xx_boot_make_image.c 에서도 사용
하지만, Makefile에서 이를 추가가 안됨

   B. 확인사항

      diagnostic : DP_SDC:


4. 기본사용법


4.1 기본절차


   A. PC에 SD DISK Mount 확인 및 FAT Format 및 UBL Descriptor 저장

$ cat /proc/partitions
$ sudo ./dm3xx_sd_boot format /dev/sde 

   B. SD DISK의 FAT Mount 확인  (udev가 동작안될 경우)

$ sudo mount /dev/sde1 /mnt/sdc
$ ls /mnt/sdc
dm3xx.dat 

   C. UBL,UBOOT및 각종 BIN파일을 SD의 dm3xx.dat에 저장 

$ sudo ./dm3xx_sd_boot data /mnt/sdc/dm3xx.dat
$ sudo umount /mnt/sdc


4.2 관련문서 

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

9/14/2015

DM368 SDBOOT- 위해 자료수집



  • SD card boot and flashing tool (DM368 and DM365)
  1. Serial boot  (sfh_DM35x.exe : serial로 flashing 하는 tool )
  2. Sd boot loader 
  3. Nand Flashing tool  기타 등등 

  https://github.com/Klaus-schwarzkopf/dm3xx-sd-boot


  • Window 에서 SD Image를 SD Card Write하는 Tool   

  http://www.npackd.org/p/win32-disk-imager/0.9.5



  • mksdboot.sh 

내부적으로 mksdboot.sh을 사용하여,  linux에서 sd card에 write하는 script
이거 가지고 TEST를 못해봄.

  https://github.com/Soorma07/dm368/blob/master/mksdboot.sh


  • LeopardBoard의 SD Boot 및 관련설정 설명 

  http://wiki.linpert.de/index.php?title=LeopardBoard/SD_CARD


  • DM355 EVM NAND Reloading 

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


자료중요
  https://drive.google.com/drive/folders/0B_ehveuLi8MVdU5jTjFxbVhRUGs
  (출처: DM36x와 DM8148 BOOT 비교  http://www.deyisupport.com )






9/13/2015

udev 와 sysfs의 기본구조 재정리

1 기본개념 정리 

  • Hot plug (Hot swapping)
OS가 동작중 Device가 연결 및 삽입될때 재부팅 없이 이 연결된 상태를 알려주어 동작되는 시스템을 말하며, Window에서는 Plug&Play

  http://linux-hotplug.sourceforge.net/?selected=overview
  https://en.wikipedia.org/wiki/Hot_swapping
  https://linux.die.net/man/8/hotplug

  • Cold plug
OS는 Device 추가를 하려면 reboot or shutdown을 하고 인식해야하며 이런 기능을 Cold plug라고 하며, Linux 에서 init초기화  및 각 Daemon을 실행

  • Netlink 구조 및 Programming 예제
  https://en.wikipedia.org/wiki/Netlink   
  https://wiki.linuxfoundation.org/networking/generic_netlink_howto
  http://decdream.tistory.com/406
  http://iamhjoo.tistory.com/17

  • D-Bus (Desktop Bus)
SW Bus 구조를 가진 IPC를 말하며, 버스구조를 가지고 있기에 여러 프로세스가 버스를 통해 통신을 공유하는 시스템이다.

 

HW BUS 구조라고 생각하면 되지만, SW로 구현을 하려면 dbus-daemon 기반의 Server를 이용하여 각 Process는 Client가 되어 통신




상위그림은 wiki에서 가져왔으며, wiki 참조
  https://en.wikipedia.org/wiki/D-Bus
  https://dbus.freedesktop.org/doc/dbus-tutorial.html
  https://blogs.gnome.org/rodrigo/2012/03/20/netlink-based-d-bus/


  • NetworkManger 
Linux에서 사용되어지는 Daemon이며, 이는 libudev와 다른 kernel interface를 이용하며 Embedded에서는 옵션으로 생각되며,
udev의 개념을 이곳에서도 이용한다고 보면되겠으며, Linux의 Network 관련설정

아래의 설정은 SysVinit의 Shell script를 통해 설정되어짐

/etc/network/interfaces
/etc/resolv.conf 


Network Manager를 사용하다면 아래와 같이설정

/etc/NetworkManager/NetworkManager.conf


세부내용은 wiki 참고
  https://en.wikipedia.org/wiki/NetworkManager
  https://wiki.debian.org/udev

libudev를 이용하여 Netlink를 통하여, Network Manager를 걸쳐 D-BUS와 연결동작

 Kernel --> udev --> Network Manager <-->D-Bus <-->Evolution

  https://en.wikipedia.org/wiki/Udev
  https://en.wikipedia.org/wiki/HAL_(software)


1.2 udev와 sysfs의 기본동작방식 

이제 Linux에서 사용되어지는 udev와 sysfs의 기본 동작 방법에 대해 좀 알아보자
물론 Linux version 마다 동작 방식이 다를 수 있으며, Filesystem 구조에 따라 다를 수 있다
또한 Android Version의 Linux 경우 동작방식이 약간 다르지만 기본개념은 거의 동일한 것 같다.



상위 그림은  (안드로이드의 모든것 분석 포팅) 책을 보며 그렸으며, 구조를 간단히 보면 아래와 같다
  1. Interrupt 가 발생하며 이를 처리한다.
  2. kernel의 sysfs update한다 
  3. user space의 /sys 의 sysfs를 반영한다. 
  4. Kernel에서는 uevent 를 udevd로 보내어 준다. 
  5. udevd는 /sys 의 sysfs를 반영한다 
  6. /dev 에 관련 device update하여 추가한다 

udevd으로 가는 interface를 netlink interface이다


2. udev 의 기본구성 

  1. libudev :  device information을 접근을 허용해주는 library로 현재는 systemd 에서 이것을 사용하고 있다. 
  2. udevd:  user space의 damon이며 /dev를 관리를 하며, uevent를 커널에서 받는다.

systemd는 init 부분의 일종이며, 현재 init 부분이 점점 systemd로 변경되어 가고 있다.  기존의 init를 사용한다고 하면 init와 같이 사용하는 경우가 많다
앞으로 init가 많이 변경 될 것이며,  상위 Network Manger도 동일하다. 

udev의 rules을 다음 곳에서 정의한다고 한다.

$ ls /lib/udev/rules.d  // 기본설치 lib 있는 만큼 가급적 일반사용자는 수정 하지말지 말라고함
$ ls /etc/udev/rules.d // lib/udev/rule.d 부분의 link 와 유저가 추가 혹은 수정한 부분  
$ ls /run/udev/rules.d // 거의 미사용 

아래 링크를 반드시 참조 

USB Serial에서 Custom PID 사용시 
  https://unix.stackexchange.com/questions/67936/attaching-usb-serial-device-with-custom-pid-to-ttyusb0-on-embedded



2.1 udev tool 과 libudev 

  1. udevadm : 진단과 관리용으로 만들어진 Tool
  2. udevinfo: udevadm으로 통합되어 관리되어 지는 Tool
  https://linux.die.net/man/8/udevadm
  https://linux.die.net/man/8/udevinfo
  https://wiki.gentoo.org/wiki/Udev/ko
  https://wiki.archlinux.org/index.php/udev

  • libudev Reference Manual
 libudev를 이용하여 프로그래밍을 할 경우가 있다면 아래참조

  http://presbrey.scripts.mit.edu/doc/libudev/
  https://mirrors.edge.kernel.org/pub/linux/utils/kernel/hotplug/libudev/ch01.html
  https://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/libudev-udev-device.html
  https://www.freedesktop.org/software/systemd/man/libudev.html#



2. Android System의 ueventd 동작 


Android에서의 udev는 일반 Linux와의 동작이 조금 다르지만 기본개념은 유사하다고 보면될 것 같다
하지만, Android Linux Kernel은 ueventd 이 존재하며 이에 대한 정확한 이해가 필요하다.

  • Android ueventd 동작 
  https://kshokd.wordpress.com/2012/08/29/init-%EA%B3%BC%EC%A0%95%EC%97%90%EC%84%9C-uevent%EC%99%80-ueventd%EC%9D%98-%ED%99%9C%EC%9A%A9/
  http://daem0n.tistory.com/entry/Android-Kernel-3-Ueventdc
  http://blog.secmem.org/88

안드로이드의 모든것의 분석과 포팅 참조

9/11/2015

Debug/Profile Tools (추후 설명 및 예제 추가)

1. Debug Section 

우선 Profile 과 Debug를 알기 이전에 ELF Format에서 사용하고 있는 Debuging Section에 대해 간단히 알아 두도록하자.
ELF 와 A.out 큰 차이라고 하면, 동적 링크기능일 것이다. 
ELF만 책이 1권이므로, 여기서 설명은 하지 않도록 하겠다. 

그건 나중에 세부적으로 논하도록 하고 일단 COFF 와 DWARF를 대충은 알고 있도록하자.
  • Debugging Data Format

  • COFF 와 DWARF
COFF 와 DWARF이며, 주로 DWARF를 거의 보개 될것이며, 이것도 각 1/2/3 버전 존재한다.
세부적인 내용은 GCC 전체 Manaul에 가도 있다. 

  • TI DWARF 자료 

주로 Profile Tools을 사용하려는 목적은 소스코드 최적화 이며, 
이는 세부적인 분석을 통하여, 어디서 병목현상과 문제사항을 파악하는 것이라고 생각되어진다.

여기서 각 실행동작 시간의 중요성과 각 시간 및 병목되어지는 부분을 파악하는 것이  
가장 중요하므로 각 부분들을 찾아서 파악하자.

아래의 Tools이외에도 같이 연결해서 사용할 Tools들은 많다. 

2.1 perf

주로 사용되는 곳이 Linux kernel Profile이며, CPU 성능도 측정이 가능하며, 분석도 가능하다.

각 Perf Manual
  https://perf.wiki.kernel.org/index.php/Main_Page
  https://perf.wiki.kernel.org/index.php/Tutorial#Counting_with_perf_stat
  https://perf.wiki.kernel.org/index.php/Tutorial
  http://egloos.zum.com/studyfoss/v/5634580
  http://www.brendangregg.com/perf.html
  https://github.com/brendangregg/perf-tools


2.2 oprifile

perf 와 유사하며, 아래의 wiki만 봐도 대충 파악 가능 
  https://en.wikipedia.org/wiki/OProfile
  http://oprofile.sourceforge.net/doc/results.html
  http://oprofile.sourceforge.net/doc/opreport.html
  http://www.hanbit.co.kr/network/view.html?bi_id=1413
  https://doc.opensuse.org/documentation/html/openSUSE_121/opensuse-tuning/cha.tuning.oprofile.html#sec.tuning.oprofile.overview
  http://processors.wiki.ti.com/index.php/Oprofile_User's_Guide
  http://egloos.zum.com/furmuwon/v/10701572


2.3 gconv

GCC와 함께 이용이 되며, 프로그램을 분석하여 좀더 효율적으로 돌아가도록 분석해주는 Tool이며,
쉽게 말하면, 본인 Source의 최적화하기 위해서 사용되어지는 Profile Tool이다.

gconv manual은 GCC Manual에 포함이 되어있으며, 자세한 내용은 아래를 참조하자.
  https://gcc.gnu.org/onlinedocs/gcc/Gcov.html#Gcov
  http://korea.gnu.org/manual/release/gcov/gcov_toc.ko.html


2.4 gprof

Application Program에서 이용되며, Call Graph 및 Histrogram 주로 IDE에서 많이 이용됨
gcc를 통해 complie 시 -pg 옵션을 추가해야 동작가능

  http://korea.gnu.org/manual/release/gprof/gprof_toc.html
  https://en.wikipedia.org/wiki/Gprof
  http://korea.gnu.org/manual/release/gprof/gprof_2.html
  https://kukuta.tistory.com/202


2.5 기타  

시간기반으로 다 확인해야 하기 때문에 여기에 같이 넣도록 한다. 

9/10/2015

Frame Buffer

1. Video 기본이해

1.1 SD TV의 해상도와 DeInterlace

일단 SDTV의 해상도 와 Deinterlacing 정도 이해하고 이를 보정하는 기술을 알아두면 되겠다.
이전에 많이 겪어지만, 까먹고 하기에 Link만 걸어둔다.

  https://ko.wikipedia.org/wiki/NTSC
  https://ko.wikipedia.org/wiki/PAL

  https://en.wikipedia.org/wiki/NTSC
  https://en.wikipedia.org/wiki/PAL


  https://en.wikipedia.org/wiki/Screen_tearing
  https://en.wikipedia.org/wiki/Flicker_(screen)

  https://en.wikipedia.org/wiki/Deinterlacing
  https://books.google.co.kr/books?id=MyDoAwAAQBAJ&pg=PA17&lpg=PA17&dq=video+Ghost+%ED%98%84%EC%83%81&source=bl&ots=Z0vEsRUMGU&sig=EnHwwWMpObzJOS0xCGGvD63N6BM&hl=ko&sa=X&ved=0CFAQ6AEwC2oVChMI96mfvbPsxwIVkJGOCh1bLQta#v=onepage&q=video%20Ghost%20%ED%98%84%EC%83%81&f=false


Weaving 




https://en.wikipedia.org/wiki/Interlaced_video

Interlace

고스트현상(이중화면)


480i


  https://en.wikipedia.org/wiki/Vertical_blanking_interval
  https://en.wikipedia.org/wiki/Screen_tearing 
(스크린 짤림

비디오 코덱과 동영상 포맷(책)

  https://en.wikipedia.org/wiki/Vertical_Roll
  http://www.samsungsvc.co.kr/online/diagnosisgoVw.do?domainId=NODE0000033866&node_Id=NODE0000125027&kb_Id=KNOW0000019799&pageNo=642

관련용어

50Hz   = 20ms
60Hz   = 16ms
30Hz   = 33ms
25Hz   = 40ms


사실 요즘 Video Frambuffer Driver를 다시 만들고 하면 좋겠지만, 그럴 일이 거의 없거니와,
그래도, 기술은 까먹지 말아야 할 것 같아 아래에 Link를 걸어두고 추후 정리

1.1 double buffering


1.2 triple buffering

  https://en.wikipedia.org/wiki/Motion_compensation

  https://commons.wikimedia.org/wiki/File:Comparison_double_triple_buffering.svg

  https://en.wikipedia.org/wiki/Multiple_buffering

  http://blog.naver.com/ahyuo

  https://ko.wikipedia.org/wiki/%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%9F%AC%EB%B8%94_%EB%B2%A1%ED%84%B0_%EA%B7%B8%EB%9E%98%ED%94%BD%EC%8A%A4

  https://msdn.microsoft.com/en-us/library/windows/hardware/ff570099(v=vs.85).aspx

  http://www.tweakguides.com/Graphics_10.html


Frame buffer

  https://en.wikipedia.org/wiki/Framebuffer

  https://www.kernel.org/doc/Documentation/fb/framebuffer.txt

  https://en.wikipedia.org/wiki/DirectFB


OpenGl

  https://www.opengl.org/wiki/Framebuffer

흔들림보정

  https://en.wikipedia.org/wiki/Vibration_isolation
  https://en.wikipedia.org/wiki/Image_stabilization
  https://ko.wikipedia.org/wiki/%EC%98%81%EC%83%81_%ED%9D%94%EB%93%A4%EB%A6%BC_%EB%B0%A9%EC%A7%80

CCS v3.3 사용법

1. CCS v3.3 기본설정

CCS는 Setup을 설정하지 않고는 CCS Main프로그램 (CCStudio V3.3) 을 실행을 할수 없다.
그러므로, Setup 프로그램에서 Target에 대한 JTAG 관련설정을 한 후에  CCS Main 프로그램을 실행해야 한다.

사용전에 반드시 현재 사용중인 JTAG  동작 확인 후 Setup CCStudio V3.3 실행 하자.
  1. CCS Setup 설정하기 (본인의 JTAG과 CPU 정보확인)
  2. Setup 설정후 CCS Main Program 실행

CCSv3.3 Revision C 기본기능소개 
CCS에 관련된 Manual로 반드시 한번 읽어봐야하며, Davinci 를 사용한다면, MMU관련 잘 보도록하자. (DSP라면 상관없음)
  http://www.ti.com/lit/an/spraa07c/spraa07c.pdf


2. Setup CCStudioV3.3


Setup은 Target Board의 JTAG에 연결될 CPU를 설정하는 하는 곳이다.
  1. Factory Boards에서 해당 CPU의 Family를 찾아 검색후 선택을 해보자. 
  2. 존재한다면, 해당 설정 에뮬레이터 설정을 사용한다. 
  3. 설정시, 반드시 자신의 JTAG의 이름USB Type을 확인해야한다. 
  4. 설정후, Save& Quit 누르면, 자동으로 Code Composer Studio를 실행

*만약 설정이 존재하지않고 자신의 CONFIG가 있다면, File->import로 가져오면된다.

A. 관련 JTAG(에뮬레이터)의 예
  • XDS510USB  : Spectrum Digital사의 XDS510 USB or PLUS 
  • XDS510PP    : Spectrum Digital사의 XDS510 Parallel Port 
  • SDXDS560R  : Spectrum Digital사의 XDS560 R


B. 에뮬레이터 설정이 존재하지 않을 경우



  1. Factory Board에서 Family에서 자신의 CPU검색하고 유사한 Config 선택하여 수정한다.
  2. 좌측에서 Rename으로 자신의 보드로 변경한다. 
  3. File->export하여 새로운 Config을 생성하자. (예:DM365-XDS510USB_MINE)
  4. CPU(ARM9)를 선택하여, 아래의 Modify Properies 새로운 Gel파일이 있으면 추가 하고 없으면 그냥진행.
  5. Custom Boards에 저장장소를 확인하자.


3. CCStudioV3.3

CCS Main 프로그램이 시작이 되면,  Gel 파일 존재하며 이기반으로 초기화 진행됨
Gel파일을 본인 스스로 수정할 줄 알아야함.


A. SDconfigEx.
  1. Emulator Rest
  2. Emulator Test

** Using emulation application from directory c:\ccstudio_v3.3\drivers

  >> Could not open emulation connection


B . Setup CCStudio  and Save and Exit


Error connecting to the target:
Error 0x80002280/-1250
Fatal Error during: Target Communication, OCS, Control, 
Device driver: Lost USB connection to emulator.
You should ABORT and restart to re-establish the USB link.


Sequence ID: 0
Error Code: -1250
Error Class: 0x80002280
I/O Port = 510

Board Name: EVM_DM365_XDS510USB_MINE
Cpu Name: ARM9

Abort:  Close Code Composer Studio.
Retry:  Try to connect to the target again.
Cancel:  Remain disconnected from the target
Diagnostic: Run diagnostic utility.


9/09/2015

CCS v3.3 기본설치

1. CCS V3.3 설치

TI 3rd Party 회사를 비롯하여 TI관련회사를 오래다니면서 CCS를 오래동안 사용을 해왔지만, 매번 설치할때마다 설치문제는 발생한다. 
그래서 관련부분을 간단히 정리한다.

  • CCS 설치 기본환경 
  1. Windows XP x86 compatible operating system
  2. 1-2 GB RAM
  3. 500-2 GB free hard disc space, depending on installation opitons
Window XP용 이지만, Window 7에서도 문제없이 동작되는 것을 확인했다.

     http://www.mcublog.co.kr/761
     http://www.ti.com/tool/ccstudio3

  • CCS 설치 
     CCS V3.3을 File version이나, CD버전을 받아 아래와 같이 setup을 실행을 하면,
    쉽게 실행을 할수가 있다.

  • 기본설치장소 C:\CCStudio_v3.3  





  • ERROR.1  무시



  • ERROR.2 무시



관련내용
     http://processors.wiki.ti.com/index.php/CCS_3.3


2. 라이센스 

아래의 사이트와 같이 등록을 하면, 지속적으로 Update지원이 가능하나, 현재 CCS가 Version이 6이 나와있기에, 라이센스를 등록해서 사용하는것이 의미가 없다고 한다.

     http://www.mcublog.co.kr/585


3. JTAG Driver 설치

TI 3rd Party이며, JTAG 에뮬레이터 제조사이다.
본인은 Spectrum Digtal사의 것을 사용하기에 아래와 같이 설치한다.


3.1  Spectrum Digital사의 Driver 설치


A. Driver 설치 

파일이름은 아래와 같으며, 설치를 하면, XDS510, 510PLUS등 SD사의 JTAG이 지원가능

  • 파일이름:  setupCCSPlatinum_vxxx.exe
매번 새롭게 Release를 하며, 아래의 사이트에서 다운이 가능하다.

     http://www.spectrumdigital.com/


  • 관련사항 지원
     http://support.spectrumdigital.com/


  • DM368 CCS용 TEST
     http://support.spectrumdigital.com/boards/evmdm368/revg/files/EVMDM368_BSL.zip


B. XDS-510 JTAG TEST 

아래와 같이 JTAG을 전체적으로 TEST가 가능하다.
JTAG을 연결해야지만, CCS를 동작가능하므로, 반드시 TEST를 진행을 하자.




B. Blackhawk 사의  드라이버 설치

파일이름은 아래와 같으며, 설치하면, Blackhawk사의 JTAG이 지원가능

  • 파일이름:  setupXDS560RCCSPlatinum_v30329A
매번 새롭게 Release를 하며, 아래의 사이트에서 다운이 가능하다.

     http://www.blackhawk-dsp.com/

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 분석




DM368- 추후 정리

TI의 Davinci Series의 역사 및 기능을 간단히 비교 분석을 할 수 있다.

  • Davinci Series 간단하게 비교 해서 볼 수 있다. 
   https://en.wikipedia.org/wiki/Texas_Instruments_DaVinci
   http://dedf.promwad.com/materials/DEDF2012-Chepurin-TI-DaVinci-processors.pdf

  • DM814x, DM816x, DM37x , DM368 비교 
   http://processors.wiki.ti.com/index.php/Category:DaVinci



  • SDBOOT

UBOOT 설정 확인

bootargs" value="console=ttyS0,115200n8 root=/dev/mmcblk0p1 rootwait rootfstype=ext3 rw"
bootcmd" value="mmc rescan 0;ext2load mmc 0 0x80700000 boot/uImage; bootm 0x80700000"


bootargs=console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootwait ip=off
bootcmd=if mmc rescan 0 ; then if run loadbootenv ; then run importbootenv ; if test -n ${uenvcmd} ; then run uenvcmd; fi ;fi ;fi
loadbootenv=fatload mmc 0 ${loadaddr} uEnv.txt
loaduimage=fatload mmc 0 ${loadaddr} uImage
importbootenv=echo Importing environment from mmc ...; env import -t ${loadaddr} ${filesize}


  http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/149284/1376766


  https://github.com/Soorma07/dm368/blob/master/mksdboot.sh


  http://wiki.edgertronic.com/releases/v2.1.3/boot-output.txt



  http://cimarronsystems.com/wp-content/uploads/2014/01/LeopardBoard-368-DVSDK-4_02-Installation-Guide-v1_1.pdf
  https://developer.ridgerun.com/wiki/index.php/Getting_Started_Guide_for_DM368_DM365_LeopardBoard
  http://processors.wiki.ti.com/index.php/Getting_Started_Guide_for_Leopard_Board_DM365_and_DM368

  https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/t/144880
  http://dark2pee.tistory.com/entry/DM368-bootscr-%EB%A7%8C%EB%93%A4%EA%B8%B0
  http://tms320dm365.tumblr.com/post/78189101620/dm368-nand-boot-mode





dm3xx_sd_boot-6.1
  bin.x86
  flash_utils
  original
  sdcard_flash
  sd_boot_readme.txt

PATH=$PATH:./bin.x86

make

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

http://processors.wiki.ti.com/index.php/UG:_DaVinci_PSP_Installation_on_DM36x_EVM

export PATH=:$PATH:/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin:/opt/mv_pro_5.0/montavista/pro/bin:/opt/mv_pro_5.0/montavista/common/bin

http://e2e.ti.com/support/embedded/linux/f/354/p/127539/456755


http://processors.wiki.ti.com/index.php/GSG:_DM365_DVEVM_Software_Setup_for_MontaVista_Kernel




http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_2_10/latest/index_FDS.html

NFS BOOT





Kernel size 변경
http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/288082/1005562


TFTP BOOT
http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/288082/1220969
http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/288082/1220969



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

9/04/2015

CCSv6 Project 생성 및 기존 Project 가져오기

1. CCS의 실행 및 Workspace 설정

CCSv6를 처음 실행하면 아래와 같이 Workspace 설정이 가능하며 별도의 장소에 설정가능하지만
가능하면 한 장소에서 하는 것이 좋은 것 같다.




CCS에서 처음 Project 시작할 경우 생성이 필요하고 기존의 Project를 가져올 경우 import가 필요하다.
거의 생성해서 가져올 경우는 드물 것이며, import로 기존 Project를 가져와서 이를 호환이 되게 하는 것이 중요할 것이다.


1.1 존재하던 Project 가져오는 방법 (Import)


기존에 작업 중이던 Project or 다른사람이 제공해주는 Proejct를 가져올 경우 아래와 같이 Import를 사용하여 Project를 가져온다.


  • Project 메뉴 
  1. CCS Edit 모드 -> Project -> Import CCS Projects
  2. CCS Edit 모드 -> Project -> Import Legacy CCSv3.3 Projects 

  • File 메뉴 
    File->import -> Code Composer Studio 선택시

  1. Build Variables
  2. CCS Projects
  3. Legacy CCSv3.3 Projects 





  • Import CCS Projects

기본에 사용하던 CCSv5 or CCSv6의 Project를 가져오는 기능이며, 가져오는 도중 문제사항은 많이 발생을 한다
이부분은 우선 차례대로 확인을 해보자.

Import의 option의 기능
  1. import한 project를 copy 해서 workspace에서 사용하는 기능  
  2. import한 project를 저장되어진 폴더에서 사용지만 관련된 Project를 Import를 자동으로함 
2번과 같이 Automatically import referenced projects found in same search-directory 
보통 PATH 변수설정이 했지만 적용이 되지 않는 경우 or 변수를 적용을 못할 경우 설정하면 적용되는 경우가 발생 함으로 이부분을 잘 설정하자
     




  • Import Legacy CCSv3.3 Projects

CCSv3.3은 이클립스 기반이 아니기때문에 이 기능을 별도로 제공을하고 있으며, 가장 중요한 것이 이것도 호환성일 것이다.


아래 옵션은 위치가 변경이 되므로 조심하자
    Copy project into workspace 
         Project를 Workspace로 가져온다.


1.2 기존 Project 가져오는 도중 문제사항들

상위와 같이 TI에서 제공해주는 CCS Project를 Import해서 제대로 동작이 되면 다행이겠지만,
제대로 동작이 되지 않는 경우도 발생하며, 호환성 문제뿐만 아니라 다른이유에서도 문제가 발생할 것이다
CCS의 기능은 점점 확장이 되고 버전은 변경이 될것이며, 이부분은 해결방법을 좀 정리하여 보자.



만약 실패한다면 1.3의 Empty Project를 생성하여 만든 것을 최종적으로 고려해봐야한다.



1.3 Empty Project 생성 (Import 문제 발생할 경우)

Import를 했음에도 불구하고 제대로 동작이 되지 않는다면 다음과 같이 Project를 새로생성하여 소스를 추가하는 방식으로 구성하여 만들수도 있다.
이 방법을 이용할 경우, Project를 새로생성을 하되 Empty Projects->Empty Project로 생성을 하자.
그러면, Target MPU와 동일한 구성을 가진 기본 Project는 가졌지만, Source는 가지고 있지 않다.

이제 Source를 하나씩 가져오면서 Porting을 해보자
  1. 1.4의 Project 새로생성 내용처럼 프로젝트를 생성후 기본 환경설정을 갖추자. 
  2. 에러가 발생한다면, INCLUDE PATH 문제 or DEFINE 문제 , LINK 문제 다양하다. 
  3. 상위 문제들을 천천히 해결해 나가자. 
  4. Compiler에 따라 Linkscript와 연결되는 Macro가 다르므로 이부분도 확인해야한다. 


1.4 Project 새로 생성 

아래와 같이 동일한 방법으로 생성이 가능하다.

  • File->New->CCS Project 
  • File->New->Project->Code Composer Studio




  • CCS Project 생성 
  1. Target에서 본인의 MPU를 선택하자.
  2. Connection에서 본인의 JTAG을 선택하자.
  3. 본인의 내부 MPU를 선택 하고 Project 명 기입하자 
  4. Workspace 의 저장공간의 확인하자 
  5. Compiler는 다양하게 제공하므로 GCC도 가능 , 본인의 개발환경에 따라 선택 
  6. Project의 기본 Format의 설정  Empty Projects or Basic Example 
  7. 상위 부분은 우측에 자세한 설명이 나온다. 

  • 아래는 Complier가 TI Compiler로 설정 



상위부분은 Target MPU에 따라 많이 달라지만, 기본 설정은 동일하다.
그부분만 이해를 하면되겠다.

Target이 지원 되지 않는다면, View-> CCS App Center에서 찾아보고 설치해보자.



2. Project 의 환경설정 

CCS Project를 Import를 하거나, 생성하여 진행하다보면 에러가 발생하고 문제가 발생한다.
이부분은 Eclipse에도 별반 차이가 없기때문에 봐야할 부분들이다.

대부분의 문제들은 간단히 정리해보자면 아래와 같다. 
  1. Compiler의 호환성 문제 ( Compiler Version 변경 및 외부 Compiler 별도지정 )
  2. Include PATH 문제  (Compiler의 옵션에서 환경변수 설정이 적용되지 않을 경우)
  3. DEFINE 문제 ( Compiler의 옵션에서 define 이 없을 경우)
  4. Link 에러문제 ( Compiler Library 문제 및 Library 순서 문제 or 외부 Library)

기존 Project를 가져오거나 or 본인이 새로 Project를 생성을 하면 아래와 같이
Project->Property를 이용하여 Compiler 관련 설정을 해줘야 한다.
자동으로 Makefile을 생성하여 관리가 되기 때문에 편하지만, 아래 설정을 정확히 이해하고, 사용해야 본인의 Project을 관리가 가능하다.

특히 상위 에러문제에 있어서 아래 방법들을 이용하여 점검을 해보자.
개발을 해보신분이라면, Compiler의 설정 및 PATH 설정관련에 대해 잘 이해하리라고 본다.

일단 빌드에 문제가 발생을 하면, 아래 View를 이용하여 Project의 문제를 정확히 파악하고
아래에서 빌드의 문제 및 관련 PATH 등을 천천히 해결해 나가자.

  1. View->Console :  전제 빌드 과정을 보고, 문제사항을 정확히 보자.
  2. View->Problem :  문제사항을 알려준다. 
  3. View->Advice :  현재사항에 대해서 조언을 해준다. 

물론 해결해 나가다 보면, Compiler의 호환성 문제 or Source 호환성 문제도 발생하지만,
이부분은 관련 Project의 정확한 개발환경을 참고하자.


  • Project의 Property의 설정 
아래와 같이 Project의 Property는 빌드환경의 다양한 설정을 제공을 해주기 때문에
반드시 각각의 기능의 쓰임새를 어느정도 파악을 하고 있어야 한다.





2.1 Project의 Property->Resource

프로젝트를 진행을 하면 관련 환경을 설정을 하는데 아래와 같이 살펴볼수 있다.
그리고, Text File encoding 에서 변경이 가능하며, 하지만 이 설정은 이 Project에만 한정된다.

  1. UTF-8   (Linux에서도 소스를 볼일이 있다면 이 인코딩으로 변경)
  2. MS949  (Window에서만 사용한다면 이것을 사용)

  • Window->Preferences에 가서 Workspace


만약 전체 변경하고자 하면, Window->Preferences에 가서 Workspace에서 변경을 하면 
Workspace에 있는 것이 다 변경이 되므로 다 적용이 된다. 


  • Resource->Linked Resource
Must specify a URI scheme: xxxx  에러가 발생   ( PATH 설정 문제)

보통상위의 문제가 발생할 경우,  PATH를 추가하여 이 문제를 해결한다.
Link PATH를 수정 및 추가하자
만약 동적 Library를 사용한다면, 관련 PATH역시 한번 점검해봐야 한다.

  1. Path Variables: Linux의 PATH 변수라고 생각하면 되겠다.
  2. Linked Resources: 현재 Build할 File들 

변수 생성은 ${VAR}  생성 가능하며 적용이 가능하며, 아래와 같이 적용이 된다.
아래는 상위  DM368의 UBL IPNC 설정 소스이며, 관련부분을 참조 확인하자




  • 추가방법 New
  1. Name :  새로추가할 Variable Name ( 변수이름)
  2. Location: PATH 위치   
     - 우측옵션
  1. File 구조      ( File 직접 선택)
  2. Folder 구조  ( 변수를 이용하면 참조가 가능) 
  3. Variable       ( 상위에서 사용되어지는 변수사용)





Linked Resources : 확인용 보고 구조는 다음과 같다.
             *.cmd  : TI의 Link Script이며 이부분은 본인의 설정에 맞게 잘 파악해야한다.
              *.c     :  본인의 Compile되고 Link되는 상황을 잘 알수 있다.



  • Resource->Resource Filters
추후 Project에서 New로 추가 할 경우 이 부분이 이용가능




2.2 Project의 Property->General

General에서는 Compiler 및 빌드환경 및 Linkscript 인 cmd 파일 설정 및 기타 설정이 가능하다.
이부분을 Configruration의 설정을 이용하여 별도로 설정이 가능하며 세부저장도 가능하기에 이부분은 가장 중요하다고 말하겠다.
외부 Project를 가져왔을 경우 , 대부분 Compiler Version 문제이며, Compiler에는 include와 library를 가지고 있기 때문에 이와 관련된 에러가 발생된다.

TI에서는 TI Compiler와 GCC를 제공하고 있지만, 별도의 cygwin를 제공하지는 않는다.
아직 cygwin TEST를 해보지 않았으며, 추후 시간이 있을 경우에 이를 해보자.
(이미 cygwin64를 설치 했음)

2.2.1  Compiler 설치 및 기타 Package 설치

Complier의 Version 너무 높아 맞지 않다면 , 아래와 같이 선택하여 낮은 버전을 설치하자
  1. Help->Install New Software 
  2. Work with에서 Code Generation Tools Updates 선택 
  3. TI Compiler Updates 설정 



다양한 TI Compiler Version의 설치하자


  Compiler 설치방법
  http://processors.wiki.ti.com/index.php/Compiler_Releases

  XDAIS Package 설치 (외부 Package)
  http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/index.html


2.2.2 General 관련 설정 

아래의 설정을 보면 분리를 해서 보면 아래와 같다.

  1. Configuration  : Build 를 세부적으로 설정할 때 사용하며 추후 자세히 설명하겠다.
  2. Main Device : Device 와 JTAG 및 관련 설정 
  3. Main Advanced setting : Compiler 설정 및 기존옵션 설정 



  • Configuration 설정 
우선 아래와 같이 Manage Configurations에 들어가서 본인이 원하는 Make의 Target 만들고 각 설정을 변경한다.
이 부분은 다음 챕터에서 Build Configuration 과 같이 자세히 사용법을 알아보자.


이제 Main의 설정을 변경을 각각 변경을 해보자


  • Main->Device 설정 
사용하게될 Target Device에 대한 설정으로 관련부분을 잘 보도록하자 


이 부분은 TI의 Device 설정과 JTAG을 설정하는 곳으로 아래 PATH와 관련있으므로 잘 봐야 한다.
만약 지원이되지 않는다면, Help->check for update

C:\ti\ccsv6\ccs_base\common\targetdb\connections
C:\ti\ccsv6\ccs_base\common\targetdb\devices


  • Main->Advanced setting 
Compiler version 
Compiler를 변경 및 외부 Compiler 사용방법으로 우측의 more를 클릭
현재 TI에서는 아래의 주소에 Compiler를 제공하고 있으며 기본 library와 include를 확인가능하다

C:\ti\ccsv6\tools\compiler       // CCSv5 or CCSv6
C:\CCStudio_v3.3\tms470     // CCSv3.3 


Output type:
Output format:
GCC를 설치해보고, 사용해 본사람이라면  a.out과 elf format의 차이를 잘알것이라고 생각한다.
두 File Format은 실행 Format 종류이며, 큰 차이는 loader에서 동적 library 지원이 되는지
안되는지 가 큰 차이점이라고 볼수 있다.
ELF Format이 많은 기능을 가지고 있어, Linux와 같이 연동하여 사용한다면 이것을 사용하겠지만,
이전 CCS에서도 마찬가지로 COFF기반의 a.out format만 지원했기때문에 가능하면 COFF로 사용해야 하는 것이 맞을 것 같다.

TI의 CCS에서는 Legacy COFF (a.out)  , ELF 두개의 설정이 가능하며 TI 전용 ABI(Application Binary Interface) 별도로 사용하고 있다.

ABI는 상위 Format과 별도의 기능이며, ABI에 대해 좀 더 알고 싶다면 각 MPU의 ABI Spec보면될 것이다.
간단히 설명하자면, C와 어셈블리어간의 통신 방법 및 Compiler를 만들 경우 꼭 봐야할 것이 ABI이다.

Device endianness: 
일반적으로 Power PC의 경우는 Big Endian을 사용했지만, TI는 ARM기반으로 little사용하자.

Linker Command file :
GCC로 하면 Linkscript와 동일하며아래 PATH에가면 기본 실행이 될 수 있도록 되어있으나, UBL과 같이 어셈블러와 C 및 ABI가 필요하다면 본인이 직접 CMD파일을 작성해야한다.

C:\ti\ccsv6\ccs_base\arm\include 




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

Runtime support library:

이부분과 같이 봐야 할 곳이 Linker의 File Search Path 부분이다.
C:\ti\ccsv6\tools\compiler\ti-cgt-arm_5.2.2\lib




2.3 Project의 Property->General 확장사용

상위에서 설명한 Configuration의 세부 사용방법에 대해 자세히 기술을 하며 한 Project에서 다양한 Build 방식을 원할 경우 아래와 같이 설정한다.

  • Build Configuration 이란? 
CCS or Eclipse의 Configurations은 말그대로 Build에 관련된 모든 정보들을 별도로 저장이 가능하도록 하는 것이다.

  1. Compiler 종류 및 Version 설정 
  2. Compiler 와 Link 에 관련된 모든 옵션설정 
  3. 빌드파일 및 폴더 설정 

상위 정보와 Build 될 File 정보 들을 각각의 Configuration 마다 별도로 분리하여 저장가능하다.
이를 이용하여 같은 Project 내에서 다양한 Configuration을 통해 다양한 App을 만들어 낼수 있으며, Compiler를 설정 및 PATH 설정 역시 개별설정이 가능하다.
좀더 자세히 설명하면  Configuration 통해 Project에 관련된 설정을 세부별로 설정이 가능하고 이는 1개의 Project에서 다양한 기능수행이 가능해진다
.
  • Build Configuration의 사용방법 
  1. Property->General->Configuration  에서 Manage Configuration
  2. View->Project 창에서 마우스 우측 버튼을 Build Configuration에서 선택가능.
용어가 Manage Configuration or Build Configuration으로 사용이 되며, 이 부분 빌드환경을 저장하는 것이다.

  • Build Configuration 사용의 예 
Project를 생성하거나 기존에 존재하는 Project를 수정할 경우 다음과 같은 상황들이 흔히 발생한다.
  1. Project는 많은부분은 공유하고 상층부분 서로다르게 2 or 3개 이상로 분리하고 싶을 경우
  2. Project는 동일하지만, #define 을 서로 다르게 적용하고 싶을경우 (--cmd-file or --define 이용 ) 
  3. 서로다른 Compiler 환경을 구축하고 싶을 경우 

  • TI 관련 Youtube
  https://www.youtube.com/watch?v=YIAHYbRDrLw


  • Configuration 추가방법 
Property->General에서 Configuration 이 존재하며, Manage Configuration을 설정하면
아래와 같이 Configuration을 설정이 가능하다.
이는 Project를 가르키고 우측마우스의 Build Configuration->Manage와 동일하다.



New를 이용하여 아래와 같이 새로추가해보자


빌드를 할 경우 두 가지 모드 or 그 이상으로 각각의 Configuration으로 빌드가 가능하다.
아래와 같이 Build Configurations->Set Active 설정한 다음 Build Project를 진행을 하면된다.


  • 각 개별 Build Configuration File 과 Folder 관리방법 
각각의 Build Configuration 별로 다르게 특정파일 및 폴더를 제외하고 추가하고자 하고
각각의 Build Configuration 별로 각각에 Build 에 관련된 옵션을 다르게 저장이 가능하다.

  1. 제외시키는 방법 : Exclude From Build 사용하여 특정 File을 Build에서 제외  
  2. 추가하는 방법 : New->File or Folder 


파일을 제외시키는 방법 
Project 창에서 아래와 같이 마우스 우측 버튼에서 간단히 선택가능 (Exclude from Build)



추가하는 방법
동일하게 Project창에서 우측마우스로 New-> File or Folder 선택
아래와 같이 Advanced를 선택한 후 Linked Folder 및 Linked File 생성이 가능한다.

이때 아래의 우측 Variables을 이용하면 상위 설명했던 PATH에 정의된 Variables을 이용하여 찾게 만들수 있어 편리하다.
Linux로 생각하면 Makefile에 PATH를 정의하여 만들어 두고, 이를 이 변수를 이용하여 추가
한다고 생각하면 되겠다.

  1. Browser            :  직접 탐색기에서 찾아 등록 (절대PATH 이기에 추천을 안함)
  2. Variables           :  Property->Resource->Linked Resources
  3. Resource Filter   :  Property->Resource->Resource Filters  



  • 각 개별 Build Configuration 관련설정 방법 
기존프로젝트의 각 환경설정을 별도의 설정이 가능하여  큰 장점이 있다.
아래 부분은 상위 부분을 보면 쉽게 이해가 간다.
  1. Exclude From Build로 현재 Project에서 File을 제외
  2. (--include_path,-I)  변경 (아래 참조)
  3. (--define,-D)   변경 (아래 참조) 
  4. (--cmd_file,-@) (아래 참조)


--cmd_file 은 Compiler에게 옵션을 직접준다는 의미 이기때문에, 다양하게 본인이 직접 줄수 있을 것이다. (TI Compiler Manual 참조)
하지만 거의 --define xxxxx 1 으로 만 사용하는 것 같다.




3. Project의 Property->Build 

Build의 구성은 상위 Property->General에서 설정에 따라 변경이 되기때문에  주요 설명을 간단히 하고 넘어가겠다.

주로 ARM 계열 Compiler 일 것이지만, DSP or MSP430를 사용한다면 각각에 맞는 Compiler로 변경
  1. MPU Compiler 
  2. MPU Linker 
  3. MPU Hex Utility 

  • Build->Builder 
상위에서 설명한  Build Configuration에 맞게 세부 설정이 가능하다 아래에 보면 make 및 Build Location 도 각각의 Target에 맞게 설정이 가능하다. 



  • Build->Behaviour
Makefile의 실제 target 세부설정도 가능


  • Build->Steps
  1. Build 하기전에 실행해야 할 것 
  2. Build 후 실행해야 할 것
상위 것들을 설정이 가능하다 (일반적으로 batch file을 별도로 생성해서 위에 추가해서 넣는다.)
현재 나의 경우는 UBL을 ELF로 한 다음 아래 옵션을 별도로 추가하여 UBL의 bin 파일 생성했다.

"${PROJECT_ROOT}/postBuildStep_BOOT_NAND.bat" PROJECT_ROOT ${PROJECT_ROOT}\.. !


  • postBuildStep_BOOT_NAND.bat 분석 

상위 batch file을 분석을 해보면 argument로 PROJECT 변수와 변수 값을 받아 설정한다.
이 부분은 :process_arg를 보면 argument는 두개가 필요하며, 이는 %PROJECT_ROOT%에 필요한 설정이다.
hex470.exe를 이용하여 ubl2bin.cmd linkscript를 이용하여 a.out file에서 binary로 생성하는 것이다.
Linux에서 사용했던 uboot bin file 만드는 것과 동일하다.

@echo off
pushd ..\..\
setlocal

:process_arg
if "%1"=="" goto end_process_arg
set name=%1
set value=

:process_arg_value
if NOT "%value%"=="" set value=%value% %2
if "%value%"=="" set value=%2
shift
if "%2"=="!" goto set_arg
if "%2"=="" goto set_arg
goto process_arg_value

:set_arg
set %name%=%value%
shift
shift
goto process_arg
:end_process_arg

echo. > temp_postBuildStep_BOOT_NAND.bat

echo hex470.exe %PROJECT_ROOT%\UBL2BIN.cmd -o=%PROJECT_ROOT%\ubl_486arm_360ddr_ipnc_dm368.bin %PROJECT_ROOT%\NAND\UBL_DM36x_NAND_IPNC.out >> temp_postBuildStep_BOOT_NAND.bat

call temp_postBuildStep_BOOT_NAND.bat
del temp_postBuildStep_BOOT_NAND.bat

endlocal
popd

나의 경우도 상위 설정도 되어있지 않았으며, 본인이 직접 전체구조를 이해해서 수정하면서 실행하면 될 것 같다.
hex470.exe는 compiler 안에 있으며 이를 PROJECT_ROOT에 넣고 이를 해결하자
가능하다면 모든것을 PROJECT_ROOT PATH 기반에서 다 맞춰서 실행하도록 하자.



  • Build->Variables 
상위 Resource->Linked Resource->Path Variables 와 동일하게 설정 가능하며, 이 변수는 String ,Directory , PATH 설정이 가능하다



  • Build->Enviornment
Build 시 사용되는 환경변수라고 생각하면 될 것이며, 주로 PATH를 설정한다고 보면된다.


  • Build->Link Order
아래와 같이 Library Link 순서도 편집이 가능하다 


  https://www.youtube.com/watch?v=mN6SCwyxwbU&feature=em-subs_digest


  • Build->Dependencies 
아래와 같이 다른 Project를 연결하여 동작이 가능하다





3.1 Build->MPU Compiler

Build 내부에서는 ARM Compiler or MSP430 Compiler의 옵션을 맘대로 설정 가능하다
본인의 경우는 ARM을 이용하기 때문에 ARM이지만, MPU가 달라지면 이부분 역시 달라질 것이며,Compiler에 따라 설정도 변경이 될 것이다.
하지만 근본적으로 문제를 해결하는 방법들은 동일하니 크게 문제될 것이 없다.MPU에 따라 동일한 옵션들은 거의 유사할 것이다.

예를들자면 아래와 같다. 
  1. header 찾는 주소 
  2. define 하는 옵션 
  3. Linker option

  • ARM Compiler 예제 
아래는 ARM Comiler의 예제이며 아래와 같이 전체 옵션을 반드시 확인하자



  • ARM Compiler->Processor Options 
아래에서 abi 관련 설정 및 floating point 관련 설정 부분을 확인 가능하다
이 부분은 ARM에 관련 설정이니 반드시 확인하고 넘어가야한다.




  • *.h 못찾는 에러문제해결  (--include_path,-I)
Make 내부안을 수정하여 원하는대로 수정하면 좋겠지만, 그렇게 고치기에는힘들경우,
아래와 같이 GCC or TI Compiler의 옵션인 -I  부분을 찾아 관련부분 PATH들을 연결시켜주자.




  • define 선언문제 (--define,-D)
GCC or TI Compiler의 옵션이용하여 직접 #define 을 전체 적용을 해보자.
이 방법은 가능하면 간단한 것만 사용하자.
선언할 것이 많이 있다면, 다음 command 로 사용하자



  • Command File  (--cmd_file,-@)  ( Compiler Option)
추가된 File을 읽어 Compiler에게 File 안에 적용된 Option을 주는 기능이다.
이 기능을 사용하려면 Compiler의 Manual을 제대로 숙지해야겠지만,

간단하게  사용하는 법으로는 상위 #define도 정의하고  File로 구성한 다음 추가하여 적용이 가능하다.
만약 #define 할 것이 많다고 한다면,  상위 방법보다 이 방법이 더 편할 것이며, Configuration과 같이 저장이 되어서 편할 것이다.




  • 이외 다른기능 
ARM Compiler 내부에는 다양한 기능을 제공해서 일단 기본 옵션만 알아두지만,
아래의 기능들은 본인도 좀더 공부를 해봐야 알겠으며, 일단 관련링크만 연결해둔다.
  1. ULP Advisor 
  2. MISRA-C:2004

ULP Advisor
  http://processors.wiki.ti.com/index.php/ULP_Advisor

MISRA_C
  https://en.wikipedia.org/wiki/MISRA_C
  http://www.trace32.com/wiki/index.php/MISRA-C%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%95%88%EC%A0%84%ED%95%9C_%EC%BD%94%EB%93%9C_%EC%9E%91%EC%84%B1


3.2 Project의 Property->Build->MPU Linker 

ARM Linker의 File Search Path에    -l 옵션을 보자 ( static library )
아래는 library를 찾는 option이다.