mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 01:59:02 +00:00
94198e2a1c
This target is still on kernel 4.14, and recent attempts to move it to kernel 5.4 have not led to success. The device tester reported that it wouldn't boot with the following messages: From sysupgrade: Press any key within 4 seconds to enter setup.... loading kernel from nand... OK setting up elf image... OK jumping to kernel code At this point the system hangs. From CompactFlash: Press any key within 4 seconds to enter setup.... Booting CF Loading kernel... done setting up elf image... kernel out of range kernel loading failed The tester reported that the same was observed with current master (kernel 4.14) as well. This looks like some kernel size restriction. Since this target is quite old and only supports one device, and since nobody else seemed interested in working on this for quite some time, I decided to not put further work into analyzing the problem and drop this together with the other 4.14-only targets. Patchwork series: https://patchwork.ozlabs.org/project/openwrt/list/?series=197066&state=* Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
86 lines
2.2 KiB
C
86 lines
2.2 KiB
C
/*
|
|
* patch-cmdline.c - patch the kernel command line
|
|
*
|
|
* Copyright (C) 2006 Felix Fietkau <nbd@nbd.name>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stddef.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/mman.h>
|
|
#include <sys/stat.h>
|
|
#include <string.h>
|
|
|
|
#define SEARCH_SPACE (16 * 1024)
|
|
#define CMDLINE_MAX 512
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
int fd, found = 0, len, ret = -1;
|
|
char *ptr, *p;
|
|
unsigned int search_space;
|
|
|
|
if (argc <= 2 || argc > 4) {
|
|
fprintf(stderr, "Usage: %s <file> <cmdline> [size]\n", argv[0]);
|
|
goto err1;
|
|
} else if (argc == 3) {
|
|
fprintf(stdout, "search space used is default of 16KB\n");
|
|
search_space = SEARCH_SPACE;
|
|
} else {
|
|
search_space = atoi(argv[3]);
|
|
}
|
|
len = strlen(argv[2]);
|
|
if (len + 9 > CMDLINE_MAX) {
|
|
fprintf(stderr, "Command line string too long\n");
|
|
goto err1;
|
|
}
|
|
|
|
if (((fd = open(argv[1], O_RDWR)) < 0) ||
|
|
(ptr = (char *) mmap(0, search_space + CMDLINE_MAX, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1)) {
|
|
fprintf(stderr, "Could not open kernel image");
|
|
goto err2;
|
|
}
|
|
|
|
for (p = ptr; p < (ptr + search_space); p += 4) {
|
|
if (memcmp(p, "CMDLINE:", 8) == 0) {
|
|
found = 1;
|
|
p += 8;
|
|
break;
|
|
}
|
|
}
|
|
if (!found) {
|
|
fprintf(stderr, "Command line marker not found!\n");
|
|
goto err3;
|
|
}
|
|
|
|
memset(p, 0, CMDLINE_MAX - 8);
|
|
strcpy(p, argv[2]);
|
|
msync(p, CMDLINE_MAX, MS_SYNC|MS_INVALIDATE);
|
|
ret = 0;
|
|
|
|
err3:
|
|
munmap((void *) ptr, len);
|
|
err2:
|
|
if (fd > 0)
|
|
close(fd);
|
|
err1:
|
|
return ret;
|
|
}
|