shell@android:/ # su
shell@android:/ # ifconfig eth0 xxx.xxx.xxx.xxx up
shell@android:/ # route add default gw xxx.xxx.xxx.xxx dev eth0
shell@android:/ # setprop net.dns1 xxx.xxx.xxx.xxx
shell@android:/ # netcfg
sit0 DOWN 0.0.0.0/0 0x00000080 00:00:000
eth0 UP xxx.xxx.xxx.xxx/24 0x00001043 86:ae:218
lo UP 127.0.0.1/8 0x00000049 00:00:000
wlan0 UP 192.168.0.88/24 0x00001043 00:08:2bf
ip6tnl0 DOWN 0.0.0.0/0 0x00000080 00:00:000
2013년 9월 23일 월요일
2013년 9월 15일 일요일
Portrait screen for ODROID-XU
edit /system/build.pro
add this line.
persist.demo.hdmirotation=portrait
edit /sdcard/boot.ini
ODROIDXU-UBOOT-CONFIG
setenv fb_x_res "1080"
setenv fb_y_res "1920"
setenv vout "hdmi"
setenv left "56"
setenv right "24"
setenv upper "3"
setenv lower "3"
setenv hsync "14"
setenv vsync "3"
setenv hdmi_phy_res "1080"
setenv led_blink "1"
add this line.
persist.demo.hdmirotation=portrait
edit /sdcard/boot.ini
ODROIDXU-UBOOT-CONFIG
setenv fb_x_res "1080"
setenv fb_y_res "1920"
setenv vout "hdmi"
setenv left "56"
setenv right "24"
setenv upper "3"
setenv lower "3"
setenv hsync "14"
setenv vsync "3"
setenv hdmi_phy_res "1080"
setenv led_blink "1"
2013년 9월 3일 화요일
ODROID-XU Update.zip included GMS(Gapps)01-Dec-2013
Last recovery firmware
http://dn.odroid.com/ODROID-XU/Firmware/01-10-2014/
last update firmware
http://dn.odroid.com/ODROID-XU/Firmware/02-13-2014/
and GApps Installer
http://codewalkerster.blogspot.kr/2013/11/universal-1-click-gapps-installer-for.html
https://drive.google.com/folderview?id=0B5aZmgmqP9rORjhTbVhqYVgySlE&usp=sharing
https://www.dropbox.com/s/amgthsz8tjfsd8b/update.zip
https://www.dropbox.com/s/amgthsz8tjfsd8b/update.zip
https://www.dropbox.com/s/szu2yax7ew08p6q/update.zip.md5sum
https://www.dropbox.com/s/szu2yax7ew08p6q/update.zip.md5sum
01 Dec 2013
support USB Gps attached by serial modem(like ttyACM or ttyUSB)
26 Nov 2013
fix 720P usb camera problem(UVC).
13 Nov 2013
support HSDPA USB dongle Modem(huawei e173)
test version.
http://www.alibaba.com/product-gs/1009044157/TJ_W803_Similar_specs_Same_Quality.html?s=p
07 Nov 2013
Asix Ethernet Adapter bug Fix.
02 Nov 2013
support UHS class for microSD.
25 Oct 2013
fix this issue.
http://forum.odroid.com/viewtopic.php?f=63&t=2111
19 Oct 2013
Update for Expansion board.
Exansion board example app.
https://www.dropbox.com/s/tbffdto7nulafuk/ExpansionBoardExample.apk
10 Oct 2013
for Kinect.
add feature CONFIG_USB_DEVICEFS.
add node for Kinect in uevnet.odroidxu.rc
add feature CONFIG_HID_APPLE.
04 Oct 2013
fix screen color problem.
http://forum.odroid.com/viewtopic.php?f=73&t=2363#p18874
01 Oct 2013
Enable ethernet on automatically.
25 Sep 2013
If ax88179(gigabit) Ethernet via USB 3.0 and smsc95xx(10/100) Ethernet via USB 2.0 is connected at the same time, then control ax88179 modules first.
It is enabled to set static IP setting for gigabit Ethernet.
23 Sep 2013
add ethernet setting for static IP
16 Sep 2013
1. fix OdroidUpdate app.
After validate update.zip, Extract update.zip automatically.
2. remove EDID function, just set HDMI phy from boot.ini.
Must update boot.ini
Example, here
http://dn.odroid.com/ODROID-XU/boot.ini/09-16-2013/
9 Sep 2013
Download update.zip and update.zip.md5sum
Move update.zip and update.zip.md5sum file from Download folder to root.
There is update folder.
Checking option.
and start update.
booting...
http://dn.odroid.com/ODROID-XU/Firmware/01-10-2014/
last update firmware
http://dn.odroid.com/ODROID-XU/Firmware/02-13-2014/
and GApps Installer
http://codewalkerster.blogspot.kr/2013/11/universal-1-click-gapps-installer-for.html
https://drive.google.com/folderview?id=0B5aZmgmqP9rORjhTbVhqYVgySlE&usp=sharing
https://www.dropbox.com/s/amgthsz8tjfsd8b/update.zip
https://www.dropbox.com/s/amgthsz8tjfsd8b/update.zip
https://www.dropbox.com/s/szu2yax7ew08p6q/update.zip.md5sum
https://www.dropbox.com/s/szu2yax7ew08p6q/update.zip.md5sum
01 Dec 2013
support USB Gps attached by serial modem(like ttyACM or ttyUSB)
26 Nov 2013
fix 720P usb camera problem(UVC).
13 Nov 2013
support HSDPA USB dongle Modem(huawei e173)
test version.
http://www.alibaba.com/product-gs/1009044157/TJ_W803_Similar_specs_Same_Quality.html?s=p
07 Nov 2013
Asix Ethernet Adapter bug Fix.
The lock that would cause the usb3 to gigabit lan adapter is now fixed and merged.
http://git.odroid.in/odroid/ linux/commit/ 85f0fa36e8117bd831ee9737d899f3 fe5890eaac
reverse portrait screen.
ODROID-XU issue where 48kHz audio couldn't be played via alsa is now fixed.
reverse portrait screen.
ODROID-XU issue where 48kHz audio couldn't be played via alsa is now fixed.
02 Nov 2013
support UHS class for microSD.
fix this issue.
http://forum.odroid.com/viewtopic.php?f=63&t=2111
19 Oct 2013
Update for Expansion board.
Exansion board example app.
https://www.dropbox.com/s/tbffdto7nulafuk/ExpansionBoardExample.apk
for Kinect.
add feature CONFIG_USB_DEVICEFS.
add node for Kinect in uevnet.odroidxu.rc
add feature CONFIG_HID_APPLE.
04 Oct 2013
fix screen color problem.
http://forum.odroid.com/viewtopic.php?f=73&t=2363#p18874
01 Oct 2013
Enable ethernet on automatically.
25 Sep 2013
If ax88179(gigabit) Ethernet via USB 3.0 and smsc95xx(10/100) Ethernet via USB 2.0 is connected at the same time, then control ax88179 modules first.
It is enabled to set static IP setting for gigabit Ethernet.
23 Sep 2013
add ethernet setting for static IP
16 Sep 2013
1. fix OdroidUpdate app.
After validate update.zip, Extract update.zip automatically.
2. remove EDID function, just set HDMI phy from boot.ini.
Must update boot.ini
Example, here
http://dn.odroid.com/ODROID-XU/boot.ini/09-16-2013/
9 Sep 2013
Download update.zip and update.zip.md5sum
Unzip update.zip
There is update folder.
Run ODROID-XU updater app.
Click "Validate file" button.
Checking option.
booting...
2013년 8월 26일 월요일
Unzip in Java
private ProgressDialog mProgressDialog;
private String unzipLocation = Environment.getExternalStorageDirectory() + "/";
private String zipFile = Environment.getExternalStorageDirectory() + "/xxx.zip";
unzip();
public void unzip() throws IOException {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Please Wait...Extracting zip file ... ");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
new UnZipTask().execute(zipFile, unzipLocation);
}
private class UnZipTask extends AsyncTask<String, Void, Boolean> {
@SuppressWarnings("rawtypes")
@Override
protected Boolean doInBackground(String... params) {
String filePath = params[0];
String destinationPath = params[1];
File archive = new File(filePath);
try {
ZipFile zipfile = new ZipFile(archive);
for (Enumeration e = zipfile.entries(); e.hasMoreElements();) {
ZipEntry entry = (ZipEntry) e.nextElement();
unzipEntry(zipfile, entry, destinationPath);
}
UnZipUtil d = new UnZipUtil();
d.unZip(zipFile, unzipLocation);
} catch (Exception e) {
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
mProgressDialog.dismiss();
}
private void unzipEntry(ZipFile zipfile, ZipEntry entry, String outputDir) throws IOException {
if (entry.isDirectory()) {
createDir(new File(outputDir, entry.getName()));
return;
}
File outputFile = new File(outputDir, entry.getName());
if (!outputFile.getParentFile().exists()) {
createDir(outputFile.getParentFile());
}
// Log.v("", "Extracting: " + entry);
BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
try {
} finally {
outputStream.flush();
outputStream.close();
inputStream.close();
}
}
private void createDir(File dir) {
if (dir.exists()) {
return;
}
if (!dir.mkdirs()) {
throw new RuntimeException("Can not create dir " + dir);
}
}
}
public class UnZipUtil {
public boolean unZip(String zipFile, String ToPath) {
InputStream is;
ZipInputStream zis;
try {
String filename;
is = new FileInputStream(zipFile);
zis = new ZipInputStream(new BufferedInputStream(is));
ZipEntry ze;
byte[] buffer = new byte[1024];
int count;
while ((ze = zis.getNextEntry()) != null) {
// zapis do souboru
filename = ze.getName();
// Need to create directories if not exists, or
// it will generate an Exception...
if (ze.isDirectory()) {
File fmd = new File(ToPath + filename);
fmd.mkdirs();
continue;
}
FileOutputStream fout = new FileOutputStream(ToPath + filename);
// cteni zipu a zapis
while ((count = zis.read(buffer)) != -1) {
fout.write(buffer, 0, count);
}
fout.close();
zis.closeEntry();
}
zis.close();
} catch(IOException e) {
e.printStackTrace();
return false;
}
return true;
}
}
}
private String unzipLocation = Environment.getExternalStorageDirectory() + "/";
private String zipFile = Environment.getExternalStorageDirectory() + "/xxx.zip";
unzip();
public void unzip() throws IOException {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Please Wait...Extracting zip file ... ");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
new UnZipTask().execute(zipFile, unzipLocation);
}
private class UnZipTask extends AsyncTask<String, Void, Boolean> {
@SuppressWarnings("rawtypes")
@Override
protected Boolean doInBackground(String... params) {
String filePath = params[0];
String destinationPath = params[1];
File archive = new File(filePath);
try {
ZipFile zipfile = new ZipFile(archive);
for (Enumeration e = zipfile.entries(); e.hasMoreElements();) {
ZipEntry entry = (ZipEntry) e.nextElement();
unzipEntry(zipfile, entry, destinationPath);
}
UnZipUtil d = new UnZipUtil();
d.unZip(zipFile, unzipLocation);
} catch (Exception e) {
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
mProgressDialog.dismiss();
}
private void unzipEntry(ZipFile zipfile, ZipEntry entry, String outputDir) throws IOException {
if (entry.isDirectory()) {
createDir(new File(outputDir, entry.getName()));
return;
}
File outputFile = new File(outputDir, entry.getName());
if (!outputFile.getParentFile().exists()) {
createDir(outputFile.getParentFile());
}
// Log.v("", "Extracting: " + entry);
BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
try {
} finally {
outputStream.flush();
outputStream.close();
inputStream.close();
}
}
private void createDir(File dir) {
if (dir.exists()) {
return;
}
if (!dir.mkdirs()) {
throw new RuntimeException("Can not create dir " + dir);
}
}
}
public class UnZipUtil {
public boolean unZip(String zipFile, String ToPath) {
InputStream is;
ZipInputStream zis;
try {
String filename;
is = new FileInputStream(zipFile);
zis = new ZipInputStream(new BufferedInputStream(is));
ZipEntry ze;
byte[] buffer = new byte[1024];
int count;
while ((ze = zis.getNextEntry()) != null) {
// zapis do souboru
filename = ze.getName();
// Need to create directories if not exists, or
// it will generate an Exception...
if (ze.isDirectory()) {
File fmd = new File(ToPath + filename);
fmd.mkdirs();
continue;
}
FileOutputStream fout = new FileOutputStream(ToPath + filename);
// cteni zipu a zapis
while ((count = zis.read(buffer)) != -1) {
fout.write(buffer, 0, count);
}
fout.close();
zis.closeEntry();
}
zis.close();
} catch(IOException e) {
e.printStackTrace();
return false;
}
return true;
}
}
}
MD5SUM string in Java
public static String createChecksum(String filename) throws Exception {
InputStream fis = new FileInputStream(filename);
byte[] buffer = new byte[1024];
MessageDigest complete = MessageDigest.getInstance("MD5");
int numRead;
do {
numRead = fis.read(buffer);
if (numRead > 0) {
complete.update(buffer, 0, numRead);
}
} while (numRead != -1);
fis.close();
byte[] digest = complete.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
if ((int)(b & 0xff) <= 0xf)
sb.append(Integer.toHexString(0));
sb.append(Integer.toHexString((int) (b & 0xff)));
}
return sb.toString();
}
InputStream fis = new FileInputStream(filename);
byte[] buffer = new byte[1024];
MessageDigest complete = MessageDigest.getInstance("MD5");
int numRead;
do {
numRead = fis.read(buffer);
if (numRead > 0) {
complete.update(buffer, 0, numRead);
}
} while (numRead != -1);
fis.close();
byte[] digest = complete.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
if ((int)(b & 0xff) <= 0xf)
sb.append(Integer.toHexString(0));
sb.append(Integer.toHexString((int) (b & 0xff)));
}
return sb.toString();
}
2013년 8월 12일 월요일
cheapcast on ODROID
chromecast 없이 android 디바이스로 chromecast emulator 해주는 재밌는 어플이 나왔네요.
ODROID에 올려서 사용하면 딱 일 것 같아 시도 해 봤는데 연결이 원할하지 못 하네요.
https://plus.google.com/u/0/107130354111162483072/posts/bc1TZChjhRE
아래 이미지는 Galaxy Nexus에서 ODROID-XU로 Chomecast를 시도한 모습니다.
https://play.google.com/store/apps/developer?id=Sebastian+Mauer
ODROID에 올려서 사용하면 딱 일 것 같아 시도 해 봤는데 연결이 원할하지 못 하네요.
https://plus.google.com/u/0/107130354111162483072/posts/bc1TZChjhRE
아래 이미지는 Galaxy Nexus에서 ODROID-XU로 Chomecast를 시도한 모습니다.
ODROID-XU의 화면
https://play.google.com/store/apps/developer?id=Sebastian+Mauer
2013년 8월 5일 월요일
ODROID-XU와 big.LITTLE
오드로이드 포럼에 Exynos5410의 big.LITTLE의 문제에 대해서 글이 하나 있습니다.
http://forum.odroid.com/viewtopic.php?f=65&t=1884
IKS(In-Kernel Switcher)가 동작하는 CPU 마이그레이션과 클러스터 마이그레이션은 차이는 DVFS에 의해 특정 clock으로 올라가면 전체가 A15로 동작하지만 Core별로 A7과 A15를 선택적으로 동작 시킬 수 있다는 것입니다. 따라서 클러스커 마이그레이션과 달리 4개의 core가 다 A15로 동작할 필요가 없기 때문에 전력 효율이 높다는 장점이 있습니다. 하지만 big.LITTLE 설명한 것 처럼 저전력과 관련된 설계이고 오드로이드와 같이 A/C 전원이 항상들어가는 시스템에서는 아무런 의미가 없습니다.
Exynos5250은 A15 dual-core이고 Exynos5410은 A15 quad-core라 생각하시면 간단 할 것 같습니다.
물론 Exynos5420이 더 높은 clock과 GPU 성능이 높습니다. 하지막 아직 상용 제품에 출시 되지 않았습니다. 개발 보드로 나오기 위해서는 더 많은 시간이 필요할 것입니다.
big.LITTLE의 최후 목표인 MP모드는 커널의 scheduler의 재설계의 문제 이기 때문에 CCI의 버그와는 무관한 것으로 이해하고 있습니다. 아직 MP모드로의 실제 동작은 먼 얘기로 알고 있습니다.
Apple에서도 다음 CPU에 big.LITTLE을 사용하다고 합니다. Apple이야 자체 커널이 있으니 잘 해결하겠죠??? Apple의 big.LITTLE의 행보가 기대 됩니다.
참고한 사이트 입니다.
http://gamma0burst.tistory.com/m/613
http://forum.odroid.com/viewtopic.php?f=65&t=1884
Exynos5410의 CCI-400 버그로 big.LITTLE의 클러스트 마이그레이션밖에 동작하지 않습니다. 그래서 이번에 수정되어 나온 Exynos5420과 비교하며 많은 개발자들이 아쉬워하고 있습니다.
IKS(In-Kernel Switcher)가 동작하는 CPU 마이그레이션과 클러스터 마이그레이션은 차이는 DVFS에 의해 특정 clock으로 올라가면 전체가 A15로 동작하지만 Core별로 A7과 A15를 선택적으로 동작 시킬 수 있다는 것입니다. 따라서 클러스커 마이그레이션과 달리 4개의 core가 다 A15로 동작할 필요가 없기 때문에 전력 효율이 높다는 장점이 있습니다. 하지만 big.LITTLE 설명한 것 처럼 저전력과 관련된 설계이고 오드로이드와 같이 A/C 전원이 항상들어가는 시스템에서는 아무런 의미가 없습니다.
Exynos5250은 A15 dual-core이고 Exynos5410은 A15 quad-core라 생각하시면 간단 할 것 같습니다.
물론 Exynos5420이 더 높은 clock과 GPU 성능이 높습니다. 하지막 아직 상용 제품에 출시 되지 않았습니다. 개발 보드로 나오기 위해서는 더 많은 시간이 필요할 것입니다.
big.LITTLE의 최후 목표인 MP모드는 커널의 scheduler의 재설계의 문제 이기 때문에 CCI의 버그와는 무관한 것으로 이해하고 있습니다. 아직 MP모드로의 실제 동작은 먼 얘기로 알고 있습니다.
Apple에서도 다음 CPU에 big.LITTLE을 사용하다고 합니다. Apple이야 자체 커널이 있으니 잘 해결하겠죠??? Apple의 big.LITTLE의 행보가 기대 됩니다.
참고한 사이트 입니다.
http://gamma0burst.tistory.com/m/613
피드 구독하기:
글 (Atom)