2010年5月5日 星期三

GIT Server 架設 (使用gitosis)

參考資料
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way

http://ao2.it/wiki/How_to_setup_a_GIT_server_with_gitosis_and_gitweb

http://blog.agdunn.net/?p=277

以參考資料其實很容易就能把git server搞定.
這邊就只紀錄一下流程

< Server Side >

git clone git://eagain.net/gitosis.git

cd gitosis/

sudo apt-get install python-setuptools
sudo python setup.py install

sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git

請由 Local Side 產生KEY id_rsa.pub 並存放到 Server Side

ssh-keygen -t rsa

會在$HOME/.ssh/ 產生 id_rsa  id_rsa.pub

複製到Server Side /tmp

sudo -H -u git gitosis-init < /tmp/id_rsa.pub
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

< Local Side >

gitosis運用相當巧妙的方式管理git server.
gitosis 本身就是git server中的project.所以必須先從local side取出gitosis的副本.
透過編輯這個副本並上傳來管理所有的user & project.

git clone git@192.168.168.70:gitosis-admin.git

cd gitosis-admin

編輯gitosis.conf

增加一個新的Repository,格式如下

[group $REPOSITORY]
writable = $PROJECT
members = $USER

Commit new repository

git commit -a -m "New Repository"

git push

結果有Warning如下

warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches (default)
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 386 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.168.70:gitosis-admin.git
   1cfd916..4f2becf  master -> master

我找到的解決方式是

git config --add push.default current

到這邊基礎的設定已經完成,接著要實際將project同步到git server

首先到project source code目錄下

cd S3C6410

git init
git remote add origin git@192.168.168.70:s3c6410.git

將希望的目錄加入

git add android_kernel_smdk6410

git commit

實際將資料上傳

git push origin master:refs/heads/master

會看到以下的message

gigijoe@gigijoe-laptop:~/S3C6410$ git push origin master:refs/heads/master
Counting objects: 22134, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (21762/21762), done.
Writing objects: 100% (22134/22134), 233.26 MiB | 2374 KiB/s, done.
Total 22134 (delta 2456), reused 0 (delta 0)
To git@192.168.168.70:s3c6410.git
 * [new branch]      master -> master
gigijoe@gigijoe-laptop:~/S3C6410$

< Local Side >

新增user 的方式
進入gitosis-admin目錄中編輯
gitosis.conf.加入$USER1

[group $REPOSITORY]
writable = $PROJECT
members = $USER $OTHER_USER

接著由user產生key並將id_rsa.pub並重新命名擺放到
keydir/$USER1.pub

把檔案加入gitosis
git add keydir/$USER1.pub

更新並上傳
git commit
git push

之後就可以用 git clone 的方式取得 project

< Log >

gigijoe@gigijoe-laptop:~/gitosis-admin$ ls keydir/
gigijoe@gigijoe-desktop.pub  gigijoe@gigijoe-laptop.pub
gigijoe@gigijoe-laptop:~/gitosis-admin$ git add keydir/gigijoe@gigijoe-desktop.pub
gigijoe@gigijoe-laptop:~/gitosis-admin$ git commit
[master 82a65c0] Add gigijoe@gigijoe-desktop
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 keydir/gigijoe@gigijoe-desktop.pub
gigijoe@gigijoe-laptop:~/gitosis-admin$ git push
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 711 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@192.168.168.70:gitosis-admin.git
   d45919f..82a65c0  HEAD -> master



2010年4月15日 星期四

Android with BusyBox

Android 的shell真是鳥到不行.功能超陽春.

現在教各位安裝busybox到Android的環境中來解決這個問題

1.Download BusyBox -> 這個不用偶教吧 :)
2.
  cd busybox-1.15.1
  make menuconfig

  設定BusyBox為Static link
  BusyBox Settings -> Build Options -> Build BusyBox as a static binary (no shared libs) 

  設定安裝路徑到Android root file system
  BusyBox Settings -> Installation Options -> BusyBox Installation Prefix

  ${HOME}/S3C6410/android_cupcake_smdk6410/opensource_cupcake_0424_opencore203/out/target/product/smdk6410/system/busybox

  Config functions you need...

  make
  make install
3.Go to Android root file system
 
 cd ${HOME}/S3C6410/android_cupcake_smdk6410/opensource_cupcake_0424_opencore203/out/target/product/smdk6410/root

 修改 init.rc 使busybox正常運作

 #    export PATH /sbin:/system/sbin:/system/bin:/system/xbin
export PATH /bin:/system/busybox/sbin:/system/busybox/usr/bin:/system/busybox/usr/sbin:/sbin:/system/sbin:/system/bin:/system/xbin

 使用busybox提供的shell

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

4.編輯 /etc/inittab

cd ${HOME}/S3C6410/android_cupcake_smdk6410/opensource_cupcake_0424_opencore203/out/target/product/smdk6410/

產生 system/etc/inittab 內容如下

::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:/system/busybox/bin/sh

5.編輯 /etc/init.d/rcS

mkdir system/etc/init.d

產生 system/etc/init.d/rcS 內容如下

#!/bin/sh
echo "Processing etc/init.d/rc.S"

echo "Starting mdevd"

echo /system/busybox/sbin/mdev > /proc/sys/kernel/hotplug
/system/busybox/sbin/mdev -s

/system/busybox/sbin/ifconfig eth0 192.168.168.209 netmask 255.255.255.0

/system/busybox/usr/sbin/inetd
/system/busybox/usr/sbin/telnetd -l /bin/login

echo "Start Android ..."
 
/init

設定權限為可執行

chmod 755 system/etc/init.d/rcS

5.1 Create device node

sudo mknod root/dev/tty1 c 4 1
sudo mknod root/dev/tty2 c 4 2
sudo mknod root/dev/tty3 c 4 3
sudo mknod root/dev/tty4 c 4 4
sudo mknod root/dev/tty5 c 4 5

sudo mknod root/dev/null c 1 3

sudo mknod root/dev/ttySAC0 c 204 64
cd root/dev
ln -s ttySAC0 console
cd ../..

5.2 Symbolic link

為了讓busybox啟動時找的到 /etc 目錄

cd root
ln -s system/etc etc
cd ..

為了讓busybox啟動時找的到 /bin 目錄

cd root
ln -s system/busybox/bin bin
cd ..

建立linuxrc

cd root
ln -s system/busybox/linuxrc linuxrc
cd ..

6.busybox ftpd

編輯 system/etc/inetd.conf

21 stream tcp nowait root ftpd ftpd -w -v /

產生 system/etc/passwd
         system/etc/group
         system/etc/services
         system/etc/resolv.conf

7.複製system目錄到root file system

8.重新打包Android root file system放到target就可以了

9.kernel param fix

修改 init=/init 為 init=/linuxrc
使得busybox會先被系統執行

10.附記

Android support busybox有點小複雜因為Android本身就有shell.
目前這樣的作法不會覆蓋到Android binary code.是比較好的作法.
system boot會先run busybox,大致流程是

/linuxrc -> /etc/inittab -> /etc/init.d/rcS -> Run ash -> Run /init to start Android -> /init.rc

透過init.rc設定PATH環境變數讓busybox command為優先.




2010年4月14日 星期三

OMAP3530 USB Wifi - RALINK RT73

1.Download 2009_0713_RT73_Linux_STA_Drv1.1.0.3 from ralink web site
2.Build driver.

cp Makefile.6 Makefile
Patch Makefile (Fix LINUX_SRC as yours)

--- Makefile.6    2009-07-13 02:32:22.000000000 +0800
+++ Makefile    2010-04-14 19:41:21.000000000 +0800
@@ -2,8 +2,9 @@
 #    Module Name: Makefile
 #    Abstract: Makefile for rt73 linux driver on kernel series 2.6
 ######################################################################
-PLATFORM=PC
+#PLATFORM=PC
 #PLATFORM=CMPC
+PLATFORM=BeagleBoard
 
 #Enable for wpa_supplicant's spcific driver "driver_ralink.c", default enabled.
 HAS_RALINK_WPA_SUPPLICANT_SUPPORT=y
@@ -40,6 +41,9 @@
 ifeq ($(PLATFORM),CMPC)
 LINUX_SRC = /home/fonchi/vendor/kernel-default-2.6.21/linux-2.6.21
 endif
+ifeq ($(PLATFORM),BeagleBoard)
+LINUX_SRC = ${HOME}/BeagleBoard/kernel
+endif
 
 EXTRA_CFLAGS += -I$(LINUX_SRC)/include
 
3.make all
4.Copy rt73.ko to root file system /etc/Wireless/RT73STA/rt73.ko
5.Booting target
6.Get it work

# insmod /etc/Wireless/RT73STA/rt73.ko
usbcore: registered new interface driver rt73
#
# usb 1-2: new high speed USB device using ehci-omap and address 2
usb 1-2: New USB device found, idVendor=148f, idProduct=2573
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-2: Product: 802.11 bg WLAN
usb 1-2: Manufacturer: Ralink
usb 1-2: configuration #1 chosen from 1 choice
idVendor = 0x148f, idProduct = 0x2573
rausb0 (rt73): not using net_device_ops yet

# iwconfig
lo        no wireless extensions.

usb0      no wireless extensions.

rausb0    RT73 WLAN  ESSID:off/any  Nickname:""
          Mode:Auto  Frequency=2.412 GHz 
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=0/100  Signal level:-121 dBm  Noise level:-111 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

# iwpriv
lo        no private ioctls.

usb0      no private ioctls.

rausb0    Available private ioctls :
          set              (8BE2) : set 1024 char  & get   0     
          show             (8BF3) : set 1024 char  & get   0     
          stat             (8BE9) : set 1024 char  & get 1024 char
          get_site_survey  (8BED) : set 1024 char  & get 1024 char
          get_RaAP_Cfg     (8BEF) : set 1024 char  & get   0     
          auth             (8BE7) : set   1 int   & get   0     
          enc              (8BE8) : set   1 int   & get   0     
          wpapsk           (8BEA) : set  64 char  & get   0     
          psm              (8BEB) : set   1 int   & get   0     

# ifconfig rausb0 up
=> usb_rtusb_open
# iwlist rausb0 scan
rausb0    Scan completed :
          Cell 01 - Address: 00:24:01:41:CA:97
                    Mode:Managed
                    ESSID:"Bendi"
                    Channel:1
                    Encryption key:on
                    Bit Rates:0 kb/s
          Cell 02 - Address: 00:90:CC:DD:6E:AC
                    Mode:Managed
                    ESSID:"3F_S/W_AP"
                    Channel:4
                    Encryption key:on
                    Bit Rates:0 kb/s
          Cell 03 - Address: 00:19:5B:25:7E:BE
                    Mode:Managed
                    ESSID:"26962315"
                    Channel:6
                    Encryption key:on
                    Bit Rates:4 Mb/s
          Cell 04 - Address: 00:26:5A:40:C6:EE
                    Mode:Managed
                    ESSID:"dlink"
                    Channel:11
                    Encryption key:on
                    Bit Rates:4 Mb/s

# iwconfig rausb0 essid 3F_S/W_AP
# iwconfig rausb0 mode managed
# iwpriv rausb0 set AuthMode=WPAPSK
# iwpriv rausb0 set EncrypType=TKIP
# MlmeAssocReqAction(): WPA/WPAPSK, Fill the ReqVarIEs with CipherTmp!

# MlmeAssocReqAction(): WPA/WPAPSK, Fill the ReqVarIEs with CipherTmp!
iwpriv rausb0 set WPAPSK=MlmeAssocReqAction(): WPA/WPAPSK, Fill the ReqVarIEs with CipherTmp!
MlmeAssocReqAction(): WPA/WPAPSK, Fill the ReqVarIEs with CipherTmp!
0289131323
# MlmeAssocReqAction(): WPA/WPAPSK, Fill the ReqVarIEs with CipherTmp!

7.USB EHCI with USB hub Problem...

hub 1-0:1.0: port 2 disabled by hub (EMI?), re-enabling...
usb 1-2: USB disconnect, address 5
usb 1-2.1: USB disconnect, address 6
usb 1-2.1.3: USB disconnect, address 8
uvcvideo: Failed to resubmit video URB (-19).
uvcvideo: Failed to resubmit video URB (-19).
uvcvideo: Failed to resubmit video URB (-19).
uvcvideo: Failed to resubmit video URB (-19).
uvcvideo: Failed to resubmit video URB (-19).
unregister_netdev()
usb 1-2.3: USB disconnect, address 7
ehci-omap ehci-omap.0: force halt; handhake d8064814 0000c000 00000000 -> -110

http://markmail.org/message/og4ts5gcn7if4v4l#query:disabled%20by%20hub%20(EMI%3F)%20beagleboard+page:1+mid:xl2txfnz7gvar65u+state:results

確定是H/W issue. BeagleBoard C2/C3都中


2010年3月31日 星期三

Video codec comparing - H.264 vs Theora

轉載來源 http://blog.gslin.org/archives/2010/02/27/2223/

http://www.theora.org/
Theora is a free and open video compression format
劈頭第一句偶看了就很爽

H.264專利擁有者
http://www.mpegla.com/main/programs/AVC/Pages/Licensors.aspx

H.264具有授權者
http://www.mpegla.com/main/programs/AVC/Pages/Licensees.aspx

H.264目前在品質/頻寬上還是最佳的.
Theroa雖然比較差但在low bitrate時畫面品質只略遜H.264.
而且encode/decode所需的cpu resource是明顯比較少的.
Theroa蠻適合streaming video的

2010年3月24日 星期三

[ Android ] 基礎知識及工具使用

0.Android基礎
http://zh.wikipedia.org/wiki/Android

由技術面來看,Android以linux kernel作為OS,但卻需要加上google對kernel所作的修改才能運作.

相關的文章

Android,开源还是封闭?

关于 Linux “踢出” Android

1.Android Source Code

取得repo (請參考google文件)

取得Android source code
    mkdir mydroid
    cd mydroid
    repo init -u git://android.git.kernel.org/platform/manifest.git
    repo sync

切換到分支 eclair

    repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair
    repo sync

取得Android linux kernel source

git clone git://android.git.kernel.org/kernel/common.git

取得分支android-goldfish-2.6.27
cd common
git checkout origin/android-goldfish-2.6.27 -b goldfish

列出本地所有分支
git branch

附錄

http://embeddeder.spaces.live.com/blog/

2.Ubuntu 9.10 Setup

sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libncurses5-dev
sudo apt-get install libx11-dev


不要用JDK-1.6,編譯Android會有問題
但JDK-1.5較早期的版本無法安裝,因為libstdc++版本的關係
http://ubuntuforums.org/showthread.php?t=1289730

安裝 jdk-1_5_0_21-linux-i586.bin http://java.sun.com/javase/downloads/5u21/jdk

sudo mv jdk1.5.0_21 /usr/local
sudo ln -s /usr/local/jdk1.5.0_21 /usr/local/jdk

編輯${HOME}/.profile

export JAVA_HOME=/usr/local/jdk1.5.0_21
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

第二種方式,安裝ubuntu 9.04的java5
http://blog.enea.com/Blog/bid/32050/Ubuntu-9-10-Java-5-and-the-Android-Open-Source-Project

sudo gedit /etc/apt/sources.list

deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

sudo apt-get update

sudo apt-get install sun-java5-jdk

sudo update-alternatives --config java

編輯${HOME}/.profile

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

安裝gcc-4.3 & g++4.3

sudo apt-get install gcc-4.3
sudo apt-get install g+-4.3

sudo cd /usr/bin
sudo rm -rf gcc
sudo ln -s gcc-4.3 gcc
sudo rm -rf g++
sudo ln -s g++-4.3 g++

安裝 zlib dev

sudo apt-get install zlib1g-dev

修改Android

編輯${ANDROID}/build/tools/findleaves.sh:89

find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |

改成

find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |


2010年1月21日 星期四

Cross Compile dbus-glib for ARM

Source : dbus-glib-0.82

cd dbus-glib-0.82

mkdir x86
cd x86

../configure

產生的Makefile會使用builddir這個變數但compile時卻沒有定義,因此用以下方式make

builddir=$PWD/dbus make

OK 成功

cd ..

CFLAGS=-I/home/gigijoe/OMAP3530/MSN/rootfs/include LDFLAGS=-L/home/gigijoe/OMAP3530/MSN/rootfs/lib USE_ARCH=32 NM=nm PKG_CONFIG_PATH=/home/gigijoe/OMAP3530/MSN/rootfs/lib/pkgconfig CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ AR=arm-none-linux-gnueabi-ar RANLIB=arm-none-linux-gnueabi-ranlib ./configure --host=arm-linux --target=arm-linux --prefix=/home/gigijoe/OMAP3530/MSN/rootfs --with-xml=expat --with-dbus-binding-tool=$PWD/x86/dbus/.libs/dbus-binding-tool --cache-file=arm.cache

...

checking for library containing socket... none required
checking whether socklen_t is defined... yes
checking abstract socket namespace... configure: error: cannot run test program while cross compiling
See `config.log' for more details.

錯誤發生了

強制將abstract socket namespace定義為yes並寫入cach file

echo ac_cv_have_abstract_sockets=yes > arm.cache

再試一次
OK ,成功

builddir=$PWD/dbus make

...

make[2]: Entering directory `/home/gigijoe/OMAP3530/MSN/dbus-glib-0.82/tools'
DBUS_TOP_BUILDDIR=.. /home/gigijoe/OMAP3530/MSN/rootfs/bin/dbus-daemon --introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
/home/gigijoe/OMAP3530/MSN/dbus-glib-0.82/x86/dbus/.libs/dbus-binding-tool --mode=glib-client --prefix=dbus_bus --output=dbus-glib-bindings.h dbus-bus-introspect.xml
/home/gigijoe/OMAP3530/MSN/dbus-glib-0.82/x86/dbus/.libs/dbus-binding-tool: symbol lookup error: /home/gigijoe/OMAP3530/MSN/dbus-glib-0.82/x86/dbus/.libs/dbus-binding-tool: undefined symbol: dbus_g_signature_get_g_type
make[2]: *** [dbus-glib-bindings.h] Error 127
make[2]: Leaving directory `/home/gigijoe/OMAP3530/MSN/dbus-glib-0.82/tools'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/gigijoe/OMAP3530/MSN/dbus-glib-0.82'
make: *** [all] Error 2

不需要dbus tools for ARM,修改Makefile

#SUBDIRS = dbus tools test doc
SUBDIRS = dbus test doc

再make一次
OK,成功了

builddir=$PWD/dbus make install



2010年1月19日 星期二

Cross Compile Mozilla NSS for ARM

Source : nss-3.12.5-with-nspr-4.8.2
Path : /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2

1.Build for X86 first

make build_coreconf

cd ../../nsprpub

./configure --with-dist-prefix='/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/../../dist/Linux2.6_x86_glibc_PTH_DBG.OBJ' --with-dist-includedir='/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/../../dist/Linux2.6_x86_glibc_PTH_DBG.OBJ/include' --cache-file=/dev/null

make

cd ../security/nss/

make build_dbm

make

2.Build for ARM

Build arm

Modify ../coreconf/arch.mk

Set

OS_TEST := arm

Modify ../coreconf/Linux.mk

CC                      = arm-none-linux-gnueabi-gcc
CCC                     = arm-none-linux-gnueabi-g++
RANLIB                  = arm-none-linux-gnueabi-ranlib

cd ../../nsprpub

CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar RANLIB=arm-none-linux-gnueabi-ranlib ./configure --target=arm-linux --with-dist-prefix='/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ' --with-dist-includedir='/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/include' --cache-file=/dev/null

make

cd ../security/nss/

make build_dbm

make

Then there's error

make[3]: Leaving directory `/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/mangle'
cd Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ ; sh /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/./sign.sh /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ \
    /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ Linux \
    /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib/libsoftokn3.so
/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/shlibsign -v -i /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib/libsoftokn3.so
/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/shlibsign: 1: Syntax error: word unexpected (expecting ")")
make[2]: *** [../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib/libsoftokn3.chk] Error 2
make[2]: Leaving directory `/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign'
make[1]: *** [libs] Error 2
make[1]: Leaving directory `/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd'
make: *** [libs] Error 2

很明顯是無法執行shlibsign,把X86 build的binary拿來取代就行

cd cmd/shlibsign/
cp Linux2.6_x86_glibc_PTH_DBG.OBJ/shlibsign Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/
cd ../..

繼續
make

make[3]: Leaving directory `/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/mangle'
cd Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ ; sh /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/./sign.sh /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ \
    /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ Linux \
    /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib/libsoftokn3.so
/home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/shlibsign -v -i /home/gigijoe/OMAP3530/MSN/nss-3.12.5-with-nspr-4.8.2/mozilla/security/nss/cmd/shlibsign/../../../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib/libsoftokn3.so
shlibsign: shlibsign.c:772: main: Assertion `lib != ((void *)0)' failed.
Aborted

應該也是相同的問題,換成X86 build的library

cd ../../dist/Linux2.6_arm_arm-none-linux-gnueabi-gcc_glibc_PTH_DBG.OBJ/lib
cp -a ../../Linux2.6_x86_glibc_PTH_DBG.OBJ/lib/libsoftokn* .
cd ../../../security/nss/

make

完成囉