2 * patch-cmdline.c - patch the kernel command line on rb532
4 * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
31 #define SEARCH_SPACE (16 * 1024)
32 #define CMDLINE_MAX 512
34 int main(int argc
, char **argv
)
36 int fd
, found
= 0, len
, ret
= -1;
40 fprintf(stderr
, "Usage: %s <file> <cmdline>\n", argv
[0]);
43 len
= strlen(argv
[2]);
44 if (len
+ 9 > CMDLINE_MAX
) {
45 fprintf(stderr
, "Command line string too long\n");
49 if (((fd
= open(argv
[1], O_RDWR
)) < 0) ||
50 (ptr
= (char *) mmap(0, SEARCH_SPACE
+ CMDLINE_MAX
, PROT_READ
|PROT_WRITE
, MAP_SHARED
, fd
, 0)) == (void *) (-1)) {
51 fprintf(stderr
, "Could not open kernel image");
55 for (p
= ptr
; p
< (ptr
+ SEARCH_SPACE
); p
+= 4) {
56 if (memcmp(p
, "CMDLINE:", 8) == 0) {
63 fprintf(stderr
, "Command line marker not found!\n");
67 memset(p
, 0, CMDLINE_MAX
- 8);
69 msync(p
, CMDLINE_MAX
, MS_SYNC
|MS_INVALIDATE
);
73 munmap((void *) ptr
, len
);
This page took 0.057469 seconds and 5 git commands to generate.