Android.mk에 LOCAL_MODULE_TAGS가 보통 optional로 되어 있다.
LOCAL_MODULE_TAGS := eng user
LOCAL_MODULE_TAGS := eng optional
LOCAL_MODULE_TAGS := user optional
LOCAL_MODULE_TAGS := optional
이 정도의 조합이 가능 할 것이다.
그런데 optional 이 옵션은 어떻게 적용되는 것일까?
device.mk에 PRODUCT_PACKAGES에 영향을 받는다.
물론 build 폴더에 mk 파일들에도 PRODUCT_PACKAGES가 있고 거기에 영향을 받는다.
optional은 LOCAL_MODULE의 내용이 PRODUCT_PACKAGES에 포함되어 있으면 빌드를 하겠다는 의미이다.
LOCAL_MODULE_TAGS := eng optional 이 경우 eng면 반드시 빌드 하고 user면 PRODUCT_PACKAGES에 포함되어 있으면 빌드 한다는 뜻이다.
2012년 5월 30일 수요일
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
그리고 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'
마지막 버전이 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
...
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합니다.
복구가 끝나면 /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();
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 # 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년 4월 25일 수요일
ODROID-A에 Linaro Ubuntu 올리기...
ODROID-A에 Linaro Ubuntu를 올려보겠습니다.
http://www.linaro.org/downloads/1203
위 사이트에서 Ubuntu Origen을 선택합니다.
http://releases.linaro.org/12.03/ubuntu/leb-origen/
http://www.linaro.org/downloads/1203
위 사이트에서 Ubuntu Origen을 선택합니다.
http://releases.linaro.org/12.03/ubuntu/leb-origen/
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/sdx2를 mount하여 rootfs를 pc로 복사 시킵니다.
ODROID-A 복구한 t-flash를 준비하고 kernel을 수정하여 write해야 합니다.
ODROID-A 커널 폴더에서 make menuconfig합니다.
Device Drivers --->
Character devices --->
[*] Virtual terminal
CONFIG_VT를 체크합니다.
추가로 현재 ODROID-A에 CONFIG_HID가 빠져 있어서 USB Mouse와 keyboard를 사용하기 위해 같이 체크 해 주세요.
추가로 현재 ODROID-A에 CONFIG_HID가 빠져 있어서 USB Mouse와 keyboard를 사용하기 위해 같이 체크 해 주세요.
make -j6 후 만들어진 zImage를 fastboot를 이용하여 write합니다.
Linaro Ubuntu의 rootfs가 매우 크기 때문에 ODROID-A의 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 # 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
오늘 Linaro 12.04가 release 되었네요.
동일한 방법으로 Ubuntu 12.04LTS 올렸습니다.
12.04에 HDMI가 가능하다고 하는데 kernel을 poriting 해야 합니다. 전 give up...
동일한 방법으로 Ubuntu 12.04LTS 올렸습니다.
12.04에 HDMI가 가능하다고 하는데 kernel을 poriting 해야 합니다. 전 give up...
2012년 3월 27일 화요일
ODROID(ICS) screenshot 찍기
android Honeycomb부터 iOS 처럼 screenshot이 가능합니다.
Volume Down + Power Key 조합입니다.
하지만 ODROID는 Volume Up/Down키와 Power Key가 동시에 눌러지지 않는 형태입니다.
Screenshot으로 검색해 보면 PhoneWindowManager.java에 관련 코드가 찾아 집니다.
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
...
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_MUTE: {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
if (down) {
if (isScreenOn && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
mVolumeDownKeyConsumedByScreenshotChord = false;
cancelPendingPowerKeyAction();
interceptScreenshotChord();
}
} else {
여기서 KEYCODE_VOLUME_DOWN -> KEYCODE_SEARCH으로 바꿉니다.
switch (keyCode) {
case KeyEvent.KEYCODE_SEARCH:
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_MUTE: {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
if (down) {
if (isScreenOn && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
mVolumeDownKeyConsumedByScreenshotChord = false;
cancelPendingPowerKeyAction();
interceptScreenshotChord();
}
} else {
그럼 Power Key와 Search Key를 동시에 1초 누르면 screenshot이 찍힙니다.
Volume Down + Power Key 조합입니다.
하지만 ODROID는 Volume Up/Down키와 Power Key가 동시에 눌러지지 않는 형태입니다.
Screenshot으로 검색해 보면 PhoneWindowManager.java에 관련 코드가 찾아 집니다.
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
...
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_MUTE: {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
if (down) {
if (isScreenOn && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
mVolumeDownKeyConsumedByScreenshotChord = false;
cancelPendingPowerKeyAction();
interceptScreenshotChord();
}
} else {
여기서 KEYCODE_VOLUME_DOWN -> KEYCODE_SEARCH으로 바꿉니다.
switch (keyCode) {
case KeyEvent.KEYCODE_SEARCH:
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_MUTE: {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
if (down) {
if (isScreenOn && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
mVolumeDownKeyConsumedByScreenshotChord = false;
cancelPendingPowerKeyAction();
interceptScreenshotChord();
}
} else {
그럼 Power Key와 Search Key를 동시에 1초 누르면 screenshot이 찍힙니다.
2012년 3월 26일 월요일
Android Build되지 않거나 killed될 때...
gingerbread까지는 android build시 종료되거나 build가 끝나지 않는 문제가 없었는데 ICS부터는 아래와 같이 killed되거나 끝나지 않는 문제가 발생합니다.
make: *** [out/target/common/obj/APPS/android.core.tests.libcore.package.com.no-core-tests-res_intermediates/noproguard.classes-with-local.dex] Killed
그래서 googling해보니 swap이 문제인것 같습니다.
Ubuntu 설치 시 partition을 자동으로 지정하면 swap이 1G로 잡히는 것 같습니다.
그런데 android build하기 위해서는 swap이 더 켜저야 하는 것 같습니다.
아래와 같이 하여 4G로 swap을 잡으니 문제가 없습니다. 참고하세요.
$sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304
$sudo mkswap -v1 /boot/swapfile
$sudo swapon /boot/swapfile
$free
total used free shared buffers cached
Mem: 4041052 3717680 323372 0 724304 1923656
-/+ buffers/cache: 1069720 2971332
Swap: 4194296 0 4194296
4G swap을 확인
$sudo vi /etc/fstab
아래 줄 추가
/boot/swapfile swap swap defaults 1 1
2012년 3월 6일 화요일
android(ICS,JB)에서 Lock Screen 설정 None으로 만들기
JB에서부터는 아래 코드를 적용해서 default가 none으로 설정되지 않습니다.
def_lockscreen_disabled 값을 true로 주시면 코드 수정없이 됩니다.
overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* Copyright (c) 2009, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<resources>
<bool name="def_accelerometer_rotation">false</bool>
<bool name="def_lockscreen_disabled">true</bool>
<integer name="def_screen_off_timeout">604800000</integer>
<bool name="def_install_non_market_apps">true</bool>
</resources>
---------------------------------------------------------------------------------------------------------
http://codewalkerster.blogspot.com/2011/11/android-lockscreen.html
gingerbread에서는 Screen lock을 PhoneWindowManager.java를 직접 수정하여 없앨 수 있었습니다.
ICS 부터는 아래와 같이 Screen lock - None이란 항목이 있습니다.
그런데 첫 부팅 후 default가 None으로 설정하려고 합니다.
framework/base/core/java/com/android/internal/widget/LockPatternUtils.java
public boolean isLockScreenDisabled() {
return !isSecure() && getLong(DISABLE_LOCKSCREEN_KEY, 1) != 0;
//return !isSecure() && getLong(DISABLE_LOCKSCREEN_KEY, 0) != 0;
}
def_lockscreen_disabled 값을 true로 주시면 코드 수정없이 됩니다.
overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* Copyright (c) 2009, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<resources>
<bool name="def_accelerometer_rotation">false</bool>
<bool name="def_lockscreen_disabled">true</bool>
<integer name="def_screen_off_timeout">604800000</integer>
<bool name="def_install_non_market_apps">true</bool>
</resources>
---------------------------------------------------------------------------------------------------------
http://codewalkerster.blogspot.com/2011/11/android-lockscreen.html
gingerbread에서는 Screen lock을 PhoneWindowManager.java를 직접 수정하여 없앨 수 있었습니다.
ICS 부터는 아래와 같이 Screen lock - None이란 항목이 있습니다.
그런데 첫 부팅 후 default가 None으로 설정하려고 합니다.
framework/base/core/java/com/android/internal/widget/LockPatternUtils.java
public boolean isLockScreenDisabled() {
return !isSecure() && getLong(DISABLE_LOCKSCREEN_KEY, 1) != 0;
//return !isSecure() && getLong(DISABLE_LOCKSCREEN_KEY, 0) != 0;
}
public int getKeyguardStoredPasswordQuality() {
int quality =
(int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
//(int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
// If the user has chosen to use weak biometric sensor, then return the backup locking
// method and treat biometric as a special case.
if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
quality =
(int) getLong(PASSWORD_TYPE_ALTERNATE_KEY,
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
}
return quality;
}
라벨:
android,
ICS,
JB,
None,
Screen lock
2012년 2월 13일 월요일
android tablet ICS에서 Mass Storage UI가 나오지 않는 문제 해결
android tablet의 최초 OS는 Honeycomb이 였습니다.
Honeycomb은 MTP가 default입니다.
그래서 이전에 Mass Storage로 변경해도 USB Mass Storage connection Notification이 오지 않습니다.
그래서 Tablet인 경우 Mass Storage로 변경 시 PC와 연결하는 UMS를 사용할 수 없는 문제가 발생합니다.
원인을 찾아 보니 phone UI만 com.android.systemui.usb.StorageNotification에 대한 listener가 등록되어 있어서 tablet UI에서는 event를 받지 못하는 상황이 였습니다.
framework/base/packages/SystemUI/src/com/android/systemui/statusbar 폴더를 보시면
phone, tablet이란 폴더가 있습니다.
여기서 grep -nr mStorageManager를 검색하여 보시면 PhoneStatusBarPolicy class에서만 listener를 등록해 주도록 되어 있습니다.
tablet에서 적절한 위치에 mStorageManager.registerListener()를 추가해 주셔야 합니다.
아래 capture를 보시면 ui가 설렁합니다.
tablet UI에서 Mass Storage 연결에 대해 고민하지 않는 듯한 인상입니다.
Honeycomb은 MTP가 default입니다.
그래서 이전에 Mass Storage로 변경해도 USB Mass Storage connection Notification이 오지 않습니다.
그래서 Tablet인 경우 Mass Storage로 변경 시 PC와 연결하는 UMS를 사용할 수 없는 문제가 발생합니다.
원인을 찾아 보니 phone UI만 com.android.systemui.usb.StorageNotification에 대한 listener가 등록되어 있어서 tablet UI에서는 event를 받지 못하는 상황이 였습니다.
framework/base/packages/SystemUI/src/com/android/systemui/statusbar 폴더를 보시면
phone, tablet이란 폴더가 있습니다.
여기서 grep -nr mStorageManager를 검색하여 보시면 PhoneStatusBarPolicy class에서만 listener를 등록해 주도록 되어 있습니다.
tablet에서 적절한 위치에 mStorageManager.registerListener()를 추가해 주셔야 합니다.
아래 capture를 보시면 ui가 설렁합니다.
tablet UI에서 Mass Storage 연결에 대해 고민하지 않는 듯한 인상입니다.
피드 구독하기:
글 (Atom)