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 |
HI, 一定要謝謝你的分享.
回覆刪除有些困難處, 請指教你.
我用的是ubutun10.10, 進行到你的第3步出現error1.
說找不到elib.h 不知道怎下去了?
事源我用ubuntu的"軟件中心"內的squashfs-tools, 壓縮成的fw不能開機.(已用了-b 65536) 網上有說都用squashfs3.0才可以. 就想安裝3.0了.
我在懷疑是不是linux ubuntu的問題, 可是看你也是用ubuntu呀.
十分謝謝
從mobile01追隨您到這兒來了, 感謝大大的分享~~
回覆刪除那個...請不要用Ubuntu內建的squashfs-tools,
回覆刪除已有網友測試會有問題!(Ubuntu好像是4.0版的)
請去下載3.0版原始碼,回來自己build出來使用! :)