aboutsummaryrefslogtreecommitdiffstats
path: root/tools/patch-image/src/patch-cmdline.c
blob: 571f848d81c505c42be176a6150768929debab67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * patch-cmdline.c - patch the kernel command line on rb532
 *
 * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
 *
 * 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;

	if (argc != 3) {
		fprintf(stderr, "Usage: %s <file> <cmdline>\n", argv[0]);
		goto err1;
	}
	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;
}
-crc8 SUBMENU:=$(LIB_MENU) TITLE:=CRC8 support KCONFIG:=CONFIG_CRC8 FILES:=$(LINUX_DIR)/lib/crc8.ko AUTOLOAD:=$(call AutoProbe,crc8) endef define KernelPackage/lib-crc8/description Kernel module for CRC8 support endef $(eval $(call KernelPackage,lib-crc8)) define KernelPackage/lib-crc16 SUBMENU:=$(LIB_MENU) TITLE:=CRC16 support KCONFIG:=CONFIG_CRC16 FILES:=$(LINUX_DIR)/lib/crc16.ko AUTOLOAD:=$(call AutoLoad,20,crc16,1) endef define KernelPackage/lib-crc16/description Kernel module for CRC16 support endef $(eval $(call KernelPackage,lib-crc16)) define KernelPackage/lib-crc32c SUBMENU:=$(LIB_MENU) TITLE:=CRC32 support KCONFIG:=CONFIG_LIBCRC32C DEPENDS:=+kmod-crypto-crc32c FILES:=$(LINUX_DIR)/lib/libcrc32c.ko AUTOLOAD:=$(call AutoProbe,libcrc32c) endef define KernelPackage/lib-crc32c/description Kernel module for CRC32 support endef $(eval $(call KernelPackage,lib-crc32c)) define KernelPackage/lib-lzo SUBMENU:=$(LIB_MENU) TITLE:=LZO support DEPENDS:=+kmod-crypto-acompress KCONFIG:= \ CONFIG_CRYPTO_LZO \ CONFIG_LZO_COMPRESS \ CONFIG_LZO_DECOMPRESS HIDDEN:=1 FILES:= \ $(LINUX_DIR)/crypto/lzo.ko \ $(LINUX_DIR)/lib/lzo/lzo_compress.ko \ $(LINUX_DIR)/lib/lzo/lzo_decompress.ko AUTOLOAD:=$(call AutoProbe,lzo lzo_compress lzo_decompress) endef define KernelPackage/lib-lzo/description Kernel module for LZO compression/decompression support endef $(eval $(call KernelPackage,lib-lzo)) define KernelPackage/lib-zstd SUBMENU:=$(LIB_MENU) TITLE:=ZSTD support DEPENDS:=+kmod-crypto-acompress KCONFIG:= \ CONFIG_CRYPTO_ZSTD \ CONFIG_ZSTD_COMPRESS \ CONFIG_ZSTD_DECOMPRESS \ CONFIG_XXHASH FILES:= \ $(LINUX_DIR)/crypto/zstd.ko \ $(LINUX_DIR)/lib/xxhash.ko \ $(LINUX_DIR)/lib/zstd/zstd_compress.ko \ $(LINUX_DIR)/lib/zstd/zstd_decompress.ko AUTOLOAD:=$(call AutoProbe,xxhash zstd zstd_compress zstd_decompress) endef define KernelPackage/lib-zstd/description Kernel module for ZSTD compression/decompression support endef $(eval $(call KernelPackage,lib-zstd)) define KernelPackage/lib-lz4 SUBMENU:=$(LIB_MENU) TITLE:=LZ4 support DEPENDS:=+kmod-crypto-acompress KCONFIG:= \ CONFIG_CRYPTO_LZ4 \ CONFIG_LZ4_COMPRESS \ CONFIG_LZ4_DECOMPRESS FILES:= \ $(LINUX_DIR)/crypto/lz4.ko \ $(LINUX_DIR)/lib/lz4/lz4_compress.ko \ $(LINUX_DIR)/lib/lz4/lz4_decompress.ko AUTOLOAD:=$(call AutoProbe,lz4 lz4_compress lz4_decompress) endef define KernelPackage/lib-lz4/description Kernel module for LZ4 compression/decompression support endef $(eval $(call KernelPackage,lib-lz4)) define KernelPackage/lib-raid6 SUBMENU:=$(LIB_MENU) TITLE:=RAID6 algorithm support HIDDEN:=1 KCONFIG:=CONFIG_RAID6_PQ FILES:=$(LINUX_DIR)/lib/raid6/raid6_pq.ko AUTOLOAD:=$(call AutoProbe,raid6_pq) endef define KernelPackage/lib-raid6/description Kernel module for RAID6 algorithms endef $(eval $(call KernelPackage,lib-raid6)) define KernelPackage/lib-xor SUBMENU:=$(LIB_MENU) TITLE:=XOR blocks algorithm support HIDDEN:=1 KCONFIG:=CONFIG_XOR_BLOCKS ifneq ($(wildcard $(LINUX_DIR)/arch/$(LINUX_KARCH)/lib/xor-neon.ko),) FILES:= \ $(LINUX_DIR)/crypto/xor.ko \ $(LINUX_DIR)/arch/$(LINUX_KARCH)/lib/xor-neon.ko AUTOLOAD:=$(call AutoProbe,xor-neon xor) else FILES:=$(LINUX_DIR)/crypto/xor.ko AUTOLOAD:=$(call AutoProbe,xor) endif endef define KernelPackage/lib-xor/description Kernel module for XOR blocks algorithms endef $(eval $(call KernelPackage,lib-xor)) define KernelPackage/lib-textsearch SUBMENU:=$(LIB_MENU) TITLE:=Textsearch support KCONFIG:= \ CONFIG_TEXTSEARCH=y \ CONFIG_TEXTSEARCH_KMP \ CONFIG_TEXTSEARCH_BM \ CONFIG_TEXTSEARCH_FSM FILES:= \ $(LINUX_DIR)/lib/ts_kmp.ko \ $(LINUX_DIR)/lib/ts_bm.ko \ $(LINUX_DIR)/lib/ts_fsm.ko AUTOLOAD:=$(call AutoProbe,ts_kmp ts_bm ts_fsm) endef $(eval $(call KernelPackage,lib-textsearch)) define KernelPackage/lib-zlib-inflate SUBMENU:=$(LIB_MENU) TITLE:=Zlib support HIDDEN:=1 KCONFIG:=CONFIG_ZLIB_INFLATE FILES:=$(LINUX_DIR)/lib/zlib_inflate/zlib_inflate.ko AUTOLOAD:=$(call AutoProbe,zlib_inflate) endef $(eval $(call KernelPackage,lib-zlib-inflate)) define KernelPackage/lib-zlib-deflate SUBMENU:=$(LIB_MENU) TITLE:=Zlib support HIDDEN:=1 KCONFIG:=CONFIG_ZLIB_DEFLATE FILES:=$(LINUX_DIR)/lib/zlib_deflate/zlib_deflate.ko AUTOLOAD:=$(call AutoProbe,zlib_deflate) endef $(eval $(call KernelPackage,lib-zlib-deflate)) define KernelPackage/lib-cordic SUBMENU:=$(LIB_MENU) TITLE:=Cordic function support KCONFIG:=CONFIG_CORDIC FILES:=$(LINUX_DIR)/lib/math/cordic.ko AUTOLOAD:=$(call AutoProbe,cordic) endef define KernelPackage/lib-cordic/description Kernel module for Cordic function support endef $(eval $(call KernelPackage,lib-cordic)) define KernelPackage/asn1-decoder SUBMENU:=$(LIB_MENU) TITLE:=Simple ASN1 decoder KCONFIG:= CONFIG_ASN1 HIDDEN:=1 FILES:=$(LINUX_DIR)/lib/asn1_decoder.ko endef $(eval $(call KernelPackage,asn1-decoder))