kernelscan: add -k option to specify klog json filename
diff mbox series

Message ID 20180919074340.15656-1-colin.king@canonical.com
State Accepted
Headers show
Series
  • kernelscan: add -k option to specify klog json filename
Related show

Commit Message

Colin Ian King Sept. 19, 2018, 7:43 a.m. UTC
From: Colin Ian King <colin.king@canonical.com>

This allows one to specify the location of the klog json file. Currently
this is hard coded to be /usr/share/fwts/klog.json, but this new option
allows one to specify the full path. This allows us to use the json file
in the fwts src rather than the installed version.

E.g.

./kernelscan.sh -k ~/repos/fwts/data/klog.json  ~/repos/linux

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/utilities/kernelscan.c  | 29 ++++++++++++++++++++++++++---
 src/utilities/kernelscan.sh | 33 +++++++++++++++++++++++++++++----
 2 files changed, 55 insertions(+), 7 deletions(-)

Comments

Alex Hung Sept. 19, 2018, 9:45 a.m. UTC | #1
On 2018-09-19 09:43 AM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> This allows one to specify the location of the klog json file. Currently
> this is hard coded to be /usr/share/fwts/klog.json, but this new option
> allows one to specify the full path. This allows us to use the json file
> in the fwts src rather than the installed version.
> 
> E.g.
> 
> ./kernelscan.sh -k ~/repos/fwts/data/klog.json  ~/repos/linux
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/utilities/kernelscan.c  | 29 ++++++++++++++++++++++++++---
>   src/utilities/kernelscan.sh | 33 +++++++++++++++++++++++++++++----
>   2 files changed, 55 insertions(+), 7 deletions(-)
> 
> diff --git a/src/utilities/kernelscan.c b/src/utilities/kernelscan.c
> index 1974f53a..c1655fe4 100644
> --- a/src/utilities/kernelscan.c
> +++ b/src/utilities/kernelscan.c
> @@ -191,6 +191,8 @@ static char *funcs[] = {
>   
>   #define TABLE_SIZE	(5000)
>   
> +static char *klog_file = DATAROOTDIR "/fwts/klog.json";
> +
>   static char *hash_funcs[TABLE_SIZE];
>   
>   static int get_token(parser *p, token *t);
> @@ -348,7 +350,7 @@ static klog_pattern *klog_load(const char *table)
>   	json_object *klog_table;
>   	klog_pattern *patterns;
>   
> -	klog_objs = json_object_from_file(DATAROOTDIR "/fwts/klog.json");
> +	klog_objs = json_object_from_file(klog_file);
>   	if (JSON_ERROR(klog_objs)) {
>   		fprintf(stderr, "Cannot load klog data\n");
>   		exit(EXIT_FAILURE);
> @@ -1015,6 +1017,13 @@ static void hash_init(void)
>   	}
>   }
>   
> +void help(void)
> +{
> +	printf("kernelscan:\n");
> +	printf("-h\t\thelp\n");
> +	printf("-k file\t\tspecify klog json file\n");
> +}
> +
>   /*
>    *  Scan kernel source for printk KERN_ERR and dev_err
>    *  calls.
> @@ -1030,8 +1039,22 @@ static void hash_init(void)
>    */
>   int main(int argc, char **argv)
>   {
> -	(void)argc;
> -	(void)argv;
> +	for (;;) {
> +		int c = getopt(argc, argv, "hk:");
> +		if (c == -1)
> +			break;
> +		switch (c) {
> +		case 'h':
> +			help();
> +			exit(0);
> +		case 'k':
> +			klog_file = optarg;
> +			break;
> +		default:
> +			help();
> +			exit(1);
> +		}
> +	}
>   
>   	patterns = klog_load("firmware_error_warning_patterns");
>   	hash_init();
> diff --git a/src/utilities/kernelscan.sh b/src/utilities/kernelscan.sh
> index 7b274959..61207662 100755
> --- a/src/utilities/kernelscan.sh
> +++ b/src/utilities/kernelscan.sh
> @@ -32,17 +32,42 @@ if [ $# -lt 1 ]; then
>   	exit 1
>   fi
>   
> -src=$1
> +KLOG=/usr/share/fwts/klog.json
>   
> -if [ ! -d  $1 ]; then
> -	echo "Path '$1' not found"
> +while [[ $# -gt 0 ]]
> +do
> +
> +case "$1" in
> +	-k)
> +		shift
> +		KLOG=$1
> +		shift
> +		;;
> +	*)
> +		src=$1
> +		shift
> +		;;
> +esac
> +done
> +
> +if [ "$src" == "" ]; then
> +	echo "Please provide path to linux source"
> +	exit 1
> +fi
> +
> +if [ ! -d "$src" ]; then
> +	echo "Path '$src' not found"
> +	exit 1
> +fi
> +if [ ! -e "${KLOG}" ]; then
> +	echo "Path '${KLOG}' not found"
>   	exit 1
>   fi
>   
>   scan_source_file()
>   {
>   	if [ -f $1 ]; then
> -		$KERNELSCAN -P < $1 > $TMP
> +		$KERNELSCAN -k ${KLOG} < $1 > $TMP
>   		if [ $(stat -c%s $TMP) -gt 0 ]; then
>   			echo "Source: $1"
>   			cat $TMP
> 

Acked-by: Alex Hung <alex.hung@canonical.com>
Ivan Hu Sept. 27, 2018, 3:06 a.m. UTC | #2
On 09/19/2018 03:43 PM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> This allows one to specify the location of the klog json file. Currently
> this is hard coded to be /usr/share/fwts/klog.json, but this new option
> allows one to specify the full path. This allows us to use the json file
> in the fwts src rather than the installed version.
>
> E.g.
>
> ./kernelscan.sh -k ~/repos/fwts/data/klog.json  ~/repos/linux
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/utilities/kernelscan.c  | 29 ++++++++++++++++++++++++++---
>  src/utilities/kernelscan.sh | 33 +++++++++++++++++++++++++++++----
>  2 files changed, 55 insertions(+), 7 deletions(-)
>
> diff --git a/src/utilities/kernelscan.c b/src/utilities/kernelscan.c
> index 1974f53a..c1655fe4 100644
> --- a/src/utilities/kernelscan.c
> +++ b/src/utilities/kernelscan.c
> @@ -191,6 +191,8 @@ static char *funcs[] = {
>  
>  #define TABLE_SIZE	(5000)
>  
> +static char *klog_file = DATAROOTDIR "/fwts/klog.json";
> +
>  static char *hash_funcs[TABLE_SIZE];
>  
>  static int get_token(parser *p, token *t);
> @@ -348,7 +350,7 @@ static klog_pattern *klog_load(const char *table)
>  	json_object *klog_table;
>  	klog_pattern *patterns;
>  
> -	klog_objs = json_object_from_file(DATAROOTDIR "/fwts/klog.json");
> +	klog_objs = json_object_from_file(klog_file);
>  	if (JSON_ERROR(klog_objs)) {
>  		fprintf(stderr, "Cannot load klog data\n");
>  		exit(EXIT_FAILURE);
> @@ -1015,6 +1017,13 @@ static void hash_init(void)
>  	}
>  }
>  
> +void help(void)
> +{
> +	printf("kernelscan:\n");
> +	printf("-h\t\thelp\n");
> +	printf("-k file\t\tspecify klog json file\n");
> +}
> +
>  /*
>   *  Scan kernel source for printk KERN_ERR and dev_err
>   *  calls.
> @@ -1030,8 +1039,22 @@ static void hash_init(void)
>   */
>  int main(int argc, char **argv)
>  {
> -	(void)argc;
> -	(void)argv;
> +	for (;;) {
> +		int c = getopt(argc, argv, "hk:");
> +		if (c == -1)
> +			break;
> +		switch (c) {
> +		case 'h':
> +			help();
> +			exit(0);
> +		case 'k':
> +			klog_file = optarg;
> +			break;
> +		default:
> +			help();
> +			exit(1);
> +		}
> +	}
>  
>  	patterns = klog_load("firmware_error_warning_patterns");
>  	hash_init();
> diff --git a/src/utilities/kernelscan.sh b/src/utilities/kernelscan.sh
> index 7b274959..61207662 100755
> --- a/src/utilities/kernelscan.sh
> +++ b/src/utilities/kernelscan.sh
> @@ -32,17 +32,42 @@ if [ $# -lt 1 ]; then
>  	exit 1
>  fi
>  
> -src=$1
> +KLOG=/usr/share/fwts/klog.json
>  
> -if [ ! -d  $1 ]; then
> -	echo "Path '$1' not found"
> +while [[ $# -gt 0 ]]
> +do
> +
> +case "$1" in
> +	-k)
> +		shift
> +		KLOG=$1
> +		shift
> +		;;
> +	*)
> +		src=$1
> +		shift
> +		;;
> +esac
> +done
> +
> +if [ "$src" == "" ]; then
> +	echo "Please provide path to linux source"
> +	exit 1
> +fi
> +
> +if [ ! -d "$src" ]; then
> +	echo "Path '$src' not found"
> +	exit 1
> +fi
> +if [ ! -e "${KLOG}" ]; then
> +	echo "Path '${KLOG}' not found"
>  	exit 1
>  fi
>  
>  scan_source_file()
>  {
>  	if [ -f $1 ]; then
> -		$KERNELSCAN -P < $1 > $TMP
> +		$KERNELSCAN -k ${KLOG} < $1 > $TMP
>  		if [ $(stat -c%s $TMP) -gt 0 ]; then
>  			echo "Source: $1"
>  			cat $TMP

Acked-by: Ivan Hu <ivan.hu@canonical.com>

Patch
diff mbox series

diff --git a/src/utilities/kernelscan.c b/src/utilities/kernelscan.c
index 1974f53a..c1655fe4 100644
--- a/src/utilities/kernelscan.c
+++ b/src/utilities/kernelscan.c
@@ -191,6 +191,8 @@  static char *funcs[] = {
 
 #define TABLE_SIZE	(5000)
 
+static char *klog_file = DATAROOTDIR "/fwts/klog.json";
+
 static char *hash_funcs[TABLE_SIZE];
 
 static int get_token(parser *p, token *t);
@@ -348,7 +350,7 @@  static klog_pattern *klog_load(const char *table)
 	json_object *klog_table;
 	klog_pattern *patterns;
 
-	klog_objs = json_object_from_file(DATAROOTDIR "/fwts/klog.json");
+	klog_objs = json_object_from_file(klog_file);
 	if (JSON_ERROR(klog_objs)) {
 		fprintf(stderr, "Cannot load klog data\n");
 		exit(EXIT_FAILURE);
@@ -1015,6 +1017,13 @@  static void hash_init(void)
 	}
 }
 
+void help(void)
+{
+	printf("kernelscan:\n");
+	printf("-h\t\thelp\n");
+	printf("-k file\t\tspecify klog json file\n");
+}
+
 /*
  *  Scan kernel source for printk KERN_ERR and dev_err
  *  calls.
@@ -1030,8 +1039,22 @@  static void hash_init(void)
  */
 int main(int argc, char **argv)
 {
-	(void)argc;
-	(void)argv;
+	for (;;) {
+		int c = getopt(argc, argv, "hk:");
+		if (c == -1)
+			break;
+		switch (c) {
+		case 'h':
+			help();
+			exit(0);
+		case 'k':
+			klog_file = optarg;
+			break;
+		default:
+			help();
+			exit(1);
+		}
+	}
 
 	patterns = klog_load("firmware_error_warning_patterns");
 	hash_init();
diff --git a/src/utilities/kernelscan.sh b/src/utilities/kernelscan.sh
index 7b274959..61207662 100755
--- a/src/utilities/kernelscan.sh
+++ b/src/utilities/kernelscan.sh
@@ -32,17 +32,42 @@  if [ $# -lt 1 ]; then
 	exit 1
 fi
 
-src=$1
+KLOG=/usr/share/fwts/klog.json
 
-if [ ! -d  $1 ]; then
-	echo "Path '$1' not found"
+while [[ $# -gt 0 ]]
+do
+
+case "$1" in
+	-k)
+		shift
+		KLOG=$1
+		shift
+		;;
+	*)
+		src=$1
+		shift
+		;;
+esac
+done
+
+if [ "$src" == "" ]; then
+	echo "Please provide path to linux source"
+	exit 1
+fi
+
+if [ ! -d "$src" ]; then
+	echo "Path '$src' not found"
+	exit 1
+fi
+if [ ! -e "${KLOG}" ]; then
+	echo "Path '${KLOG}' not found"
 	exit 1
 fi
 
 scan_source_file()
 {
 	if [ -f $1 ]; then
-		$KERNELSCAN -P < $1 > $TMP
+		$KERNELSCAN -k ${KLOG} < $1 > $TMP
 		if [ $(stat -c%s $TMP) -gt 0 ]; then
 			echo "Source: $1"
 			cat $TMP