-
忆捷M8高清播放器固件分析 - [技巧攻略]
2010-12-26
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://gleisure.blogbus.com/logs/101717022.html
这是一篇学习高清播放器固件及初识Linux的笔记。
在忆捷官网下载到了M8固件“M8_Ver4.00_9LAN_0531(出厂固件)”,解压后有一个“install.img”文件。本人对Linux系统及文件不熟,网上一查猜测“install.img”是个“tar”格式的文件,可用RAR顺利解压(无法解压的可将扩展区“img”改为“tar”,后来发现还是在Linux系统下执行相关操作比较稳妥),解压后文件清单如下:
文件名 说明(网上查询) arial.ttf 字体文件 audio_firmware.install.bin configuration.xml 刷写ROM的配置文件 flash_erase install_a 固件安装程序 mkfs.jffs2
mkyaffs2image nandwrite video_firmware.install.bin [package2] bluecore.audio 音濒内核 vmlinux.develop.avhdd.mars.nand.bin Linux内核,用lzma压缩的二进制文件 squashfs1.img 根文件系统,类型为squashfs,一种压缩的只读文件系统。 video_firmware.bin 视频内核 usr.local.etc.tar.bz2 一些系统配置文件,其内容复制到/usr/local/etc下 “configuration.xml”文件内容:

写入“package2/squashfs1.img”没有设置节点,其可用空间为其本身大小,而“package2/usr.local.etc.tar.bz2”设置了60M(0x3C00000Bytes)空间。可用“free”或“cat /proc/meminfo”查看ROM的使用情况。
网上下载“Windows版高清机固件解包工具”,这里只需使用其中的“squashfs-tools-win”。分解“squashfs1.img”(操作命令:unsquashfs squashfs1.img)

至此,本人还不知道这是Linux系统,虽然解出来了,但是不知道该如何下手修改,于是上网搜索相关资料,“HDP fans”是一个学习高清播放器固件的好地方。起初我对论坛中一句“telnet登录播放器”也着实让我费了好大劲,“高手”一句话,对于完全不入门的人来讲,实在无法理解。
播放器用网线接入网络,设定播放器“网络”,获取播放器IP。在Windows下,“开始”菜单“运行”“cmd”调用“命令行操作界面”,输入以下命令并回车:
telnet 播放器IP
就能连上播放器,提示“Venus login:”,输入登录名“root”,回车后便能顺利登录播放器,显示提示符“~#”。如输入命令“ls”就能看到播放器的清单了(如同DOS环境)。至此需要学习一些Linux的相关知识,我是看《鸟哥的私房菜 Linux基础学习篇(第二版)》(网上下载的PDF)。#解压
#建立install目录
mkdir install
#解压install.img文件
tar -xpvf install.img -C install/
#将squashfs1.img移出来
mv -f install/package2/squashfs1.img ./squashfs1.img
#解压squashfs1.img
unsquashfs squashfs1.img
#将usr.local.etc.tar.bz2移出来
mv install/package2/usr.local.etc.tar.bz2 ./usr.local.etc.tar.bz2
#解压usr.local.etc.tar.bz2
bzip2 -d usr.local.etc.tar.bz2
#建立usr.local.etc目录
mkdir usr.local.etc
#解压生成的usr.local.etc.tar
tar -xpvf usr.local.etc.tar -C usr.local.etc/#修改
#进入squashfs-root目录
cd squashfs-root
#建立递归目录usr/local/etc/opt
mkdir -p usr/local/etc/opt
#建立连接
ln -s usr/local/etc/opt opt
#passwd更名为passwd_old
mv usr/local/etc/passwd usr/local/etc/passwd_old
#修改passwd_old并写入passwd,ftp登录无密码
sed 's/root::0:0:root::\/bin\/sh/root::0:0:root:\/:\/bin\/sh/' usr/local/etc/passwd_old > usr/local/etc/passwd
#删除passwd_old
rm -f usr/local/etc/passwd_old
#profile更名为profile_old
mv usr/local/etc/profile usr/local/etc/profile_old
#修改profile_old并写入profile
sed 's/# No core/pathmunge \/opt\/sbin \npathmunge \/opt\/bin \n\n&/' usr/local/etc/profile_old > usr/local/etc/profile
#删除profile_old
rm -f usr/local/etc/profile_old
#建立init.d目录(用于启动时一些需要的初使化)
mkdir -p opt/etc/init.d
#如果存在myinit.sh文件,则延迟40秒,以便一些程序加载
echo -e "if [ -f /opt/etc/init.d/myinit.sh ]; then\n\tsleep 40\n\t/opt/etc/init.d/myinit.sh&\nfi">>etc/init.d/rcS1
#进入etc目录
cd ../usr.local.etc
#passwd重命名passwd_old
mv passwd passwd_old
#修改后写入passwd,ftp登录无密码
sed 's/root::0:0:root::\/bin\/sh/root::0:0:root:\/:\/bin\/sh/' passwd_old > passwd
#删除passwd_old
rm -f passwd_old
#profile重命名profile_old
mv profile profile_old
#修改profile_old并写入profile
sed 's/# No core/pathmunge \/opt\/sbin \npathmunge \/opt\/bin \n\n&/' profile_old > profile
#删除profile_old
rm -f profile_old#…… 增加一些需自定义的修改
#打包
#删除squashfs1.img
rm -f squashfs1.img
#打包squashfs-root
mksquashfs squashfs-root squashfs1.img
#移动squashfs1.img
mv -f squashfs1.img install/package2/
#打包usr.local.etc
tar -cpvf usr.local.etc.tar usr.local.etc
#再打包usr.local.etc.tar
bzip2 -z usr.local.etc.tar
#移动usr.local.etc.tar.bz2
mv -f usr.local.etc.tar.bz2 install/package2/usr.local.etc.tar.bz2
#进入install目录
cd install
#最终打包install
tar -cpvf ../install_new.img *
#返回
cd ..将生成的install_new.img改名为install.img,并拷入U盘根目下进行刷机,之后便可安装相关程序了。
#安装ipkg
#telnet播放器
cd /usr/local/etc
mkdir opt
mount -o remount,rw /
mkdir -p /opt/tmp /opt/bin /opt/etc/init.d
cd /opt/tmp
wget http://www.kovari.priv.hu/download/ipkg-cl.tgz
tar -xvf ipkg-cl.tgz
mv /opt/tmp/ipkg-cl /opt/bin/.
chmod +x /opt/bin/ipkg-cl
cd ../tmp
rm ipkg-cl.tgz
wget http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/uclibc-opt_0.9.28-13_mipsel.ipk
ipkg-cl install uclibc-opt_0.9.28-13_mipsel.ipk
wget http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/ipkg-opt_0.99.163-10_mipsel.ipk
ipkg-cl install ipkg-opt_0.99.163-10_mipsel.ipk
/opt/bin/ipkg update#安装vsftpd
if [ ! -d /opt/usr/share/empty ]; then
mkdir -p /opt/usr/share/empty
fi
echo >/opt/usr/share/empty/tmp
/opt/bin/ipkg install vsftpd
#配置vsftpd
mv /opt/etc/vsftpd.conf /opt/etc/vsftpd_bak.conf
sed 's/listen=NO/listen=YES\nlisten_port=21\nbackground=YES\ncheck_shell=NO\nsession_support=NO\nlocal_root=\/tmp\/usbmounts\nsecure_chroot_dir=\/opt\/usr\/share\/empty/' /opt/etc/vsftpd_bak.conf > /opt/etc/vsftpd.conf
#运行vsftpd
/opt/sbin/vsftpd#如果上传写入失败,需要强制增加"w"权限,如下面对sdb1盘操作
mount -o force,rw,nls=utf8,remount /tmp/usbmounts/sdb1
收藏到:Del.icio.us







