kitkat 소스에 mvv210 추가하기 - 4부




새로운 디바이스를 껍데기만 만들어 줬다.


보드에 맞춘 설정따윈 없이....


억지로 보드에 올려도 봤다. 물론 제대로 동작을 할리가 없다.


이 후, 이것저것 많이 공부하게 됐다.


커널의 init 소스부터 시작해서 안드로이드의 init.rc 파일까지 쭉~ 따라가 봤다.


안드로이드의 부팅과정이 대략 그려지는데, 이제 설정을 제대로 해 주면서 하나씩 작성해 보려고 한다.


이건 결과가 나오면 포스팅해야겠다.


답이 아닌 내용을 계속 포스팅하는 것이 불편하다.



에르 프사이 콩구르...


Posted by 똑똑한 영장류

kitkat 소스에 mvv210 추가하기 - 3부




아주 기본적인 설정 파일들로 시작해서 에러메세지 하나씩 해결해주니까, 빌드는 되었다.

하지만, mvv210에 맞춰준 것은 CPU 밖에 없다.



이제 좀 더 세부적으로 들어가봐야겠다.



<6>Freeing init memory: 168K
Freeing init memory: 168K
<3>init: Timed out waiting for /dev/.coldboot_done
init: Timed out waiting for /dev/<coldboot_done
3>init: /dev/hw_random not found
init: /dev/hw_ra<dom not found
3>init: /dev/hw_random not found
init: /dev/hw_ra<dom not found
3>init: Unable to open persistent property directory /data/property errno: 2
init: Unable to open persistent property directory /data/property errno: 2
<3>mfc_firmware_request_complete_handler: failed to load MFC F/W, MFC will not w
orking
mfc_firmware_request_complete_handler: failed to load MFC F/W, MFC will not work
ing



현재 상태에서 SD굽고 부팅시켰을 때의 마지막 로그부분이다.

coldboot 부분에서 멈추는 것으로 보인다.


init.rc 파일 관련 찾아보고...테스트


device.mk



BOARD_SDMMC_BSP := true

# BOARD_SDMMC_BSP 에 따라서 init.rc 파일 선택

ifeq ($(BOARD_SDMMC_BSP),true)

source_init_rc_file := $(LOCAL_PATH)/init.smdkv210_sdmmc.rc

else

source_init_rc_file := $(LOCAL_PATH)/init.smdkv210.rc

endif



PRODUCT_COPY_FILES := \

$(source_init_rc_file):root/init.smdkv210.rc \

device/samsung/smdkv210/init.smdkv210.usb.rc:root/init.smdkv210.usb.rc \

device/samsung/smdkv210/ueventd.smdkv210.rc:root/ueventd.smdkv210.rc


mvv210 자료중에서 init.smdkv210_sdmmc.rc, init_smdkv210.rc, init_smdkv210_usb.rc, *.rc 파일 모두를 smdkv210 디렉토리에 복사해 넣었다.



full_smdkv210.mk 안에..


$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)

$(call inherit-product, device/samsung/smdkv210/device.mk)


안드로이드 full_base.mk 상속받도록하고, 이어서 설정 추가해준 device.mk 도 full_smdkv210 product에 적용시켜줬다.



빌드 후, 다시 테스트!


몇단계 더 지나가고 또 다른 에러메시지가 나오는건 당연..



안드로이드 소스에 새로운 디바이스를 추가하는 것은 대충 살펴봤으니 여기까지하고,

이제 ICS 빌드할 때 사용되었던 파일들을 가지고 진행을 해봐야겠다.






Posted by 똑똑한 영장류
kitkat 소스에 mvv210 추가하기 - 2부~~~~~



make 해 보면...에러~~

============================================
including ./abi/cpp/Android.mk ...
including ./art/Android.mk ...
including ./bionic/Android.mk ...
bionic/libc/Android.mk:458: TARGET_CPU_VARIANT is not defined
bionic/libc/arch-arm/arm.mk:41: *** "TARGET_CPU_VARIANT not set or set to an unknown value. Possible values are cortex-a7, cortex-a8, cortex-a9, cortex-a15, krait. Use generic for devices that do not have a CPU similar to any of the supported cpu variants.".  멈춤.



이렇게 하나씩 해결해나가다가는 거지꼴을 못 면한다~~~

TARGET_CPU_VARIANT 가 설정되지 않았다고 하네.

s5pv210 이 cortex-a8 이라고 하니, cortex-a8 로 설정

BoardConfig.mk

TARGET_CPU_VARIANT := cortex-a8


여기까지하면 make 가 꽤 진행되기는 하는구나..하지만...

make: *** `out/target/product/smdkv210/boot.img'에서 필요로 하는  타겟 `out/target/product/smdkv210/kernel'를 만들 규칙이 없습니다.  멈춤.
make: *** 끝나지 않은 작업을 기다리고 있습니다....
Notice file: system/core/libmincrypt/NOTICE -- out/host/linux-x86/obj/NOTICE_FILES/src//lib/libmincrypt.a.txt
Generated: (out/target/product/smdkv210/android-info.txt)


영어로 나와야 구글링하기가 좋은데, 한글이네..쩝...

boot.img 는 아마도 부트로더와 관련되있을텐데, 난 u-boot 이미지를 따로 만드니까..필요없는 작업이다. 
kernel 을 만들 규칙이 없다니...난 커널도 따로 빌드해서 붙일 거니까 역시 불필요...

수행하지 않도록 설정을 해 줘야겠네..

BoardConfig.mk

TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true

현재 kitkat 빌드에서는 mvv210 보드의 주변장치에 관한 것들은 하나도 설정하고 있지않다. 단지 CPU만 맞춰준거 같다.


make -j4 했더니....


어라? 이제 빌드가 끝까지 실행이 되었다.


K/out/target/product/smdkv210 디렉토리에 ramdisk.img, system.img, userdata.img 등 만들어졌다. 헐~~~~~


mv 제공 이미지와 다른 점 발견!!





ramdisk.img 는 gzip compressed data 라 mkimage 로 변경해서 사용하면되니까 문제가 아닌데,

system.img, userdata.img 가 dBase IV DBT..어쩌구 저쩌구다...



이미지 파일들은 ext4 파일시스템을 이용하는데, 지금처럼 별다른 설정이 없으면 ext4 가 아닌 저런 파일 시스템으로 생성이 되는갑다.

이것도 어디 설정하는 부분이 있겠지...( 찾아보니, TARGET_USERIMAGES_USE_EXT4 :=true 로 설정을 해 준다.)



혹시나 이 파일시스템을 ext4로 변환하는 방법을 검색해보니, 역시 구글~! 


#!/bin/bash


dd if=/dev/zero of=system_ext4.img bs=40M count=10

mkfs.ext4 system_ext4.img

tune2fs -c0 -i0 system_ext4.img

mkdir sysext4

mount -o loop system_ext4.img system-ext4/

cp -v -r -p system/* sysext4/

umount sysext4/

rm -rf sysext4/


적당한 크기(예에서는 400M)의 파일을 만들고, 포맷하고 마운트한 다음, out/target/product/smdkv210/system/ 디렉토리의 모든것을 마운트한 곳에 복사한 후, 마운트 해제..마운트 지점 삭제...

(저기 mkdir sysext4 가 구글리에서는 system-ext4 였는데, 이상하게도 파일이 있다고 나오면서 디렉토리 생성이 되지않아 아무렇게나 변경한 것이다. 아직 이유모름)


이 방식으로 system.img, userdata.img 를 *_ext4.img 로 변경한 후, SD에 한번 심어봤더니... 의미없다~~


이제 각 *.mk 파일에 좀 더 상세히 설정들을 적용해 봐야겠다. mv 자료를 참고로 해서...





Posted by 똑똑한 영장류

kitkat 소스에 mvv210 추가하기



~/work/K/ 아래에 kitkat 소스를 받아놓고, 


K/device/samsung/ 안에 smdkv210 디렉토리를 만든다.


K/device/samsung/smdkv210/ 안에


vendorsetup.sh 만든다.


add_lunch_combo full_smdkv210-userdebug

add_lunch_combo full_smdkv210-eng



이렇게만하고 점심 주문해보면..




5,6번 메뉴에 올라와 있다.


vendorsetup.sh 와 더불어 필수적인 파일 두 개 더 만든다.


AndroidProducts.mk


PRODUCT_MAKEFILES := $(LOCAL_DIR)/full_smdkv210.mk


full_smdkv210.mk 파일도 필요하겠지. 빈 파일로 일단 만들어두고, BoardConfig.mk, device.mk 파일도 만들어두자.


여기까지 하고 lunch > 6 하면 이제 오류들이 막 나온다.


오류는 build/core/config.mk 파일을 수행하면서 발생하는 것들이다. 소스 잘 들여다보면 각 파일에 무얼 설정해 놔야하는지 알 수 있다.


lunch > 6 할 때마다 나오는 오류들...


Which would you like? [aosp_arm-eng] 6               

build/core/product_config.mk:231: *** device/samsung/smdkv210/full_smdkv210.mk: PRODUCT_NAME must be defined..  멈춤.


** Don't have a product spec for: 'full_smdkv210'

** Do you have the right repo manifest?


build/core/product_config.mk 파일 231번째 줄에서 뱉아낸 오류다.

full_smdkv210.mk  파일에 PRODUCT_NAME 적어주면 된다.


PRODUCT_NAME := full_smdkv210


다시 lunch > 6


Which would you like? [aosp_arm-eng] 6

build/core/product_config.mk:231: *** device/samsung/smdkv210/full_smdkv210.mk: PRODUCT_BRAND must be defined..  멈춤.


** Don't have a product spec for: 'full_smdkv210'

** Do you have the right repo manifest?


이제 PRODUCT_BRAND 가 없다네.


PRODUCT_NAME := full_smdkv210

PRODUCT_BRAND := Android


다시 


Which would you like? [aosp_arm-eng] 6

build/core/config.mk:150: *** No config file found for TARGET_DEVICE .  멈춤.


** Don't have a product spec for: 'full_smdkv210'

** Do you have the right repo manifest?


이제 build/core/config.mk 파일로 넘어갔다.

TARGET_DEVICE 에 대한 설정파일이 없다고..?


full_smdkv210.mk 에 추가로 해결...


PRODUCT_NAME := full_smdkv210

PRODUCT_BRAND := Android

PRODUCT_DEVICE := smdkv210


다시..


Which would you like? [aosp_arm-eng] 6

build/core/config.mk:157: *** TARGET_ARCH not defined by board config: device/samsung/smdkv210/BoardConfig.mk.  멈춤.


** Don't have a product spec for: 'full_smdkv210'

** Do you have the right repo manifest?


BoardConfig.mk 에 TARGET_ARCH 가 설정되어 있지 않아서 오류..이어서 TARGET_CPU_ABI 도 없다고 뱉어낸다.


BoardConfig.mk 에 추가


TARGET_ARCH := arm

TARGET_CPU_ABI := armeabi-v7a


여기까지 하면..일단 점심메뉴 선택은 할 수 있다.


Which would you like? [aosp_arm-eng] 6


============================================

PLATFORM_VERSION_CODENAME=REL

PLATFORM_VERSION=4.4.4

TARGET_PRODUCT=full_smdkv210

TARGET_BUILD_VARIANT=eng

TARGET_BUILD_TYPE=release

TARGET_BUILD_APPS=

TARGET_ARCH=arm

TARGET_ARCH_VARIANT=armv5te

TARGET_CPU_VARIANT=

HOST_ARCH=x86

HOST_OS=linux

HOST_OS_EXTRA=Linux-4.2.0-35-generic-x86_64-with-Ubuntu-14.04-trusty

HOST_BUILD_TYPE=release

BUILD_ID=KTU84Q

OUT_DIR=out

============================================


ryu@ryu-Ubuntu:~/work/K$ 




TARGET_ARCH_VARIANT 가 armv5te 라는 걸로 잡히네. mv 제공에는 armv7-a-neon 으로 나오던데, 수정해줘야겠다.


BoardConfig.mk 수정


TARGET_ARCH := arm

TARGET_ARCH_VARIANT := armv7-a-neon

TARGET_CPU_ABI := armeabi-v7a



기본 설정되는 값들도 한 번 살펴봐야겠다.



메뉴 골랐으니, 빌드를 시도해볼만하지만, make 하면 또 오류들이 쏟아져 나온다.


이번 정리는 build/core 안에 있는 product_config.mk 와 config.mk 파일을 살펴본데 의의를 두자...




Posted by 똑똑한 영장류