Sunday, February 12, 2012

in_addr v.s. in_addr_t


There are lots function/macros designed to convert them :
in_addr_t inet_addr(const char *cp); in_addr_t inet_lnaof(struct in_addr in); struct in_addr inet_makeaddr(in_addr_t net, in_addr_t lna); in_addr_t inet_netof(struct in_addr in); in_addr_t inet_network(const char *cp); char *inet_ntoa(struct in_addr in);


In fact, both in_addr_t, in_addr is defined in netinet/in.h :


#ifndef _IN_ADDR_T
#define _IN_ADDR_T
typedef __uint32_t in_addr_t;
#endif

struct in_addr {
  in_addr_t s_addr;
};

Struct in_addr contain/hide detail of IP address, so if you need to record IP inside your program, use struct in_addr maybe a better idea then in_addr_t.

Thursday, February 09, 2012

Unhandled Lockdown error (-15)


在一個對網路不友善的環境中....(略)

公司的 Linux build machine, 因為沒有登入公司網域, 要連外更新時都是很頭痛的問題, 然後又沒有無線網卡, 也沒法透過我 iPhone 分享的無線網路出去

上次意外發現 Ubuntu 11.10 內建 ipheth 之後, 就解決了這個問題, 透過 USB 走我的 iPhone 出去, 結果昨天晚上 iPhone 白蘋果, 復原後, 今天早上就發現接上去的時候有問題沒法出去了

錯誤的訊息是 : "Unhandled Lockdown error (-15)", 跟上次我遇到的問題不一樣 (上次更新 libimobiledevice 之後就可以動了)

Google 後發現了解法 :

1. 移除~/.config/libimobiledevice, 重新連接一次
2. 安裝 libimobiledevice-utils, 重新 pairing 一次 : idevicepair unpair && idevicepair pair

我做到第一步之後就解了, 要是第一步不行, 以現在沒法連接外網的情況, 我又要手動複製 .deb 了, 這就痛苦了

看了一下 ~/.config/libimobiledevice 下, 好像是些認證的檔案, 也許重刷後這些翻新了, 導致之前配對的過程要重來一次吧

Reference :


Paulo (pauloerweber) wrote on 2011-11-18: #26
The unpair/pair commands worked on my iPad 1st Gen. Later to the commands, I removed ~/.config/libimobiledevice, rebooted the PC and only then connected the iPad (unlocked) on USB. After that, Ubuntu 11.10 was able to mount the iPad, even locked.


almadana (almadana) wrote on 2011-11-22: #27
sudo apt-get install libimobiledevice-utils
idevicepair unpair && idevicepair pair


Tuesday, February 07, 2012

在一個對網路不友善的環境中

在一個對網路不友善的環境中....(略)

repo 預設會啟動4個 sync thread, 對於我小小的3G連外頻寬是個吃重的負荷, 可以用 -j 指定要用幾個 thread 抓 :

repo sync -j 1

Thursday, February 02, 2012

How to manually add a new user account by command line in Mac OSX Snow Leopard

sh-3.2# dscl . -create /Users/svnuser
sh-3.2# dscl . -create /Users/svnuser UserShell /bin/bash
sh-3.2# dscl . -passwd /Users/svnuser passwd
sh-3.2# dscl . -create /Users/svnuser RealName SvnUser
sh-3.2# dscl . -create /Users/svnuser UniqueID 510  
sh-3.2# dscl . -create /Users/svnuser PrimaryGroupID 80
sh-3.2# dscl . -create /Users/svnuser NFSHomeDirectory /Users/svnuser
sh-3.2# cp -R /System/Library/User\ Template/English.lproj/ /Users/svnuser
sh-3.2# chown -R svnuser:staff /Users/svnuser

Refer from :

Friday, January 20, 2012

Useful rar command line

Usage: rar <command> -<switch 1> <switch N> <archive> <files....>
               <@listfiles...> 
<path_to_extract\>

<Commands>
  a     Add files to archive
  x     Extract files with full path



<Switches>
  m<0..5>   Set compression level (0-store...3-default...5-maximal)
  rr[N]     Add data recovery record
  v[k,b]    Create volumes with size=*1000 [*1024, *1]

So, normally we use :

rar a -m5 -rr -v600000k abc.rar abcfiles

It will be max compression level, with recovery record, and also multi-volume with 600MB for each files.

ssh config file to different machine, user, port

Normally we may have different account at different machine, including different user name or port.

When default ssh run, it will use your user name as default connection user name, and also port 22 for remote port.

We may use ssh -l login_name to overwrite user name, and ssh -p port to overwrite port number.

We may also have below text inside .ssh/config file to default some useful connection :

Host Home
User neo
Port 1234
HostName neozone.com

Host Office
User neo_wong
Port 13579
HostName hellocompany.com

So that when we use ssh Home, it will equal to :

ssh -l neo -p 1234 neozone.com

It dont have have all field exist :

User neo

equal to :

ssh -l neo

* man page of ssh_config http://linux.die.net/man/5/ssh_config

Monday, January 02, 2012

Windows 下如何 dump DNS cache, 如何清除DNS cache

Dump DNS cache : ipconfig /displaydns
Clean DNS cache : ipconfig /flushdns

Outlook 2007 無法遠端存取公司 Exchange 郵件

為了避免登入公司 Domain 時被強制安裝很多監控軟體, 重裝了電腦, 這次不將帳號設成登入公司網域,  只在必要的時候連線公司網路進入 intranet 存取資源
唯一最重要要常常存取的東西就是公司的 mail, 公司的  exchange 預設可以遠端存取郵件, 只是這台新設好的電腦,  在遠端存取上一直發生問題, 出現以下的錯誤 :


[Proxy 伺服器的安全性憑證發生問題,
-安全性憑證不是來自可信任的憑證授權單位,
-Outlook無法連線至Proxy伺服器mail.xxx.com.tw,(錯誤代碼8) ]

google 了一下發現 :

http://social.technet.microsoft.com/forums/zh-TW/exchangezhcht/thread/e24022ee-2b4d-4c7b-bded-eb7a826048f9

對照有登入網域的電腦後, 發現我少了兩個憑證, 從那台電腦匯出, 這台匯入後, 就可以存取了 ,   這樣我的 Outlook 運作正常, 就不需要沒事登入公司的網路了, 嘿嘿

Sunday, January 01, 2012

clear, more command missing in cygwin

Clear command did not default installed, you need to add ncurses package when install cygwin.
Also Ctrl+L could clear screen too, if you dont have clear.exe installed.

More command could be replace by less command, so set an alias should be able to fix it.

Wednesday, December 07, 2011

repo -b

repo 是 google 在 Android Open Source Project 導入的原始碼管理工具,  用來同步許多 git repository 的動作, 同時也協助 source code review server 溝通。
用 repo 來開始抓遠端的 source code 時, 必須先指定 URL 及想抓取的分支, 如以下的指令就是抓出 AOSP 上 tag 為 android-4.0.1_r1 的版本 :

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

在下 repo sync 之前, 可以先看看抓下來的 manifest.xml 檔案 :

$ cat .repo/manifest.xml  | head -9
<!--?xml version="1.0" encoding="UTF-8"?-->
<manifest>

 <remote  name="aosp" <="" p="">
           fetch=".." />
 <default <="" p="" revision="refs/tags/android-4.0.1_r1">
           remote="aosp"
           sync-j="4" />

很明顯, 剛剛所下的分支版號就紀錄於此, 此時我們再下一次 init, 改抓另個分支 :

$ repo init -b android-2.3.7_r1
.repo/manifests/: manifest switched android-4.0.1_r1...android-2.3.7_r1
.repo/manifests/: discarding 10 commits removed from upstream

再看一次 manifest.xml :

$ cat .repo/manifest.xml | head -9
<!--?xml version="1.0" encoding="UTF-8"?-->
<manifest>

  <remote  name="aosp" <="" p="">
           fetch=".." />
  <default <="" p="" revision="refs/tags/android-2.3.7_r1">
           remote="aosp"
           sync-j="4" />

的確紀錄的版本改變了, manifest.xml 上面所紀錄的分支名稱, 會用來當執行 repo sync 時, 把各個 git repository 照這分支抓下來。

$ repo sync bionic
Downloading bionic: 100% (3MB/3MB), done.
...
Unpacking objects: 100% (61/61), done.
From https://android.googlesource.com/platform/bionic
...
Fetching projects: 100% (1/1), done.

$ cd bionic/
$ git branch -a
* (no branch)
...
  remotes/m/android-2.3.7_r1 -> refs/tags/android-2.3.7_r1

此時抓下來的分支, 就是後面改設的 android-2.3.7_r1, 這時試著改切回 4.0.1_r1 的分支

$ repo init -b android-4.0.1_r1
.repo/manifests/: manifest switched android-2.3.7_r1...android-4.0.1_r1
.repo/manifests/: discarding 1 commits removed from upstream

$ repo sync bionic
Fetching projects: 100% (1/1), done.

$ cd bionic/
$ git branch -a
* (no branch)
...
  remotes/m/android-2.3.7_r1 -> refs/tags/android-2.3.7_r1
  remotes/m/android-4.0.1_r1 -> refs/tags/android-4.0.1_r1

可以看到有兩個跟遠端的依從關係, 理論上這裡紀錄了 local repository 跟 remote repository 分支版本的關係, 這裡的資訊會來 commit 檔案到遠端的時候, 選擇正確的 branch, 不過這裡我尚無法實驗釐清。

當我們單獨 git clone 一個 project 時, -b 亦會產生相同的效果


Thursday, December 01, 2011

Vibrator function support in Android

Android application connect to HAL by JNI interface, for vibrator, the JNI interface is defined very simple.


JNI: frameworks/base/services/jni/com_android_server_VibratorService.cpp


static jboolean vibratorExists(JNIEnv *env, jobject clazz)
{
    return vibrator_exists() > 0 ? JNI_TRUE : JNI_FALSE;
}


static void vibratorOn(JNIEnv *env, jobject clazz, jlong timeout_ms)
{
    // LOGI("vibratorOn\n");
    vibrator_on(timeout_ms);
}

static void vibratorOff(JNIEnv *env, jobject clazz)
{
    // LOGI("vibratorOff\n");
    vibrator_off();
}

static JNINativeMethod method_table[] = {
{ "vibratorExists", "()Z", (void*)vibratorExists },
{ "vibratorOn", "(J)V", (void*)vibratorOn },
{ "vibratorOff", "()V", (void*)vibratorOff }
};


vibratorOn, vibratorOff and vibratorExists just simple wrapper of vibrator_on, vibrator_off and vibrator_exists, which is provide by device maker, through HAL interface.

HAL: hardware/libhardware_legacy/vibrator/vibrator.c


#define THE_DEVICE "/sys/class/timed_output/vibrator/enable"


int vibrator_exists()
{
    int fd;


#ifdef QEMU_HARDWARE
    if (qemu_check()) {
        return 1;
    }
#endif


    fd = open(THE_DEVICE, O_RDWR);
    if(fd < 0)
        return 0;
    close(fd);
    return 1;
}



int vibrator_on(int timeout_ms)
{
    /* constant on, up to maximum allowed time */
    return sendit(timeout_ms);
}


int vibrator_off()
{
    return sendit(0);
}


HAL call into kernel space by sysfs, path at "/sys/class/timed_output/vibrator/enable"
It's a Android designed feature, a timed_output or timed_gpio device.

If you echo 10000 into this sysfs, then it will vibrate for ten seconds :


$ echo 10000 > /sys/class/timed_output/vibrator/enable 

If you cat it during the vibration, you will saw how many ms before it back to quiet :

$ cat /sys/class/timed_output/vibrator/enable
315


Inside kernel space, Android defined two new platform driver to be use for vibrator : timed_gpio and timed_output.

By grab HC kernel source that released by Acer/ASUS, found that they are using different of implementation.

Acer use a gpio pin, config with a timed_gpio driver, hook up with platform_device driver, and also to timed_output driver to provide vibrator interface from sysfs.

ASUS use an IC max1749, directly register a timed_output interface to provide vibrator interface from sysfs.

PS. Beside kernel source, above source code is trace from AOSP 4.0.1.

Thursday, March 03, 2011

Android-x86 ginerbread build failed

Same as below :

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

Inside fedora14, update "make", then problem solved.
So seems newer version of make had released.

Friday, January 21, 2011

pidof script of mac OSX

Found at http://hints.macworld.com/article.php?story=20030618114543169

#!/bin/sh
ps axc|awk "{if (\$5==\"$1\") print \$1}";

Saturday, January 15, 2011

Interface builder

Can't connect outlet from rounded button to file's owner.

Found same issues :
http://stackoverflow.com/questions/1746281/cant-connect-iboutlet-in-interface-builder


Solved by read class file again, wired !

Friday, January 14, 2011

SSH Over USB

From iPhone Development Wiki

SSH over USB using usbmuxd Tested on OS X. Works on Windows too, according to the README
  • Get usbmuxd source package and unpack
  • Go into folder python-client
  • chmod +x tcprelay.py
  • Run ./tcprelay.py -t 22:2222
Now you can log into your device via ssh root@localhost -p 2222
The -t switch tells tcprelay to run threaded and allow more than one ssh over the same port.
See ./tcprelay.py --help for further options.

Log from : http://iphonedevwiki.net/index.php/SSH_Over_USB

Wednesday, December 29, 2010

How to sync cydia repository by ubuntu

1. apt-get install apt-mirror
2. Add cydia repository into /etc/apt/mirror.list
3. Change deb to deb-iphoneos-arm so that different arch could be loaded
ex.
original :
deb http://example.com/debian stable main contrib non-free
modified :
deb-iphoneos-arm http://example.com/debian stable main contrib non-free

4. Modify /usr/bin/apt-mirror to accept .bz2 only ( it seems that lots cydia repo did not provide .gz version of packages file )


5. run apt-mirror

After all done, mirrored repo could be found at /var/spool/apt-mirror/mirror
If anything failed during apt-mirror running, be sure to rm /var/spool/apt-mirror/var/apt-mirror.lock before re-run

Monday, June 21, 2010

Assign user name, password in smbclient



smbclient -L //192.168.x.x -o --user=USER%PASS
where USER is the user name, PASS is the password

Tuesday, April 06, 2010

Init program of Android

Android did not use shell script to do it's init, instead, it maintain a C program to do so.

Source of this init program is located at system/core/init folder of android platform source.
By default, it will load /init.rc to parse, and do init job.
Tracing into system/core/init/init.c, you will see it's him to print out " A N D R O I D" in the start up menu ( or by display a embedded image if in graphic mode )

init.rc is very similar with normal linux boot script, just as it's interpret and execute by by /init

We could look into /init.rc, then we could know what service/module is necessary for bring up a Android OS.
 Below is grab from android sdk emulator image :


on init

sysclktz 0

loglevel 3

# setup the global environment
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
export BOOTCLASSPATH /system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar

# Backward compatibility
symlink system/etc /etc
symlink system/lib /lib

# create mountpoints and mount tmpfs on sqlite_stmt_journals and debugfs on d
mkdir /d
chown system system /sdcard
chmod 0777 /sdcard
mkdir /data 0771 system system
mkdir /cache 0770 system cache
mkdir /sqlite_stmt_journals 01777 root root
mount tmpfs tmpfs /sqlite_stmt_journals size=4m
mount debugfs debugfs /d

mount rootfs rootfs / ro remount

write /proc/sys/kernel/panic_on_oops 1
write /proc/sys/kernel/hung_task_timeout_secs 0
write /proc/cpu/alignment 4
write /proc/sys/kernel/sched_latency_ns 10000000
write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000

# mount mtd partitions
# TODO: this should be mounted by fs vol id (i.e. /dev/block-by-volid/system),
# once init gets that functionality.
# mount ext3 /dev/block/sda6 /system
# mount ext3 /dev/block/sda6 /system ro remount

# We chown/chmod /data again so because mount is run as root + defaults
# mount ext3 /dev/block/sda8 /data
chown system system /data
chmod 0771 /data

# Same reason as /data above
# mount ext3 /dev/block/sda5 /cache
chown system cache /cache
chmod 0770 /cache

# This may have been created by the recovery system with odd permissions
chown system system /cache/recovery
chmod 0770 /cache/recovery

# create basic filesystem structure
mkdir /data/misc 01771 system misc
mkdir /data/misc/hcid 0770 bluetooth bluetooth
mkdir /data/local 0771 shell shell
mkdir /data/local/tmp 0771 shell shell
mkdir /data/data 0771 system system
mkdir /data/app-private 0771 system system
mkdir /data/app 0771 system system
mkdir /data/property 0700 root root

mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets 0770 wifi wifi
mkdir /data/system/wpa_supplicant 0770 wifi wifi
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp

# create dalvik-cache and double-check the perms
mkdir /data/dalvik-cache 0771 system system
chown system system /data/dalvik-cache
chmod 0771 /data/dalvik-cache

# create the lost+found directories, so as to enforce our permissions
mkdir /data/lost+found 0770
mkdir /cache/lost+found 0770

# double check the perms, in case lost+found already exists, and set owner
chown root root /data/lost+found
chmod 0770 /data/lost+found
chown root root /cache/lost+found
chmod 0770 /cache/lost+found


### Load some modules

on boot
# basic network init
ifup lo
hostname localhost
domainname localdomain

# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit 13 40 40

# Define the oom_adj values for the classes of processes that can be
# killed by the kernel. These are used in ActivityManagerService.
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.SECONDARY_SERVER_ADJ 2
setprop ro.BACKUP_APP_ADJ 2
setprop ro.HOME_APP_ADJ 4
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.CONTENT_PROVIDER_ADJ 14
setprop ro.EMPTY_APP_ADJ 15

# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM 2048
setprop ro.SECONDARY_SERVER_MEM 4096
setprop ro.BACKUP_APP_MEM 4096
setprop ro.HOME_APP_MEM 4096
setprop ro.HIDDEN_APP_MEM 8192
setprop ro.CONTENT_PROVIDER_MEM 8704
setprop ro.EMPTY_APP_MEM 16384

# Write value must be consistent with the above properties.
write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15

write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,4096,8192,8704,16384

# Set init its forked children's oom_adj.
write /proc/1/oom_adj -16

# Permissions for System Server and daemons.
chown radio system /sys/android_power/state
chown radio system /sys/android_power/request_state
chown radio system /sys/android_power/acquire_full_wake_lock
chown radio system /sys/android_power/acquire_partial_wake_lock
chown radio system /sys/android_power/release_wake_lock
chown radio system /sys/power/state
chown radio system /sys/power/wake_lock
chown radio system /sys/power/wake_unlock
chmod 0660 /sys/power/state
chmod 0660 /sys/power/wake_lock
chmod 0660 /sys/power/wake_unlock
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/class/leds/keyboard-backlight/brightness
chown system system /sys/class/leds/lcd-backlight/brightness
chown system system /sys/class/leds/button-backlight/brightness
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/module/sco/parameters/disable_esco
chown system system /sys/kernel/ipv4/tcp_wmem_min
chown system system /sys/kernel/ipv4/tcp_wmem_def
chown system system /sys/kernel/ipv4/tcp_wmem_max
chown system system /sys/kernel/ipv4/tcp_rmem_min
chown system system /sys/kernel/ipv4/tcp_rmem_def
chown system system /sys/kernel/ipv4/tcp_rmem_max
chown root radio /proc/cmdline

# Define TCP buffer sizes for various networks
# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680

setprop EXTERNAL_STORAGE_STATE unmounted

class_start default

## Daemon processes to be run by init.
##
service console /system/bin/sh
console

# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd

on property:persist.service.adb.enable=1
start adbd

on property:persist.service.adb.enable=0
stop adbd

service servicemanager /system/bin/servicemanager
user system
critical
onrestart restart zygote
onrestart restart media

service vold /system/bin/vold
socket vold stream 0660 root mount

#service mountd /system/bin/mountd
# socket mountd stream 0660 root mount

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on

service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin

service bootanim /system/bin/bootanimation
user graphics
group graphics
disabled
oneshot

service installd /system/bin/installd
socket installd stream 600 system system

service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
group system wifi
disabled
oneshot

service dbus /system/bin/dbus-daemon --system --nofork
socket dbus stream 660 bluetooth bluetooth
user bluetooth
group bluetooth net_bt_admin

service hcid /system/bin/hcid -d -s -n -f /etc/bluez/hcid.conf
socket bluetooth stream 660 bluetooth bluetooth
socket dbus_bluetooth stream 660 bluetooth bluetooth
group bluetooth net_bt_admin misc
disabled

service hfag /system/bin/sdptool add --channel=10 HFAG
user bluetooth
group bluetooth net_bt_admin misc
disabled
oneshot

service hsag /system/bin/sdptool add --channel=11 HSAG
user bluetooth
group bluetooth net_bt_admin misc
disabled
oneshot

service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -d /dev/ttyUSB1
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc

service ppp /system/bin/pppd call gprs
user root
group system radio
disabled
oneshot

#Please do not change anything below this line. If you want to add new service, add it above this line
#REMOVE FROM HERE
service dhcpcd /system/bin/dhcpcd wlan0
group system dhcp
disabled
oneshot
Files inside android emulator :

neomac2:images neo$ pwd
/Users/neo/Downloads/android/android-sdk-mac_86/platforms/android-2.1/images
neomac2:images neo$ file *
NOTICE.txt:   ISO-8859 English text
kernel-qemu:  data
ramdisk.img:  gzip compressed data, from Unix
system.img:   VMS Alpha executable
userdata.img: VMS Alpha executable
neomac2:images neo$

system.img, userdata.img is actually yaffs image files, could use unyaffs to unpack :

http://code.google.com/p/unyaffs/downloads/list

Sunday, April 04, 2010

How to build squashfs-tools under mac osx

http://zettelchen.blogspot.com/2009/04/build-squashfs-tools-for-mac-os-x.html

1. remove FNM_EXTMATCH, it does not exist at mac
2. include