RGB888 to RGB565 Define


#define _MODE_555_RGB16BIT(r,g,b) ((b%32) + ((g%32) << 5) + ((r%32) << 10)) //convert 24->16bits
#define _MODE_565_RGB16BIT(r,g,b) ((b%32) + ((g%64) << 6) + ((r%32) << 11)) //convert 24->16bits
#define _RGB16BIT(r,g,b) ((b%32) + ((g%32) << 5) + ((r%32) << 10)) //builds 16bit color



Posted by 다크쌍피

DM368에서 Colorkey 값을 설정하여 OSD0 에 설정된 키값에 Tranparency 값을 적용하는 방법은 다음과 같다.


1. bootargs 수정


video=davincifb:vid0=OFF:vid1=OFF:osd1=0x0x8


2. /drivers/media/video/davinci/davinci_osd.c 수정


static void _davinci_disp_enable_color_key(enum davinci_osd_layer osdwin,
                       unsigned colorkey,
                       enum davinci_pix_format pixfmt)
{
    switch (pixfmt) {
    case PIXFMT_1BPP:
    case PIXFMT_2BPP:
    case PIXFMT_4BPP:
    case PIXFMT_8BPP:
        if (cpu_is_davinci_dm355() || cpu_is_davinci_dm365()) {
            printk("$[%s] (%s) PIXFMT_1~8, colorkey = 0x%x \r\n", __FILE__, __func__, colorkey);
            switch (osdwin) {
            case OSDWIN_OSD0:
                osd_merge(OSD_TRANSPBMPIDX_BMP0,
                      colorkey <<
                      OSD_TRANSPBMPIDX_BMP0_SHIFT,
                      OSD_TRANSPBMPIDX);
                break;
            case OSDWIN_OSD1:
                osd_merge(OSD_TRANSPBMPIDX_BMP1,
                      colorkey <<
                      OSD_TRANSPBMPIDX_BMP1_SHIFT,
                      OSD_TRANSPBMPIDX);
                break;
            }
        }
        break;
    case PIXFMT_RGB565:
        if (cpu_is_davinci_dm644x()) {
            osd_write(colorkey & OSD_TRANSPVAL_RGBTRANS,
                  OSD_TRANSPVAL);
        } else if (cpu_is_davinci_dm355() || cpu_is_davinci_dm365()) {
            osd_write(colorkey & OSD_TRANSPVALL_RGBL,
                  OSD_TRANSPVALL);
        }
        break;
    case PIXFMT_YCbCrI:
    case PIXFMT_YCrCbI:
        if (cpu_is_davinci_dm355() || cpu_is_davinci_dm365())
            osd_merge(OSD_TRANSPVALU_Y, colorkey, OSD_TRANSPVALU);
        break;
    case PIXFMT_RGB888:
        if (cpu_is_davinci_dm355() || cpu_is_davinci_dm365()) {
            osd_write(colorkey & OSD_TRANSPVALL_RGBL,
                  OSD_TRANSPVALL);
            osd_merge(OSD_TRANSPVALU_RGBU, colorkey >> 16,
                  OSD_TRANSPVALU);
        }
        break;
    default:
        break;
    }

    switch (osdwin) {
    case OSDWIN_OSD0:
        osd_set(OSD_OSDWIN0MD_TE0, OSD_OSDWIN0MD);
        break;
    case OSDWIN_OSD1:
        osd_set(OSD_OSDWIN1MD_TE1, OSD_OSDWIN1MD);
        break;
    }
}
 


3. 어플리케이션 에서 설정 예제


#include <video/davincifb_ioctl.h>

void fb_init(void){
    int fbfd;
    char enable = 1;
    vpbe_bitmap_blend_params_t blendparam = {
    .colorkey = 0x0/*0x000000:Black, Transparency RGB Color값을 설정*/,
    .enable_colorkeying = 1,
    .bf = 0,
    };
    vpbe_backg_color_t backg = {
    .clut_select = 0,
    .color_offset = 255,
    };

    fbfd = open("/dev/fb0",O_RDWR);
    if (fbfd < 0){
    perror("Failed to open the framebuffer device");
    exit(-1);
    }

    if (ioctl(fbfd,FBIO_ENABLE_DISABLE_WIN,
        &enable) < 0){
        perror("Failed to enable the OSD window");
        exit(-1);
    }
    if (ioctl(fbfd,FBIO_SET_BACKG_COLOR,
        &backg) < 0){
        perror("Failed to enable the OSD window: set background color");
        exit(-1);
    }

    if (ioctl(fbfd,FBIO_SET_BITMAP_BLEND_FACTOR,
        &blendparam) < 0){
        perror("Failed to set the blending factor");
        exit(-1);
    }

    close(fbfd);


Posted by 다크쌍피

Linux 로고를 LCD 사이즈에 맞게 변경하고 보면 왼쪽 상단에 커서가 깜빡이는

것 을 볼 수 있다. 이를 제거 하기위해서는 커널소스를 수정하면된다.


1. 수정 파일 : drivers/video/console/bitblit.c
2. 수정 내용 :


static void bit_cursor(struct vc_data *vc, struct fb_info *info, int mode,
               int softback_lines, int fg, int bg)
{
    struct fb_cursor cursor;
    struct fbcon_ops *ops = info->fbcon_par;
    unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
    int w = DIV_ROUND_UP(vc->vc_font.width, 8), c;
    int y = real_y(ops->p, vc->vc_y);
    int attribute, use_sw = (vc->vc_cursor_type & 0x10);
    int err = 1;
    char *src;

#ifdef NT_101_BOARD
    // For Remove Linux Boot Logo Cursor
    return;
#endif//NT_101_BOARD

    cursor.set = 0;

    if (softback_lines) {
        if (y + softback_lines >= vc->vc_rows) {
            mode = CM_ERASE;
            ops->cursor_flash = 0;
            return;
        } else
            y += softback_lines;
    } 
                  :
                  :


Posted by 다크쌍피

TI Progress bar 화면을 수정하고 Serial이 아닌 LCD로 TTY로 출력된

Login : 프롬프트를 화면에서 제거 하는 방법



$ vi etc/inittab


제일 마지막 라인인 아래 부분을 주석 처리

# 1:2345:respawn:/sbin/getty 38400 tty1



Posted by 다크쌍피

 CCS 3.3에서 DM368 을 사용하기위한 JTAG 환경설정.

 아래 순서대로 설치한다.

 

1. CCS 3.3 설치 

 

 

    별도 수정없이 Next로 끝까지 설정한다. 

 

 

2. 드라이버 설치 

 

 

 

  Next로 끝까지 설치. 

 

 

3. Service Release 설치 

 

 

 

  Next 버튼으로 끝까지 설치

 

 

4. Code Generation Tools 설치

 

 

 

 

    * 반드시 Destination Foler를 CCS가 설치된 위의 경로로 설치해야 한다.

 

        나머지는 모두 Next 버튼으로 설치한다. 

 

5. CSP 설치 

 

 

 

    Next 버튼을 이용하여 끝까지 설치.

 

 

6. Driver 설치 

  1) XDS510 USB JTAG을 PC에 연결한다. 

  2) Driver를 아래 경로를 지정하여 설치한다.

 

 

 

7. CCS Setup 

 

 

  위 파일을 실행 시키면 자동으로CCS에 XDS510 USB를 사용하게 설정된다.

  안될 경우 XDS510USB 관련 항목을 선택하여 설치 한다.

 

 

 

Posted by 다크쌍피

DM368 EVM의 SD카르로 부팅을 하면 boot.scr의 bootargv를 통해서 부팅이 진행되는데

이를 변경하기 위해서는 boot.scr을 직접 수정하는 것이 아니고, boot.cmd를 통해서 boot.scr을

생성해야 한다.

 

 

 $ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Execute Boot Script' -d boot.cmd boot.scr

 

 

Posted by 다크쌍피

* DM368에서 Video를 사용하기 위해서는 Virtual Memory와 Pysical Memory를 연동하는 모듈인 CMEM을 사용한다.
이때 물리적인 메모리를 사용하는 크기가 정확하지 않으면 Device 로딩 시 "CMEMK Error: Failed to request_mem_region..." 와 같은 에러 메세지가 출력되며 실행 되지 않는데 이를 해결하는 방법은 uBoot에서 bootargs 항목 중 mem=xxM 값과 /etc/init.d/loadmodule-rc 의 Memory Map이 일치 하여야 한다.

[DM368 EVM 예]

bootargs : mem=60M
loadmodule-rc :
                      # Default DM368 EVM Memory Map
                      #
                      # Start Addr    Size    Description
                      #-------------------------------------------
                      # 0x00001000    32K     ARM TCM memory
                      # 0x80000000    48 MB   Linux
                      # 0x83000000    12 MB   Video driver memory (Linux)
                      # 0x83C00000    68 MB   CMEM
                      # 0x88000000    BOTTOM  ADDRESS

                      load () {
                          modprobe cmemk phys_start=0x83C00000 phys_end=0x88000000 allowOverlap=1 phys
                         _start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672 useHeapIfPoolUnavailable=1
                                                                                 :

'Programming & Tools > TMS320DM368' 카테고리의 다른 글

[DM368] CCS 환경설정  (0) 2012.04.30
[DM368] boot.scr 만들기  (0) 2012.04.13
[DM368] NFS Root FileSystem 설정  (0) 2012.03.17
[DM368] Ramdisk 생성  (0) 2012.03.09
[DM368] KSZ8721BL PHY 칩 연결시 uBoot 설정  (0) 2012.02.27
Posted by 다크쌍피
Server 설정
Ubuntu Host $ sudo vi /etc/exports
:
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/home/no1no1no1/samba/targetfs *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
* 사용자의 파일 시스템 경로에  *(rw,sync,no_root_squash,no_all_squash,no_subtree_check) 옵션을 설정한다.

Ubuntu Host $ sudo /usr/sbin/exportfs -av
Ubuntu Host $ sudo /etc/init.d/nfs-kernel-server restart

Target Board 설정
Uboot Setting
 bootargs=console=ttyS0,115200n8 noinitrd rw ip=192.168.1.168:192.168.1.166:192.1
68.1.1:255.255.255.0:::off eth=00:01:02:0a:0b:0c root=/dev/nfs nfsroot=192.168.1
.166:/home/no1no1no1/samba/targetfs
,nolock mem=128M, video=davincifb:vid0=OFF:vi
d1=OFF:osd0=800x480x16,4050K dm365_imp.oper_mode=0 davinci_enc_mngr.ch0_output=L
CD1 davinci_enc_mngr.ch0_mode=800x480 rootwait
bootcmd=nboot 0x80700000 0 0x400000; bootm
bootdelay=3
bootfile="uImage"
ethact=DaVinci-EMAC
ethaddr=00:01:02:0a:0b:0c
fileaddr=82000000
filesize=B52539
gatewayip=192.168.1.1
ipaddr=192.168.1.168
netmask=255.255.255.0

nfshost=192.168.1.166
rootpath=/home/no1no1no1/samba/targetfs
serverip=192.168.1.160
* bootargs에 $(rootpath) 형식으로 작성하지 않고 직접 해당 항목을 입려해야지 인식 한다.
Posted by 다크쌍피

TI DM368 용 Ramdisk 생성

1. Kernel에서 "make menuconfig" 
  가) Device Drivers -> Block Devices -> Loopback device support [*]
  나) Device Drivers -> Block Devices -> Default RAM disk size [원하는 사이즈로 1M = 1024]

2. Ramdisk 생성
  sudo dd if=/dev/zero of=ramdisk bs=1M count=40
  sudo /sbin/mkfs.ext2 ramdisk
  sudo mkdir dir_ramdisk
  sudo mount ramdisk ./dir_ramdisk -o loop
  cd /dir_ramdisk
  파일 시스템 복사
  sudo umount dir_ramdisk
  gzip ramdisk

3. Bootloader ARGS
  setenv bootargs "mem=116M console=ttyS0,115200n8 root=/dev/ram0 rw initrd=0x82000000,13M ip=off video=davincifb:vid0=OFF:vid1=OFF:osd0=800x480x16,4050K dm365_imp.oper_mode=0 vpfe_capture.interface=1 davinci_enc_mngr.ch0_output=LCD davinci_enc_mngr.ch0_mode=800x480 rootwait"

Posted by 다크쌍피
KSZ8721BL의 Default PHY Address 는 0x0001이다.

DM368-EVM 소스에서 DM368EVM_4_02_00_06 기준
psp/u-boot-2010.12-rc2-psp03.01.01.39/include/configs/davinci_dm365evm.h 의
#define CONFIG_EMAC_MDIO_PHY_NUM 0 -> 1로 변경해줘야한다.

psp/u-boot-2010.12-rc2-psp03.01.01.39/board/davinci/common/misc.c 수정

 int dvevm_read_mac_address(uint8_t *buf)
{
   buf[0] = 0x00;
   buf[1] = 0x01;
   buf[2] = 0x02;
   buf[3] = 0x0a;
   buf[4] = 0x0b;
   buf[5] = 0x0c;

   return 1; /* Found */
}

Posted by 다크쌍피