Ticket #493: jffs2root-auto-reboot.patch

File jffs2root-auto-reboot.patch, 2.5 KB (added by consulting@…, 12 years ago)

Sample patch

  • openwrt/target/linux/package/base-files/src/jffs2root.c

     
    3131#include <string.h> 
    3232 
    3333#include <sys/ioctl.h> 
     34#include <sys/syscall.h> 
    3435#include <linux/mtd/mtd.h> 
     36#include <linux/reboot.h> 
    3537 
    3638#define FILENAME "/dev/mtdblock/1" 
    3739 
     
    5557                exit(1); 
    5658        } 
    5759        for (n = 0; n < 256; n++) { 
    58         crc = (unsigned long) n; 
    59         for (bit = 0; bit < 8; bit++) 
    60                 crc = (crc & 1) ? (poly ^ (crc >> 1)) : (crc >> 1); 
    61         crc32[n] = crc; 
     60                crc = (unsigned long) n; 
     61                for (bit = 0; bit < 8; bit++) 
     62                        crc = (crc & 1) ? (poly ^ (crc >> 1)) : (crc >> 1); 
     63                crc32[n] = crc; 
    6264        } 
    6365} 
    6466 
     
    6668{ 
    6769        unsigned int crc = 0xFFFFFFFF; 
    6870        for (; len; len--, buf++) 
    69         crc = crc32[(crc ^ *buf) & 0xff] ^ (crc >> 8); 
     71                crc = crc32[(crc ^ *buf) & 0xff] ^ (crc >> 8); 
    7072        return crc; 
    7173} 
    7274 
     
    7779        unsigned long len; 
    7880        struct trx_header *ptr; 
    7981        char *buf; 
    80          
     82        int reboot=0; 
     83 
    8184        if (((fd = open(FILENAME, O_RDWR))      < 0) 
    8285                        || ((len = lseek(fd, 0, SEEK_END)) < 0) 
    8386                        || ((ptr = (struct trx_header *) mmap(0, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1)) 
     
    105108                        ptr->len = ptr->offsets[2]; 
    106109                        ptr->crc32 = crc32buf((void *) &(ptr->flag_version), ptr->len - offsetof(struct trx_header, flag_version)); 
    107110                        msync(ptr,sizeof(struct trx_header),MS_SYNC|MS_INVALIDATE); 
    108                         printf("Partition moved; please reboot\n"); 
     111                        if (argc > 2 && !strcmp(argv[2],"--reboot")) { 
     112                                reboot=1; 
     113                                printf("Partition moved.\n"); 
     114                        } 
     115                        else { 
     116                                printf("Partition moved; please reboot\n"); 
     117                        } 
    109118                } 
    110119        } else if (argc > 1 && !strcmp(argv[1], "--clean")) { 
    111120                buf = (char *) ptr; 
     
    129138        } 
    130139 
    131140        munmap((void *) ptr, len); 
     141 
     142        if (reboot) { 
     143                fflush(stdout); 
     144                syscall(SYS_reboot,LINUX_REBOOT_MAGIC1,LINUX_REBOOT_MAGIC2,LINUX_REBOOT_CMD_RESTART,NULL); 
     145        } 
     146 
    132147        return 0; 
     148 
    133149} 
  • openwrt/package/base-files/default/sbin/mount_root

     
    1414        if [ $? = 0 ] ; then 
    1515                if [ $(cat /proc/mtd | wc -l) = 6 ]; then 
    1616                        mtd erase OpenWrt 
    17                         jffs2root --move 
     17                        jffs2root --move --reboot 
    1818                else 
    1919                        mount -o remount,rw /dev/root / 
    2020                fi