Odroid

Embeded : 2014.02.08 23:52

Odroid 

 

What SoC are you using? 
The SoC is a Samsung Exynos 4412 Prime ARM Cortex-A9 Quad Core 1.7GHz.  

What RAM does it include? 
 
Low-Power DDR2 440MHz clock which brings 880Mhz Data rate.

What GPU does it include?  
ARM Mali-400 Quad Core 440MHz  

Will the SoC overclock? 
There’s a little overclocking headroom  

Will the GPU overclock?  
There’s a little overclocking headroom  

How can I power on the board? 
It doesn't support the USB power in any case. Please use the power supply to the DC-Jack. 
We recommend 5V 2A adaptor. Inner diameter is 0.8mm, outer diameter is 2.5mm. Center is Positiver and Outer is Negative. Normally ODROID-U3 consumes about 1A - 1.5A in most cases. 

How does it boot? 
You have to boot from MicroSD card or eMMC Module.  

정리할 내용들

http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidq2&bid=4064

http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidxu&bid=3998

http://forum.odroid.com/viewtopic.php?f=61&t=3649


Rootfs 만드는 법

http://odroid.us/mediawiki/index.php?title=Step-by-step_Buildroot/Busybox_Root_File_System
 

Odroid 잘 정리되어 있는 Wiki

http://odroid.us/mediawiki/index.php?title=Main_Page


자료는 여기에서 받으면 됨

http://dn.odroid.com/


오드로이드U2, U3를 동영상 재생 머신으로 만들기

http://www.wsgvet.com/bbs/board.php?bo_table=odroid&wr_id=69


[Ubuntu] SD카드에 쓰는 방법

ODROID [X/X2/U/U2] Flashing Images on Windows

http://forum.odroid.com/viewtopic.php?f=53&t=25

 

ODROID [X/X2/U/U2] Flashing Images on Linux

http://forum.odroid.com/viewtopic.php?f=53&t=23

 

The Kernel 3.8 source code and development discussion is here.

http://forum.odroid.com/viewtopic.php?f=55&t=305

 

Steps.


WARNING: Ubuntu and some other distributions, auto-mount the media when inserted. This can cause inconsistency and errors! You can umount all using: umount /dev/sdX*


1. Download the selected image (Android/Ubuntu/...).

2. Unpack it. (If its a .xz extension you can use xz -d image.img.xz on cmd line).

3. A good step is always to clear your destination media first! dd if=/dev/zero of=/dev/sdX bs=4M

4. Flash your image: sudo dd if=image.img of=/dev/sdX bs=4M

5. Always type sync before removing the media to make sure that all data is written.



eMMC recovery tool for ODROID-U2/U3


http://forum.odroid.com/viewtopic.php?f=53&t=969


=============== Update 24-Jan-2014 =======================

Added boot.ini support for better compatibility and easier maintainance.


exynos4412_emmc_recovery_from_sd.zip


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


Few people have an issue of dead eMMC with ODROID-U2/U3.

We thought there is possibility of some portion of hidden boot sector in eMMC can be corrupted.

So we made this utility.


How to use.

1. Prepare a microSD card and flash the attached image.

2. Boot with the microSD without eMMC

3. Turn on U2/U3 and wait a few seconds and blue LED will blink.

4. Plug your eMMC module into U2/U3

5. Plug micro-USB cable into U2/U3 and connect other side to your PC USB host or ODROID's USB host port. (This is a trigger to start the recovery)

6. After recovery process (only a few seconds), the blue LED will turn off automatically.

7. Finish. Install OS on your eMMC with as usual.


Before trying this utility, double check your USB memory reader first.

Because of tolerance issue of reader board, some USB memory reader has the mechanical contact issue.

Please also note that the eMMC needs much more current(power consumption) than normal SD card.

So some reader may not supply enough power for eMMC.


odroidu_eMMC_recovery.zip


EMMC 에 u-boot 올리기


fastboot로 해도 되지만


emmc나 sd카드나 똑같이 /dev안에 장치로 잡히니 sd카드를 퓨징하는 것처럼 # ./sd_fusing.sh /dev/mmcblk0 을 하면 sd카드와 마찬가지로 emmc에 uboot가 올라간다.


mmcblk0boot0 mmcblk0boot1을 dd명령어로 이미지로 뽑아낸 다음 다른 emmc에 

#dd if=/root/boot0.img of=/dev/mmcblk0boot0 을 통해서 밀어 넣으면 uboot가 올라갈 것이다


dd: writing to `/dev/mmcblk0boot0': Operation not permitted 라고 나오면서 안될 때에는 


eMMC의 Boot partition에 데이터를 기록하기 전에 unlock하는 ioctl을 넣어주는 부분이 있는데

너무 간단히 부트 파티션이 손상되는 것을 막기 위한 기능이 포함되어 있어서 그렇다.


아래와 같이 시도해보면 할 수 있다.

sudo su -

# echo 0 > /sys/block/mmcblk0boot0/force_ro 

# dd if=/root/boot0.img of=/dev/mmcblk0boot0


[Ubuntu Kernel] 컴파일 하기

http://dev.odroid.com/projects/odroid-xq/#s-4.2


#Add this PPA with the following commands:

sudo add-apt-repository ppa:linaro-maintainers/toolchain

sudo apt-get update


#for cross compiler 

sudo apt-get install gcc-arm-linux-gnueabihf

#for native compiler

sudo apt-get install gcc


#Add this script to .profile

export ARCH=arm 

export CROSS_COMPILE=arm-linux-gnueabihf-

export ARCH=arm

CROSS_COMPILE=/home/messijeon/hoho/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-


#Download and build

sudo apt-get install xz-utils 

git clone https://github.com/hardkernel/linux.git    (여기 git에 있는 kernel은 ubuntu용이다. 안드로이드용은 dn.odroid.com에서 별도 배포한다.)

cd linux

# Optional. This line can skip if you want to use "odroid-3.0.y" branch, because it is the default branch.

git checkout odroid-3.8.y -b odroid-3.8.y

make odroidx_ubuntu_defconfig

make zImage -j4

make modules -j4

make modules_install INSTALL_MOD_PATH=/media/rootfs


* for ODROID-U2 * make odroidu2_ubuntu_defconfig

내꺼는 U3니까 U2랑 똑같이하면 된다.(U2랑U3는 완전 호환됨) make odroidu2_ubuntu_defconfig


#install to sdcard

cp arch/arm/boot/zImage /media/boot/


#Changing boot.scr


Change the boot script (boot.txt) then create a u-boot image with:

mkimage -A arm -T script -C none -n "Boot.scr for odroid-x" -d /media/boot/boot.txt /media/boot/boot.scr


#Updating Initramfs


Copy over your kernel configuration file to the /boot directory into a file called config-<kernel-version> like below. (Perform this process on your ODROID-X not host PC)


cp .config /media/boot/config-`uname -r`


The Linaro boot script (boot.scr) passes an initramfs image to the kernel at boot up. This image includes kernel modules that may be used at start up. You may create this image on the target system after you first boot into it with:


# Generate a file named /boot/initrd.img-<kernel-version>

update-initramfs -c -k `uname -r`


# Generate uInitrd and copy it into your boot partition with:

mkimage -A arm -T ramdisk -C none -n "uInitrd" -d /boot/initrd.img-`uname -r` /media/boot/uInitrd


[Android Kernel] 컴파일 할 때 나오는 문제 (u-boot도 마찬가지)

Android Kernel 컴파일 하다가 


/tmp/cc5NwFjg.s: Assembler messages:

/tmp/cc5NwFjg.s:69: Error: selected processor does not support ARM mode `smc 0'

/tmp/cc5NwFjg.s:98: Error: selected processor does not support ARM mode `smc 0'

/tmp/cc5NwFjg.s:121: Error: selected processor does not support ARM mode `smc 0'

/tmp/cc5NwFjg.s:144: Error: selected processor does not support ARM mode `smc 0'

make[1]: *** [arch/arm/mach-exynos/cpu-exynos4.o] 오류 1

make: *** [arch/arm/mach-exynos] 오류 2


이런  에러메세지가 나오는 경우가 있다. 

Wiki에는 
sudo add-apt-repository ppa:linaro-maintainers/toolchain
sudo apt-get update
#for cross compiler 
sudo apt-get install gcc-arm-linux-gnueabihf
#for native compiler
sudo apt-get install gcc
이렇게 하라고 되어 있는데 이거는 Ununtu / Linux 커널 컴파일 할때 이렇게 하는거란다. 젠장.

안드로이드 커널 컴파일 할때는 
이 컴파일러를 쓰란다.

안드로이드 컴파일 할때 만들어지는 컴파일러로 해도 될거 같다.
.profile 에 아래처럼 해놓고 쓰면 된다.
 #for build ubuntu kernel
 #export ARCH=arm 
 #export CROSS_COMPILE=arm-linux-gnueabihf-
 
 #for build android kernel
 export ARCH=arm 
 export PATH=$PATH:/home/messijeon/hoho/odroid/arm-2010q1/bin
 export CROSS_COMPILE=arm-none-eabi-

[Android Kernel 4.2.2_Apr-02-2014 버전 컴파일 하기]
오드로이드는 정말 불친절하다.
아무튼 4.2.2 가 나왔는데 

http://dn.odroid.com/4412/Android/4.2.2_Apr-02-2014/BSP/kernel 
이 파일을 보면 
https://github.com/hardkernel/linux/tree/odroid-3.0.y-android

make odroidu_android_422_defconfing
make -j8
이렇게 써있다.
저 github로 들어가서 clone을 받은다음 odroid-3.0.y-android 로 브랜치를 변경한 다음 
make odroidu_android_422_defconfing make -j8
로 컴파일 하면 된다.

[Android  4.2.2_Apr-02-2014 버전 컴파일 하기]
./build.sh odroidu 하면 된다.

[Android 4.4.4 컴파일하기]
Android 4.2.2_Apr-02-2014 를 받아서 컴파일하고 올렸더니 커널패닉이 난다. 아오 빡쳐.
그래서 4.4.4가 있길래 받아서 올려볼라고 막 뒤적거렸는데 dn.odroid.com 에는 또 4.4.4 BSP는 안올라와있네??
막 검색을 했더니만 github에서 받으란다. 헐.
언제 github에 올리기 시작한거지? 아 짜증나.
아무튼 Android 4.4.4 는
repo init -u https://github.com/hardkernel/android.git -b 4412_4.4.4_master
repo sync -j4
repo start 4412_4.4.4_master --all
이렇게 받으면 된다.
./build_android.sh odroidu

[Android 4.4.4 Kernel 컴파일하기]
이건 옛날처럼 git에 있는 커널 받아서 build하면 되는데. config가 바꼈다. 
Branch는 odroid-3.0.y-android 로 하고
make odroidu_android_442_defconfig 
로 하면 된다.

[USB IO] 사용에 관한 WIKI


http://dev.odroid.com/projects/pic18f45k50/


USB IO 의 펌웨어 소스는  https://github.com/hardkernel/Odroid-USBIO 에 있다.


[Ubuntu] 처음 굽고 재부팅 되는 이유

mount point를 찾지못하여 watch dog timer에 의한 reset이라고 판단됩니다. 이 경우 boot.ini파일의 root에 해당하는 명령이 정상적이지 않은 경우에 발생합니다.


[Ubuntu] SD 카드에서 raw area, 파티션1, 파티션2 로 나눴는데 각각에 파티션에 콘텐츠는 어떻게 넣는 것인가요?  rootfs 소스는 어디에서 참조해야되나요?


rootfs는 배포하지 않고 있습니다. 최신 우분투 이미지에서 rootfs를 추출하여 사용하여야 합니다. 

리눅스 파티션은 VFAT/EXT4영역으로 나누게 되며, EXT4영역에 있는 파일이 rootfs입니다.


[U-boot] git 주소

https://github.com/hardkernel/u-boot/tree/odroid-v2010.12

u-boot는 android와 ubuntu 공용이다.


[U-boot] Build 안될 때


이것도 한번 읽어보고

http://www.funtoo.org/ODROID_U2


http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidxu&bid=3752

u-boot는 [http://dn.odroid.com/ODROID-XU/compiler/arm-eabi-4.4.3.tar.gz ] 을 쓰셔야 하는데 혹시 4.6 쓰셨으면 다시해보세요.

-----

빠른 답변에 감사드립니다. 실은 4.4.3으로 했을때 


ubuntu@Ubuntu-13:~/bin/arm-eabi-4.4.3/bin$ ./arm-eabi-gcc -v

bash: ./arm-eabi-gcc: No such file or directory


와 같은 오류가 나와서 게시판 34번 "kernel 컴파일 환경 구축"을 읽어보니 32비트/64비트 문제로 보이던데

저는 우분투 13.04 64비트에서 빌드를 시도했습니다. 그래서 4.4.3을 사용하지 못했었습니다.


혹 빌드에 사용할 장비의 우분투 버전/비트을 뭘로 하면 될지 알려주시면 좋겠습니다.

-----

U-Boot 빌드 오류는 다음과 같이 4.4.3 문제를 수정하니 해결되었습니다.

 

[문제점]

 

$ ./arm-eabi-gcc -v

bash: ./arm-eabi-gcc: No such file or directory

 

$ file arm-eabi-gcc

arm-eabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

 

$ ldd arm-eabi-gcc

    not a dynamic executable

 

와 같이 file 명령으로는 dynamically linked 라이브러리를 사용하지만 ldd 명령으로 연결된 라이브러리가 보이지 않는다.

즉 없다는 파일은 실행파일이 아니라 연결된 라이브러리이다.

 

[구글 검색 및 프로그램 설치]

 

(http://stackoverflow.com/questions/3531446/linux-claiming-android-arm-eabi-gcc-is-not-present-when-it-is-clearly-there)

(https://groups.google.com/forum/#!topic/android-ndk/swOpuAYqWhA)

(32비트 바이너리를 위한 32비트 라이브러리 설치)

 

$ apt-get install libc6-dev-i386

$ apt-get install lib32z1

 

[확인]

 

$ ldd arm-eabi-gcc

    linux-gate.so.1 =>  (0xf7749000)

    libc.so.6 => /lib32/libc.so.6 (0xf7583000)

    /lib/ld-linux.so.2 (0xf774a000)

   

$ ./arm-eabi-gcc -v

Using built-in specs.

Target: arm-eabi

...

 

이후 U-Boot 바이너리도 잘 생성이 되었습니다.

-----

아래와 같은 패치를 적용하면 4.6에서도 빌드됩니다.

http://forum.insignal.co.kr/viewtopic.php?f=10&t=118


board/samsung/smdk5410/smc.c

* CPP type file

  __asm__ volatile (

+ ".arch_extension sec\n"

  "smc 0\n"

  : "+r"(reg0), "+r"(reg1), "+r"(reg2), "+r"(reg3) 


  register u32 reg1 __asm__("r1") = 0;

  __asm__ volatile (

+ ".arch_extension sec\n"

  "smc 0\n"

  : "+r"(reg0), "+r"(reg1)



u-boot 복구하기


먼저 booting되는 SD 카드로 SD 모드에서 booting한 다음 

bootloader상태에서 run copy_uboot_sd2emmc 명령을 통하여 bootloader를

emmc에 복사할 수 있다.


File system 바꿀 때


BTRFS로 바꾼다면.

부트로더에서 setenv bootargs "root=/dev/mmcblk0p2 rootwait rootfsext=btrfs rw"


Android Partition 설정

BoardConfig.mk 파일을 보시면 system.img 사이즈를 정하는 곳이 있습니다.

 42 TARGET_USERIMAGES_USE_EXT4 := true

 43 BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1073741824

 44 BOARD_USERDATAIMAGE_PARTITION_SIZE := 2147483648

 45 BOARD_CACHEIMAGE_PARTITION_SIZE := 134217728

 46 BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4

 47 BOARD_FLASH_BLOCK_SIZE := 4096


partition 은 u-boot에서 아래와 같이 입력 하시면 됩니다.


# fdisk -c 0 1024 2048 128 


순서는 system | userdata | cache | fat 인데 fat 값은 자동으로 나머지 최대 크기로 만들어 집니다.


USB-UART Module Kit


1.8V 뿐만 아니라 5V 보드에서도 사용 가능한지요..??

Interface가 1.8V용으로 되어있어 기본적으로는 사용이 불가할 것 같습니다. 

RX/TX 앞부분에 별도의 Level shifter를 적용한다면 가능할 수도 있습니다.


XU+E 와 LCD 일때 LCD에 화면 나오게 하기


- 증상

Android 이미지로는 LCD에 출력이 되고

우분투 이미지로는 HDMI는 잘 출력이 되는데 LCD는 반응이다.


X2쪽에 보니 우분투 이미지가 HDMI용이랑 LCD랑 분리가 되어 있던데,

XU쪽에는 이미지 하나 밖에 없네요.

아직 우분투에서 LCD는 지원하지 않는 것인지요?


- 해결

FAT영역의 boot.ini파일을 아래와 같이 수정하셔야 합니다.


setenv fb_x_res     "1920"  ----> setenv fb_x_res "1280"

setenv fb_y_res     "1080"  ----> setenv fb_y_res "800"

setenv vout         "hdmi"   ----> setenv vout "lcd"


mali 400 clock 변경


안드로이드 커널 3.0.51

$KERNEL_ROOT/drivers/media/video/samsung/mali/platform/pegasus-m400/mali_platform.c



우분투 커널 3.8.13

$KERNEL_ROOT/drivers/gpu/arm/mali/platform/pegasus-m400/mali_platform.c


ln -r 옵션 문제

안드로이드 컴파일 중에 아래 부분에서 에러가 나지 않았나요?

ln -sr out/target/product/odroidu/system/bin/init out/target/product/odroidu/system/init

여기서 -r옵션 빼고 빌드된 system.img를 다운로드 하면 위와 같은 증상이 발생합니다.

(PC의 절대 경로값이 symbolic link로 잡혀서 죽는겁니다)

터미날에서 ln --version을 치고 버전이 8.13이 나오면 GNU coreutils 의 ln을 업데이트 하셔야 합니다.

우분투 13.04의 ln을 카피해 쓰셔도 될겁니다


[Bluetooth 안되는 문제]

kitkat부터 USB bluetooth dongle을 지원하는 bluez가 없어지고 bluedroid로 바뀌었습니다.

솔루션을 찾고 있지만 쉽지 않습니다.
bluetooth를 꼭 사용하셔야 하시면 4.1.2 버전을 사용 하셔야 합니다.


안된다네. bluez가 없어졌군.

'Embeded' 카테고리의 다른 글

What is ION?  (0) 2015.01.08
Odroid  (0) 2014.02.08
yagarto, STM32  (0) 2014.01.07
bluetooth 포팅 하면서 본 싸이트들.  (0) 2013.11.29
Posted by Real_G