2010年10月2日 星期六

[教學] ZP-600T補完攻略-包一個install.img

====前置作業(準備舊版mksquashfs)
1)首先請先抓取3.0版的mksquashfs tool (或3.4版,Ubuntu內建的4.0會包出無法開機的image!!!)(Link: https://sourceforge.net/projects/squashfs/files/)
抓到squashfs3.0.tar.gz



2)解壓縮
#tar zxvf squashfs3.0.tar.gz

3)make(沒有make的人請先安裝Ubuntu底下的編譯用套件"sudo apt-get install build-essential")
#cd squashfs3.0/squashfs-tools
~/squashfs3.0/squashfs-tools#make

4)完成之後會出現mksquashfs和unsquashfs,稍後在使用時請記得他們的路徑(或是你要export到系統環境也可)


====開始準備打包
從官網下載來ZP-600T的韌體,解壓縮之後得到install.img

1)解開(其實他是個壓縮檔偽裝的)
# mkdir install
# cd install
~/install# tar xvf ../install.img

2)瀏覽一下會得到如下結果
~/install# ls -l
-rwxr-xr-x 1 XXX XXX  143300 2010-08-31 13:41 arial.ttf
-rwxr-xr-x 1 XXX XXX 1773344 2010-08-31 13:41 audio_firmware.install.bin
-rwxr-xr-x 1 XXX XXX    3114 2010-08-31 13:42 configuration.xml
-rwxr-xr-x 1 XXX XXX   43400 2010-08-31 13:41 flash_erase
-rwxr-xr-x 1 XXX XXX 2118480 2010-08-31 13:41 install_a
-rwxr-xr-x 1 XXX XXX  163948 2010-08-31 13:41 mkfs.jffs2
-rwxr-xr-x 1 XXX XXX   56792 2010-08-31 13:41 mkyaffs2image
-rwxr-xr-x 1 XXX XXX   61580 2010-08-31 13:41 nandwrite
drwxr-xr-x 2 XXX XXX    4096 2010-09-30 09:46 package1
drwxr-xr-x 2 XXX XXX    4096 2010-09-30 09:46 package2
-rwxr-xr-x 1 XXX XXX 1623760 2010-08-31 13:41 video_firmware.install.bin

3)請把package2資料夾砍掉
~/install# rm -rf ./package2

4)進入package1並且查看檔案列表
~/install# cd package1
~/install/package1# ls -l
-rwxr-xr-x 1 XXX XXX   760726 2010-08-31 13:42 bluecore.audio.lzma
-rwxr-xr-x 1 XXX XXX   676128 2010-08-31 13:42 bluecore.video.lzma
-rwx------ 1 XXX XXX 11685888 2010-09-30 09:46 squashfs1.img
-rwxr-xr-x 1 XXX XXX    14196 2010-09-29 17:14 usr.local.etc.tar.bz2
-rwxr-xr-x 1 XXX XXX  1026399 2010-08-31 13:42 vmlinux.develop.avhdd.mars.bin.lzma

5)這邊要用到剛才準備好的squashfs tool了
~/install/package1# unsquashfs squashfs1.img

6)解壓縮完畢後會出現squashfs-root資料夾,這時候我們只需要進去開一個opt資料夾就行了
~/install/package1# cd squashfs-root
~/install/package1/squashfs-root# mkdir opt
~/install/package1/squashfs-root# mkdir root
~/install/package1/squashfs-root# ls
bin  dev  etc  lib  linuxrc  mnt  opt  proc  root  sbin  sys  Test.fat  tmp  tmp_orig  usr  var

7)重新打包(先把舊的squashfs1.img砍掉)
~/install/package1/squashfs-root# cd ..
~/install/package1# rm -f squashfs1.img
~/install/package1# mksquashfs squashfs-root squashfs1.img -b 65536

8)完成之後也把squashfs-root資料夾砍掉
~/install/package1# rm -rf squashfs-root

9)接著加上開機的script search功能,把它包在usr.local.etc.tar.bz2裡面
~/install/package1# mkdir usr
~/install/package1# cd usr
~/install/package1/usr# tar jxvf ../usr.local.etc.tar.bz2

10)編輯rcS檔案(看是要用vi還是其他編輯器皆可)
在最前面加上:
is_mounted()
{
        /bin/mount | /bin/grep $1
        return $?
}
run_custom_services()
{
i=0
CHECK_CNT=$#
while [ $i != 20 ]; do
        echo "Check round $i" >> /tmp/run/rcS.log
        for CUSTOM_ROOT in $*; do
                echo "Check $CUSTOM_ROOT" >> /tmp/run/rcS.log
                CHECKED_DIR=/tmp/run/checked/$CUSTOM_ROOT
                if [ -d "$CHECKED_DIR" ]; then
                        continue
                fi


                is_mounted $CUSTOM_ROOT
                if [ $? = 0 ]; then
                        /bin/mkdir -p "$CHECKED_DIR"
                        if [ -x ${CUSTOM_ROOT}/services.sh ]; then
                                echo "Run ${CUSTOM_ROOT}/services.sh in $i seconds." >> /tmp/run/rcS.log
                                ${CUSTOM_ROOT}/services.sh
                                return 0
                        fi
                        CHECK_CNT=$(($CHECK_CNT-1))
                        if [ $CHECK_CNT = 0 ]; then
                                return 0
                        fi
                fi
        done
        sleep 1
        i=$(($i+1))
done
}

在最後面加上:
echo "In usr.local.etc" >> /tmp/run/rcS.log
run_custom_services /tmp/hdd/root /tmp/hdd/volumes/HDD1
run_custom_services /tmp/usbmounts/sda1 /tmp/usbmounts/sdb1 /tmp/usbmounts/sdc1 /tmp/usbmounts/sdd1

11)重新打包,砍掉舊的壓縮檔
~/install/package1/usr# rm -f ../usr.local.etc.tar.bz2
~/install/package1/usr# tar jcvf ../usr.local.etc.tar.bz2 *
~/install/package1/usr# cd ..
~/install/package1# rm -rf usr

12)最終封裝
~/install/package1# cd ..
~/install# tar cvf ../install.img *

接下來就試試看更新囉~祈禱吧!XD

參考資料來源:

http://goo.gl/Z79z

3 則留言:

  1. HI, 一定要謝謝你的分享.

    有些困難處, 請指教你.

    我用的是ubutun10.10, 進行到你的第3步出現error1.

    說找不到elib.h 不知道怎下去了?

    事源我用ubuntu的"軟件中心"內的squashfs-tools, 壓縮成的fw不能開機.(已用了-b 65536) 網上有說都用squashfs3.0才可以. 就想安裝3.0了.

    我在懷疑是不是linux ubuntu的問題, 可是看你也是用ubuntu呀.

    十分謝謝

    回覆刪除
  2. 從mobile01追隨您到這兒來了, 感謝大大的分享~~

    回覆刪除
  3. 那個...請不要用Ubuntu內建的squashfs-tools,
    已有網友測試會有問題!(Ubuntu好像是4.0版的)
    請去下載3.0版原始碼,回來自己build出來使用! :)

    回覆刪除