2014년 6월 23일 월요일

[Exynos4412 Mango220] Android ICS 4.0.4 소스 릴리즈 2014-06-23

http://cafe.naver.com/embeddedcrazyboys
http://www.mangoboard.com/


수정 사항

1. 10.1" LCD 드라이버 포팅
2. 5M, 1.3M , TVP5150 Dual Camera 지원
3. SDMMC, eMMC 부팅 kernel Configuration 추가
4. 이더넷 속도 개선 (SMSC9220) upload:40Mbps, download:70Mbps
5. 카메라 shutt음 촬영 후 나도록 수정
6. Touch AF 추가 (5M)
7. 5M 카메라 센서값 변경
8. 갤러리 앱 2개 표시되는 문제 수정
9. 중국어 키보드 추가
10. default UI Tablet 설정

Source Download: 

How-to

## Mango220 build and boot
# Environment
http://cafe.naver.com/embeddedcrazyboys/22475

#Compile
[ u-boot compile ]

./build_uboot clean
./build_uboot config
./build_uboot

[ kernel compile ]
---------SD/MMC Kernel Config ---------------

#sdmmc boot and 10.1inch cap touch 1280x800 , 5M CAM
./build_kernel clean

./build_kernel defconfig mango220_android_sdmmc_10_1inch_1280_800_mt9p111_5M_CAM_dual_defconfig

./build_kernel

#sdmmc boot and 7inch cap touch 1024x600 , 5M CAM
./build_kernel clean
[CAM_A]
./build_kernel defconfig mango220_android_sdmmc_7inch_1024_600_mt9p111_5M_CAM_A_defconfig
[CAM_B] 
./build_kernel defconfig mango220_android_sdmmc_7inch_1024_600_mt9p111_5M_CAM_B_defconfig
./build_kernel

#sdmmc boot and 7inch cap touch 1024x600 , TVP5150
./build_kernel clean

[CAM_A]
./build_kernel defconfig mango220_android_sdmmc_7inch_1024_600_tvp5150_CAM_A_defconfig
[CAM_B]
./build_kernel defconfig mango220_android_sdmmc_7inch_1024_600_tvp5150_CAM_B_defconfig


./build_kernel


#sdmmc boot and 7inch cap touch 1024x600 , SR130PC10 1.3M 
./build_kernel clean

[CAM_A]
./build_kernel defconfig mango220_android_sdmmc_7inch_1024_600_sr130pc10_1_3M_CAM_A_defconfig
[CAM_B]
./build_kernel defconfig mango220_android_sdmmc_7inch_1024_600_sr130pc10_1_3M_CAM_B_defconfig


./build_kernel
  
----------eMMC Kernel Config ----------------------------
#eMMC boot and 10.1inch cap touch 1280x800 , 5M CAM
./build_kernel clean

./build_kernel defconfig mango220_android_emmc_10_1inch_1280_800_mt9p111_5M_CAM_dual_defconfig

./build_kernel

#eMMC boot and 7inch cap touch 1024x600 , 5M CAM
./build_kernel clean
[CAM_A]
./build_kernel defconfig mango220_android_emmc_7inch_1024_600_mt9p111_5M_CAM_A_defconfig
[CAM_B] 
./build_kernel defconfig mango220_android_emmc_7inch_1024_600_mt9p111_5M_CAM_B_defconfig
./build_kernel

#eMMC boot and 7inch cap touch 1024x600 , TVP5150
./build_kernel clean

[CAM_A]
./build_kernel defconfig mango220_android_emmc_7inch_1024_600_tvp5150_CAM_A_defconfig
[CAM_B]
./build_kernel defconfig mango220_android_emmc_7inch_1024_600_tvp5150_CAM_B_defconfig


./build_kernel


#eMMC boot and 7inch cap touch 1024x600 , SR130PC10 1.3M 
./build_kernel clean

[CAM_A]
./build_kernel defconfig mango220_android_emmc_7inch_1024_600_SR130PC10_1_3M_CAM_A_defconfig
[CAM_B]
./build_kernel defconfig mango220_android_emmc_7inch_1024_600_SR130PC10_1_3M_CAM_B_defconfig


./build_kernel

[ android compile ]
tar xf android-ics4.0.4-xxx.tgz


[SDMMC boot ]
$ cd android-jb411
$ vi device/crazyboys/mango220/BoardConfig.mk
BOARD_USES_EMMC := false
#BOARD_USES_EMMC := true

수정 후 컴파일 

[EMMC boot ]
$ cd android-jb411
$ vi device/crazyboys/mango220/BoardConfig.mk
#BOARD_USES_EMMC := false
BOARD_USES_EMMC := true

수정 후 컴파일 

How to compile

./build_android.sh


#SD Boot 최초 한번 
SD card를 linux pc에 삽입
#df 
명령으로 디바이스 확인
# cd image
#How To Fusing
$ dmesg | tail
[12403.632015] usb 2-5: new high-speed USB device number 25 using ehci_hcd
[12403.856263] hub 2-0:1.0: unable to enumerate USB device on port 5
[12483.752014] usb 2-5: new high-speed USB device number 26 using ehci_hcd
[12483.976252] hub 2-0:1.0: unable to enumerate USB device on port 5
[12513.801490] sd 9:0:0:0: [sdd] 15644672 512-byte logical blocks: (8.01 GB/7.45 GiB)
[12513.802983] sd 9:0:0:0: [sdd] No Caching mode page present
[12513.802986] sd 9:0:0:0: [sdd] Assuming drive cache: write through
[12513.807109] sd 9:0:0:0: [sdd] No Caching mode page present
[12513.807113] sd 9:0:0:0: [sdd] Assuming drive cache: write through
[12513.808249]  sdd: sdd1 sdd2 sdd3 sdd4

#image 
[SDMMC image Write]
$ cp sdmmc-image/* .
$ cp zImage-sdmmc-xxx zImage


sudo ./sdwriter sdd 220 bin

#Boot mode
SD CH2  : Off[1], ON, Off, Off, Off, Off[6]
eMMC CH4: Off[1], Off, On, Off, On, Off[6]




[Linux host pc ubuntu 12.0.4 ] 
[icanjji@icanjji-pc image]$ lsusb 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 05e3:0716 Genesys Logic, Inc. USB 2.0 Multislot Card Reader/Writer
Bus 002 Device 005: ID 18d1:0002 Google Inc. 

Mango220 <-> usb otg <-> Linux PC 연결 후 

"lsusb" 명령으로 드라이버 인식을 확인 합니다. 

[SD/MMC and eMMC fusing command ]
## 8GB 
fdisk -c 0 500 1000 300
fatformat mmc 0:1
fastboot

## Host PC 
sudo ./fastboot flash fwbl1 E4412_S.bl1.SMDK.MR3.bin
sudo ./fastboot flash bl2 E4412_S.bl2.SMDK.MR3.bin.signed
sudo ./fastboot flash bootloader u-boot.bin
sudo ./fastboot flash tzsw E4412_S.tzsw.SMDK.MR3.bin.signed

sudo ./fastboot flash kernel zImage
sudo ./fastboot flash ramdisk ramdisk-uboot.img
sudo ./fastboot -w
sudo ./fastboot flash system system.img


sudo ./fastboot flash kernel zImage;sudo ./fastboot flash ramdisk ramdisk-uboot.img;sudo ./fastboot -w;sudo ./fastboot flash system system.img

[env]
setenv bootcmd "movi read kernel 0 40008000;movi read rootfs 0 41000000 100000;bootm 40008000 41000000"




## Window PC only

드라이버 설치 image 디렉토리 )

adb_usb_driver 디렉토리 
mango220-how-to-adb-driver.pdf

[eMMC only start ]
Boot switch : 3, 5 ON
SD/MMC card insert
## u-boot

emmc partition 0 1 0
mmc erase boot 0 0 0; mmc erase user 0 0 0
[eMMC only end ]


[SD/MMC and eMMC fusing command ]
## 8GB 
fdisk -c 0 500 1000 300
fatformat mmc 0:1
fastboot


image 디렉토리에서 dos command 실행

## Host PC 
fastboot flash fwbl1 E4412_S.bl1.SMDK.MR3.bin
fastboot flash bl2 E4412_S.bl2.SMDK.MR3.bin.signed
fastboot flash bootloader u-boot.bin
fastboot flash tzsw E4412_S.tzsw.SMDK.MR3.bin.signed

fastboot flash kernel zImage
fastboot flash ramdisk ramdisk-uboot.img
fastboot -w
fastboot flash system system.img




# u-boot ethernet 

eth1addr 변수를 꼭 지정하고 해야합니다.
ex) setenv eth1addr 00:40:5c:26:0a:5c

인터페이스는 다음과 같이 선택합니다.
0번 포트 선택: setenv ethact smc911x-0

## fusing via tftp 
[ u-boot ip ]
setenv ipaddr 192.168.3.20; setenv serverip 192.168.3.9; setenv gatewayip 192.168.3.1; setenv netmask 255.255.255.0

[ bootloader fusing ]
==> set boot mode to eMMC CH0
tftp 41000000 E4412_S.bl1.SMDK.MR3.bin; emmc open 0; movi write zero fwbl1 0 41000000; emmc close 0
tftp 41000000 E4412_S.bl2.SMDK.MR3.bin.signed; emmc open 0; movi write zero bl2 0 41000000; emmc close 0
tftp 41000000 u-boot.bin; emmc open 0; movi write zero u-boot 0 41000000; emmc close 0
tftp 42000000 E4412_S.tzsw.SMDK.MR3.bin.signed; emmc open 0; movi write zero tzsw 0 42000000; emmc close 0

[ Kernel fusing ]
tftp 41000000 zImage; movi write kernel 0 41000000


[tftp boot]
setenv bootcmd "tftp  40008000 zImage ;movi read rootfs 0 41000000 100000;bootm 40008000 41000000"

[ SD Env ]
setenv bootcmd "movi read kernel 0 40008000;movi read rootfs 0 41000000 100000;bootm 40008000 41000000"

2014년 6월 20일 금요일

Mango210 Android ICS 4.0.4 Relase 20140325


http://cafe.naver.com/embeddedcrazyboys
http://www.mangoboard.com/
소스 다운로드 :

수정내용:

1.usb storage 관련 patch  
2.기본 언어 한국어로 변경 
3. usb to 이더넷 드라이버 포팅 
4. USB host reboot 명령으로 부팅 시 host 인식 에러 발생 patch
5. DPI 160으로 적용
6. nand booting 메뉴얼 작성 patch 
7. mmc booting 메뉴얼 작성 및 patch
8. usb mouse 우측키 클릭 시 back 키가 안되는 문제 patch
9. 7인치 감압식 LCD Developer Guide
10. 7인치 정전식 LCD  Developer Guide
11. 10.1인치 정전식 LCD  Developer Guide 
12. 5M MT9P111 Camera Developer Guide
13. 1.3M  SR130PC10 Camera Developer Guide
14. TVP5150 TV 인코더 Developer Guide

문서 링크 : 

##u-boot build
cd uboot
Nand에 Write할때와 sd/mmc에 Write할 경우 설정을 변경 후 컴파일을 해야 합니다. 

include/configs/mango210.h파일에서 
- NAND Write 시 
#define CFG_FASTBOOT_NANDBSP
//#define CFG_FASTBOOT_SDMMCBSP

- SD/MMC Write 시 
//#define CFG_FASTBOOT_NANDBSP
#define CFG_FASTBOOT_SDMMCBSP
수정 후 컴파일 

$ ./build_uboot


## kernel build

## 7inch 1024x600 cap touch ft5x06
$ ./build_kernel defconfig mango210_ICS404_mrvl8787_ft5x06_defconfig
$ ./build_kernel

이전 모델 인 경우 
## 7inch 1024x600 cap touch HX8526
$ ./build_kernel defconfig mango210_ICS404_mrvl8787_HX8526_defconfig
$ ./build_kernel


## 7inch 800x480 LCD, Camera 1.3M sr130pc10, nand256MB
$ ./build_kernel defconfig mango210_7inch_nand256MB_800x480_1.3M_defconfig
$ ./build_kernel

## 7inch 800x480 LCD, Camera 5M MT9P111, nand256MB
$ ./build_kernel defconfig mango210_7inch_nand256MB_800x480_1.3M_defconfig
$ ./build_kernel

## 7inch 800x480 LCD, TVP5150 , nand256MB
$ ./build_kernel defconfig mango210_7inch_nand256MB_800x480_1.3M_defconfig
$ ./build_kernel



## 7inch 1024x600 LCD, Camera 1.3M sr130pc10, nand256MB
$ ./build_kernel defconfig mango210_7inch_nand256MB_1024x600_ft5x06_1.3M_defconfig
$ ./build_kernel

## 7inch 1024x600 LCD, Camera 5M MT9P111, nand256MB
$ ./build_kernel defconfig mango210_7inch_nand256MB_1024x600_ft5x06_5M_defconfig
$ ./build_kernel

## 7inch 1024x600 LCD, TVP5150 , nand256MB
$ ./build_kernel defconfig mango210_7inch_nand256MB_1024x600_ft5x06_tvp5150_defconfig
$ ./build_kernel


## 10.1inch 1280x800 LCD, Camera 1.3M sr130pc10, nand256MB
$ ./build_kernel defconfig mango210_10_1inch_nand256MB_1.3M_defconfig
$ ./build_kernel

## 10.1inch 1280x800 LCD, Camera 5M MT9P111, nand256MB
$ ./build_kernel defconfig mango210_10.1inch_nand256MB_5M_defconfig
$ ./build_kernel

## 10.1inch 1280x800 LCD, TVP5150, nand256MB 
$ ./build_kernel defconfig mango210_10.1inch_nand256MB_tvp5150_defconfig
$ ./build_kernel

위와 같이 커널에서 빌드 커널하거나, image에 copy해둔 zImage를 사용하셔도 됩니다.
zImage_1024x600_1.3M*
zImage_1024x600_5M*
zImage_1024x600_tvp5150*
zImage_1280_800*
zImage_1280_800_1.3M*
zImage_1280_800_5M*
zImage_1280_800_tvp5150*
zImage_800x480*
zImage_800x480_1.3M*
zImage_800x480_5M*
zImage_800x480_tvp5150*

nand boot 시 컴파일 

## kernel build

## 7inch 800x480 LCD
$ ./build_kernel defconfig mango210_7inch_nand256MB_wifi8787_defconfig
$ ./build_kernel

##android 갑압식
- BoardConfig.mk (/android/device/crazyboys/mango210)
BOARD_PRESS_TOUCH :=true

##android 정전식
- BoardConfig.mk (/android/device/crazyboys/mango210)
BOARD_PRESS_TOUCH :=false

갑압식 정전식에 따라 위와 같이 수정을 후 ./android_build.sh

## android nand build

- BoardConfig.mk 
TARGET_USERIMAGES_USE_EXT4 := false

- init.rc
on fs
# mount mtd partitions
    # Mount /system rw first to give the filesystem a chance to save a checkpoint
    mount yaffs2 mtd@system /system
    mount yaffs2 mtd@system /system rw remount
    mount yaffs2 mtd@userdata /data  nosuid nodev
    mount yaffs2 mtd@cache /cache  nosuid nodev

- init.mango210.rc 파일에 
# mount ext4 partitions
#   mount ext4 /dev/block/mmcblk0p2 /system wait rw
#   mount ext4 /dev/block/mmcblk0p3 /data wait rw noatime nosuid nodev
#   mount ext4 /dev/block/mmcblk0p4 /cache wait rw noatime nosuid nodev

위와 같이 수정이 되어 있어야 함. 

## android mmc booting build

- BoardConfig.mk 
TARGET_USERIMAGES_USE_EXT4 := true

- init.rc
on fs
# mount mtd partitions
    # Mount /system rw first to give the filesystem a chance to save a checkpoint
#    mount yaffs2 mtd@system /system
#    mount yaffs2 mtd@system /system rw remount
#    mount yaffs2 mtd@userdata /data  nosuid nodev
#    mount yaffs2 mtd@cache /cache  nosuid nodev

- init.mango210.rc 

 mount ext4 partitions
   mount ext4 /dev/block/mmcblk0p2 /system wait rw
   mount ext4 /dev/block/mmcblk0p3 /data wait rw noatime nosuid nodev
   mount ext4 /dev/block/mmcblk0p4 /cache wait rw noatime nosuid nodev
   
## Android ICS Build
$tar xf xxxx_ics404_prebuilt.tgz
# android 디렉토리가 생성되고, android 디렉토리 안에 prebuilt 디렉토리 생성됨
$tar xf xxxx_ics404.tgz
$ cd android
$ ./android_build.sh

 
5번  선택

$ ./android_build.sh

$ cp out/target/product/smdkv210/ramdisk-uboot.img ../image
$ cp out/target/product/smdkv210/system.img ../image



## NAND booting 시 How to 
sd card Linux Host PC 삽입

[root@crzubntu image]# df
파일시스템           1K-블럭 사용됨 사용가능 사용% 마운트 됨
/dev/sda1             37486120   4995552  30586340  15% /
none                   2009524       376   2009148   1% /dev
none                   2013752       164   2013588   1% /dev/shm
none                   2013752       332   2013420   1% /var/run
none                   2013752         0   2013752   0% /var/lock
none                   2013752         0   2013752   0% /lib/init/rw
/dev/sda5            576740904    276112 547168000   1% /home
192.168.0.113:/home/icanjji/work
                     1746752512 527285248 1132045312  32% /media/113
/dev/sdb1              7019508        48   7019460   1% /media/0000-3333
/dev/sdb2               231808    147592     84216  64% /media/57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/sdb4               103328      4152     93844   5% /media/5e0b575b-8a69-f635-ef85-219453a24cf2
/dev/sdb3               354284     58268    277728  18% /media/f7442953-22a3-55b1-87bf-bacdb21de52b

$ sudo  ./sdwriter sdb 210 bin

보드에 삽입 후 부팅
Mango210 Board : SD Boot ( 1,3,4 ON) 
CM-V210 : SD Boot ( 2,3,6 ON )

after boot u-boot 

MANGO210 # fdisk -c 0; fatformat mmc 0:1;fastboot

Host PC Linux 
fastboot flash kernel zImage ;  fastboot flash system system.img; fastboot flash ramdisk ramdisk-uboot.img ;  fastboot -w 

$ sudo fastboot flash kernel zImage ; sudo fastboot flash system system.img; sudo fastboot flash ramdisk ramdisk-uboot.img ; sudo fastboot -w 


#set u-boot 
setenv bootcmd 'movi read kernel 20008000; movi read rootfs 21000000 300000;bootm 20008000 21000000'
setenv bootargs 'console=ttySAC1,115200'


## SD/MMC 부팅 시 
sd card Linux Host PC 삽입

[root@crzubntu image]# df
파일시스템           1K-블럭 사용됨 사용가능 사용% 마운트 됨
/dev/sda1             37486120   4995552  30586340  15% /
none                   2009524       376   2009148   1% /dev
none                   2013752       164   2013588   1% /dev/shm
none                   2013752       332   2013420   1% /var/run
none                   2013752         0   2013752   0% /var/lock
none                   2013752         0   2013752   0% /lib/init/rw
/dev/sda5            576740904    276112 547168000   1% /home
192.168.0.113:/home/icanjji/work
                     1746752512 527285248 1132045312  32% /media/113
/dev/sdb1              7019508        48   7019460   1% /media/0000-3333
/dev/sdb2               231808    147592     84216  64% /media/57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/sdb4               103328      4152     93844   5% /media/5e0b575b-8a69-f635-ef85-219453a24cf2
/dev/sdb3               354284     58268    277728  18% /media/f7442953-22a3-55b1-87bf-bacdb21de52b

$ sudo  ./sdwriter sdb 210 

보드에 삽입 후 부팅
Mango210 Board : SD Boot ( 1,3,4 ON) 
CM-V210 : SD Boot ( 2,3,6 ON )

2014년 6월 4일 수요일

프리뷰 보이는 것과 다르게 Y-mirror되어서 이미지가 촬영되는 문제 관련


http://www.mangoboard.com/


프리뷰 보이는 것과 다르게 Y-mirror되어서 이미지가 촬영되는 문제 관련
디버깅을 해 보면
 카메라는 아래와 같다.

D/CameraService( 1350): sendCommand (orientation 1)



cameraService.cpp 파일에서 아래와 같이 수정
status_t CameraService::Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) {
    LOG1("sendCommand (pid %d)", getCallingPid());
    int orientation;
    Mutex::Autolock lock(mLock);
    status_t result = checkPidAndHardware();
    if (result != NO_ERROR) return result;

    if (cmd == CAMERA_CMD_SET_DISPLAY_ORIENTATION) {
        // Mirror the preview if the camera is front-facing.
        orientation = getOrientation(arg1, mCameraFacing == CAMERA_FACING_FRONT);
            LOG1("sendCommand (orientation %d)", orientation);//crazyboys 20140604
            orientation=0;//crazyboys 20140604

그리고, 카메라 초기화 코드 즉 MT9P111 카메라 센서에서 레지스터는
           {0xC850, 0x01, BYTE_LEN, 0},
           {0xC851, 0x01, BYTE_LEN,0},
           {0xC888, 0x01, BYTE_LEN,0},
           {0xC889, 0x01, BYTE_LEN, 0},        


4개 이다. 위의 값을 조정하여 프리뷰 화면을 맞추면 됩니다

packages\apps\Camera\src\com\android\camera\Util.java 파일도 수정을 해야 합니다. 

    public static int getDisplayOrientation(int degrees, int cameraId) {
        // See android.hardware.Camera.setDisplayOrientation for
        // documentation.
        Camera.CameraInfo info = new Camera.CameraInfo();
        Camera.getCameraInfo(cameraId, info);
        int result;

        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            //result = (info.orientation + degrees) % 360;
            //result = (360 - result) % 360;  // compensate the mirror
            result = (info.orientation - degrees + 360) % 360;//crazyboys 20140604
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        Log.v(TAG, "getDisplayOrientation"+result);
        return result;
    }