회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

기본적으로 제공하는 모든 코드를 올릴수 있는 상태에서 진행.
*www.hardkernel.com에서 제공하는 "초보자를 위한 ODROID-7으로 Android 빌드하기"를 모두 따라 해보고
시도 하시기 바랍니다. 설정이나 기타 옵션등이 많더라구요.

1) U-Boot
2) Kernel
3) ramdisk


///////////////////////////////////////////////////////////////////////////////////////
//Odroid-T 24Bit BMP Logo Image 올리기 준비.
///////////////////////////////////////////////////////////////////////////////////////

1) Logo Image 생성.
initlogo.bmp 2.5MB(24Bit BMP Image (1149*766))

2) initlogo.bmp File copy
경로:/home/XXXX/Odroid-T/android/system/core/rootdir


3) logoFile Copy Cmd 추가.
경로:/home/XXXX/Odroid-T/android/system/core/rootdir/Android.mk

    # 2011.03.09 seeingthesky Copy bmp Image.
    file := $(TARGET_ROOT_OUT)/initlogo.bmp
    $(file) : $(LOCAL_PATH)/initlogo.bmp | $(ACP)
        $(transform-prebuilt-to-target)
    ALL_PREBUILT += $(file)

 

4) 24Bit Image 처리 Code 추가.
경로:/home/XXXX/Odroid-T/android/system/core/init/init.h
    #define INIT_IMAGE_FILE "/initlogo.bmp"//2011.03.09 seeingthesky chg bmp
    int load_BMP24_image(char *fn, int IMGSizeW, int IMGSizeH);//2011.03.09 seeingthesky Add Function

경로:/home/XXXX/Odroid-T/android/system/core/init/init.c
    int main(int argc, char **argv)
    {
        ...
        // if( load_565rle_image(INIT_IMAGE_FILE) ) {
        //2011.03.09 seeingthesky chg Function
        if( load_BMP24_image(INIT_IMAGE_FILE, 1149, 766) ) {
        ...
    }

경로:/home/XXXX/Odroid-T/android/system/core/init/logo.c
    //2011.03.09 seeingthesky Add Fn.
    #define fb_size24BMP(fb) ((fb)->vi.xres * (fb)->vi.yres * 4) //Odroid-T LCD Memory size.

    static int fb_open(struct FB *fb)
    {
        ...
        //2011.03.09 seeingthesky Change Function.
        //fb->bits = mmap(0, fb_size(fb), PROT_READ | PROT_WRITE,
        //                MAP_SHARED, fb->fd, 0);
        fb->bits = mmap(0, fb_size24BMP(fb), PROT_READ | PROT_WRITE,
                                        MAP_SHARED, fb->fd, 0);

        ...
    }

    static void fb_close(struct FB *fb)
    {
        //2011.03.09 seeingthesky Change Function.
        //munmap(fb->bits, fb_size(fb));
        munmap(fb->bits, fb_size24BMP(fb));
        close(fb->fd);   
    }

    //2011.03.09 seeingthesky Add Function
    //BMP24 image format: RGB24bit BMP Image Draw(rgb888)
    int load_BMP24_image(char *fn, int IMGSizeW, int IMGSizeH)
    {
     struct FB fb;
        struct stat s;
        unsigned short *data;
        int fd;

        int  *pByte;
        char  *pbufByte, *ptr;
        int imgStepH, imgStepW, ScreenH, ScreenW;
        int ImgToScreenOffset, BMP24Offset;
        int CenterX, CenterY;

        ...

        if (IMGSizeW>ScreenW || IMGSizeH>ScreenH)
            goto fail_unmap_data;

        //screeninfo Size
        ScreenW = fb_width(&fb);
        ScreenH = fb_height(&fb);

        ptr = (char*)data;  //Image Data.
        ptr += (s.st_size);  //BMP Up/Down ->Down/Up

        pByte = (int*)fb.bits;  //Disply Byte Pointer

        //LCD Mem Image Center Cal.
        CenterX = (ScreenW/2) -(IMGSizeW/2);
        CenterY = (ScreenH/2) -(IMGSizeH/2);
        pByte += CenterY*ScreenW;
        pByte += CenterX;

        ImgToScreenOffset = (ScreenW - IMGSizeW);
        BMP24Offset = ((3 * IMGSizeW)%4);
        if(BMP24Offset>0)
            BMP24Offset = 4-BMP24Offset;

        for(imgStepH =0; imgStepH < IMGSizeH; imgStepH++){
            ptr -= ((IMGSizeW*3)+BMP24Offset);   //Image Line Jump (24Bit BMP Offset add)
            for(imgStepW =0; imgStepW < IMGSizeW*3; imgStepW+=3){ //BGR Image (Char Pointer 3Byte Jump)
                    pbufByte = (char*)pByte;
                    *(pbufByte+0) =*(ptr+imgStepW+0);//B
                    *(pbufByte+1) =*(ptr+imgStepW+1);//G
                    *(pbufByte+2) =*(ptr+imgStepW+2);//R
                    *(pbufByte+3) = 0x00;            //A
 
                    pByte+=1;//LCD Memory Buffer 1 pixel move.
                }

            pByte += ImgToScreenOffset;//Screen Line Jump
        
            }

            ...
        }
5) Compaile 전 ramdisk img를 지우자.
(컴파일이 정상적으로 되면 마지막에 생긴다. - 현 Size check. 이후 File과 비교.)
경로:/home/XXXX/Odroid-T/android/odroidt-img/
    odroidt-system.tar.gz
    ramdisk-uboot.img

6) odroid Compaile(일부만 해도 된다는디 그냥해도 24sec이닌까 그냥 Go Go)
    ~/Odroid-T/android$ ./odroid_T_build
    [[[[[[[ Make ramdisk image for u-boot ]]]]]]]

    Image Name:   ramdisk
    Created:      Wed Mar  9 19:34:19 2011
    Image Type:   ARM Linux RAMDisk Image (uncompressed)
    Data Size:    3103969 Bytes = 3031.22 kB = 2.96 MB
    Load Address: 0x30800000
    Entry Point:  0x30800000

    [[[[[[[ ok success !!! ]]]]]]]

7) initlogo.bmp Image Copy확인.(XXXX는 User Name)
경로:/home/XXXX/Odroid-T/android/out/target/product/odroidt/root


8) ramdisk-uboot.img 확인
경로:/home/XXXX/Odroid-T/android/odroidt-img/
    odroidt-system.tar.gz
    ramdisk-uboot.img(Size 증가.)

 

 

 

///////////////////////////////////////////////////////////////////////////////////////
//ramdisk-uboot.img File 올리기.
///////////////////////////////////////////////////////////////////////////////////////
1) minicom 연결.
2) Odroid-T Reset
3) 아무키나 누르기.(Minicom 터미널창에서 PC 키보드)
    (*   아무키나 누르기라길래 Odroid-t의 조그키를 마구 눌렀다는 ㅠㅠ)


4) print명령.(기본 출력화면.)
    # print                                                                                                       
    bootdelay=1                                                                                                            
    baudrate=115200                                                                                                        
    ethaddr=00:40:5c:26:0a:5b                                                                                              
    ipaddr=192.168.0.20                                                                                                    
    serverip=192.168.0.10                                                                                                  
    gatewayip=192.168.0.1                                                                                                  
    netmask=255.255.255.0                                                                                                  
    args_mmc=setenv bootargs 'root=/dev/mmcblk0p2 rootfstype=ext3 rw init=/init console=ttySAC2,115200 androidboot.console=v
    args_ram=setenv bootargs 'root=/dev/tfsr6 rootfstype=cramfs console=ttySAC2,115200 init=/linuxrc androidboot.console=s3v
    dnwu=dnw 30008000; movi write u-boot 30008000                                                                          
    dnwk=dnw 30008000; movi write kernel 30008000                                                                          
    dnwr=dnw 30008000; movi write rootfs 30008000 300000                                                                   
    bootargs=root=/dev/tfsr6 rootfstype=cramfs console=ttySAC2,115200 init=/linuxrc androidboot.console=s3c2410_serial2    
    bootcmd=movi read kernel 30008000;movi read rootfs 31000000 180000;bootm 30008000 31000000

5) run dnwr로 올리면    "Verifying Checksum ... XXX"에서 Error가 난다.
    *rootfs 31000000 180000이부분에서 180000이 rootfs Size이고, 이걸 키워줘야 한단다.
 
    - 여러 웹문서및 AESOP, hardkernel,등에서 여러가지 힌트를 얻을수 있었다.

6) hkdkc110_mmc.h에서 설정 바꾸기.
경로:/home/XXXX/Odroid-T/uboot/include/configs
    #define CFG_FASTBOOT_ADDR_RAMDISK  (0x30A00000)
    #define CONFIG_BOOTCOMMAND "movi read kernel 30008000; movi read rootfs 30A00000 180000; bootm 30008000 30A00000"
   
    * 두개의 define의 값을 바꿔줘야 한단다.    

    #define CFG_FASTBOOT_ADDR_RAMDISK  (0x31000000)
    #define CONFIG_BOOTCOMMAND "movi read kernel 30008000; movi read rootfs 31000000 480000; bootm 30008000 31000000"
    * 이렇게 바꿔 줬다.

******그런디 먼가 이상하다.
print문에나온 걸 보면
    bootcmd=movi read kernel 30008000;movi read rootfs 31000000 180000;bootm 30008000 31000000 이렇게 출력되는디
    코드에는 movi read kernel 30008000; movi read rootfs 30A00000 180000; bootm 30008000 30A00000 이렇게 되어있다.

    그냥 진행 해본다.

7) U-Boot를 컴파일 하고 올린다.
    cd uboot
    make mrproper
    make hkdkc110_mmc_config
    make
    sudo smdk-usbdl -f u-boot.bin
minicom
    run dnwu

8)변경 사항 확인.(minicom에서 다시 print명령)
    bootcmd=movi read kernel 30008000;movi read rootfs 31000000 180000;bootm 30008000 31000000
    이부분은 변한게 없다 ㅡ.,ㅡ;;

    movi read rootfs 31000000 180000;에서 180000부분만 키우면 LogoImage가 올라간다고 한다.
    변화가 없다.
    그냥 ramdisk-uboot.img를 올려 보자.

9)reset하고 Logo 이미지를 보자.
    역시 "Verifying Checksum ... XXX"에서 Error가 난다.(다른 Error형태로 출력될수도 있다.-여러가지 정황을 봐선)
    이것저것 건드려 보니 ㅡ,.ㅡ U-Boot도 안뜬다 Reset도 안되고 ㅡ.,ㅡ;
    받아둔 이미지로 다시 처음 부터 다운로드 해야 했다.
    (ODROID_TF_Burner_22a.exe로 odroidt-20110119를 다시 다운로드했음.)

10)여러가지 시도와 웹문서 찾기 시도.
    아무리 찾아도 위에 항목만 해주면 된다고들 한다...
    거짓말 조금 보태서 설정 바꿔가며 수백번 해도  print문 후에
        bootcmd=movi read kernel 30008000;movi read rootfs 31000000 180000;bootm 30008000 31000000
    이문장의 변화가 없었다.
 
    set bootcmd 'movi read kernel 30008000;movi read rootfs 31000000 480000;bootm 30008000 31000000'
    를해도 Reset하고 나면 그대로 였음.
   
    조금 다른 문서들을 찾아 보니 설정 변경을 하는데 바뀌질 않아서 Parameter부분을 Reset하고,

     다시 저장 해야 한다는 말이 있었다.
    Parameter? 코드상에 변경 한거 말고 다른곳에 저장 되는 무언가가 있나 보다.
 
    한참을 찾아다녔다.......뭐가 빠진걸까???????????????????????????????
 
    parameter를 저장하려면 "saveenv"를 해야 한단다.(으미 찾은거 같다 !!!)
 
    set bootcmd 'movi read kernel 30008000;movi read rootfs 31000000 480000;bootm 30008000 31000000'
    saveenv

    Reset하고 확인
    bootcmd=movi read kernel 30008000;movi read rootfs 31000000 480000;bootm 30008000 31000000
    드디어 바뀌었다 ㅠㅠ...감격~!


11) Reset하고 Logo Image 보기.

    울 이쁜 아들 사진이 화면 중앙에 뜬다~ㅎㅎ


이상 Odroid-T에서 24Bit Image 그대로 올리기 였습니다.


************************************************************************************************************************
사실 "ramdisk-uboot.img File 올리기."를 먼저 해본것입니다.
BMP Logo Image올리는건 큰용량 uboot.img가 올라가는걸 먼저 해보고
24bit뿌리는 프로그램을 한겁니다.

여러가지 Image Size와 rgb2565변환 해가면서 많은 시도를 해보았습니다.

너무 쉽게 되었다면 얻지 못했을것들도 얻고 ㅎㅎ 좀 짜증도 나긴했지만.. ^^;;;
결과를 보니 속이 후련하내요.

 

 

 

사용한 파일들 첨부해서 올립니다. 참고 하세요.

 

처음 안드로이드나 임베디드 시스탬에 접하시는 분들은

Logo 바꾸기 해보시면 재미를 느끼실꺼 같습니다 ^^*

 

*혹시 코드에 저작권 같은거 있음 바로 내릴께요 첨부 파일.

        - 주석으로 "seeingthesky"로 된부분이 수정한 부분입니다.

 

 

 

 

 

 

여러가지 파일과 관련 문서들을 작성해주신

    모든 분들께 감사 드립니다.(*^^*)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 


김장균

2011.03.10 20:02:27
*.226.202.37

이미 초보는 훌쩍 뛰어 넘으신듯... 삽질? 공유 감사합니다. 주말에 저도 한번 따라서 해보고 싶네요.

이제현

2011.03.10 21:09:03
*.90.137.102

김장균님 말씀대로 부트로더와 램디스크 구조는 완전히 파악하셨으니, 이미 초보는 벗어나셨습니다.

그런데 램디스크가 너무 커지면, 시스템에서 가용할 수 있는 메모리가 줄어들게 되니 주의하셔야 합니다.

수고하셨고, 감사합니다.

김장균

2011.03.11 04:17:34
*.226.202.37

C100 초기 오드로이드의 경우 램디스크가 없어서 개발하기 쉬웠는데, 왜 램디스크를 사용하게 되었는지 궁금합니다.

이제현

2011.03.11 04:37:17
*.90.137.102

램디스크없이 EXT 파일시스템의 ROOTFS 하나에 몽땅 때려 넣으면 개발 과정이 간단하긴 합니다.


그런데 번거롭게 과정을 통해서라도 램디스크를 사용하는 이유는 몇가지가 있습니다.

- 부팅속도가 30%이상 고속이고, 전반적인 반응 속도도 빨라집니다. 몇몇 .so 등 시스템 파일의 억세스 속도는 당연히 램디스크가 빠르기 때문이겠죠.

- ODROID 시리즈에서는 적용하지 않았지만, 상용 시스템에는 복구나 업데이트 로직에 램디스크가 있으면 편리합니다. 공식 안드로이드 소스에도 업데이트나 복구는 램디스크 기반으로 만들어져있습니다.

고도리

2011.03.11 09:22:59
*.200.239.234

Android 원본에서 이렇게 쓴 이유는 보안, software upgrade 때문입니다.

고도리

2011.03.11 09:23:53
*.200.239.234

고생 많이 하셨을게 눈에 확~~~~보이네요....^^

 

수고하셨습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 교육 홍보 및 광고는 "교육 및 세미나 홍보" 게시판을 이용해 ... 관리자 2010-07-15 107998
1730 훌 재오픈 축하~ [1] 박병구 2006-04-08 6500
1729 [소식] aESOP-S3C6410 PCB가 입고되었습니다. file [26] 고현철 2009-02-07 6500
» Odroid-T 완전~초보의 Logo Image 올리기. file [6] stshyoung 2011-03-10 6489
1727 Ubuntu에서 Meld(visual diff & merge tool)를 이용한 삽질 줄... 이창훈 2010-01-28 6485
1726 [빵터짐] LG전자 “우리 휴대폰 안쓰면 출입금지” [4] 고도리 2011-12-07 6482
1725 삼성, 업계 첫 2.0GHz 모바일AP `엑시노스 5250` 개발 파란새 2011-12-02 6479
1724 삼성 공식 커널 2.6.28.6-samsung-v2 release [7] 주재경 2009-08-08 6469
1723 대학생도 신청 가능한 안드로이드 포팅교육이 있네요 [9] 전호철 2010-06-29 6458
1722 6410 구입 [1] 전병진 2009-04-25 6450
1721 Android source build - 우분투 9.10 / 8.10 x86_64 빌드 ... [3] 고포릿 2010-01-08 6408
1720 "진저브레드" UI 대대적 개선 예정. file [1] 유형목 2010-06-18 6407
1719 [Android 중국책] 도착 했습니다. 오늘부터 배포합니다. [17] 최종환 2010-03-13 6406
1718 모토로이 소스 공개 [1] Beto 2010-03-02 6389
1717 이솝보드용 WinCE 6.0 BSP 마무리 중... [1] 김재훈 2009-03-26 6378
1716 Android-x86 on Viliv S5 동영상입니다. [4] pinebud 2010-07-29 6367
1715 V210을 위한 USB Driver 설치 문제(Window 7) [4] 이정화 2010-10-30 6348
1714 Running Debian on a Samsung Galaxy under Android 최종환 2010-02-10 6337
1713 iPad 출시... 그리고 해부 사진... file [2] 장재석 2010-04-04 6323
1712 Exynos 4210 보드 예약 판매 알림 file 이제현 2011-03-16 6320
1711 [aesop-v210: Torbreck] Android 2.3 gingerbread kernel p... 고도리 2011-02-02 6303

사용자 로그인