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
글 혹은 그림의 출처가 문제있다면 수정 및 삭제하겠습니다. 우측의 Tags 와 검색기능을 이용하여 편하게 찾을 수 있습니다.
Please check buttons on the right like Tags and language options if can't read this blog (*mobile not support)
9/20/2015
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 소개
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
2. 기본파일 구성
아래와 같이 dm3xx_sd_boot-6.1 안에 모든 파일이 포함이 되어있다.
그래서 SD BOOT와 혼동이 되지만, 이는 SDBOOT가 아니다.
A. 설정파일
B. Main 프로그램
C. UBL Descriptor
D. PC에서 SD의 FAT에 IMAGE를 만드는 프로그램 (dm3xx_boot_make_image)
E. TARGE에서 SD BOOT 후 NAND WRITE하는 프로그램
3. 수정사항 및 확인사항
A. 수정사항
현재 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 저장
B. SD DISK의 FAT Mount 확인 (udev가 동작안될 경우)
C. UBL,UBOOT및 각종 BIN파일을 SD의 dm3xx.dat에 저장
4.2 관련문서
http://processors.wiki.ti.com/index.php/SD_card_boot_and_flashing_tool_for_DM355_and_DM365
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 파일을 넣는곳
- dm3xx_sd_boot : 전체를 실행하는 main shell scripter (설정파일과 같이 연동)
- 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)
- Serial boot (sfh_DM35x.exe : serial로 flashing 하는 tool )
- Sd boot loader
- 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)
http://linux-hotplug.sourceforge.net/?selected=overview
https://en.wikipedia.org/wiki/Hot_swapping
https://linux.die.net/man/8/hotplug
https://wiki.linuxfoundation.org/networking/generic_netlink_howto
http://decdream.tistory.com/406
http://iamhjoo.tistory.com/17
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/
udev의 개념을 이곳에서도 이용한다고 보면되겠으며, Linux의 Network 관련설정
아래의 설정은 SysVinit의 Shell script를 통해 설정되어짐
Network Manager를 사용하다면 아래와 같이설정
세부내용은 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 경우 동작방식이 약간 다르지만 기본개념은 거의 동일한 것 같다.
상위 그림은 (안드로이드의 모든것 분석 포팅) 책을 보며 그렸으며, 구조를 간단히 보면 아래와 같다
udevd으로 가는 interface를 netlink interface이다
2. udev 의 기본구성
systemd는 init 부분의 일종이며, 현재 init 부분이 점점 systemd로 변경되어 가고 있다. 기존의 init를 사용한다고 하면 init와 같이 사용하는 경우가 많다
앞으로 init가 많이 변경 될 것이며, 상위 Network Manger도 동일하다.
udev의 rules을 다음 곳에서 정의한다고 한다.
아래 링크를 반드시 참조
http://reactivated.net/writing_udev_rules.html
https://wiki.gentoo.org/wiki/Udev/ko
http://man7.org/linux/man-pages/man8/systemd-udevd.8.html
https://coreos.com/os/docs/latest/using-systemd-and-udev-rules.html
DM36x의 systemd Makefile
http://presbrey.scripts.mit.edu/doc/libudev/
https://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/libudev-udev-device.html
https://www.freedesktop.org/software/systemd/man/libudev.html#
https://en.wikipedia.org/wiki/Hot_swapping
https://linux.die.net/man/8/hotplug
- Cold plug
- Netlink 구조 및 Programming 예제
https://wiki.linuxfoundation.org/networking/generic_netlink_howto
http://decdream.tistory.com/406
http://iamhjoo.tistory.com/17
- D-Bus (Desktop Bus)
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
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 경우 동작방식이 약간 다르지만 기본개념은 거의 동일한 것 같다.
상위 그림은 (안드로이드의 모든것 분석 포팅) 책을 보며 그렸으며, 구조를 간단히 보면 아래와 같다
- Interrupt 가 발생하며 이를 처리한다.
- kernel의 sysfs update한다
- user space의 /sys 의 sysfs를 반영한다.
- Kernel에서는 uevent 를 udevd로 보내어 준다.
- udevd는 /sys 의 sysfs를 반영한다
- /dev 에 관련 device update하여 추가한다
udevd으로 가는 interface를 netlink interface이다
2. udev 의 기본구성
- libudev : device information을 접근을 허용해주는 library로 현재는 systemd 에서 이것을 사용하고 있다.
- 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 // 거의 미사용
- udev Rule 및 분석방법
http://reactivated.net/writing_udev_rules.html
https://wiki.gentoo.org/wiki/Udev/ko
- udevd 사용법
- systemd-udevd 관련 Manual
http://man7.org/linux/man-pages/man8/systemd-udevd.8.html
https://coreos.com/os/docs/latest/using-systemd-and-udev-rules.html
DM36x의 systemd Makefile
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
https://linux.die.net/man/8/udevinfo
https://wiki.gentoo.org/wiki/Udev/ko
https://wiki.archlinux.org/index.php/udev
https://unix.stackexchange.com/questions/67936/attaching-usb-serial-device-with-custom-pid-to-ttyusb0-on-embedded
2.1 udev tool 과 libudev
- udevadm : 진단과 관리용으로 만들어진 Tool
- udevinfo: udevadm으로 통합되어 관리되어 지는 Tool
https://linux.die.net/man/8/udevinfo
https://wiki.gentoo.org/wiki/Udev/ko
https://wiki.archlinux.org/index.php/udev
- libudev Reference Manual
http://presbrey.scripts.mit.edu/doc/libudev/
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 이 존재하며 이에 대한 정확한 이해가 필요하다.
http://daem0n.tistory.com/entry/Android-Kernel-3-Ueventdc
http://blog.secmem.org/88
안드로이드의 모든것의 분석과 포팅 참조
Android에서의 udev는 일반 Linux와의 동작이 조금 다르지만 기본개념은 유사하다고 보면될 것 같다
하지만, Android Linux Kernel은 ueventd 이 존재하며 이에 대한 정확한 이해가 필요하다.
- Android ueventd 동작
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에 대해 간단히 알아 두도록하자.
우선 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 자료
https://www.ti.com/lit/an/spraab5/spraab5.pdf?ts=1692510546320&ref_url=https%253A%252F%252Fwww.google.co.kr%252F
2. Profile Tools
2. Profile Tools
주로 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 기타
주로 사용되는 곳이 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를 걸어두고 추후 정리
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
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
일단 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를 걸어두고 추후 정리
- double buffering
- 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
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
CCS v3.3 사용법
1. CCS v3.3 기본설정
CCS는 Setup을 설정하지 않고는 CCS Main프로그램 (CCStudio V3.3) 을 실행을 할수 없다.
그러므로, Setup 프로그램에서 Target에 대한 JTAG 관련설정을 한 후에 CCS Main 프로그램을 실행해야 한다.
사용전에 반드시 현재 사용중인 JTAG 동작 확인 후 Setup CCStudio V3.3 실행 하자.
CCSv3.3 Revision C 기본기능소개
A. SDconfigEx.
B . Setup CCStudio and Save and Exit
CCS는 Setup을 설정하지 않고는 CCS Main프로그램 (CCStudio V3.3) 을 실행을 할수 없다.
그러므로, Setup 프로그램에서 Target에 대한 JTAG 관련설정을 한 후에 CCS Main 프로그램을 실행해야 한다.
사용전에 반드시 현재 사용중인 JTAG 동작 확인 후 Setup CCStudio V3.3 실행 하자.
- CCS Setup 설정하기 (본인의 JTAG과 CPU 정보확인)
- Setup 설정후 CCS Main Program 실행
CCS에 관련된 Manual로 반드시 한번 읽어봐야하며, Davinci 를 사용한다면, MMU관련 잘 보도록하자. (DSP라면 상관없음)
http://www.ti.com/lit/an/spraa07c/spraa07c.pdf
2. Setup CCStudioV3.3
Setup은 Target Board의 JTAG에 연결될 CPU를 설정하는 하는 곳이다.
A. 관련 JTAG(에뮬레이터)의 예
B. 에뮬레이터 설정이 존재하지 않을 경우
3. CCStudioV3.3
CCS Main 프로그램이 시작이 되면, Gel 파일 존재하며 이기반으로 초기화 진행됨
http://www.ti.com/lit/an/spraa07c/spraa07c.pdf
2. Setup CCStudioV3.3
Setup은 Target Board의 JTAG에 연결될 CPU를 설정하는 하는 곳이다.
- Factory Boards에서 해당 CPU의 Family를 찾아 검색후 선택을 해보자.
- 존재한다면, 해당 설정 에뮬레이터 설정을 사용한다.
- 설정시, 반드시 자신의 JTAG의 이름과 USB Type을 확인해야한다.
- 설정후, Save& Quit 누르면, 자동으로 Code Composer Studio를 실행
*만약 설정이 존재하지않고 자신의 CONFIG가 있다면, File->import로 가져오면된다.
- XDS510USB : Spectrum Digital사의 XDS510 USB or PLUS
- XDS510PP : Spectrum Digital사의 XDS510 Parallel Port
- SDXDS560R : Spectrum Digital사의 XDS560 R
B. 에뮬레이터 설정이 존재하지 않을 경우
- Factory Board에서 Family에서 자신의 CPU검색하고 유사한 Config 선택하여 수정한다.
- 좌측에서 Rename으로 자신의 보드로 변경한다.
- File->export하여 새로운 Config을 생성하자. (예:DM365-XDS510USB_MINE)
- CPU(ARM9)를 선택하여, 아래의 Modify Properies 새로운 Gel파일이 있으면 추가 하고 없으면 그냥진행.
- Custom Boards에 저장장소를 확인하자.
3. CCStudioV3.3
CCS Main 프로그램이 시작이 되면, Gel 파일 존재하며 이기반으로 초기화 진행됨
Gel파일을 본인 스스로 수정할 줄 알아야함.
A. SDconfigEx.
- Emulator Rest
- 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를 오래동안 사용을 해왔지만, 매번 설치할때마다 설치문제는 발생한다.
TI 3rd Party 회사를 비롯하여 TI관련회사를 오래다니면서 CCS를 오래동안 사용을 해왔지만, 매번 설치할때마다 설치문제는 발생한다.
그래서 관련부분을 간단히 정리한다.
http://www.mcublog.co.kr/761
http://www.ti.com/tool/ccstudio3
쉽게 실행을 할수가 있다.
관련내용
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이 지원가능
http://www.spectrumdigital.com/
B. XDS-510 JTAG TEST
아래와 같이 JTAG을 전체적으로 TEST가 가능하다.
JTAG을 연결해야지만, CCS를 동작가능하므로, 반드시 TEST를 진행을 하자.
B. Blackhawk 사의 드라이버 설치
파일이름은 아래와 같으며, 설치하면, Blackhawk사의 JTAG이 지원가능
http://www.blackhawk-dsp.com/
- CCS 설치 기본환경
- Windows XP x86 compatible operating system
- 1-2 GB RAM
- 500-2 GB free hard disc space, depending on installation opitons
http://www.mcublog.co.kr/761
http://www.ti.com/tool/ccstudio3
- CCS 설치
쉽게 실행을 할수가 있다.
- 기본설치장소 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사의 것을 사용하기에 아래와 같이 설치한다.
- Blackhawk - http://www.blackhawk-dsp.com
- Spectrum Digital - http://www.spectrumdigital.com
3.1 Spectrum Digital사의 Driver 설치
A. Driver 설치
파일이름은 아래와 같으며, 설치를 하면, XDS510, 510PLUS등 SD사의 JTAG이 지원가능
- 파일이름: setupCCSPlatinum_vxxx.exe
http://www.spectrumdigital.com/
- 관련사항 지원
- DM368 CCS용 TEST
B. XDS-510 JTAG TEST
아래와 같이 JTAG을 전체적으로 TEST가 가능하다.
JTAG을 연결해야지만, CCS를 동작가능하므로, 반드시 TEST를 진행을 하자.
B. Blackhawk 사의 드라이버 설치
파일이름은 아래와 같으며, 설치하면, Blackhawk사의 JTAG이 지원가능
- 파일이름: setupXDS560RCCSPlatinum_v30329A
http://www.blackhawk-dsp.com/
9/08/2015
TCPDUMP 사용법
1. TCPDUMP 란?
wireshark(ethereal)에서 window에서 winpcap기능이라고 생각하면 되겠다.
ethernet에서 들어온 packet을 libpcap을 이용하여 capture를 한다.
tcpdump는 이를 필터링하여 보여주는 프로그램이다. (option으로 필터링이 가능)
https://linux.die.net/man/8/tcpdump
상위에는 모든 Packet을 잡지만, Filter를 적용하여 원하는 packet만 capture 진행
http://itnews.tistory.com/218
https://www.tcpdump.org/manpages/tcpdump.1.html
http://dark2pee.tistory.com/entry/DM368-tcpdump-compile
1.1 SCP 사용방법
상위와 같이 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
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 사용법
// 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://itnews.tistory.com/218
https://www.tcpdump.org/manpages/tcpdump.1.html
- How to build TCPDUMP on ARM
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의 역사 및 기능을 간단히 비교 분석을 할 수 있다.
http://dedf.promwad.com/materials/DEDF2012-Chepurin-TI-DaVinci-processors.pdf
UBOOT 설정 확인
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
- Davinci Series 간단하게 비교 해서 볼 수 있다.
http://dedf.promwad.com/materials/DEDF2012-Chepurin-TI-DaVinci-processors.pdf
- DM814x, DM816x, DM37x , DM368 비교
- 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를 가져온다.
기본에 사용하던 CCSv5 or CCSv6의 Project를 가져오는 기능이며, 가져오는 도중 문제사항은 많이 발생을 한다
이부분은 우선 차례대로 확인을 해보자.
Import의 option의 기능
보통 PATH 변수설정이 했지만 적용이 되지 않는 경우 or 변수를 적용을 못할 경우 설정하면 적용되는 경우가 발생 함으로 이부분을 잘 설정하자
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.4 Project 새로 생성
아래와 같이 동일한 방법으로 생성이 가능하다.
상위부분은 Target MPU에 따라 많이 달라지만, 기본 설정은 동일하다.
그부분만 이해를 하면되겠다.
Target이 지원 되지 않는다면, View-> CCS App Center에서 찾아보고 설치해보자.
2. Project 의 환경설정
CCS Project를 Import를 하거나, 생성하여 진행하다보면 에러가 발생하고 문제가 발생한다.
이부분은 Eclipse에도 별반 차이가 없기때문에 봐야할 부분들이다.
대부분의 문제들은 간단히 정리해보자면 아래와 같다.
기존 Project를 가져오거나 or 본인이 새로 Project를 생성을 하면 아래와 같이
Project->Property를 이용하여 Compiler 관련 설정을 해줘야 한다.
자동으로 Makefile을 생성하여 관리가 되기 때문에 편하지만, 아래 설정을 정확히 이해하고, 사용해야 본인의 Project을 관리가 가능하다.
특히 상위 에러문제에 있어서 아래 방법들을 이용하여 점검을 해보자.
개발을 해보신분이라면, Compiler의 설정 및 PATH 설정관련에 대해 잘 이해하리라고 본다.
일단 빌드에 문제가 발생을 하면, 아래 View를 이용하여 Project의 문제를 정확히 파악하고
아래에서 빌드의 문제 및 관련 PATH 등을 천천히 해결해 나가자.
물론 해결해 나가다 보면, Compiler의 호환성 문제 or Source 호환성 문제도 발생하지만,
이부분은 관련 Project의 정확한 개발환경을 참고하자.
반드시 각각의 기능의 쓰임새를 어느정도 파악을 하고 있어야 한다.
2.1 Project의 Property->Resource
프로젝트를 진행을 하면 관련 환경을 설정을 하는데 아래와 같이 살펴볼수 있다.
그리고, Text File encoding 에서 변경이 가능하며, 하지만 이 설정은 이 Project에만 한정된다.
보통상위의 문제가 발생할 경우, PATH를 추가하여 이 문제를 해결한다.
Link PATH를 수정 및 추가하자
만약 동적 Library를 사용한다면, 관련 PATH역시 한번 점검해봐야 한다.
변수 생성은 ${VAR} 생성 가능하며 적용이 가능하며, 아래와 같이 적용이 된다.
아래는 상위 DM368의 UBL IPNC 설정 소스이며, 관련부분을 참조 확인하자
Linked Resources : 확인용 보고 구조는 다음과 같다.
*.cmd : TI의 Link Script이며 이부분은 본인의 설정에 맞게 잘 파악해야한다.
*.c : 본인의 Compile되고 Link되는 상황을 잘 알수 있다.
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 너무 높아 맞지 않다면 , 아래와 같이 선택하여 낮은 버전을 설치하자
다양한 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 관련 설정
아래의 설정을 보면 분리를 해서 보면 아래와 같다.
이 부분은 다음 챕터에서 Build Configuration 과 같이 자세히 사용법을 알아보자.
이제 Main의 설정을 변경을 각각 변경을 해보자
이 부분은 TI의 Device 설정과 JTAG을 설정하는 곳으로 아래 PATH와 관련있으므로 잘 봐야 한다.
만약 지원이되지 않는다면, Help->check for update
Compiler를 변경 및 외부 Compiler 사용방법으로 우측의 more를 클릭
현재 TI에서는 아래의 주소에 Compiler를 제공하고 있으며 기본 library와 include를 확인가능하다
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 :
http://processors.wiki.ti.com/index.php/Linker_Special_Section_Types
Runtime support library:
3.1 Build->MPU Compiler
Build 내부에서는 ARM Compiler or MSP430 Compiler의 옵션을 맘대로 설정 가능하다
본인의 경우는 ARM을 이용하기 때문에 ARM이지만, MPU가 달라지면 이부분 역시 달라질 것이며,Compiler에 따라 설정도 변경이 될 것이다.
하지만 근본적으로 문제를 해결하는 방법들은 동일하니 크게 문제될 것이 없다.MPU에 따라 동일한 옵션들은 거의 유사할 것이다.
예를들자면 아래와 같다.
이 부분은 ARM에 관련 설정이니 반드시 확인하고 넘어가야한다.
아래와 같이 GCC or TI Compiler의 옵션인 -I 부분을 찾아 관련부분 PATH들을 연결시켜주자.
이 방법은 가능하면 간단한 것만 사용하자.
선언할 것이 많이 있다면, 다음 command 로 사용하자
이 기능을 사용하려면 Compiler의 Manual을 제대로 숙지해야겠지만,
간단하게 사용하는 법으로는 상위 #define도 정의하고 File로 구성한 다음 추가하여 적용이 가능하다.
만약 #define 할 것이 많다고 한다면, 상위 방법보다 이 방법이 더 편할 것이며, Configuration과 같이 저장이 되어서 편할 것이다.
아래의 기능들은 본인도 좀더 공부를 해봐야 알겠으며, 일단 관련링크만 연결해둔다.
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이다.
CCSv6를 처음 실행하면 아래와 같이 Workspace 설정이 가능하며 별도의 장소에 설정가능하지만
가능하면 한 장소에서 하는 것이 좋은 것 같다.
CCS에서 처음 Project 시작할 경우 생성이 필요하고 기존의 Project를 가져올 경우 import가 필요하다.
거의 생성해서 가져올 경우는 드물 것이며, import로 기존 Project를 가져와서 이를 호환이 되게 하는 것이 중요할 것이다.
1.1 존재하던 Project 가져오는 방법 (Import)
기존에 작업 중이던 Project or 다른사람이 제공해주는 Proejct를 가져올 경우 아래와 같이 Import를 사용하여 Project를 가져온다.
- Project 메뉴
- CCS Edit 모드 -> Project -> Import CCS Projects
- CCS Edit 모드 -> Project -> Import Legacy CCSv3.3 Projects
- File 메뉴
File->import -> Code Composer Studio 선택시
- Build Variables
- CCS Projects
- Legacy CCSv3.3 Projects
- Import CCS Projects
기본에 사용하던 CCSv5 or CCSv6의 Project를 가져오는 기능이며, 가져오는 도중 문제사항은 많이 발생을 한다
이부분은 우선 차례대로 확인을 해보자.
Import의 option의 기능
- import한 project를 copy 해서 workspace에서 사용하는 기능
- import한 project를 저장되어진 폴더에서 사용지만 관련된 Project를 Import를 자동으로함
보통 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.4의 Project 새로생성 내용처럼 프로젝트를 생성후 기본 환경설정을 갖추자.
- 에러가 발생한다면, INCLUDE PATH 문제 or DEFINE 문제 , LINK 문제 다양하다.
- 상위 문제들을 천천히 해결해 나가자.
- Compiler에 따라 Linkscript와 연결되는 Macro가 다르므로 이부분도 확인해야한다.
아래와 같이 동일한 방법으로 생성이 가능하다.
- File->New->CCS Project
- File->New->Project->Code Composer Studio
- CCS Project 생성
- Target에서 본인의 MPU를 선택하자.
- Connection에서 본인의 JTAG을 선택하자.
- 본인의 내부 MPU를 선택 하고 Project 명 기입하자
- Workspace 의 저장공간의 확인하자
- Compiler는 다양하게 제공하므로 GCC도 가능 , 본인의 개발환경에 따라 선택
- Project의 기본 Format의 설정 Empty Projects or Basic Example
- 상위 부분은 우측에 자세한 설명이 나온다.
- 아래는 Complier가 TI Compiler로 설정
상위부분은 Target MPU에 따라 많이 달라지만, 기본 설정은 동일하다.
그부분만 이해를 하면되겠다.
Target이 지원 되지 않는다면, View-> CCS App Center에서 찾아보고 설치해보자.
2. Project 의 환경설정
CCS Project를 Import를 하거나, 생성하여 진행하다보면 에러가 발생하고 문제가 발생한다.
이부분은 Eclipse에도 별반 차이가 없기때문에 봐야할 부분들이다.
대부분의 문제들은 간단히 정리해보자면 아래와 같다.
- Compiler의 호환성 문제 ( Compiler Version 변경 및 외부 Compiler 별도지정 )
- Include PATH 문제 (Compiler의 옵션에서 환경변수 설정이 적용되지 않을 경우)
- DEFINE 문제 ( Compiler의 옵션에서 define 이 없을 경우)
- Link 에러문제 ( Compiler Library 문제 및 Library 순서 문제 or 외부 Library)
기존 Project를 가져오거나 or 본인이 새로 Project를 생성을 하면 아래와 같이
Project->Property를 이용하여 Compiler 관련 설정을 해줘야 한다.
자동으로 Makefile을 생성하여 관리가 되기 때문에 편하지만, 아래 설정을 정확히 이해하고, 사용해야 본인의 Project을 관리가 가능하다.
특히 상위 에러문제에 있어서 아래 방법들을 이용하여 점검을 해보자.
개발을 해보신분이라면, Compiler의 설정 및 PATH 설정관련에 대해 잘 이해하리라고 본다.
일단 빌드에 문제가 발생을 하면, 아래 View를 이용하여 Project의 문제를 정확히 파악하고
아래에서 빌드의 문제 및 관련 PATH 등을 천천히 해결해 나가자.
- View->Console : 전제 빌드 과정을 보고, 문제사항을 정확히 보자.
- View->Problem : 문제사항을 알려준다.
- View->Advice : 현재사항에 대해서 조언을 해준다.
물론 해결해 나가다 보면, Compiler의 호환성 문제 or Source 호환성 문제도 발생하지만,
이부분은 관련 Project의 정확한 개발환경을 참고하자.
- Project의 Property의 설정
반드시 각각의 기능의 쓰임새를 어느정도 파악을 하고 있어야 한다.
2.1 Project의 Property->Resource
프로젝트를 진행을 하면 관련 환경을 설정을 하는데 아래와 같이 살펴볼수 있다.
그리고, Text File encoding 에서 변경이 가능하며, 하지만 이 설정은 이 Project에만 한정된다.
- UTF-8 (Linux에서도 소스를 볼일이 있다면 이 인코딩으로 변경)
- MS949 (Window에서만 사용한다면 이것을 사용)
- Window->Preferences에 가서 Workspace
만약 전체 변경하고자 하면, Window->Preferences에 가서 Workspace에서 변경을 하면
Workspace에 있는 것이 다 변경이 되므로 다 적용이 된다.
- Resource->Linked Resource
Link PATH를 수정 및 추가하자
만약 동적 Library를 사용한다면, 관련 PATH역시 한번 점검해봐야 한다.
- Path Variables: Linux의 PATH 변수라고 생각하면 되겠다.
- Linked Resources: 현재 Build할 File들
변수 생성은 ${VAR} 생성 가능하며 적용이 가능하며, 아래와 같이 적용이 된다.
아래는 상위 DM368의 UBL IPNC 설정 소스이며, 관련부분을 참조 확인하자
- 추가방법 New
- Name : 새로추가할 Variable Name ( 변수이름)
- Location: PATH 위치
- File 구조 ( File 직접 선택)
- Folder 구조 ( 변수를 이용하면 참조가 가능)
- Variable ( 상위에서 사용되어지는 변수사용)
Linked Resources : 확인용 보고 구조는 다음과 같다.
*.cmd : TI의 Link Script이며 이부분은 본인의 설정에 맞게 잘 파악해야한다.
*.c : 본인의 Compile되고 Link되는 상황을 잘 알수 있다.
- Resource->Resource Filters
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 너무 높아 맞지 않다면 , 아래와 같이 선택하여 낮은 버전을 설치하자
- Help->Install New Software
- Work with에서 Code Generation Tools Updates 선택
- 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 관련 설정
아래의 설정을 보면 분리를 해서 보면 아래와 같다.
- Configuration : Build 를 세부적으로 설정할 때 사용하며 추후 자세히 설명하겠다.
- Main Device : Device 와 JTAG 및 관련 설정
- Main Advanced setting : Compiler 설정 및 기존옵션 설정
- Configuration 설정
이 부분은 다음 챕터에서 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를 변경 및 외부 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 부분이다.
2.3 Project의 Property->General 확장사용
상위에서 설명한 Configuration의 세부 사용방법에 대해 자세히 기술을 하며 한 Project에서 다양한 Build 방식을 원할 경우 아래와 같이 설정한다.
상위 정보와 Build 될 File 정보 들을 각각의 Configuration 마다 별도로 분리하여 저장가능하다.
이를 이용하여 같은 Project 내에서 다양한 Configuration을 통해 다양한 App을 만들어 낼수 있으며, Compiler를 설정 및 PATH 설정 역시 개별설정이 가능하다.
좀더 자세히 설명하면 Configuration 통해 Project에 관련된 설정을 세부별로 설정이 가능하고 이는 1개의 Project에서 다양한 기능수행이 가능해진다
.
아래와 같이 Configuration을 설정이 가능하다.
이는 Project를 가르키고 우측마우스의 Build Configuration->Manage와 동일하다.
New를 이용하여 아래와 같이 새로추가해보자
빌드를 할 경우 두 가지 모드 or 그 이상으로 각각의 Configuration으로 빌드가 가능하다.
아래와 같이 Build Configurations->Set Active 설정한 다음 Build Project를 진행을 하면된다.
각각의 Build Configuration 별로 각각에 Build 에 관련된 옵션을 다르게 저장이 가능하다.
파일을 제외시키는 방법
Project 창에서 아래와 같이 마우스 우측 버튼에서 간단히 선택가능 (Exclude from Build)
추가하는 방법
동일하게 Project창에서 우측마우스로 New-> File or Folder 선택
아래와 같이 Advanced를 선택한 후 Linked Folder 및 Linked File 생성이 가능한다.
이때 아래의 우측 Variables을 이용하면 상위 설명했던 PATH에 정의된 Variables을 이용하여 찾게 만들수 있어 편리하다.
Linux로 생각하면 Makefile에 PATH를 정의하여 만들어 두고, 이를 이 변수를 이용하여 추가
한다고 생각하면 되겠다.
아래 부분은 상위 부분을 보면 쉽게 이해가 간다.
--cmd_file 은 Compiler에게 옵션을 직접준다는 의미 이기때문에, 다양하게 본인이 직접 줄수 있을 것이다. (TI Compiler Manual 참조)
하지만 거의 --define xxxxx 1 으로 만 사용하는 것 같다.
3. Project의 Property->Build
Build의 구성은 상위 Property->General에서 설정에 따라 변경이 되기때문에 주요 설명을 간단히 하고 넘어가겠다.
주로 ARM 계열 Compiler 일 것이지만, DSP or MSP430를 사용한다면 각각에 맞는 Compiler로 변경
현재 나의 경우는 UBL을 ELF로 한 다음 아래 옵션을 별도로 추가하여 UBL의 bin 파일 생성했다.
상위 batch file을 분석을 해보면 argument로 PROJECT 변수와 변수 값을 받아 설정한다.
이 부분은 :process_arg를 보면 argument는 두개가 필요하며, 이는 %PROJECT_ROOT%에 필요한 설정이다.
hex470.exe를 이용하여 ubl2bin.cmd linkscript를 이용하여 a.out file에서 binary로 생성하는 것이다.
Linux에서 사용했던 uboot bin file 만드는 것과 동일하다.
나의 경우도 상위 설정도 되어있지 않았으며, 본인이 직접 전체구조를 이해해서 수정하면서 실행하면 될 것 같다.
hex470.exe는 compiler 안에 있으며 이를 PROJECT_ROOT에 넣고 이를 해결하자
가능하다면 모든것을 PROJECT_ROOT PATH 기반에서 다 맞춰서 실행하도록 하자.
https://www.youtube.com/watch?v=mN6SCwyxwbU&feature=em-subs_digest
C:\ti\ccsv6\tools\compiler\ti-cgt-arm_5.2.2\lib
2.3 Project의 Property->General 확장사용
상위에서 설명한 Configuration의 세부 사용방법에 대해 자세히 기술을 하며 한 Project에서 다양한 Build 방식을 원할 경우 아래와 같이 설정한다.
- Build Configuration 이란?
- Compiler 종류 및 Version 설정
- Compiler 와 Link 에 관련된 모든 옵션설정
- 빌드파일 및 폴더 설정
상위 정보와 Build 될 File 정보 들을 각각의 Configuration 마다 별도로 분리하여 저장가능하다.
이를 이용하여 같은 Project 내에서 다양한 Configuration을 통해 다양한 App을 만들어 낼수 있으며, Compiler를 설정 및 PATH 설정 역시 개별설정이 가능하다.
좀더 자세히 설명하면 Configuration 통해 Project에 관련된 설정을 세부별로 설정이 가능하고 이는 1개의 Project에서 다양한 기능수행이 가능해진다
.
- Build Configuration의 사용방법
- Property->General->Configuration 에서 Manage Configuration
- View->Project 창에서 마우스 우측 버튼을 Build Configuration에서 선택가능.
- Build Configuration 사용의 예
- Project는 많은부분은 공유하고 상층부분 서로다르게 2 or 3개 이상로 분리하고 싶을 경우
- Project는 동일하지만, #define 을 서로 다르게 적용하고 싶을경우 (--cmd-file or --define 이용 )
- 서로다른 Compiler 환경을 구축하고 싶을 경우
- TI 관련 Youtube
- Configuration 추가방법
아래와 같이 Configuration을 설정이 가능하다.
이는 Project를 가르키고 우측마우스의 Build Configuration->Manage와 동일하다.
New를 이용하여 아래와 같이 새로추가해보자
빌드를 할 경우 두 가지 모드 or 그 이상으로 각각의 Configuration으로 빌드가 가능하다.
아래와 같이 Build Configurations->Set Active 설정한 다음 Build Project를 진행을 하면된다.
- 각 개별 Build Configuration File 과 Folder 관리방법
각각의 Build Configuration 별로 각각에 Build 에 관련된 옵션을 다르게 저장이 가능하다.
- 제외시키는 방법 : Exclude From Build 사용하여 특정 File을 Build에서 제외
- 추가하는 방법 : New->File or Folder
파일을 제외시키는 방법
Project 창에서 아래와 같이 마우스 우측 버튼에서 간단히 선택가능 (Exclude from Build)
추가하는 방법
동일하게 Project창에서 우측마우스로 New-> File or Folder 선택
아래와 같이 Advanced를 선택한 후 Linked Folder 및 Linked File 생성이 가능한다.
이때 아래의 우측 Variables을 이용하면 상위 설명했던 PATH에 정의된 Variables을 이용하여 찾게 만들수 있어 편리하다.
Linux로 생각하면 Makefile에 PATH를 정의하여 만들어 두고, 이를 이 변수를 이용하여 추가
한다고 생각하면 되겠다.
- Browser : 직접 탐색기에서 찾아 등록 (절대PATH 이기에 추천을 안함)
- Variables : Property->Resource->Linked Resources
- Resource Filter : Property->Resource->Resource Filters
- 각 개별 Build Configuration 관련설정 방법
아래 부분은 상위 부분을 보면 쉽게 이해가 간다.
- Exclude From Build로 현재 Project에서 File을 제외
- (--include_path,-I) 변경 (아래 참조)
- (--define,-D) 변경 (아래 참조)
- (--cmd_file,-@) (아래 참조)
--cmd_file 은 Compiler에게 옵션을 직접준다는 의미 이기때문에, 다양하게 본인이 직접 줄수 있을 것이다. (TI Compiler Manual 참조)
하지만 거의 --define xxxxx 1 으로 만 사용하는 것 같다.
3. Project의 Property->Build
Build의 구성은 상위 Property->General에서 설정에 따라 변경이 되기때문에 주요 설명을 간단히 하고 넘어가겠다.
주로 ARM 계열 Compiler 일 것이지만, DSP or MSP430를 사용한다면 각각에 맞는 Compiler로 변경
- MPU Compiler
- MPU Linker
- MPU Hex Utility
- Build->Builder
상위에서 설명한 Build Configuration에 맞게 세부 설정이 가능하다 아래에 보면 make 및 Build Location 도 각각의 Target에 맞게 설정이 가능하다.
- Build->Behaviour
- Build->Steps
- Build 하기전에 실행해야 할 것
- Build 후 실행해야 할 것
현재 나의 경우는 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
- Build->Enviornment
- Build->Link Order
아래와 같이 Library Link 순서도 편집이 가능하다
https://www.youtube.com/watch?v=mN6SCwyxwbU&feature=em-subs_digest
- Build->Dependencies
3.1 Build->MPU Compiler
Build 내부에서는 ARM Compiler or MSP430 Compiler의 옵션을 맘대로 설정 가능하다
본인의 경우는 ARM을 이용하기 때문에 ARM이지만, MPU가 달라지면 이부분 역시 달라질 것이며,Compiler에 따라 설정도 변경이 될 것이다.
하지만 근본적으로 문제를 해결하는 방법들은 동일하니 크게 문제될 것이 없다.MPU에 따라 동일한 옵션들은 거의 유사할 것이다.
예를들자면 아래와 같다.
- header 찾는 주소
- define 하는 옵션
- Linker option
- ARM Compiler 예제
- ARM Compiler->Processor Options
이 부분은 ARM에 관련 설정이니 반드시 확인하고 넘어가야한다.
- *.h 못찾는 에러문제해결 (--include_path,-I)
아래와 같이 GCC or TI Compiler의 옵션인 -I 부분을 찾아 관련부분 PATH들을 연결시켜주자.
- define 선언문제 (--define,-D)
이 방법은 가능하면 간단한 것만 사용하자.
선언할 것이 많이 있다면, 다음 command 로 사용하자
- Command File (--cmd_file,-@) ( Compiler Option)
이 기능을 사용하려면 Compiler의 Manual을 제대로 숙지해야겠지만,
간단하게 사용하는 법으로는 상위 #define도 정의하고 File로 구성한 다음 추가하여 적용이 가능하다.
만약 #define 할 것이 많다고 한다면, 상위 방법보다 이 방법이 더 편할 것이며, Configuration과 같이 저장이 되어서 편할 것이다.
- 이외 다른기능
아래의 기능들은 본인도 좀더 공부를 해봐야 알겠으며, 일단 관련링크만 연결해둔다.
- ULP Advisor
- 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이다.
피드 구독하기:
글
(
Atom
)