Message ID | 20180919074340.15656-1-colin.king@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | kernelscan: add -k option to specify klog json filename | expand |
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>
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>
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