如何修改翰林V3的固件
首先说明什么是翰林V3:这是一款使用E-ink的电å书阅读设备。
å¦‚æžœä½ ä¸çŸ¥é“这个东西是什么,那么本文剩下的部分å¯ä»¥ä¸ç”¨çœ‹äº†ã€‚
本æ¥è¿™ä¸ªä¸»é¢˜æ˜¯è¦å†™å¦‚何修改翰林V3的显示å—ä½“ï¼Œå› ä¸ºå®‹ä½“æ˜¾ç¤ºä¸æ–‡è¿˜å¯ä»¥ï¼Œä½†æ˜¯è‹±æ–‡ç®€ç›´æ˜¯æƒ¨ä¸å¿ç¹ã€‚结果花了ä¸å°‘的功夫把宋体焕æˆäº†é›…黑之åŽï¼Œä»Šå¤©æ—©ä¸ŠåŽ»è®ºå›çœ‹çœ‹ï¼Œå´å‘现翰林很适时地推出了一款新的固件,å¯ä»¥è‡ªç”±é€‰æ‹©ä¹¦ç±æ˜¾ç¤ºçš„å—体。详细的介ç»ä¹Ÿæœ‰äººè´´äº†å‡ºæ¥ã€‚æ‰€ä»¥å°±æŠŠæ ‡é¢˜æ”¹æˆäº†â€œå¦‚何修改翰林V3的固件â€ã€‚å› ä¸ºæˆ‘æ‰€ä½œçš„å·¥ä½œä¹Ÿå°±æ˜¯ä¿®æ”¹äº†ä¸€ä¸‹å›ºä»¶è€Œå·²ã€‚
首先需è¦å£°æ˜Žï¼šä¿®æ”¹å›ºä»¶å˜åœ¨é£Žé™©ï¼Œè¯·åŠ¡å¿…先备份阅读器上的é‡è¦æ•°æ®ï¼Œå¹¶ä¸”准备好官方固件,准备åƒåŽæ‚”è¯ã€‚åŒæ—¶ä¿®æ”¹çš„固件å¯èƒ½ä¼šå¯¼è‡´é˜…è¯»å™¨æ— æ³•å¼€æœºç”šè‡³æ— æ³•æ¢å¤ï¼Œè¯·è‡ªè¡Œæ‹…负其风险,本人对æ¤ä¸è´Ÿè´£ã€‚
OK,现在开始æ£é¢˜ã€‚
é¦–å…ˆä½ éœ€è¦ä¸€äº›å·¥å…·ã€‚必需的第一个东西是Linuxæ“作系统,我使用Debianï¼Œå› æ¤ä¸‹é¢çš„介ç»å‡ä»¥Debian为例。
åœ¨ä½ çš„Linux上é¢è¯·ä¿è¯æœ‰ä¸‹åˆ—的程åºæˆ–者包:
hg (Mercurial Distributed SCM) 或 git (Fast Version Control System)
gcc
dd
mtd-tools (for mkfs.jffs2)
mkcramfs
在Debian上å¯ä»¥æ‰§è¡Œä¸‹åˆ—的一串命令æ¥ç¡®ä¿å®ƒä»¬éƒ½åœ¨ï¼š
$su
#apt-get install mercurial
#apt-get install git-core
#apt-get install gcc-4.1
#apt-get install mtd-tools
#apt-get install mkcramfs
然åŽä½ 需è¦ä¸€ä¸ªé¡¹ç›®çš„æºä»£ç ,OpenInkpot。目å‰å¯ä»¥é€šè¿‡hg或者git获得,但是hgä¸ä¹…就会åœæ¢ã€‚获å–æ–¹å¼ä¸»é¡µä¸Šé¢æœ‰ã€‚ç›®å‰å¯ä»¥ç”¨è¿™ä¸ªå‘½ä»¤ï¼š
$ hg clone http://hg.openinkpot.org/trunk openinkpot-trunk
获å–到代ç 之åŽï¼Œä¸éœ€è¦ç¼–译整个项目,å¦åˆ™ä½ 需è¦èŠ±æŽ‰å‡ å个å°æ—¶å¤–åŠ å多GBçš„ç£ç›˜ã€‚ä½ æ‰€éœ€è¦çš„åªæ˜¯è¿›å…¥åˆ°ç›®å½•utils/mkv3update当ä¸ï¼Œæ‰§è¡Œ
$ CC=gcc make
å³å¯èŽ·å¾—一个mkv3update的程åºã€‚这个程åºå°†ç”¨æ¥ç”Ÿæˆæˆ‘们修改过的翰林v3固件。
把这个mkv3update程åºï¼Œè¿žåŒutils/mkv3update/scripts目录下é¢çš„firmeware_unpack.sh文件一åŒæ‹·è´åˆ°æŸä¸ªåœ°æ–¹ã€‚
下一æ¥çš„å·¥ä½œå°±æ˜¯æ‰¾åˆ°ä½ è¦ä¿®æ”¹çš„原始固件。通常就是V3update.bin文件,把它也拷è´åˆ°ä¸Šé¢ä¸¤ä¸ªç¨‹åºæ‰€åœ¨çš„目录。
将下é¢çš„代ç 写入一个脚本程åºï¼Œä¾‹å¦‚patch-v3-update:
–脚本开始–
#! /bin/bash
if [ ! -e V3update.bin ]; then
   echo No Hanlin firmware \(V3update.bin\) present.
fi
if [ -e V3update.bin.patch ]; then
   rm V3update.bin.patch
fi
if [ -d tmp ]; then
   umount tmp/root_fs
   rm -r tmp
fi
mkdir tmp
mkdir tmp/root_fs
mkdir tmp/root_fs_patch
# mkdir tmp/ro_fs
. ./firmware_unpack.sh V3update.bin tmp
mount -o loop tmp/root.fs tmp/root_fs
cp -a tmp/root_fs/* tmp/root_fs_patch
if [ -e ./do-patch-rootfs ]; then
   . ./do-patch-rootfs
else
   echo You do not have do-patch-rootfs script.
fi
mkcramfs tmp/root_fs_patch/ tmp/root.fs.patch
./mkv3update –write-hanlin=V3update.bin.patch tmp/zImage tmp/ro.fs tmp/root.fs.patch tmp/logo tmp/jffs2.fs
–脚本结柖
注æ„脚本当ä¸æ ‡çº¢è‰²çš„部分。将这部分作为分界线,脚本的å‰é¢éƒ¨åˆ†å°±åšäº†ä¼—多的解开V3update.bin,并且将其ä¸å†…容解到一个tmp/root_fs_patch的目录当ä¸çš„å·¥ä½œï¼Œä½ å¯ä»¥æŠŠè¿™éƒ¨åˆ†å•ç‹¬æ‹·è´å‡ºæ¥æ‰§è¡Œã€‚执行之åŽï¼Œåˆ°tmp/root_fs_patch/root/下é¢çœ‹çœ‹ï¼Œè¿™å°±æ˜¯ç¿°æž—V3当ä¸çš„文件系统结构。在这个目录当ä¸ï¼Œä½ å¯ä»¥éšæ„修改其ä¸çš„内容,当然包括tmp/root_fs_patch/root/fonts/truetype当ä¸çš„å—体文件。
修改完毕之åŽï¼Œå³å¯æ‰§è¡Œçº¢è‰²éƒ¨åˆ†ä¹‹åŽçš„命令,这些命令把修改过的文件打包生æˆä¸€ä¸ªæ–°çš„文件文件,称为V3update.bin.patch。åªè¦å°†å…¶æ‹·è´åˆ°SDå¡çš„æ ¹ç›®å½•ï¼Œç„¶åŽé‡å‘½å为V3update.bin,å³å¯æŒ‰ç…§ç¿°æž—V3æ£å¸¸çš„固件çœçº§æ–¹å¼è¿›è¡Œå‡çº§ã€‚
ç»è¿‡æˆ‘的实验,åªè¦å°†å…¶ä¸çš„simsun.ttc/simsun.ttfæ–‡ä»¶ä¸€èµ·åˆ é™¤ï¼Œç„¶åŽç”¨msyh.ttfæ‹·è´åˆ°å…¶ä¸ï¼Œé‡å‘½å为simsun.ttf,å†å»ºç«‹è½¯é“¾æŽ¥simsun.ttc指å‘它,å³å¯å®žçŽ°ä¹¦æž¶å’Œé»˜è®¤çš„chm,txt,wol文件都使用雅黑å—体了。
å¦‚æžœä½ æƒ³å°†å·¥ä½œè‡ªåŠ¨åŒ–ï¼Œç›´æŽ¥åœ¨patch-v3-update脚本的相åŒç›®å½•ä¸‹é¢å†™ä¸€ä¸ªdo-patch-rootfs的脚本,就å¯ä»¥è‡ªåŠ¨ç”±è¯¥è„šæœ¬è°ƒç”¨äº†ã€‚
自己åšäº†ä¸€ä¸ªç¿°æž—V3的一ç»æ›¿æ¢äº†é›…黑å—体的固件,基于翰林最近的2008-04-25版本,目å‰ç”¨èµ·æ¥è¿˜æ²¡æœ‰ä»»ä½•çš„问题。