레이블이 ubuntu인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ubuntu인 게시물을 표시합니다. 모든 게시물 표시

2017년 8월 25일 금요일

Dual booting android and Ubuntu on ODROID-XU4

I made dual booting image for ODROID-C2.
https://codewalkerster.blogspot.kr/2016/03/dual-booting-android-and-ubuntu-on.html

We will make dual booting image for ODROID-XU3/4.

It is recommended to use a storage device of 16Gbyte or more.

Make bootable android media(eMMC or SD).

https://wiki.odroid.com/odroid-xu4/os_images/android/v5.4

Add "VFAT" to label of fat32 partition.



Download ODROID-XU3/4 Ubuntu Image.

https://wiki.odroid.com/odroid-xu4/os_images/linux/ubuntu_4.9/20170824



Copy rootfs and boot partition of ODROID-XU3/4 Ubuntu to your desktop Ubuntu.


mount disk wrote ODROID-XU3/4 Ubuntu image on your desktop PC.




$ mount
...
/.../ubuntu-16.04.3-4.9-mate* on /media/codewalker/boot type vfat (ro,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
/.../ubuntu-16.04.3-4.9-mate* on /media/codewalker/rootfs type ext4 (ro,nosuid,nodev,uhelper=udisks2)


$ mkdir dual
$ cd dual
$ mkdir boot
$ sudo cp -a /media/username/boot/* boot/
$ mkdir rootfs
$ sudo cp -a /media/username/rootfs/* rootfs/


Unmount ubuntu disk image.


Delete rootfs/aafirstboot

$ rm -rf rootfs/aafirstboot

Edit rootfs/etc/fstab

$ sudo vi rootfs/etc/fstab
LABEL=VFAT /media/boot vfat defaults,rw,owner,flush,umask=000 0 0

Chagne userdata partition UUID.

- Insert disk wrote android image on your desktop PC and unmount /dev/sdX3.
$ sudo umount /dev/sdX3
$ cat rootfs/etc/fstab 
LABEL=VFAT /media/boot vfat defaults,rw,owner,flush,umask=000 0 0

UUID=e139ce78-9841-40fe-8823-96a304a09859 / ext4 errors=remount-ro,noatime 0 1

$ sudo tune2fs /dev/sdX3 -U e139ce78-9841-40fe-8823-96a304a09859

Copy ODROID-XU3/4 Ubuntu files to android disk.

$ mv /media/username/VFAT/boot. ini  /media/username/VFAT/boot. ini.android
$ cp boot/* /media/username/VFAT/
$ sudo cp rootfs/* /media/username/e139ce78-9841-40fe-8823-96a304a09859/ -a
$ sync

Make script to change OS.

in Ubuntu
$ vi boot_android.sh
------------------------------------------------------------------------
#!/bin/bash
sudo mv /media/boot/boot.ini /media/boot/boot.ini.ubuntu
sudo mv /media/boot/boot.ini.android /media/boot/boot.ini
sudo reboot
------------------------------------------------------------------------
#chmod +x boot_android.sh


in Adnroid
$ su
# mount -o rw,remount /
# vi /system/bin/boot_ubuntu.sh
------------------------------------------------------------------------
#!/bin/sh
mv /storage/internal/boot.ini /storage/internal/boot.ini.android
mv /storage/internal/boot.ini.ubuntu /storage/internal/boot.ini
reboot
------------------------------------------------------------------------
# chmod 777 /system/bin/boot_ubuntu.sh

2016년 3월 3일 목요일

dual booting android and Ubuntu on ODROID-C2



I made dual booting image for ODROID-U3.
http://codewalkerster.blogspot.kr/2014/03/dual-booting-android-and-ubuntu-on.html?m=1

We will make dual booting image for ODROID-C2.

Make bootable android media(eMMC or SD).

http://odroid.com/dokuwiki/doku.php?id=en:c2_release_android

Download ODROID-C2 Ubuntu Image.

http://odroid.com/dokuwiki/doku.php?id=en:c2_release_linux_ubuntu



Copy rootfs and boot partition of ODROID-C2 Ubuntu to your desktop Ubuntu.

- mount disk wrote ODROID-C2 ubuntu image on your desktop PC.

c2/ubuntu/ubuntu64-16.04lts-mate-od* on /media/codewalker/boot type vfat (ro,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
c2/ubuntu/ubuntu64-16.04lts-mate-od* on /media/codewalker/rootfs type ext4 (ro,nosuid,nodev,uhelper=udisks2)


$ mkdir odroid-c2_ubuntu
$ cd odroid-c2_ubuntu
$ mkdir boot
$ sudo cp -a /media/username/boot/* boot/
$ mkdir rootfs
$ sudo cp -a /media/username/rootfs/* rootfs/

- unmount ubuntu disk.


Delete rootfs/aafirstboot

$ rm -rf rootfs/aafirstboot

Edit rootfs/etc/fstab

$ sudo vi rootfs/etc/fstab
LABEL=VFAT /media/boot vfat defaults,rw,owner,flush,umask=000 0 0

Chagne userdata partition UUID.

- Insert disk wrote android image on your desktop PC and unmount /dev/sdX4.
$ sudo umount /dev/sdX4
$ cat rootfs/etc/fstab 
LABEL=VFAT /media/boot vfat defaults,rw,owner,flush,umask=000 0 0

UUID=e139ce78-9841-40fe-8823-96a304a09859 / ext4 errors=remount-ro,noatime 0 1

$ sudo tune2fs /dev/sdX4 -U e139ce78-9841-40fe-8823-96a304a09859

Copy ODROID-C2 Ubuntu files to android disk.

$ mv /media/username/VFAT/boot. ini  /media/username/VFAT/boot. ini.android
$ cp boot/* /media/username/VFAT/
$ sudo cp rootfs/* /media/username/e139ce78-9841-40fe-8823-96a304a09859/ -a
$ sync

Make script to change OS.

in Ubuntu
$ vi boot_android.sh
------------------------------------------------------------------------
#!/bin/bash
sudo mv /media/boot/boot.ini /media/boot/boot.ini.ubuntu
sudo mv /media/boot/boot.ini.android /media/boot/boot.ini
sudo reboot
------------------------------------------------------------------------
#chmod +x boot_android.sh


in Adnroid
$ su
# mount -o rw,remount /
# vi /system/bin/boot_ubuntu.sh
------------------------------------------------------------------------
#!/bin/sh
mv /storage/internal/boot.ini /storage/internal/boot.ini.android
mv /storage/internal/boot.ini.ubuntu /storage/internal/boot.ini
reboot
------------------------------------------------------------------------
# chmod 777 /system/bin/boot_ubuntu.sh

2014년 3월 11일 화요일

dual booting android and Ubuntu on ODROID-U3

Modify the Android source code to work with MTP.

Android 4.1.2

Android Base source
http://dn.odroid.com/4412/Android/4.1.2_Jan-27-2014/BSP/

Last patch
http://dn.odroid.com/4412/Android/4.1.2_Mar-26-2014/BSP/

Download odroidu.zip
https://www.dropbox.com/s/lc981iwno5kth7a/odroidu.zip

unzip and overwrite device/hardkernel/odroidu/ folder

and edit package/app/Utility because MTP android is changed vfat path.

$  svn diff packages/apps/Utility/
Index: packages/apps/Utility/src/com/hardkernel/odroid/MainActivity.java
===================================================================
--- packages/apps/Utility/src/com/hardkernel/odroid/MainActivity.java (리비전 2163)
+++ packages/apps/Utility/src/com/hardkernel/odroid/MainActivity.java (작업 사본)
@@ -20,6 +20,7 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.os.Environment;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Menu;
@@ -44,7 +45,7 @@
  public final static String MIN_FREQ_NODE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq";
 
  //private final static String BOOT_INI = "/storage/sdcard1/boot.ini"; //"/mnt/sdcard/boot.ini";
- private final static String BOOT_INI = "/mnt/sdcard/boot.ini";
+ private String BOOT_INI = "/mnt/sdcard/boot.ini";
  public int mCurrentMaxFreq;
  public int mCurrentMinFreq;
 
@@ -371,6 +372,14 @@
  tv.setVisibility(View.GONE);
  }
 
+        File sdcard1 = new File("/storage/sdcard1");
+        if (sdcard1.exists()) {
+            Log.e(TAG, "MTP");
+            BOOT_INI = "/storage/sdcard1/boot.ini";
+        } else {
+            Log.e(TAG, "Mass Storage");
+        }
+
  File boot_ini = new File(BOOT_INI);
  if (boot_ini.exists()) {
  try {



build android for MTP instead of Mass storage.


prepare android rootfs(system.img) for MTP and Ubuntu.

or download system.img

https://drive.google.com/file/d/0B5aZmgmqP9rONjkzbGV2WlpiczQ/edit?usp=sharing
https://www.dropbox.com/s/z875qglex71qh3c/system.img

backup rootfs of Ubuntu.

$ mkdir boot
$ sudo cp -a /media/codewalker/BOOT/* boot/
$ mkdir rootfs
$ sudo cp -a /media/codewalker/rootfs/* rootfs/

edit rootfs/usr/local/sbin/odroid-config

mmcblk0p2 -> mmcblk0p3

 40 do_expand_rootfs() {
 41 
 42   p2_start=`fdisk -l /dev/mmcblk0 | grep mmcblk0p3 | awk '{print $2}'`
 43   fdisk /dev/mmcblk0 <<EOF
 44 p
 45 d
 46 3
 47 n
 48 p
 49 3
 50 $p2_start
 51 
 52 p
 53 w
 54 EOF
 55   ASK_TO_REBOOT=1
 56 
 57   # now set up an init.d script
 58 cat <<\EOF > /etc/init.d/resize2fs_once &&
...
 71 
 72 case "$1" in
 73   start)
 74     log_daemon_msg "Starting resize2fs_once" &&
 75     resize2fs /dev/mmcblk0p3 &&
 76     rm /etc/init.d/resize2fs_once &&
 77     update-rc.d resize2fs_once remove &&
 78     log_end_msg $?
 79     ;;
 80   *)
 81     echo "Usage: $0 start" >&2
 82     exit 3



check u-boot date.

You must use u-boot at least Jan 12 2014 than later.

http://dn.odroid.com/4412/Android/4.1.2_Feb-12-2014/


OK

U-Boot 2010.12-svn (Jan 27 2014 - 15:07:10) for Exynox4412


CPU: S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]
APLL = 1000MHz, MPLL = 880MHz
DRAM:  2 GiB

PMIC VERSION : 0x00, CHIP REV : 3
TrustZone Enabled BSP
BL1 version: 20121128


Checking Boot Mode ... EMMC4.41                                                 
REVISION: 2.0                                                                   
Manufacturer TOSHIBA [ 7456MB ]                                                 
NAME: S5P_MSHC4                                                                 
MMC Device 0: 7456 MB                                                           
MMC Device 1: 0 MB                                                              
MMC Device 2 not found                                                          
*** Warning - using default environment                                         
                                                                                
USB3503 NINT = OUTPUT LOW!                                                      
ModeKey Check... run normal_boot                                                
No ethernet found.                                                              
Hit any key to stop autoboot:  0                                                
Exynos4412 # 

make new partition table for dual booting.

entry u-boot prompt.

fdisk -c [boot device:0] [system] [userdata] [cache] [vfat]

Exynos4412 #  fdisk -c 0 512 -1 128 300
Count: 10000
NAME: S5P_MSHC4
fdisk is completed

partion #    size(MB)     block start #    block count    partition_Id
   1           306          1462846          626934          0x0C
   2           517           134343         1059817          0x83
   3          6362          2089780        13031271          0x83
   4           131          1194160          268686          0x83
Exynos4412 #

mount eMMC or SD on PC and format.

$ sudo fdisk -l
Disk /dev/sdX: 7818 MB, 7818182656 bytes
253 heads, 59 sectors/track, 1022 cylinders, total 15269888 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdX1         1462846     2089779      313467    c  W95 FAT32 (LBA)
/dev/sdX2          134343     1194159      529908+  83  Linux
/dev/sdX3         2089780    15121050     6515635+  83  Linux
/dev/sdX4         1194160     1462845      134343   83  Linux

Partition table entries are not in disk order

[~]$ sudo mkfs.vfat /dev/sdX1
mkfs.vfat 3.0.16 (01 Mar 2013)
[~]$ sudo mkfs.ext4 /dev/sdX2
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
...
[~]$ sudo mkfs.ext4 /dev/sdX3
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
...
[~]$ sudo mkfs.ext4 /dev/sdX4
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
...

check your partition on gparted.



copy Ubuntu files.

boot -> /dev/sdX1 (fat)
rootfs -> /dev/sdX3 (ext4 userdata partition)

replace current UUID to default UUID.

cat /media/codewalker/5145-2E60/boot.scr

  1 '^E^YVOÚ<9f>7R}->^@^@^A<^@^@^@^@^@^@^@^@^E^?ß9^E^B^F^@boot.scr for X with HDMI auto-pr^@^@^A4^@^@^@^@setenv initrd_high "0xffffffff"
  2 setenv fdt_high "0xffffffff"
  3 setenv bootcmd "fatload mmc 0:1 0x40008000 zImage; fatload mmc 0:1 0x42000000 uInitrd; bootm 0x40008000 0x42000000"
  4 setenv bootargs "console=tty1 console=ttySAC1,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro  mem=2047M"
  5 boot

$ sudo tune2fs /dev/sdX3 -U e139ce78-9841-40fe-8823-96a304a09859
tune2fs 1.42.8 (20-Jun-2013)

entry u-boot and stop u-boot prompt.

#fastboot

write system.img via fastboot.


$ fastboot flash system system.img
$ fastboot reboot

ODROID-U3 is booted Ubuntu.

run configure


Expand Filesystem and configure HDMI.


open terminal.

Ubuntu -> Android
root@odroid:~# su
root@odroid:~# cd /media/boot/                                                
root@odroid:/media/boot# mv boot.scr  boot.scr.ubuntu




android booting

and run Utility app and make boot.ini.


Android -> Ubuntu
root@android:/ # cd /storage/sdcard1/                                        
root@android:/storage/sdcard1 # mv boot.ini boot.ini.android                      
root@android:/storage/sdcard1 # mv boot.scr.ubuntu boot.scr




open terminal.

Ubuntu -> Android
root@odroid:~# cd /media/boot/                                                
root@odroid:/media/boot# mv boot.scr  boot.scr.ubuntu
root@odroid:/media/boot# mv boot.ini.android  boot.ini


2014년 1월 28일 화요일

How to connect ODROID to Ubuntu using MTP

How to connect ODROID to Ubuntu using MTP


http://ppa.webupd8.org/post/43022082410/libmtp-updated-for-ubuntu-quantal-and-precise-with

1. install go-mtpfs and go-mtpfs-unity


http://www.webupd8.org/2012/12/how-to-mount-android-40-ubuntu-go-mtpfs.html

https://launchpad.net/~webupd8team/+archive/unstable/+build/4074768

https://launchpad.net/~webupd8team/+archive/unstable/+build/4074769

https://drive.google.com/file/d/0B5aZmgmqP9rOVGV6aXc5RW8xWkk/edit?usp=sharing
https://drive.google.com/file/d/0B5aZmgmqP9rOblZZWmJENjZQUjg/edit?usp=sharing
https://drive.google.com/file/d/0B5aZmgmqP9rOVjVtSjBTNnNBeDA/edit?usp=sharing

http://almost-a-technocrat.blogspot.kr/2013/01/how-to-connect-samsung-galaxy-nexus-to.html

2. mkdir /media/MyAndroid

3. create /etc/udev/rules.d/99-android.rules

  1 # Hardkernel Odroid MTP mode (multimedia device)
  2 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="0002", MODE="0666" # MTP media
  3
  4 # Hardkernel Odroid MTP mode : automatic mount when plugged (all android versions)
  5 ENV{ID_MODEL}=="Odroid", ENV{ID_MODEL_ID}=="0002", ACTION=="add", RUN+="/usr/bin/sudo -b -u codewalker /usr/bin/go-mtpfs -allow-other=true /media/MyAndroid"
  6
  7 # Hardkernel Odroid MTP mode : automatic unmount when unplugged (all android versions)
  8 ENV{ID_MODEL}=="Odroid", ENV{ID_MODEL_ID}=="0002", ACTION=="remove", RUN+="/bin/fusermount -u /media/MyAndroid"

4. sudo service udev restart

5. remove other mtp device

We will release android supported MTP soon.

2013년 12월 9일 월요일

Exynos4412 Android-4.1.2 (Beta 2.1.0) Release

29-Jun-2014
1. fix EDID
2. enable MTP
3. fix uboot to enable cm bootstrap.

Download for eMMC user.

https://www.dropbox.com/sh/vjplveim5ieq91e/jUSKWcmjw4

How to connect ODROID to Ubuntu using MTP
http://codewalkerster.blogspot.kr/2014/01/how-to-connect-odroid-to-ubuntu-using.html

19-Dec-2013
1. enable /dev/CEC node.
2. enable HDMI-EDID/CEC

https://www.dropbox.com/s/7nhmnnssuekk50n/odroidu-1.9.0.zip


http://dn.odroid.com/Android_Beta_1.9.0/

수정사항
1. Q/Q2 부팅 시 죽는 문제 수정
2. SD/eMMC 를 하나의 커널로 통합.
3. ODROID-U2를 ODROID-U로 변경

업그레이드 방법
1. X/X2/Q/Q2는 기존 방법처럼 아래와 같이 진행
http://codewalkerster.blogspot.kr/2013/05/odroid-update-and-install-gms.html

2. U2는 microSD일 경우 아래 이미지를 write하고 부팅
http://dn.odroid.com/Android_Beta_1.9.0/U/SD/
eMMC일 경우 아래 이미지를 write 하고 부팅 하면 자동 복구 후 부팅
http://dn.odroid.com/Android_Beta_1.9.0/U/eMMC_installer/

Google Mobile Service(GMS) 설치는 아래와 같이 One Click gapps installer에서 4.1.2를 선택.
http://codewalkerster.blogspot.kr/2013/11/universal-1-click-gapps-installer-for.html

2012년 5월 15일 화요일

Ubuntu 12.04 on ODROID-PC

Linaro 12.04 Ubuntu를 ODROID-PC에 올려 보겠습니다.

마지막 버전이 12.05으로 X가 동작하지 않아서 12.04로 시도 했습니다.

http://releases.linaro.org/12.04/ubuntu/leb-origen/

아래 사이트에서 필요한 파일을 받습니다.

Download hwpack_linaro-leb-origen_20120426-45_armhf_supported.tar.gz and linaro-precise-ubuntu-desktop-20120426-119.tar.gz from the links below

이미지를 만들기 위해 linaro-media-create를 설치해야 합니다.

https://wiki.linaro.org/Platform/DevPlatform/Ubuntu/ImageInstallation


  $ sudo add-apt-repository ppa:linaro-maintainers/tools
  $ sudo apt-get update
  $ sudo apt-get install linaro-image-tools

  # t-flash를 넣고 sudo fdisk -l 을 통해 '/dev/sdX' node를 확인한다.
저의 환경은 /dev/sde입니다. 
  

Building a Custom Image 방법대로 f-flash에 복구합니다.


[~/projects/linaro_ubuntu]$ sudo linaro-media-create --mmc /dev/sde --dev origen --hwpack hwpack_linaro-leb-origen_20120327-1_armel_supported.tar.gz --binary linaro-o-ubuntu-desktop-tar-20120327-0.tar.gz
/usr/lib/pymodules/python2.6/argparse.py:1576: DeprecationWarning: The "version" argument to ArgumentParser is deprecated. Please use "add_argument(..., action='version', version="N", ...)" instead
  """instead""", DeprecationWarning)

I see...
Device           Mount point      Size
/dev/sda         none             610480MB
/dev/sda1        /                95366MB
/dev/sda2        none             515112MB
/dev/sda5        none             10869MB
/dev/sda6        /home            504243MB
/dev/sdb         none             476940MB
/dev/sdb1        none             476937MB
/dev/sdc         none             0MB
/dev/sdd         none             0MB
/dev/sde         none             7647MB
/dev/sde1        none             5827MB
/dev/sde2        none             515MB
/dev/sde3        none             1030MB
/dev/sde4        none             134MB
Are you 100% sure, on selecting [/dev/sde] (y/n)? y
...


복구가 끝나면 /dev/sde2를 mount하여 rootfs를 pc로 복사 시킵니다.

android uboot을 사용하지만 partition 확인하는 부분을 제거하여 fastboot가 가능합니다.

http://dev.odroid.com/projects/ics#s-6.3

아래 사이트에서 uboot 소스를 받으시고 아래와 같이 고칩니다.

http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&tag=&bid=94


common/cmd_fastboot.c
...
  ptable[pcount].length = PART_SIZE_ROOTFS;
  ptable[pcount].flags = FASTBOOT_PTENTRY_FLAGS_USE_MOVI_CMD;
  pcount++;
#if 0
  /* System */
  get_mmc_part_info(dev_num, 2, &start, &count, &pid);
  if (pid != 0x83)
...
  ptable[pcount].length = count * CFG_FASTBOOT_SDMMC_BLOCKSIZE;
  ptable[pcount].flags = FASTBOOT_PTENTRY_FLAGS_USE_MMC_CMD;
  pcount++;
#endif

 #if 1 // Debug
  fastboot_flash_dump_ptn();



ODROID-PC는 LCD가 없고 HDMI만 있습니다.

따라서 HDMI 출력이 되도록 kernel에 작업해야 합니다.

Linaro에서 Origen 보드에 HDMI 출력이 가능하도록 작업을 하였습니다.

Origen의 kernel을 ODROID-PC의 H/W에 맞게 수정해 줘야 합니다.

tobetter님이 이 작업을 해주셨고 github에 올려 해 주셨습니다.

https://github.com/tobetter/hardkernel-linux


$ git clone git://github.com/tobetter/hardkernel-linux.git
Cloning into hardkernel-linux...


$make hardkernel_ubuntu_defconfig 

make -j6 후 만들어진 zImage를 fastboot를 이용하여 write합니다.

Linaro Ubuntu의 rootfs가 매우 크기 때문에 ODROID-PC의 partition table을 다시 만들어야 합니다.

[~/projects/linaro_ubuntu]$ sudo fdisk /dev/sde

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sde: 8018 MB, 8018460672 bytes
255 heads, 60 sectors/track, 1023 cylinders
Units = cylinders of 15300 * 512 = 7833600 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1             235        1014     5967000    c  W95 FAT32 (LBA)
/dev/sde2              10          78      527850   83  Linux
/dev/sde3              79         216     1055700   83  Linux
/dev/sde4             217         234      137700   83  Linux

Partition table entries are not in disk order

ODROID-A의 Partition입니다.


Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Partition number (1-4): 3

Command (m for help): d
Selected partition 4

partition을 다 지웁니다.


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1-1023, default 1): 11
Last cylinder, +cylinders or +size{K,M,G} (11-1023, default 1023): +4G

Command (m for help): p

Disk /dev/sde: 8018 MB, 8018460672 bytes
255 heads, 60 sectors/track, 1023 cylinders
Units = cylinders of 15300 * 512 = 7833600 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sde2              11         559     4199850   83  Linux

11번 cylinder부터 2번째 partition을 하나 만듭니다. 이 영역에 rootfs를 복사 할 것입니다.


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1023, default 1): 560
Last cylinder, +cylinders or +size{K,M,G} (560-1023, default 1023): 
Using default value 1023

Command (m for help): p

Disk /dev/sde: 8018 MB, 8018460672 bytes
255 heads, 60 sectors/track, 1023 cylinders
Units = cylinders of 15300 * 512 = 7833600 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1             560        1023     3549600   83  Linux
/dev/sde2              11         559     4199850   83  Linux

그리고 vfat으로 만들 partition을 만듭니다.


Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))

vfat으로 변환합니다.


Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

저장하고 나옵니다.


[~/projects/linaro_ubuntu]$ sudo mkfs.ext4 /dev/sde2
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262944 inodes, 1049962 blocks
52498 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1077936128
33 block groups
32768 blocks per group, 32768 fragments per group
7968 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[~/projects/linaro_ubuntu]$ sudo mkfs.vfat /dev/sde1
mkfs.vfat 3.0.7 (24 Dec 2009)
[~/projects/linaro_ubuntu]$ 

두 partition을 format합니다.


[~/projects/linaro_ubuntu]$ sudo mount /dev/sde2 /media/microSD/
[~/projects/linaro_ubuntu]$ sudo cp -a rootfs/* /media/microSD/

복사해 놓은 rootfs를 t-flash에 복사합니다.


uboot에서 bootargs와 bootcmd를 아래와 같이 수정 합니다.
EXYNOS4 # setenv bootcmd 'movi read kernel 0 40008000;bootm 40008000'
EXYNOS4 # setenv bootargs 'root=/dev/mmcblk0p2 rw rootfstype=ext4 init=/sbin/init console=ttySAC2,115200 rootdelay=1'
EXYNOS4 # sav

EXYNOS4 # pri
baudrate=115200
bootargs=root=/dev/mmcblk0p2 rw rootfstype=ext4 init=/sbin/init console=ttySAC21
bootcmd=movi read kernel 0 40008000;bootm 40008000
bootdelay=1
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.0.1
ipaddr=192.168.0.20
netmask=255.255.255.0
serverip=192.168.0.10

Environment size: 309/16380 bytes
EXYNOS4 # boot










그리고 rootfs에 /etc/X11/xorg.conf를 아래와 같이 추가하여 주시면 됩니다.

Section "Device" 
Identifier "FBDEV" 
Driver  "fbdev" 
Option  "fbdev"  "/dev/fb1" 
EndSection 


Section "Screen" 
Identifier "HDMI Screen" 
Device  "FBDEV" DefaultDepth 16 
SubSection "Display" 
Virtual 1280 720
EndSubSection 
EndSection

추가로 SATA로 HDD에 rootfs를 넣어서 부팅해 보았습니다.

HDD의 첫번째 파티션을 ext4로 format하고 rootfs를 넣습니다.

github에 올라가 있는 커널에 SATA가 동작하도록 올렸습니다.


uboot에서 bootargs를 아래와 같이 /dev/sda1로 수정 합니다.


그리고 SATA Driver가 동작하기 위한 시간을 주기 위해 rootdelay=10 로 수정합니다.

setenv bootargs 'root=/dev/sda1 rw rootfstype=ext4 init=/sbin/init console=ttySAC1,115200 rootdelay=10'


2012년 2월 5일 일요일

android와 MTP 그리고 Ubuntu

android Honeycomb부터 USB Mass Storage 방식에서 MTP(PTP)로 PC와 연결 방식이 바뀌었습니다.


android는 Froyo에서는 External Storage를 지원 하였습니다.
Nexus One의 경우 t-flash slot이 존재 합니다.



따라서 system partition은 /system와 /data /cache로 이루어져 있고 /mnt/sdcard란 폴더에 external storage를 mount하는 방식이 였습니다.

그래서 아래와 같이 sdcard를 android에서 umount후 PC로 mount하는 방식이였습니다.




Gingerbread(Nexus S)부터는 external storage를 지원하지 않고 iPhone 처럼 내부 nand에 system와 user data를 하나의 nand에 partition을 나누는 방식으로 바뀌었습니다.

/data partition이 고정 크기이고 작기 때문에 여러 문제점이 발생합니다.
/data를 크게 주면 한정된 nand에서 user data 영역이 줄어들기 때문에 제조사에서는 무조건 /data를 크게 잡지 못합니다.

Nexus One과 Motoroi의 경우 /data가 200Mbyte도 안되기 때문에 기본 설치된 app을 포함하면 사용자가 설치할 수 있는 공간의 더 작아 집니다.

그래서 app을 설치하고 /sdcard로 옮기기가 Gingerbread부터 지원하지만 보안 문제와 app 전체를 /sdcard로 설치하는 것이 아니라 일부 데이터만 /sdcard로 옮기기 때문에 이 역시 해결책이 아니였습니다.

그래서 Honeycomb부터 /sdcard를 /data 영역의 한 폴더로 지정하고 /data와 /sdcard를 통합하였습니다.

그런데 이렇게 하니 다른 문제가 발생합니다.

android는 linux 시스템이기 때문에 /data partition이 ext4란 linux에서 지원하는 file system을 사용합니다.

Window에서 지원하지 않는 file system이기 때문에 Window 사용자들은 볼 수가 없습니다.

그래서 MTP(PTP)를 통해 서로 다른 file system을 사용가능하도록 하것 입니다.

간단하게 설명 드리면 ftp나 samba를 이용하면 Window에서 linux의 file을 볼 수 있는 것과 같이 서로 다른 file system을 emulate하는 것이 MTP(PTP)입니다.

Apple은 iTune를 통해 위에 설명한 것과 같이 동작합니다.

여기서 android가 iPhone의 방식을 쫓아 간다고 볼 수 있겠죠.
Apple에서는 iTune를 통해 file sync를 하는지 알 수 있습니다.



그런데 MTP는 Microsoft에서 PTP를 이용하여 Window Media에서 사용하기 위해 만들 protocol입니다. 그래서 UbuntuMac에서 사용하기 위해서는 설정을 해줘아 합니다.

http://www.omgubuntu.co.uk/2011/12/how-to-connect-your-android-ice-cream-sandwich-phone-to-ubuntu-for-file-access/

위에 링크에 Ubuntu에서 MTP를 사용하는 방법이 설명되어 있습니다.

하지만 mtpfs에 버그가 있어서 저의 경우에도 두대의 Ubuntu(11.04와 10.04LTS)에서 완벽하게 동작하지 않습니다.

https://bugs.launchpad.net/ubuntu/+source/mtpfs/+bug/573524

그런데 PTP로 연결하지 문제가 없이 잘 됩니다.

Google에 Window Media를 계속 빌려 쓸지 iTune와 같이 sync Manager 프로그램을 만들지 궁금해집니다.



2011년 11월 30일 수요일

android OpenJDK vs Sun JDK build

Ubuntu 11.10 업데이트 후 자동으로 설치되었는지 확인은 되지 않지만 OpenJDK가 설치 되어 있습니다.

android build시 gingerbread까지는 OpenJDK로 build하여도 문제가 없는데 ICS build시 아래와 같은 에러가 발생합니다.


error: error reading out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar; invalid header field
1 error
make: *** [out/target/common/obj/APPS/FrameworksCoreSystemPropertiesTests_intermediates/classes-full-debug.jar] 오류 41

googling 하여 보니 OpenJDK로 build는 가능하나 Sun JDK를 사용하기를 권장하는 것 같습니다.

synatic에서 OpenJDK를 삭제하시고 Sun JDK로 설치하시고


[~/projects/ICS]$ sudo update-alternatives --config jar
[sudo] password for codewalker:
대체 항목 jar에 대해 (/usr/bin/jar 제공) 2개 선택이 있습니다.

  선택       경로                           우선순  상태
------------------------------------------------------------
* 0            /usr/bin/fastjar                  100       자동 모드
  1            /usr/bin/fastjar                  100       수동 모드
  2            /usr/lib/jvm/java-6-sun/bin/jar   63        수동 모드

기본 사항[*]을 사용하려면 엔터, 다른 것을 사용하려면 번호를 입력하십시오: 2

jar도 위와 같이 java-6-sun/bin/jar를 선택하십시오.



http://groups.google.com/group/android-building/browse_thread/thread/f82cc424d451e409/91e29dac50ee1970?show_docid=91e29dac50ee1970

아직도 ICS AOSP가 빌드가 되지 않고 있습니다.


Preparing output jar [/home/codewalker/projects/ICS/out/target/common/obj/APPS/WAPPushManager_intermediates/proguard.classes.jar]
  Copying resources from program jar [/home/codewalker/projects/ICS/out/target/common/obj/APPS/WAPPushManager_intermediates/classes.jar]
target Java: FrameworksServicesTests (out/target/common/obj/APPS/FrameworksServicesTests_intermediates/classes)
target Dex: android.core.tests.libcore.package.com.no-core-tests-res
target Dex: android.core.tests.libcore.package.dalvik.no-core-tests-res
target Dex: android.core.tests.libcore.package.libcore.no-core-tests-res
target Dex: android.core.tests.libcore.package.org.no-core-tests-res
target Dex: android.core.tests.libcore.package.sun.no-core-tests-res
target Dex: android.core.tests.libcore.package.tests.no-core-tests-res

이 단계에서 top을 해 보면 java가 몇개 돌고 있고 메모리를 거의 다 사용하고 있어서 시스템이 거의 동작하지 않고 build 역시 안되는 것 같습니다. 여기서 해결이 안되네요. ㅡㅡ;

https://groups.google.com/group/android-building/browse_thread/thread/1d01d0cd635c7f9e

여기 설명대로 -j 옵션을 없애니 컴파일이 계속되네요. 이해가 안가네요.

결과 Ubuntu 11.10 최신 버전을 사용하고 있었는데 OS가 문제가 있어서 다시 설치해야 하서 결국 Google에서 recommend하는 10.04로 재설치 하였습니다.

그런데 package/app들 build하다가 아래 링크의 설명 처럼 에러가 발생합니다.


fix "bad class file error" android build error



http://rxwen.blogspot.com/2011/08/fix-bad-class-file-error-android-build.html

eclipse를 설치하고 나면 jar가 fastjar로 바뀝니다.
그래서 결국 android ICS build 하려면 jar를 다시 설정해 주셔야 합니다.

2011년 11월 28일 월요일

ubuntu 11.10에서 android(Gingerbread) build error...


ubuntu 11.10으로 업데이트 후 gcc 버전을 확인 해 보면 아래와 같습니다.


[~/projects/ICS/device/samsung]$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

그래서 android build 시 두가지 에러가 발생합니다.


In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 오류 1
make: *** 끝나지 않은 작업을 기다리고 있습니다....
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/format_output.o] 오류 1
true


frameworks/base/libs/utils/Android.mk
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive





error: "_FORTIFY_SOURCE" redefined [-Werror]



build/core/combo/HOST_linux-x86.mk line 61:

-HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

+HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0