📄 create_firmware.sh
字号:
#! /bin/bash# create_firmware.sh by BadEIP.## The script will create a directory in the current working directory named mnt, where one of the# JFFS2 filesystems contained in the firmware will be mounted.# This directory can then be manually- or automatically patched. # To perform an automatic creation of the firmware, put a directory named root_6500 in your $PATH# # usage:# create_firmware.sh /path/to/firmware.fwp## This script only supports the Tvix M-6500 platform, as firmware for all other Tvix-architectures# can easily be generated manually with TvixFWFIRMWARE=$PWD/$1TVIXFW=`which tvixfw`OPENTVIX_ROOT=$PWD/rootSUDO=sudoMTD="/dev/mtdblock0"MNT_DIR="./mnt"JFFS2_MNT="./mnt/jffs2"ROMFS_MNT="./mnt/romfs"DUMP_DIR=`basename $FIRMWARE.dump`JFFS2_FILE="$DUMP_DIR/jffs2.apps"ROMFS_FILE="$DUMP_DIR/romfs.rootfs"about(){ clear echo "==================================================================================" echo " This is as a supplement to TvixFW (available from http://binary-art.net) to ease " echo " creation of Tvix M-6500 firmware." echo "==================================================================================" echo}check_args(){ if [ -z $FIRMWARE ]; then echo "usage: create_firmware <firmware.fwp> <root_directory>" exit 1 fi if [ -z $OPENTVIX_ROOT ]; then OPENTVIX_ROOT=root echo $OPENTVIX_ROOT if [ ! -d $OPENTVIX_ROOT ]; then echo "usage: create_firmware <firmware.fwp> <root_directory>" exit 1 fi fi echo "Source firmware: $FIRMWARE" echo "root directory: $OPENTVIX_ROOT"}locate_tvixfw(){ if [ -z $TVIXFW ]; then if [ -f ./bin/tvixfw ]; then TVIXFW=./bin/tvixfw else echo "Error, unable to locate the tvixfw binary in your \$PATH" exit 1 fi fi}init(){ if [ "$(id -u)" == "0" ]; then unset SUDO else echo -n "Sudo " fi $SUDO rm -rvf $MNT_DIR 2>&1 >/dev/null mkdir -p $JFFS2_MNT mkdir -p $ROMFS_MNT $SUDO umount $MNT_DIR 2>/dev/null $SUDO umount $JFFS2_MNT 2>/dev/null $SUDO umount $ROMFS_MNT 2>/dev/null echo}load_modules(){ $SUDO modprobe mtd $SUDO modprobe jffs2 $SUDO modprobe mtdram total_size=65536 erase_size=512 $SUDO modprobe mtdchar $SUDO modprobe mtdblock}dump_filesystems(){ $TVIXFW --dump $FIRMWARE 2>/dev/null}extract_jffs2_apps(){ $SUDO dd if=/dev/zero bs=10240 count=6536 of=$MTD 2>/dev/null && $SUDO dd if=$JFFS2_FILE of=$MTD 2>/dev/null $SUDO mount -t jffs2 $MTD $JFFS2_MNT || exit 1 echo "jffs2 image mounted"}create_busybox_links(){ cd $MNT_DIR/jffs2/tvix/opentvix/usr/bin/ || echo "can't cd to dest dir":wq echo "creating busybox symlinks.." for sym in \addgroup adduser ar arping ash awk basename bunzip2 bzcat cat catv chattr chgrp chmod chown chroot chrt \chvt cksum clear cmp cp cpio crond crontab cut date dc dd deallocvt delgroup deluser df dhcprelay diff dirname \dmesg dnsd dos2unix du dumpkmap dumpleases echo egrep eject env ether-wake expr false fdflush fdformat fgrep find \fold free freeramdisk fsck fuser getopt getty grep gunzip gzip halt hdparm head hexdump hostid hostname hwclock \id ifconfig ifdown ifup inetd init insmod install ip ipaddr ipcrm ipcs iplink iproute iprule iptunnel kill killall \killall5 klogd last length less linux32 linux64 linuxrc ln loadfont loadkmap logger login logname losetup ls lsattr \lsmod lzmacat makedevs md5sum mdev mesg mkdir mkfifo mknod mkswap mktemp modprobe more mount mountpoint mt mv \nameif netstat nice nohup nslookup od openvt passwd patch pidof ping pipe_progress pivot_root poweroff printenv \printf ps pwd rdate readlink readprofile realpath reboot renice reset resize rm rmdir rmmod route run-parts runlevel \sed seq setarch setconsole setkeycodes setlogcons setsid sh sha1sum sleep sort start-stop-daemon strings stty su \sulogin swapoff swapon switch_root sync sysctl syslogd tail tar taskset tee telnet test tftp time top touch tr \traceroute true tty udhcpc udhcpd umount uname uniq unix2dos unlzma unzip uptime usleep uudecode uuencode vconfig \vi vlock watch watchdog wc wget which who whoami xargs yes zcat do $SUDO ln -sv ../../busybox $sym done cd -}modify_jffs2_apps(){ #$SUDO ./bin/patch_main $MNT_DIR/jffs2/tvix/main echo "Installing badeip OpenTViX base." echo "Press enter to continue" read foo $SUDO cp -vrf $MNT_DIR/jffs2/tvix/main $MNT_DIR/jffs2/tvix/main.dvico && $SUDO cp -vrf $OPENTVIX_ROOT/* $MNT_DIR/jffs2/tvix/ create_busybox_links echo echo "you can now modify the contents of the $MNT_DIR directory." echo "!!! copy main.dvico binary?? !!!" echo "-- press enter to continue --" read foo echo "generating jffs2 image.." #$SUDO mkfs.jffs2 --eraseblock=$((0x2000)) --pagesize=4096 --root=$JFFS2_MNT -o $JFFS2_FILE $SUDO mkfs.jffs2 -n --eraseblock=128KiB --root=$JFFS2_MNT -o $JFFS2_FILE $SUDO umount $JFFS2_MNT}create_firmware(){ $TVIXFW --create $DUMP_DIR/fwp.header}main(){ rm -rf root svn checkout http://svn.xp-dev.com/svn/badeip-opentvix-root cp -r badeip-opentvix-root/trunk/root/ . rm -rf badeip-opentvix-root find root -name .svn | xargs rm -rf cd firmware about check_args locate_tvixfw init load_modules dump_filesystems extract_jffs2_apps modify_jffs2_apps create_firmware}main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -