ACK: [PATCH] kernelscan: add -k option to specify klog json filename
Alex Hung
alex.hung at canonical.com
Wed Sep 19 09:45:56 UTC 2018
On 2018-09-19 09:43 AM, Colin King wrote:
> From: Colin Ian King <colin.king at 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 at 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 at canonical.com>
More information about the fwts-devel
mailing list