WP_Query Object
(
    [query] => Array
        (
            [paged] => 34
            [pagename] => about-us/news
        )

    [query_vars] => Array
        (
            [paged] => 34
            [pagename] => about-us/news
            [error] => 
            [m] => 
            [p] => 0
            [post_parent] => 
            [subpost] => 
            [subpost_id] => 
            [attachment] => 
            [attachment_id] => 0
            [name] => 
            [page_id] => 0
            [second] => 
            [minute] => 
            [hour] => 
            [day] => 0
            [monthnum] => 0
            [year] => 0
            [w] => 0
            [category_name] => 
            [tag] => 
            [cat] => 
            [tag_id] => 
            [author] => 
            [author_name] => 
            [feed] => 
            [tb] => 
            [meta_key] => 
            [meta_value] => 
            [preview] => 
            [s] => 
            [sentence] => 
            [title] => 
            [fields] => 
            [menu_order] => 
            [embed] => 
            [category__in] => Array
                (
                )

            [category__not_in] => Array
                (
                    [0] => 1047
                )

            [category__and] => Array
                (
                )

            [post__in] => Array
                (
                )

            [post__not_in] => Array
                (
                )

            [post_name__in] => Array
                (
                )

            [tag__in] => Array
                (
                )

            [tag__not_in] => Array
                (
                )

            [tag__and] => Array
                (
                )

            [tag_slug__in] => Array
                (
                )

            [tag_slug__and] => Array
                (
                )

            [post_parent__in] => Array
                (
                )

            [post_parent__not_in] => Array
                (
                )

            [author__in] => Array
                (
                )

            [author__not_in] => Array
                (
                )

            [orderby] => date
            [post_type] => Array
                (
                    [0] => post
                    [1] => developer_blog
                )

            [post_status] => publish
            [order] => DESC
            [tax_query] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => blog-group
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [operator] => IN
                        )

                    [1] => Array
                        (
                            [taxonomy] => blog-group
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => general-user
                                    [1] => technical-asociate
                                    [2] => qualified-sales-representative
                                    [3] => kvaser-internal
                                )

                            [operator] => NOT IN
                        )

                )

            [ignore_sticky_posts] => 
            [suppress_filters] => 
            [cache_results] => 1
            [update_post_term_cache] => 1
            [lazy_load_term_meta] => 1
            [update_post_meta_cache] => 1
            [posts_per_page] => 10
            [nopaging] => 
            [comments_per_page] => 50
            [no_found_rows] => 
            [taxonomy] => blog-group
            [term] => public
        )

    [tax_query] => WP_Tax_Query Object
        (
            [queries] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => blog-group
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [field] => slug
                            [operator] => IN
                            [include_children] => 1
                        )

                    [1] => Array
                        (
                            [taxonomy] => blog-group
                            [terms] => Array
                                (
                                    [0] => general-user
                                    [1] => technical-asociate
                                    [2] => qualified-sales-representative
                                    [3] => kvaser-internal
                                )

                            [field] => slug
                            [operator] => NOT IN
                            [include_children] => 1
                        )

                    [2] => Array
                        (
                            [taxonomy] => category
                            [terms] => Array
                                (
                                    [0] => 1047
                                )

                            [field] => term_id
                            [operator] => NOT IN
                            [include_children] => 
                        )

                )

            [relation] => AND
            [table_aliases:protected] => Array
                (
                    [0] => wp_term_relationships
                )

            [queried_terms] => Array
                (
                    [blog-group] => Array
                        (
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [field] => slug
                        )

                )

            [primary_table] => wp_posts
            [primary_id_column] => ID
        )

    [meta_query] => WP_Meta_Query Object
        (
            [queries] => Array
                (
                )

            [relation] => 
            [meta_table] => 
            [meta_id_column] => 
            [primary_table] => 
            [primary_id_column] => 
            [table_aliases:protected] => Array
                (
                )

            [clauses:protected] => Array
                (
                )

            [has_or_relation:protected] => 
        )

    [date_query] => 
    [queried_object] => WP_Post Object
        (
            [ID] => 1277
            [post_author] => 38
            [post_date] => 2014-11-21 12:03:40
            [post_date_gmt] => 2013-12-19 15:28:51
            [post_content] => 
            [post_title] => News
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => open
            [ping_status] => open
            [post_password] => 
            [post_name] => news
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2021-08-12 09:14:30
            [post_modified_gmt] => 2021-08-12 09:14:30
            [post_content_filtered] => 
            [post_parent] => 23
            [guid] => https://www.kvaser.com/?page_id=1277
            [menu_order] => 5
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

    [queried_object_id] => 1277
    [request] => SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1  AND ( 
  wp_term_relationships.term_taxonomy_id IN (1026) 
  AND 
  wp_posts.ID NOT IN (
				SELECT object_id
				FROM wp_term_relationships
				WHERE term_taxonomy_id IN (1025,1027,1028,1029)
			) 
  AND 
  wp_posts.ID NOT IN (
				SELECT object_id
				FROM wp_term_relationships
				WHERE term_taxonomy_id IN (1058)
			)
) AND wp_posts.post_type IN ('post', 'developer_blog') AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 330, 10
    [posts] => Array
        (
            [0] => WP_Post Object
                (
                    [ID] => 39856
                    [post_author] => 14
                    [post_date] => 2017-06-05 12:40:15
                    [post_date_gmt] => 2017-06-05 12:40:15
                    [post_content] => [vc_row][vc_column][vc_single_image image="15486"][vc_column_text]This is the second post in a 2-part series about Secure Boot and signing modules on Linux:
  1. Secure Boot on Linux systems
  2. Build and install signed Kvaser driver modules
[/vc_column_text][vc_column_text]The first part was an overview of what Secure Boot actually is and how it affects 3:rd party modules. In this part we take a look at how to build and sign the Kvaser driver modules to be able to use them on a Linux computer that has Secure Boot enabled.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="The Linux system"][vc_column_text]We are doing this on a freshly installed Ubuntu 16.04.[/vc_column_text][vc_code_raket code="JTIwJTIwJTI0JTIwdW5hbWUlMjAtYSUwQSUyMCUyMExpbnV4JTIwbXlwYyUyMDQuOC4wLTUxLWdlbmVyaWMlMjAlMjM1NH4xNi4wNC4xLVVidW50dSUyMFNNUCUyMFdlZCUyMEFwciUyMDI2JTIwMTYlM0EwMCUzQTI4JTIwVVRDJTIwMjAxNyUwQXg4Nl82NCUyMHg4Nl82NCUyMHg4Nl82NCUyMEdOVSUyRkxpbnV4JTBBJTIwJTIwJTI0JTIwbHNiX3JlbGVhc2UlMjAtYSUwQSUyMCUyME5vJTIwTFNCJTIwbW9kdWxlcyUyMGFyZSUyMGF2YWlsYWJsZS4lMEElMjAlMjBEaXN0cmlidXRvciUyMElEJTNBJTIwVWJ1bnR1JTBBJTIwJTIwRGVzY3JpcHRpb24lM0ElMjAlMjAlMjAlMjBVYnVudHUlMjAxNi4wNC4yJTIwTFRTJTBBJTIwJTIwUmVsZWFzZSUzQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDE2LjA0JTBBJTIwJTIwQ29kZW5hbWUlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjB4ZW5pYWw="][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyX2Z0bnJlZjElMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Create certificate and private key"][vc_column_text]The first step is to create a certificate/private RSA key pair which later will be used to sign the kernel modules. Note that since the private key is used to sign modules, viruses and malware could use the private key to sign modules and compromise the operating system. Make sure to keep the private key protected.1 Using the openssl command, we now create a private key and a DER encoded certificate.2 Remember to set the Common Name (CN) field (YOUR_NAME) to something meaningful for a human observer.3 We use kvaser.com as the Common Name in our example.[/vc_column_text][vc_code_raket code="JTIwJTIwJTI0JTIwbWtkaXIlMjB+JTJGc2lnbl9jZXJ0JTBBJTIwJTIwJTI0JTIwY2QlMjB+JTJGc2lnbl9jZXJ0JTBBJTIwJTIwJTIzJTIwQ2hhbmdlJTIwWU9VUl9OQU1FJTIwYmVsb3clMjBmb3IlMjBpZGVudGlmaWNhdGlvbiUyMHB1cnBvc2VzJTJDJTIwd2UlRTIlODAlOTlsbCUyMHVzZSUyMGt2YXNlci5jb20lMEElMjAlMjAlMjQlMjBvcGVuc3NsJTIwcmVxJTIwLW5ldyUyMC14NTA5JTIwLW5ld2tleSUyMHJzYSUzQTIwNDglMjAta2V5b3V0JTIwbW9kdWxlc2lnbi5wcml2JTIwLW91dGZvcm0lMjBERVIlMEEtb3V0JTIwbW9kdWxlc2lnbi5kZXIlMjAtbm9kZXMlMjAtZGF5cyUyMDM2NTAwJTIwLXN1YmolMjAlMjIlMkZDTiUzRFlPVVJfTkFNRSUyRiUyMiUwQQ=="][vc_column_text]We now end up with two files.[/vc_column_text][vc_code_raket code="JTI0JTIwbHMlMEFtb2R1bGVzaWduLmRlciUyMG1vZHVsZXNpZ24ucHJpdg=="][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Import and enroll the public key to the system"][vc_column_text]The next step is to use the mokutil4 command to import the public key so that it can be trusted by the system. This is a two step process where the key is first imported, and then later must be enrolled when the machine is booted the next time. A simple password is good enough, as it is only for temporary use.[/vc_column_text][vc_code_raket code="JTI0JTIwc3VkbyUyMG1va3V0aWwlMjAtLWltcG9ydCUyMG1vZHVsZXNpZ24uZGVyJTBBaW5wdXQlMjBwYXNzd29yZCUzQSUwQWlucHV0JTIwcGFzc3dvcmQlMjBhZ2FpbiUzQQ=="][vc_column_text]We can now verify that the correct certificate has been imported. Here we also note that the Common Name (CN) used above was kvaser.com.[/vc_column_text][vc_code_raket code="JTI0JTIwc3VkbyUyMG1va3V0aWwlMjAtLWxpc3QtbmV3JTBBJTVCa2V5JTIwMSU1RCUwQVNIQTElMjBGaW5nZXJwcmludCUzQSUyMDJjJTNBZDQlM0E1YiUzQWEzJTNBYzYlM0EzNCUzQTNmJTNBYTYlM0ExYSUzQThmJTNBZTMlM0FkMyUzQTIzJTNBOGQlM0E4OCUzQTY5JTNBN2QlM0EzMyUzQWFlJTNBMTIlMEFDZXJ0aWZpY2F0ZSUzQSUwQSUyMCUyMCUyMCUyMERhdGElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBWZXJzaW9uJTNBJTIwMyUyMCUyODB4MiUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFNlcmlhbCUyME51bWJlciUzQSUyMDE4MzE1OTAwMTgxNTc2NTAzNDQ2JTIwJTI4MHhmZTJmMjYyYzYwNjE1MDk2JTI5JTBBJTIwJTIwJTIwJTIwU2lnbmF0dXJlJTIwQWxnb3JpdGhtJTNBJTIwc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBJc3N1ZXIlM0ElMjBDTiUzRGt2YXNlci5jb20lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBWYWxpZGl0eSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME5vdCUyMEJlZm9yZSUzQSUyME1heSUyMCUyMDklMjAwNyUzQTUyJTNBNTYlMjAyMDE3JTIwR01UJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTm90JTIwQWZ0ZXIlMjAlM0ElMjBBcHIlMjAxNSUyMDA3JTNBNTIlM0E1NiUyMDIxMTclMjBHTVQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBTdWJqZWN0JTNBJTIwQ04lM0RrdmFzZXIuY29tJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU3ViamVjdCUyMFB1YmxpYyUyMEtleSUyMEluZm8lM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBQdWJsaWMlMjBLZXklMjBBbGdvcml0aG0lM0ElMjByc2FFbmNyeXB0aW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUHVibGljLUtleSUzQSUyMCUyODIwNDglMjBiaXQlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNb2R1bHVzJTNBJTBBJTNBJTBBJTNBJTBB"][vc_column_text]Now reboot the machine. When the bootloader starts, the MOK manager EFI utility should automatically start. On my machine I got a screen with white text on light blue background, telling me to "Press any key to perform MOK management" and "Booting in 10 seconds"5, YMMV. Choose "Enroll MOK", select the key, and enroll the key. We will be asked for the password we set during the import step above. Complete the enrollment steps, then continue with the boot. The Linux kernel will log the keys that are loaded, and we can see our own key with the dmesg command.[/vc_column_text][vc_code_raket code="JTIwJTIwJTI0JTIwZG1lc2clN0NncmVwJTIwJUUyJTgwJTk5RUZJJTNBJTIwTG9hZGVkJTIwY2VydCVFMiU4MCU5OSUwQSUyMCUyMCU1QiUyMCUyMCUyMCUyMDAuNjcxODk3JTVEJTIwRUZJJTNBJTIwTG9hZGVkJTIwY2VydCUyMCVFMiU4MCU5OU1pY3Jvc29mdCUyMFdpbmRvd3MlMjBQcm9kdWN0aW9uJTIwUENBJTIwMjAxMSUzQSUwQWE5MjkwMjM5OGUxNmM0OTc3OGNkOTBmOTllNGY5YWUxN2M1NWFmNTMlRTIlODAlOTklMjBsaW5rZWQlMjB0byUyMCVFMiU4MCU5OS5idWlsdGluX3RydXN0ZWRfa2V5cyVFMiU4MCU5OSUwQSUyMCUyMCU1QiUyMCUyMCUyMCUyMDAuNjcxOTA4JTVEJTIwRUZJJTNBJTIwTG9hZGVkJTIwY2VydCUyMCVFMiU4MCU5OU1pY3Jvc29mdCUyMENvcnBvcmF0aW9uJTIwVUVGSSUyMENBJTIwMjAxMSUzQSUwQTEzYWRiZjQzMDliZDgyNzA5YzhjZDU0ZjMxNmVkNTIyOTg4YTFiZDQlRTIlODAlOTklMjBsaW5rZWQlMjB0byUyMCVFMiU4MCU5OS5idWlsdGluX3RydXN0ZWRfa2V5cyVFMiU4MCU5OSUwQSUyMCUyMCU1QiUyMCUyMCUyMCUyMDAuNjczNzcxJTVEJTIwRUZJJTNBJTIwTG9hZGVkJTIwY2VydCUyMCVFMiU4MCU5OWt2YXNlci5jb20lM0ElMjA3NGZkODkyOWQ5ZTJmYjY0YTliZDBhYmUzYmRmJTBBNDJkNTE5YjczODJmJUUyJTgwJTk5JTIwbGlua2VkJTIwdG8lMjAlRTIlODAlOTkuYnVpbHRpbl90cnVzdGVkX2tleXMlRTIlODAlOTklMEElMjAlMjAlNUIlMjAlMjAlMjAlMjAwLjY3MzkwMiU1RCUyMEVGSSUzQSUyMExvYWRlZCUyMGNlcnQlMjAlRTIlODAlOTlDYW5vbmljYWwlMjBMdGQuJTIwTWFzdGVyJTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklM0ElMEFhZDkxOTkwYmMyMmFiMWY1MTcwNDhjMjNiNjY1NWEyNjhlMzQ1YTYzJUUyJTgwJTk5JTIwbGlua2VkJTIwdG8lMjAlRTIlODAlOTkuYnVpbHRpbl90cnVzdGVkX2tleXMlRTIlODAlOTk="][vc_column_text]We can now also test that our certificate has been enrolled using the mokutil command.[/vc_column_text][vc_code_raket code="JTI0JTIwY2QlMjB+JTJGc2lnbl9jZXJ0JTBBJTI0JTIwbW9rdXRpbCUyMC0tdGVzdC1rZXklMjBtb2R1bGVzaWduLmRlciUwQW1vZHVsZXNpZ24uZGVyJTIwaXMlMjBhbHJlYWR5JTIwZW5yb2xsZWQlMEE="][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Build, sign and install the modules"][vc_column_text]Before building, we need to download the latest version of linuxcan from the Kvaser download page, which as of this writing is v5.20.6[/vc_column_text][vc_code_raket code="JTI0JTIwd2dldCUyMGh0dHAlM0ElMkYlMkZ3d3cua3Zhc2VyLmNvbSUyRnNvZnR3YXJlJTJGNzMzMDEzMDk4MDc1NCUyRlY1XzIwXzAlMkZsaW51eGNhbi50YXIuZ3olMEElMjQlMjB0YXIlMjB4dnpmJTIwbGludXhjYW4udGFyLmd6JTBBJTI0JTIwY2QlMjBsaW51eGNhbiUwQQ=="][vc_column_text]In order to make it easy for us to sign the files as part of the normal build process, we modify the kv_module target in the file config.mak as follows.7[/vc_column_text][vc_code_raket code="JTIzJTIwVGFyZ2V0JTIwZm91bmQlMjBpbiUyMGNvbmZpZy5tYWslMjBsb2NhdGVkJTIwaW4lMjB0aGUlMjB0b3AlMjBsZXZlbCUyMGRpcmVjdG9yeSUyMG9mJTIwbGludXhjYW4lMEFrdl9tb2R1bGUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNDBlY2hvJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNDBlY2hvJTIwJTIyYnVpbGRpbmclMjAlMjQlMjhLVl9NT0RVTEVfTkFNRSUyOSUyMCUyNCUyOElTX0RFQlVHJTI5JTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTQwZWNobyUyMCUyMktlcm5lbCUyMHNyYyUzQSUyMiUyMCUyNCUyOEtWX0tFUk5FTF9TUkNfRElSJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0JTI4TUFLRSUyOSUyMC1DJTIwJTI0JTI4S1ZfS0VSTkVMX1NSQ19ESVIlMjklMjBTVUJESVJTJTNEJTI0JTI4UFdEJTI5JTIwbW9kdWxlcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU0MGlmJTIwJTVCJTIwJTIyJTI0JTI4S1ZfU0lHTl9DRVJUX1BBVEglMjklMjIlMjAlMjElM0QlMjAlMjIlMjIlMjAlNUQlMjAlMjYlMjYlMjAlNUIlMjAlMjIlMjQlMjhLVl9TSUdOX0NFUlRfTkFNRSUyOSUyMiUyMCUyMSUzRCUyMCUyMiUyMiUyMCU1RCUzQiUyMHRoZW4lMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlY2hvJTIwJTIyU2lnbmluZyUyMG1vZHVsZSUyMCUyNCUyOEtWX01PRFVMRV9OQU1FJTI5LmtvJTIwd2l0aCUyMCUyNCUyOEtWX1NJR05fQ0VSVF9QQVRIJTI5JTJGJTI0JTI4S1ZfU0lHTl9DRVJUX05BTUUlMjklMjIlM0IlMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjQlMjhLVl9LRVJORUxfU1JDX0RJUiUyOSUyRnNjcmlwdHMlMkZzaWduLWZpbGUlMjBzaGEyNTYlMjAlMjQlMjhLVl9TSUdOX0NFUlRfUEFUSCUyOSUyRiUyNCUyOEtWX1NJR05fQ0VSVF9OQU1FJTI5LnByaXYlMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjQlMjhLVl9TSUdOX0NFUlRfUEFUSCUyOSUyRiUyNCUyOEtWX1NJR05fQ0VSVF9OQU1FJTI5LmRlciUyMCUyNCUyOEtWX01PRFVMRV9OQU1FJTI5LmtvJTNCJTIwJTVDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNDBlY2hvJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0="][vc_column_text]It is now possible to build and sign the driver modules using the normal make command by just adding the two environment variables KV_SIGN_CERT_PATH and KV_SIGN_CERT_NAME. We also install the module after building.[/vc_column_text][vc_code_raket code="JTIwJTIzJTIwS1ZfU0lHTl9DRVJUX1BBVEglMjBpcyUyMHRoZSUyMHBhdGglMjB0byUyMHlvdXIlMjBwcml2YXRlJTIwa2V5JTIwYW5kJTIwY2VydGlmaWNhdGUuJTBBJTIwJTIzJTIwS1ZfU0lHTl9DRVJUX05BTUUlMjBpcyUyMHRoZSUyMGJhc2UlMjBmaWxlJTIwbmFtZSUyMG9mJTIweW91ciUyMHByaXZhdGUlMjBrZXklMjBhbmQlMEFjZXJ0aWZpY2F0ZSUyQyUyMHdpdGhvdXQlMjBzdWZmaXguJTBBJTIwJTI0JTIwbWFrZSUyMEtWX1NJR05fQ0VSVF9QQVRIJTNEfiUyRnNpZ25fY2VydCUyMEtWX1NJR05fQ0VSVF9OQU1FJTNEbW9kdWxlc2lnbiUwQSUyMCUyNCUyMHN1ZG8lMjBtYWtlJTIwaW5zdGFsbA=="][vc_column_text]To verify that the installed module is working, we use the modprobe command to manually load a module and verify that it has been loaded.8 We also make sure to remove the module so we don't interfere with the automatic loading when Kvaser USB devices are connected.[/vc_column_text][vc_code_raket code="JTI0JTIwc3VkbyUyMG1vZHByb2JlJTIwbWh5ZHJhJTBBJTI0JTIwbHNtb2QlMjAlN0MlMjBncmVwJTIwJUUyJTgwJTk5a3Zjb21tb24lNUMlN0NtaHlkcmElRTIlODAlOTklMEFtaHlkcmElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA0NTA1NiUyMCUyMDAlMEFrdmNvbW1vbiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDQ1MDU2JTIwJTIwMSUyMG1oeWRyYSUwQSUwQSUyNCUyMHN1ZG8lMjBtb2Rwcm9iZSUyMC1yJTIwbWh5ZHJhJTIwa3Zjb21tb24lMEE="][/vc_column][/vc_row][vc_row][vc_column][vc_column_text][/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h2" header="Footnotes"][vc_column_text]1 Some notes regarding protecting the private key can be found in the Linux kernel documentation at https://static.lwn.net/kerneldoc/admin-guide/module-signing.html#administering-protecting-the-private-key. 2 You can read more about the different X509 file extensions such as DER in the SSL installation knowledge base at https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them/. 3 For a description of the significance of the Common Name, read more in the stackexchange article at https://security.stackexchange.com/questions/40026/openssl-x509-whats-the-significance-of-cn-common-name/. 4 You use the mokutil command to manage Machine Owner Keys (MOK) used by the shim layer to validate grub2 and kernel images. 5 If you miss this timeout, you need to rerun the mokutil --import command and reboot again. 6 Kvaser download page is located at https://www.kvaser.com/download. 7 The adjusted makefile target will be incorporated in the next release of linuxcan. 8 Unfortunatly it is currently not possible to use modinfo to see if a module is signed or not, see the github issue in coreos at https://github.com/coreos/bugs/issues/1054/ for more information.[/vc_column_text][/vc_column][/vc_row] [post_title] => Build and install signed Kvaser driver modules [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => build-install-signed-kvaser-driver-modules [to_ping] => [pinged] => [post_modified] => 2022-10-04 12:42:57 [post_modified_gmt] => 2022-10-04 12:42:57 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39856 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [1] => WP_Post Object ( [ID] => 16862 [post_author] => 5 [post_date] => 2017-05-30 15:11:03 [post_date_gmt] => 2017-05-30 15:11:03 [post_content] => [vc_row][vc_column][vc_single_image image="16935"][vc_column_text]At speeds of up to 50 miles per hour, the human cough is a powerful mechanism for expelling liquid from the lungs. The problem is, it is also an efficient means of spreading disease, which is why simulating human coughs and sneezes is a lively area of scientific research, and one in which CAN has found a role.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Bill Lindsley and colleagues from the National Institute for Occupational Safety and Health (NIOSH), within the US Centers for Disease Control and Prevention, have developed a cough simulator that operates in a controlled environment, to study how diseases like influenza can spread via airborne droplets and test the efficacy of different protective measures.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]In a paper entitled ‘A Cough Aerosol Simulator for the Study of Disease Transmission by Human Cough-Generated Aerosols’, Lindsley and his colleagues describe their mechanical cough aerosol simulator in detail. CAN is used to communicate between a linear motor from Copley Controls, which drives the stainless-steel bellows, and a computer. CAN is ideal for situations in which a greater distance may be required between the computer and the motor control, as in the case of this system where the control system sits outside the test chamber. The simulator uses a Kvaser Leaf Light HS v2, recommended by Copley, to connect the motor and the computer, transmitting control commands from a custom built National Instrument’s LabVIEW program, and sending back motor position feedback.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text]Accurate motor control is important, as different flow rates and aerosol volumes are used to reproduce various cough types. Comments Lindsley: “Simulating a cough involves replicating an intake of breath, closing the throat and building up pressure, followed by a sharp release of air from the lungs. The cough simulator is synchronized with a breathing simulator so that the cough initiates at the start of an inhalation cycle, with the resulting violent expulsion of air expelling aerosol particles in a detectable two-metre long airflow. After this, the particles spread as they are carried about a room by air currents.”[/vc_column_text][/vc_column][vc_column width="1/2"][vc_single_image image="16932"][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Whilst the initial cough simulator was designed to simulate the dispersion of cough aerosols in a medical examination room, the latest version of the device replicates an aircraft cabin and Lindsley’s research explores how to isolate someone who is developing symptoms of a disease such as SARS or pandemic flu. For the frequent travelers among our customers, you may be interested to know that this research is leading to development of a foldaway curtain for use around ‘at risk’ passengers, at least for US aircraft![/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_separator_raket][/vc_column][/vc_row] [post_title] => Simulating coughs at altitude involves CAN [post_excerpt] => Bill Lindsley and colleagues from the National Institute for Occupational Safety and Health have developed a cough simulator to study how diseases spread and they're using CAN to accomplish that. [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => simulating-coughs-altitude-involves-can [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:51 [post_modified_gmt] => 2022-09-29 05:16:51 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=16862 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [2] => WP_Post Object ( [ID] => 39857 [post_author] => 14 [post_date] => 2017-05-29 12:43:30 [post_date_gmt] => 2017-05-29 12:43:30 [post_content] => [vc_row][vc_column][vc_single_image image="15486" img_size="large"][vc_column_text]This is the first post in a 2-part series about Secure Boot and signing modules on Linux:
  1. Secure Boot on Linux systems
  2. Build and install signed Kvaser driver modules
[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="What is Secure Boot?"][vc_column_text]"Secure Boot" is a UEFI feature that appeared in 2012, with Windows 8 preinstalled computers. All current Ubuntu 64-bit (not 32-bit) versions now support this feature. In brief, Secure Boot works by placing the root of trust in firmware. While other implementations are possible, in practice the chain of trust is achieved via x509 certificates. A root certificate1 is embedded in firmware such that it can then validate the signed bootloader, the signed bootloader can then validate the signed kernel or signed 2nd stage boot loader, and so on. More information about Secure Boot can be found on the Ubuntu wiki.2 In order to use Secure Boot, we need to boot the system using UEFI, instead of the older BIOS.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="What is the difference between BIOS and UEFI?"][vc_column_text]Both initializes a computer and their task is to load an operating system. BIOS boots by reading the first sector on a hard disk, the master boot record (MBR), and executing it. By contrast, UEFI boots by loading EFI program files (with .efi filename extensions) from a partition on the hard disk, known as the EFI System Partition (ESP).3[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Did my Linux system boot using UEFI or BIOS?"][vc_column_text]The easiest way is to check if the folder /sys/firmware/efi exists.[/vc_column_text][vc_code_raket code="c2VjdXJlQm9vdCUzQX4lMjQlMjBscyUyMCUyRnN5cyUyRmZpcm13YXJlJTJGZWZpJTJGJTBBY29uZmlnX3RhYmxlJTIwJTIwZndfcGxhdGZvcm1fc2l6ZSUyMCUyMHJ1bnRpbWUlMjAlMjAlMjAlMjAlMjAlMjBzeXN0YWIlMEFlZml2YXJzJTIwJTIwJTIwJTIwJTIwJTIwJTIwZndfdmVuZG9yJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcnVudGltZS1tYXAlMjAlMjB2YXJzJTBB"][vc_column_text]The folder /sys/firmware/efi does not appear if the Linux computer was booted using traditional BIOS.[/vc_column_text][vc_code_raket code="bGVnYWN5JTNBfiUyNCUyMGxzJTIwJTJGc3lzJTJGZmlybXdhcmUlMkZlZmklMEFscyUzQSUyMGNhbm5vdCUyMGFjY2VzcyUyMCUyRnN5cyUyRmZpcm13YXJlJTJGZWZpJTNBJTIwTm8lMjBzdWNoJTIwZmlsZSUyMG9yJTIwZGlyZWN0b3J5"][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Did my Linux system boot using Secure Boot?"][vc_column_text]The mokutil command is used to manage Machine Owner Keys (MOK). These keys are used by the shim layer to validate grub2 and kernel images and can also be used to verify that Secure Boot is enabled.[/vc_column_text][vc_code_raket code="c2VjdXJlQm9vdCUzQX4lMjQlMjBtb2t1dGlsJTIwLS1zYi1zdGF0ZSUwQVNlY3VyZUJvb3QlMjBlbmFibGVkJTBB"][vc_column_text]We can also use the mokutil command to view all currently enrolled keys.[/vc_column_text][vc_code_raket code="c2VjdXJlQm9vdCUzQX4lMjQlMjBtb2t1dGlsJTIwLS1saXN0LWVucm9sbGVk"][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="What are the symptoms of unsigned modules?"][vc_column_text]If we have compiled and installed the Kvaser driver modules without a valid signature on a computer where Secure Boot is enabled, we will not get any channels reported running the listChannels example, even though we have attached a Kvaser interface.[/vc_column_text][vc_code_raket code="c2VjdXJlQm9vdCUzQX4lMjQlMjAuJTJGbGlzdENoYW5uZWxzJTBBQ2FubGliJTIwdmVyc2lvbiUyMDUuMjAlMEFGb3VuZCUyMDAlMjBjaGFubmVsJTI4cyUyOS4lMEE="][vc_column_text]We can verify that the Kvaser interface actually was attached and recognized by the USB subsystem using the lsusb command.[/vc_column_text][vc_code_raket code="c2VjdXJlQm9vdCUzQX4lMjQlMjBsc3VzYiUyMCU3QyUyMGdyZXAlMjBLdmFzZXIlMEFCdXMlMjAwMDMlMjBEZXZpY2UlMjAwMDglM0ElMjBJRCUyMDBiZmQlM0EwMTA4JTIwS3Zhc2VyJTIwQUI="][vc_column_text]We now look for errors in the system log and will find a variation of the error "Required key not available".[/vc_column_text][vc_code_raket code="JTIwJTIwYXByJTIwMTklMjAxNiUzQTA1JTNBMzglMjBteXBjJTIwJTJGdXNyJTJGc2JpbiUyRm1oeWRyYS5zaCU1QjIyNzg5JTVEJTNBJTIwbW9kcHJvYmUlM0ElMjBFUlJPUiUzQSUyMGNvdWxkJTIwbm90JTIwaW5zZXJ0JTIwJUUyJTgwJTk5bWh5ZHJhJUUyJTgwJTk5JTNBJTBBUmVxdWlyZWQlMjBrZXklMjBub3QlMjBhdmFpbGFibGUlMEElMjAlMjBhcHIlMjAxOSUyMDE2JTNBMDUlM0EzOCUyMG15cGMlMjBzeXN0ZW1kLXVkZXZkJTVCMjI3NzYlNUQlM0ElMjBQcm9jZXNzJTIwJUUyJTgwJTk5JTJGdXNyJTJGc2JpbiUyRm1oeWRyYS5zaCUyMHN0YXJ0JUUyJTgwJTk5JTIwZmFpbGVkJTBBd2l0aCUyMGV4aXQlMjBjb2RlJTIwMS4lMEE="][vc_column_text]This tells us that we need to sign our modules to make them work on our computer. We will take a look at how to build and sign the Kvaser driver modules to be able to use them on a Linux computer that has Secure Boot enabled in the next part.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text] [/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h2" header="Footnotes"][vc_column_text]1 A root certificate is a certificate issued by a trusted Certificate Authority (CA). 2 Read more about Secure Boot on the Ubuntu wiki at https://wiki.ubuntu.com/SecurityTeam/SecureBoot/. 3 A comparison between BIOS and UEFI can be found in the superuser article at https://superuser.com/questions/496026/what-is-the-difference-in-boot-with-bios-and-boot-with-uefi.[/vc_column_text][/vc_column][/vc_row] [post_title] => Secure Boot on Linux systems [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => secure-boot-linux-systems [to_ping] => [pinged] => [post_modified] => 2022-10-04 12:45:01 [post_modified_gmt] => 2022-10-04 12:45:01 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39857 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [3] => WP_Post Object ( [ID] => 15922 [post_author] => 2448 [post_date] => 2017-05-01 22:10:06 [post_date_gmt] => 2017-05-01 22:10:06 [post_content] => [vc_row][vc_column][vc_column_text]We have been using t-Scripts to tackle a wide variety of cases lately. Here’s a list for a little inspiration for your projects:
  • handheld reflashing/recalibration tools
  • node simulators
  • CAN FD gateways with data encryption
  • light Hardware-In-the-Loop controllers
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]With each project, there are hurdles to overcome, and it seems like we consistently revisit 3 resources. Let me share: [/vc_column_text][vc_header_raket header_type="h3" header="Kvaser’s Examples"][vc_column_text css=".vc_custom_1548328045200{margin-top: -10px !important;}"]Yes, t-Script examples are included (and hidden!) in their SDK (you can download the latest SDK from Kvaser’s site here). After installation, you can find them in this Windows directory-> C:\Program Files (x86)\Kvaser\Canlib\Samples\tScript. You will find examples from the ubiquitous “Hello World” sample to more niche samples that walk you through how to use a Database Container File (.dbc file or DBC file), and File I/O. Make sure to check out the Learn More/Misc subdirectory as well.[/vc_column_text][vc_header_raket header_type="h3" header="t Language Manual"][vc_column_text css=".vc_custom_1493672263377{margin-top: -10px !important;}"]This is the handbook of t The easiest way to access it is to open up TRX (the t Script IDE) click on “Help” from the upper toolbar, and select “Open the Kvaser t Language Manual.” [/vc_column_text][vc_header_raket header_type="h3" header="printf Function for Debugging"][vc_column_text css=".vc_custom_1493672275652{margin-top: -10px !important;}"]This is a life saver for tracking down any problem you run into. You can use simple implementations of this like printf(“Reached Condition A”); to make sure a code block is reached. [/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]BONUS TIP for those of you using a Memorator: if you experience a non-responsive situation when running your t script, and the device stays powered up after you disconnect the USB from your PC, the device is stuck in a continuous loop that you have somewhere in your script! Hope this helps you on your journey creating killer t scripts! This is one of a series of posts by Judson on using t-script to its fullest. Part 1: t Script Roadblock Resolutions: Implementing a Program Flow using Hooks[/vc_column_text][/vc_column][/vc_row][vc_row css=".vc_custom_1491862692416{margin-right: 0px !important;margin-left: 0px !important;border-radius: 4px !important;}"][vc_column][vc_row_inner][vc_column_inner width="1/4"][vc_single_image image="15968"][/vc_column_inner][vc_column_inner width="3/4"][vc_header_raket header_type="h3" header="Judson Brundage"][vc_column_text]As owner of Exclusive Origin, based in Florida, USA, Judson Brundage provides test and diagnostics hardware and software to the automotive industry. With an in-depth knowledge of CAN and automotive HLPs, he’s a highly-respected problem solver to the automotive development community.[/vc_column_text][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row] [post_title] => Part 2: t Script Roadblock Resolutions: 3 t script Resources You Can’t Do Without (Plus a bonus tip!) [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => t-script-roadblock-resolutions-3-t-script-resources-cant-without-plus-bonus-tip [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:49 [post_modified_gmt] => 2022-09-29 05:16:49 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=15922 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [4] => WP_Post Object ( [ID] => 15918 [post_author] => 2448 [post_date] => 2017-04-10 22:26:32 [post_date_gmt] => 2017-04-10 22:26:32 [post_content] => [vc_row][vc_column][vc_column_text]If you are familiar with t scripts, you know that they are based on “hooks”. Hooks are like interrupts. The runtime engine waits for these hooks, then executes the code that is inside its code block. For example, let’s say you need to respond to a CAN message with an ID of 0x200. The t script code would look something like:[/vc_column_text][vc_code_raket code="T24lMjBDYW5NZXNzYWdlJTIwMHgyMDAlN0IlMEElMjAlMjByZXBseUZ1bmMlMjglMjklM0IlMEElN0QlMEE="][vc_column_text]When we receive a CAN message with an ID of 0x200, our t script will raise replyFunc() to, say, send a CAN response message, then it will leave the code block when complete. However, each time we receive a message from ID 0x200 we start at the same point. This can make executing a sequence of events challenging. By implementing a switch/case statement with a global incrementor, we can enter the hook and reference the incrementor, just as you would use a bookmark. We will execute some process, and increment to bookmark before we leave. See the code example below:[/vc_column_text][vc_code_raket code="T24lMjBDYW5NZXNzYWdlJTIwMHgyMDAlN0IlMEElMjAlMjBzd2l0Y2glMjhib29rbWFyayUyOSU3QiUwQSUyMCUyMCUyMCUyMGNhc2UlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwcmVwbHlGdW5jU3RlcE9uZSUyOCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGJvb2ttYXJrJTJCJTJCJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslM0IlMEElMjAlMjAlMjAlMjBjYXNlJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMHJlcGx5RnVuY1N0ZXBUd28lMjglMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBib29rbWFyayUyQiUyQiUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTNCJTBBJTIwJTIwJTIwJTIwY2FzZSUyMDIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjByZXBseUZ1bmNTdGVwVGhyZWUlMjglMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBib29rbWFyayUyQiUyQiUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTNCJTBBJTIwJTIwJTdEJTBBJTdE"][vc_column_text]So Kvasers' t script hooks handle an event and the bookmark switch/case approach creates a sequence of events. Reflashing is a perfect example of such a sequence of events. We leverage this simple, yet effective technique to follow the Unified Diagnostic Services (UDS)-prescribed sequence of events to build reflashing tools (I wrote an article about that here, check it out!) and CAN Calibration Protocol (CCP) calibration tools. If you’d like a template t script of this strategy outlined above, you can download it here. If you’d like Exclusive Origin to design a t script to turn a Memorator into a handheld reflashing or recalibration tool, please contact us![/vc_column_text][vc_column_text]This is one of a series of posts by Judson on using t-script to its fullest. Part 2: t Script Roadblock Resolutions: 3 t script Resources You Can’t Do Without (Plus a bonus tip!)[/vc_column_text][/vc_column][/vc_row][vc_row css=".vc_custom_1491862692416{margin-right: 0px !important;margin-left: 0px !important;border-radius: 4px !important;}"][vc_column][vc_row_inner][vc_column_inner width="1/4"][vc_single_image image="15968"][/vc_column_inner][vc_column_inner width="3/4"][vc_header_raket header_type="h3" header="Judson Brundage"][vc_column_text]As owner of Exclusive Origin, based in Florida, USA, Judson Brundage provides test and diagnostics hardware and software to the automotive industry. With an in-depth knowledge of CAN and automotive HLPs, he’s a highly-respected problem solver to the automotive development community.[/vc_column_text][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row] [post_title] => Part 1: t Script Roadblock Resolutions: Implementing a Program Flow using Hooks [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => t-script-roadblock-resolutions-implementing-program-flow-using-hooks [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:49 [post_modified_gmt] => 2022-09-29 05:16:49 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=15918 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [5] => WP_Post Object ( [ID] => 15904 [post_author] => 23 [post_date] => 2017-04-03 23:23:20 [post_date_gmt] => 2017-04-03 23:23:20 [post_content] => [vc_row][vc_column][vc_single_image image="15908" onclick="custom_link" link="https://roboticsandautomationnews.com/2017/03/18/controller-area-network-no-need-for-a-computer/11891/"][vc_column_text]Research Manager Kent Lennartsson has been featured in Robotics and Automation News, discussing the many advantages of CAN for robotics automation, along with Kvaser’s role in the development of Nexi, Cynthia Breazeal’s mobile, dexterous and social robot, named among the 50 Best Inventions by Time magazine in 2008. Learn more about CAN for robotics with the full article: Controller Area Network: No Need for a Computer.[/vc_column_text][/vc_column][/vc_row][vc_row disable_element="yes"][vc_column][vc_single_image image="15906" onclick="custom_link" link="https://roboticsandautomationnews.com/2017/03/18/controller-area-network-no-need-for-a-computer/11891/"][/vc_column][/vc_row] [post_title] => Research Manager Kent Lennartsson Shares His Thoughts on CAN and Robotics With Robotics and Automation News [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => research-manager-kent-lennartsson-shares-his-thoughts-on-can-and-robotics-with-robotics-and-automation-news [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:49 [post_modified_gmt] => 2022-09-29 05:16:49 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=15904 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [6] => WP_Post Object ( [ID] => 15637 [post_author] => 23 [post_date] => 2017-03-20 23:47:53 [post_date_gmt] => 2017-03-20 23:47:53 [post_content] => [vc_row][vc_column][vc_single_image image="15641"][vc_column_text]Meet the Ethercan Light HS, Kvaser’s answer to the complex CAN-to-Ethernet connectivity gateways available in today’s market. This device, capable of being linked via the internet through an Ethernet-connected PC, allows users to access CAN data from anywhere in the world. Kvaser’s Ethercan also offers “Internet of Things” communication capabilities between CAN products, making CAN and Ethernet more compatible than ever before.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Advantages of the Ethercan Light HS"][vc_column_text]While USB has traditionally been the method for CAN bus data transmission, the inability to access this data remotely can be a drawback. Luckily, Ethernet can be used for the transmission of data within any industry utilizing CAN products. Unfortunately, reconciling CAN and Ethernet has proven challenging in the past, with many connectivity gateways lacking reliability and ease—until the Ethercan Light HS. Kvaser’s Ethercan is capable of automatically detecting and adjusting for either crossover or straight-through Ethernet cable connections. This easy-to-use Ethernet connectivity gateway also allows users to foster a more stable connection than traditional CAN-to-USB systems, making slight internet disruptions a non-issue for real-time data collection. The Ethercan Light HS also features:
  • High-speed CAN connection, up to 1 Megabit per second
  • Power over Ethernet (PoE) or through CAN devices like the T-Cannector v2
  • Factory reset button for returning to default setting for the Ethercan’s IP address
  • Full compatibility with J1939, CANopen, NME 2000R and DeviceNet
  • Light weight, compact, galvanically isolated shell
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Kvaser's Ethercan in the Real World"][vc_column_text]In the time-sensitive world of shipping, Kvaser’s Ethercan Light HS is used to increase efficiency among equipment and personnel. In collaboration with Datamatics’ Neptuno TOS, a telemetry system that allows users to have an overview of all collected data within a shipping terminal, the Ethercan Light HS was used to provide real-time information to crane operators and foremen to better track all shipping container activity. This increased connectivity allows personnel to track crane specifics like fuel consumption, load weight and crane lift, with the goal of utilizing this real-time information to ensure proper crane functionality and prevent unexpected downtime. Imagine a simple solution for CAN-to-Ethernet connectivity. Get started with simplifying your CAN-to-Ethernet system with the Ethercan HS Light. Learn more about product specifications and purchasing information here. You can also read more about the use of Ethercan to maximize efficiency of container port cranes here.[/vc_column_text][/vc_column][/vc_row] [post_title] => Kvaser's Ethercan: The Simplest CAN-to-Ethernet Connectivity Solution [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => kvasers-ethercan-simplest-can-ethernet-connectivity-solution [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:49 [post_modified_gmt] => 2022-09-29 05:16:49 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=15637 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [7] => WP_Post Object ( [ID] => 15566 [post_author] => 23 [post_date] => 2017-03-07 02:01:11 [post_date_gmt] => 2017-03-07 02:01:11 [post_content] => [vc_row][vc_column width="5/6"][vc_single_image image="15571"][/vc_column][vc_column width="1/6"][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Kvaser’s own Research Manager, Kent Lennartsson, has been featured in Remote Magazine! This article focuses on the use of both CAN and Ethernet in industrial automation. Topics covered include:
  • Advantages and disadvantages of both CAN and Ethernet
  • Implications for CAN FD in the industrial process
  • The possibility of CAN and Ethernet in harmony
[/vc_column_text][vc_column_text]For detailed information on CAN and Ethernet technologies in industrial automation, click to check out the article: “CAN Versus Ethernet: Advantages, Disadvantages and Alternatives for Industrial Automation”.[/vc_column_text][vc_column_text]You can also read more about Ethercan, Kvaser’s CAN to Ethernet interface, in action: “Kvaser’s Ethercan Provides Secure Link for Container Port Crane CAN Monitoring”.[/vc_column_text][/vc_column][/vc_row] [post_title] => Remote Magazine Discusses Both CAN and Ethernet in Industrial Automation with Kvaser’s Research Manager, Kent Lennartsson [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => remote-magazine-discusses-can-ethernet-industrial-automation-kvasers-research-manager-kent-lennartsson [to_ping] => [pinged] => [post_modified] => 2022-09-29 05:16:49 [post_modified_gmt] => 2022-09-29 05:16:49 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=15566 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [8] => WP_Post Object ( [ID] => 39859 [post_author] => 14 [post_date] => 2017-02-27 12:51:50 [post_date_gmt] => 2017-02-27 12:51:50 [post_content] => [vc_row][vc_column][vc_single_image image="15486"][vc_column_text]This is the final post in a 3-part series about using the Converter Library (kvlclib) in CANlib SDK:
  1. Writer formats and properties (1 of 3)
  2. Converting to plain ASCII (2 of 3)
  3. Special converter conditions (3 of 3)
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]In the second part of this blog series, we created a simple program to convert a kme50 log file to plain text. We will now continue and look at the three special conditions that can arise when converting a log file; overrun, data truncation, and change in output filename:
[/vc_column_text][vc_column_text]Overrun can occur during logging with a Memorator if the bus load exceeds the logging capacity. This condition can be detected via our converter by calling isOverrunActive(). Once the overrun has been noted, we need to manually reset the state in our converter using resetOverrunActive(). Data truncation occurs when the selected output converter can’t write all bytes in a data frame to the output file. This can happen if CAN FD data is extracted to a format that only supports up to 8 data bytes, e.g. KME40. This condition is reset by a call to resetStatusTruncated(). New output filename is a change in the output filename that occurs when the converter creates a new file. This can e.g. be the result of splitting output files (which we will look into briefly later).1 The call to isOutputFilenameNew() will return True when the last converted event resulted in the creation of a new output file. This condition will automatically reset during the next call to convertEvent(). We can get the name of the newly created output file by calling getOutputFilename().[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Let us now create a function that, beside of doing the actual conversion, also looks for the above conditions and prints some informational messages to the user.[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwY29udmVydEV2ZW50cyUyOGNudiUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEdldCUyMGVzdGltYXRlZCUyMG51bWJlciUyMG9mJTIwcmVtYWluaW5nJTIwZXZlbnRzJTIwaW4lMjB0aGUlMjBpbnB1dCUyMGZpbGUuJTIwVGhpcyUwQSUyMCUyMCUyMCUyMCUyMyUyMGNhbiUyMGJlJTIwdXNlZnVsJTIwZm9yJTIwZGlzcGxheWluZyUyMHByb2dyZXNzJTIwZHVyaW5nJTIwY29udmVyc2lvbi4lMEElMjAlMjAlMjAlMjB0b3RhbCUyMCUzRCUyMGNudi5ldmVudENvdW50JTI4JTI5JTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJDb252ZXJ0aW5nJTIwYWJvdXQlMjAlMjVkJTIwZXZlbnRzLi4uJTIyJTIwJTI1JTIwdG90YWwlMjklMEElMjAlMjAlMjAlMjB3aGlsZSUyMFRydWUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDb252ZXJ0JTIwZXZlbnRzJTIwZnJvbSUyMGlucHV0JTIwZmlsZSUyMG9uZSUyMGJ5JTIwb25lJTIwdW50aWwlMjBFT0YlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBpcyUyMHJlYWNoZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjbnYuY29udmVydEV2ZW50JTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBjbnYuaXNPdXRwdXRGaWxlbmFtZU5ldyUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3TmV3JTIwb3V0cHV0JTIwZmlsZW5hbWUlM0ElMjclMkMlMjBjbnYuZ2V0T3V0cHV0RmlsZW5hbWUlMjglMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN0Fib3V0JTIwJTI1ZCUyMGV2ZW50cyUyMGxlZnQuLi4lMjclMjAlMjUlMjBjbnYuZXZlbnRDb3VudCUyOCUyOSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4Y2VwdCUyMGt2bGNsaWIuS3ZsY0VuZE9mRmlsZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwY252LmlzT3ZlcnJ1bkFjdGl2ZSUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3Tk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjBjb250YWluZWQlMjBvdmVycnVuLiUyNyUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNudi5yZXNldE92ZXJydW5BY3RpdmUlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGNudi5pc0RhdGFUcnVuY2F0ZWQlMjglMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN05PVEUlMjElMjBUaGUlMjBleHRyYWN0ZWQlMjBkYXRhJTIwd2FzJTIwdHJ1bmNhdGVkLiUyNyUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNudi5yZXNldFN0YXR1c1RydW5jYXRlZCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFr"][/vc_column][/vc_row][vc_row disable_element="yes"][vc_column][vc_column_text]

Listing 8: Defining a function that does the conversion and also check for special conditions.

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Extending the converter program we had in our previous article with this new convertEvents function we now end up with the following.
[/vc_column_text][vc_code_raket language="python" code="JTIzMDZfY29udmVydF9rbWVfY2hlY2tfY29uZGl0aW9uLnB5JTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2bGNsaWIlMEElMEElMEFJTlBVVF9GSUxFJTIwJTNEJTIwJTI3bXlsb2cua21lNTAlMjclMEElMEElMEFkZWYlMjB0cnlTZXRQcm9wZXJ0eSUyOGNudiUyQyUyMHByb3BlcnR5JTJDJTIwdmFsdWUlM0ROb25lJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2hlY2slMjBpZiUyMHRoZSUyMGZvcm1hdCUyMHN1cHBvcnRzJTIwdGhlJTIwZ2l2ZW4lMjBwcm9wZXJ0eSUwQSUyMCUyMCUyMCUyMGlmJTIwY252LmZvcm1hdC5pc1Byb3BlcnR5U3VwcG9ydGVkJTI4cHJvcGVydHklMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJZiUyMGElMjB2YWx1ZSUyMGlzJTIwc3BlY2lmaWVkJTJDJTIwc2V0JTIwdGhlJTIwcHJvcGVydHklMjB0byUyMHRoaXMlMjB2YWx1ZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwdmFsdWUlMjBpcyUyMG5vdCUyME5vbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjbnYuc2V0UHJvcGVydHklMjhwcm9wZXJ0eSUyQyUyMHZhbHVlJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIwdGhlJTIwcHJvcGVydHklMjdzJTIwZGVmYXVsdCUyMHZhbHVlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVmYXVsdCUyMCUzRCUyMGNudi5mb3JtYXQuZ2V0UHJvcGVydHlEZWZhdWx0JTI4cHJvcGVydHklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyNyUyMCUyMCUyNXMlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAlMjVzJTI5JTI3JTIwJTI1JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI4cHJvcGVydHklMkMlMjBkZWZhdWx0JTI5JTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIwdGhlJTIwcHJvcGVydHklMjdzJTIwY3VycmVudCUyMHZhbHVlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdmFsdWUlMjAlM0QlMjBjbnYuZ2V0UHJvcGVydHklMjhwcm9wZXJ0eSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3JTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwJTI1cyUyNyUyMCUyNSUyMHZhbHVlJTI5JTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3JTIwJTIwJTI1cyUyMGlzJTIwbm90JTIwc3VwcG9ydGVkJTI3JTIwJTI1JTIwcHJvcGVydHklMjklMEElMEElMEFkZWYlMjBjb252ZXJ0RXZlbnRzJTI4Y252JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIwZXN0aW1hdGVkJTIwbnVtYmVyJTIwb2YlMjByZW1haW5pbmclMjBldmVudHMlMjBpbiUyMHRoZSUyMGlucHV0JTIwZmlsZS4lMjBUaGlzJTBBJTIwJTIwJTIwJTIwJTIzJTIwY2FuJTIwYmUlMjB1c2VmdWwlMjBmb3IlMjBkaXNwbGF5aW5nJTIwcHJvZ3Jlc3MlMjBkdXJpbmclMjBjb252ZXJzaW9uLiUwQSUyMCUyMCUyMCUyMHRvdGFsJTIwJTNEJTIwY252LmV2ZW50Q291bnQlMjglMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMkNvbnZlcnRpbmclMjBhYm91dCUyMCUyNWQlMjBldmVudHMuLi4lMjIlMjAlMjUlMjB0b3RhbCUyOSUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwVHJ1ZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMENvbnZlcnQlMjBldmVudHMlMjBmcm9tJTIwaW5wdXQlMjBmaWxlJTIwb25lJTIwYnklMjBvbmUlMjB1bnRpbCUyMEVPRiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGlzJTIwcmVhY2hlZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNudi5jb252ZXJ0RXZlbnQlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGNudi5pc091dHB1dEZpbGVuYW1lTmV3JTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdOZXclMjBvdXRwdXQlMjBmaWxlbmFtZSUzQSUyNyUyQyUyMGNudi5nZXRPdXRwdXRGaWxlbmFtZSUyOCUyOSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3QWJvdXQlMjAlMjVkJTIwZXZlbnRzJTIwbGVmdC4uLiUyNyUyMCUyNSUyMGNudi5ldmVudENvdW50JTI4JTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhjZXB0JTIwa3ZsY2xpYi5LdmxjRW5kT2ZGaWxlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBjbnYuaXNPdmVycnVuQWN0aXZlJTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdOT1RFJTIxJTIwVGhlJTIwZXh0cmFjdGVkJTIwZGF0YSUyMGNvbnRhaW5lZCUyMG92ZXJydW4uJTI3JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY252LnJlc2V0T3ZlcnJ1bkFjdGl2ZSUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwY252LmlzRGF0YVRydW5jYXRlZCUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3Tk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjB3YXMlMjB0cnVuY2F0ZWQuJTI3JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY252LnJlc2V0U3RhdHVzVHJ1bmNhdGVkJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslMEElMEElMEElMjMlMjBzZXQlMjB1cCUyMGZvcm1hdHMlMEFvdXRfZm10JTIwJTNEJTIwa3ZsY2xpYi5Xcml0ZXJGb3JtYXQlMjhrdmxjbGliLkZpbGVGb3JtYXQuUExBSU5fQVNDJTI5JTBBaW5fZm10JTIwJTNEJTIwa3ZsY2xpYi5SZWFkZXJGb3JtYXQlMjhrdmxjbGliLkZpbGVGb3JtYXQuS01FNTAlMjklMEElMEElMjMlMjBzZXQlMjByZXN1bHRpbmclMjBvdXRwdXQlMjBmaWxlJTIwbmFtZSUyMHRha2luZyUyMGFkdmFudGFnZSUyMG9mJTIwdGhlJTIwZXh0ZW5zaW9uJTBBJTIzJTIwZGVmaW5lZCUyMGluJTIwdGhlJTIwZm9ybWF0LiUwQW91dF9maWxlJTIwJTNEJTIwJTIybXlyZXN1bHQuJTIyJTIwJTJCJTIwb3V0X2ZtdC5leHRlbnNpb24lMEFwcmludCUyOCUyMk91dHB1dCUyMGZpbGVuYW1lJTIwaXMlMjAlMjclMjVzJTI3JTIyJTIwJTI1JTIwb3V0X2ZpbGUlMjklMEElMEElMjMlMjBjcmVhdGUlMjBjb252ZXJ0ZXIlMEFjbnYlMjAlM0QlMjBrdmxjbGliLkNvbnZlcnRlciUyOG91dF9maWxlJTJDJTIwb3V0X2ZtdCUyOSUwQSUwQSUyMyUyMFNldCUyMGlucHV0JTIwZmlsZSUyMGFuZCUyMGZvcm1hdCUwQWNudi5zZXRJbnB1dEZpbGUlMjhJTlBVVF9GSUxFJTJDJTIwa3ZsY2xpYi5GaWxlRm9ybWF0LktNRTUwJTI5JTBBJTBBJTIzJTIwYWxsb3clMjBvdXRwdXQlMjBmaWxlJTIwdG8lMjBvdmVyd3JpdGUlMjBleGlzdGluZyUyMGZpbGVzJTBBdHJ5U2V0UHJvcGVydHklMjhjbnYlMkMlMjBrdmxjbGliLlByb3BlcnR5Lk9WRVJXUklURSUyQyUyMDElMjklMEElMEElMjMlMjB3ZSUyMGFyZSUyMG9ubHklMjBpbnRlcmVzdGVkJTIwaW4lMjB0aGUlMjBmaXJzdCUyMGNoYW5uZWwlMEFjbnYuc2V0UHJvcGVydHklMjhrdmxjbGliLlByb3BlcnR5LkNIQU5ORUxfTUFTSyUyQyUyMDElMjklMEElMEElMjMlMjBhZGQlMjBuaWNlJTIwaGVhZGVyJTIwdG8lMjB0aGUlMjBvdXRwdXQlMjBmaWxlJTBBdHJ5U2V0UHJvcGVydHklMjhjbnYlMkMlMjBrdmxjbGliLlByb3BlcnR5LldSSVRFX0hFQURFUiUyQyUyMDElMjklMEElMEElMjMlMjB3ZSUyMGFyZSUyMGNvbnZlcnRpbmclMjBDQU4lMjB0cmFmZmljJTIwd2l0aCUyMG1heCUyMDglMjBieXRlcyUyQyUyMHNvJTIwd2UlMjBjYW4lMjBtaW5pbWl6ZSUwQSUyMyUyMHRoZSUyMHdpZHRoJTIwb2YlMjB0aGUlMjBkYXRhJTIwb3V0cHV0JTIwdG8lMjA4JTIwYnl0ZXMlMEF0cnlTZXRQcm9wZXJ0eSUyOGNudiUyQyUyMGt2bGNsaWIuUHJvcGVydHkuTElNSVRfREFUQV9CWVRFUyUyQyUyMDglMjklMEElMEFjb252ZXJ0RXZlbnRzJTI4Y252JTI5JTBBJTBBJTIzJTIwZm9yY2UlMjBmbHVzaCUyMHJlc3VsdCUyMHRvJTIwZGlzayUwQWNudi5mbHVzaCUyOCUyOQ=="][/vc_column][/vc_row][vc_row disable_element="yes"][vc_column][vc_column_text]

Listing 9: Simple program to convert a kme50 log file to plain text output.

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Running this program on a specially prepared kme50 file we now get the following output:[/vc_column_text][vc_code_raket language="t" code="T3V0cHV0JTIwZm9ybWF0JTIwaXMlMjAlMjdQbGFpbiUyMHRleHQlMjclMEFPdXRwdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlyZXN1bHQudHh0JTI3JTBBSW5wdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlsb2cua21lNTAlMjclMEElMjAlMjBQUk9QRVJUWV9PVkVSV1JJVEUlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMSUwQSUyMCUyMFBST1BFUlRZX1dSSVRFX0hFQURFUiUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDAlMjklMEElMjAlMjAlMjAlMjBDdXJyZW50JTIwdmFsdWUlM0ElMjAxJTBBJTIwJTIwUFJPUEVSVFlfTElNSVRfREFUQV9CWVRFUyUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDY0JTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwOCUwQUNvbnZlcnRpbmclMjBhYm91dCUyMDcxMjUzJTIwZXZlbnRzLi4uJTBBTmV3JTIwb3V0cHV0JTIwZmlsZW5hbWUlM0ElMjBteXJlc3VsdC50eHQlMEFBYm91dCUyMDcxMjUyJTIwZXZlbnRzJTIwbGVmdCUyMHRvJTIwY29udmVydC4uLiUwQU5PVEUlMjElMjBUaGUlMjBleHRyYWN0ZWQlMjBkYXRhJTIwY29udGFpbmVkJTIwb3ZlcnJ1bi4="][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]As can be seen in the output, our input file contained over 7000 events and as a result the output file created was over 2MB. We can also see that the specially prepared kme50 file contained overruns. Let us now split the output files by also setting the property SIZE_LIMIT.[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwc3BsaXQlMjBvdXRwdXQlMjBmaWxlcyUyMGludG8lMjBtYXglMjAxJTIwTUIlMjBmaWxlcyUwQXRyeVNldFByb3BlcnR5JTI4Y252JTJDJTIwa3ZsY2xpYi5Qcm9wZXJ0eS5TSVpFX0xJTUlUJTJDJTIwMSUyOQ=="][/vc_column][/vc_row][vc_row][vc_column][vc_column_text][/vc_column_text][vc_code_raket language="python" code="JTIzMDdfY29udmVydF9rbWVfY2hlY2tfc3BsaXQucHklMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwa3ZsY2xpYiUwQSUwQSUwQUlOUFVUX0ZJTEUlMjAlM0QlMjAlMjdteWxvZy5rbWU1MCUyNyUwQSUwQSUwQWRlZiUyMHRyeVNldFByb3BlcnR5JTI4Y252JTJDJTIwcHJvcGVydHklMkMlMjB2YWx1ZSUzRE5vbmUlMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBDaGVjayUyMGlmJTIwdGhlJTIwZm9ybWF0JTIwc3VwcG9ydHMlMjB0aGUlMjBnaXZlbiUyMHByb3BlcnR5JTBBJTIwJTIwJTIwJTIwaWYlMjBjbnYuZm9ybWF0LmlzUHJvcGVydHlTdXBwb3J0ZWQlMjhwcm9wZXJ0eSUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMElmJTIwYSUyMHZhbHVlJTIwaXMlMjBzcGVjaWZpZWQlMkMlMjBzZXQlMjB0aGUlMjBwcm9wZXJ0eSUyMHRvJTIwdGhpcyUyMHZhbHVlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjB2YWx1ZSUyMGlzJTIwbm90JTIwTm9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNudi5zZXRQcm9wZXJ0eSUyOHByb3BlcnR5JTJDJTIwdmFsdWUlMjklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBHZXQlMjB0aGUlMjBwcm9wZXJ0eSUyN3MlMjBkZWZhdWx0JTIwdmFsdWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZWZhdWx0JTIwJTNEJTIwY252LmZvcm1hdC5nZXRQcm9wZXJ0eURlZmF1bHQlMjhwcm9wZXJ0eSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3JTIwJTIwJTI1cyUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMCUyNXMlMjklMjclMjAlMjUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjhwcm9wZXJ0eSUyQyUyMGRlZmF1bHQlMjklMjklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBHZXQlMjB0aGUlMjBwcm9wZXJ0eSUyN3MlMjBjdXJyZW50JTIwdmFsdWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB2YWx1ZSUyMCUzRCUyMGNudi5nZXRQcm9wZXJ0eSUyOHByb3BlcnR5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjclMjAlMjAlMjAlMjBDdXJyZW50JTIwdmFsdWUlM0ElMjAlMjVzJTI3JTIwJTI1JTIwdmFsdWUlMjklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjclMjAlMjAlMjVzJTIwaXMlMjBub3QlMjBzdXBwb3J0ZWQlMjclMjAlMjUlMjBwcm9wZXJ0eSUyOSUwQSUwQSUwQWRlZiUyMGNvbnZlcnRFdmVudHMlMjhjbnYlMjklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBHZXQlMjBlc3RpbWF0ZWQlMjBudW1iZXIlMjBvZiUyMHJlbWFpbmluZyUyMGV2ZW50cyUyMGluJTIwdGhlJTIwaW5wdXQlMjBmaWxlLiUyMFRoaXMlMEElMjAlMjAlMjAlMjAlMjMlMjBjYW4lMjBiZSUyMHVzZWZ1bCUyMGZvciUyMGRpc3BsYXlpbmclMjBwcm9ncmVzcyUyMGR1cmluZyUyMGNvbnZlcnNpb24uJTBBJTIwJTIwJTIwJTIwdG90YWwlMjAlM0QlMjBjbnYuZXZlbnRDb3VudCUyOCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyQ29udmVydGluZyUyMGFib3V0JTIwJTI1ZCUyMGV2ZW50cy4uLiUyMiUyMCUyNSUyMHRvdGFsJTI5JTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBUcnVlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQ29udmVydCUyMGV2ZW50cyUyMGZyb20lMjBpbnB1dCUyMGZpbGUlMjBvbmUlMjBieSUyMG9uZSUyMHVudGlsJTIwRU9GJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwaXMlMjByZWFjaGVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY252LmNvbnZlcnRFdmVudCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwY252LmlzT3V0cHV0RmlsZW5hbWVOZXclMjglMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN05ldyUyMG91dHB1dCUyMGZpbGVuYW1lJTNBJTI3JTJDJTIwY252LmdldE91dHB1dEZpbGVuYW1lJTI4JTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdBYm91dCUyMCUyNWQlMjBldmVudHMlMjBsZWZ0Li4uJTI3JTIwJTI1JTIwY252LmV2ZW50Q291bnQlMjglMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGNlcHQlMjBrdmxjbGliLkt2bGNFbmRPZkZpbGUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGNudi5pc092ZXJydW5BY3RpdmUlMjglMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN05PVEUlMjElMjBUaGUlMjBleHRyYWN0ZWQlMjBkYXRhJTIwY29udGFpbmVkJTIwb3ZlcnJ1bi4lMjclMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjbnYucmVzZXRPdmVycnVuQWN0aXZlJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBjbnYuaXNEYXRhVHJ1bmNhdGVkJTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdOT1RFJTIxJTIwVGhlJTIwZXh0cmFjdGVkJTIwZGF0YSUyMHdhcyUyMHRydW5jYXRlZC4lMjclMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjbnYucmVzZXRTdGF0dXNUcnVuY2F0ZWQlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhayUwQSUwQSUwQSUyMyUyMHNldCUyMHVwJTIwZm9ybWF0cyUwQW91dF9mbXQlMjAlM0QlMjBrdmxjbGliLldyaXRlckZvcm1hdCUyOGt2bGNsaWIuRmlsZUZvcm1hdC5QTEFJTl9BU0MlMjklMEFpbl9mbXQlMjAlM0QlMjBrdmxjbGliLlJlYWRlckZvcm1hdCUyOGt2bGNsaWIuRmlsZUZvcm1hdC5LTUU1MCUyOSUwQSUwQSUyMyUyMHNldCUyMHJlc3VsdGluZyUyMG91dHB1dCUyMGZpbGUlMjBuYW1lJTIwdGFraW5nJTIwYWR2YW50YWdlJTIwb2YlMjB0aGUlMjBleHRlbnNpb24lMEElMjMlMjBkZWZpbmVkJTIwaW4lMjB0aGUlMjBmb3JtYXQuJTBBb3V0X2ZpbGUlMjAlM0QlMjAlMjJteXJlc3VsdC4lMjIlMjAlMkIlMjBvdXRfZm10LmV4dGVuc2lvbiUwQXByaW50JTI4JTIyT3V0cHV0JTIwZmlsZW5hbWUlMjBpcyUyMCUyNyUyNXMlMjclMjIlMjAlMjUlMjBvdXRfZmlsZSUyOSUwQSUwQSUyMyUyMGNyZWF0ZSUyMGNvbnZlcnRlciUwQWNudiUyMCUzRCUyMGt2bGNsaWIuQ29udmVydGVyJTI4b3V0X2ZpbGUlMkMlMjBvdXRfZm10JTI5JTBBJTBBJTIzJTIwU2V0JTIwaW5wdXQlMjBmaWxlJTIwYW5kJTIwZm9ybWF0JTBBY252LnNldElucHV0RmlsZSUyOElOUFVUX0ZJTEUlMkMlMjBrdmxjbGliLkZpbGVGb3JtYXQuS01FNTAlMjklMEElMEElMjMlMjBzcGxpdCUyMG91dHB1dCUyMGZpbGVzJTIwaW50byUyMG1heCUyMDElMjBNQiUyMGZpbGVzJTBBdHJ5U2V0UHJvcGVydHklMjhjbnYlMkMlMjBrdmxjbGliLlByb3BlcnR5LlNJWkVfTElNSVQlMkMlMjAxJTI5JTBBJTBBJTIzJTIwYWxsb3clMjBvdXRwdXQlMjBmaWxlJTIwdG8lMjBvdmVyd3JpdGUlMjBleGlzdGluZyUyMGZpbGVzJTBBdHJ5U2V0UHJvcGVydHklMjhjbnYlMkMlMjBrdmxjbGliLlByb3BlcnR5Lk9WRVJXUklURSUyQyUyMDElMjklMEElMEElMjMlMjB3ZSUyMGFyZSUyMG9ubHklMjBpbnRlcmVzdGVkJTIwaW4lMjB0aGUlMjBmaXJzdCUyMGNoYW5uZWwlMEFjbnYuc2V0UHJvcGVydHklMjhrdmxjbGliLlByb3BlcnR5LkNIQU5ORUxfTUFTSyUyQyUyMDElMjklMEElMEElMjMlMjBhZGQlMjBuaWNlJTIwaGVhZGVyJTIwdG8lMjB0aGUlMjBvdXRwdXQlMjBmaWxlJTBBdHJ5U2V0UHJvcGVydHklMjhjbnYlMkMlMjBrdmxjbGliLlByb3BlcnR5LldSSVRFX0hFQURFUiUyQyUyMDElMjklMEElMEElMjMlMjB3ZSUyMGFyZSUyMGNvbnZlcnRpbmclMjBDQU4lMjB0cmFmZmljJTIwd2l0aCUyMG1heCUyMDglMjBieXRlcyUyQyUyMHNvJTIwd2UlMjBjYW4lMjBtaW5pbWl6ZSUwQSUyMyUyMHRoZSUyMHdpZHRoJTIwb2YlMjB0aGUlMjBkYXRhJTIwb3V0cHV0JTIwdG8lMjA4JTIwYnl0ZXMlMEF0cnlTZXRQcm9wZXJ0eSUyOGNudiUyQyUyMGt2bGNsaWIuUHJvcGVydHkuTElNSVRfREFUQV9CWVRFUyUyQyUyMDglMjklMEElMEFjb252ZXJ0RXZlbnRzJTI4Y252JTI5JTBBJTBBJTIzJTIwZm9yY2UlMjBmbHVzaCUyMHJlc3VsdCUyMHRvJTIwZGlzayUwQWNudi5mbHVzaCUyOCUyOQ=="][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]The output from our final run is shown below, we now got three output files, where the first two are about 1MB.[/vc_column_text][vc_code_raket language="t" code="T3V0cHV0JTIwZm9ybWF0JTIwaXMlMjAlMjdQbGFpbiUyMHRleHQlMjclMEFPdXRwdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlyZXN1bHQudHh0JTI3JTBBSW5wdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlsb2cua21lNTAlMjclMEElMjAlMjBQUk9QRVJUWV9PVkVSV1JJVEUlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMSUwQSUyMCUyMFBST1BFUlRZX1dSSVRFX0hFQURFUiUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDAlMjklMEElMjAlMjAlMjAlMjBDdXJyZW50JTIwdmFsdWUlM0ElMjAxJTBBJTIwJTIwUFJPUEVSVFlfTElNSVRfREFUQV9CWVRFUyUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDY0JTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwOCUwQSUyMCUyMFBST1BFUlRZX1NJWkVfTElNSVQlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMiUwQUNvbnZlcnRpbmclMjBhYm91dCUyMDcxMjUzJTIwZXZlbnRzLi4uJTBBTmV3JTIwb3V0cHV0JTIwZmlsZW5hbWUlM0ElMjBteXJlc3VsdC1wYXJ0MC50eHQlMEFBYm91dCUyMDcxMjUyJTIwZXZlbnRzJTIwbGVmdCUyMHRvJTIwY29udmVydC4uLiUwQU5ldyUyMG91dHB1dCUyMGZpbGVuYW1lJTNBJTIwbXlyZXN1bHQtcGFydDEudHh0JTBBQWJvdXQlMjA0MTQ3MyUyMGV2ZW50cyUyMGxlZnQlMjB0byUyMGNvbnZlcnQuLi4lMEFOZXclMjBvdXRwdXQlMjBmaWxlbmFtZSUzQSUyMG15cmVzdWx0LXBhcnQyLnR4dCUwQUFib3V0JTIwMTE2OTUlMjBldmVudHMlMjBsZWZ0JTIwdG8lMjBjb252ZXJ0Li4uJTBBTk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjBjb250YWluZWQlMjBvdmVycnVuLg=="][vc_column_text]This was all for this time, if you have any questions, comments or suggestion for future blog articles, please contact us directly at [email protected].[/vc_column_text][/vc_column][/vc_row][vc_row el_id="footernote"][vc_column][vc_header_raket header_type="h2" header="Footnotes"][vc_column_text]1 Splitting of output files is controlled by the writer properties KVLC_PROPERTY_SIZE_LIMIT and KVLC_PROPERTY_TIME_LIMIT.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlMjAlMkYlM0U=[/vc_raw_html][vc_separator_raket][vc_message] This article has been updated. To view the original, click on the box below. [/vc_message][vc_accordion active_tab="0" collapsible="yes"][vc_accordion_tab title="Original Article"][vc_single_image image="15486"][vc_message]This blog uses now deprecated functions, see blog "Improved API in Python canlib v1.5" for more information.[/vc_message][vc_column_text]This is the final post in a 3-part series about using the Converter Library (kvlclib) in CANlib SDK:
  1. Writer formats and properties (1 of 3)
  2. Converting to plain ASCII (2 of 3)
  3. Special converter conditions (3 of 3)
[/vc_column_text][vc_column_text]In the second part of this blog series, we created a simple program to convert a kme50 log file to plain text. We will now continue and look at the three special conditions that can arise when converting a log file; overrun, data truncation, and change in output filename:[/vc_column_text][vc_column_text]Overrun can occur during logging with a Memorator if the bus load exceeds the logging capacity. This condition can be detected by calling kvlcIsOverrunActive(). Once the overrun has been noted, we need to manually reset the state using kvlcResetOverrunActive(). Data truncation occurs when the selected output converter can’t write all bytes in a data frame to the output file. This can happen if CAN FD data is extracted to a format that only supports up to 8 data bytes, e.g. KVLC_FILE_FORMAT_KME40. This condition is reset by a call to kvlcResetStatusTruncated(). New output filename is a change in the output filename occurs when the converter has created a new file, which can be the result when splitting output files (which we will look into briefly later).1 The call to kvlcIsOutputFilenameNew() will return true when the last converted event resulted in the creation of a new output file. This condition will automatically reset during the next call to kvlcConvertEvent(). When a split has occurred, we can get the new output filename by calling kvlcGetOutputFilename(). [/vc_column_text][vc_column_text]Let us now create a function that, beside of doing the actual conversion, also looks for the above conditions and prints some informational messages to the user.[/vc_column_text][vc_code_raket language="python" code="ZGVmJTIwY29udmVydEV2ZW50cyUyOGtjJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIwZXN0aW1hdGVkJTIwbnVtYmVyJTIwb2YlMjByZW1haW5pbmclMjBldmVudHMlMjBpbiUyMHRoZSUyMGlucHV0JTIwZmlsZS4lMjBUaGlzJTIwY2FuJTIwYmUlMEElMjAlMjAlMjAlMjAlMjMlMjB1c2VmdWwlMjBmb3IlMjBkaXNwbGF5aW5nJTIwcHJvZ3Jlc3MlMjBkdXJpbmclMjBjb252ZXJzaW9uLiUwQSUyMCUyMCUyMCUyMHRvdGFsJTIwJTNEJTIwa2MuZXZlbnRDb3VudCUyOCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyQ29udmVydGluZyUyMGFib3V0JTIwJTI1ZCUyMGV2ZW50cy4uLiUyMiUyMCUyNSUyMHRvdGFsJTI5JTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBUcnVlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQ29udmVydCUyMGV2ZW50cyUyMGZyb20lMjBpbnB1dCUyMGZpbGUlMjBvbmUlMjBieSUyMG9uZSUyMHVudGlsJTIwRU9GJTIwaXMlMjByZWFjaGVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa2MuY29udmVydEV2ZW50JTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBrYy5Jc091dHB1dEZpbGVuYW1lTmV3JTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJOZXclMjBvdXRwdXQlMjBmaWxlbmFtZSUzQSUyMCUyNXMlMjIlMjAlMjUlMjBrYy5nZXRPdXRwdXRGaWxlbmFtZSUyOCUyOSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyQWJvdXQlMjAlMjVkJTIwZXZlbnRzJTIwbGVmdCUyMHRvJTIwY29udmVydC4uLiUyMiUyMCUyNSUyMGtjLmV2ZW50Q291bnQlMjglMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGNlcHQlMjBrdmxjLkt2bGNFbmRPZkZpbGUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGtjLklzT3ZlcnJ1bkFjdGl2ZSUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyTk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjBjb250YWluZWQlMjBvdmVycnVuLiUyMiUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGtjLnJlc2V0T3ZlcnJ1bkFjdGl2ZSUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwa2MuSXNEYXRhVHJ1bmNhdGVkJTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJOT1RFJTIxJTIwVGhlJTIwZXh0cmFjdGVkJTIwZGF0YSUyMHdhcyUyMHRydW5jYXRlZC4lMjIlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBrYy5yZXNldFN0YXR1c1RydW5jYXRlZCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFr"][vc_column_text]

Listing 8: Defining a function that does the conversion and also check for special conditions.

[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwY2FubGliLmt2bGNsaWIlMjBhcyUyMGt2bGMlMEElMEElMEFkZWYlMjB0cnlTZXRQcm9wZXJ0eSUyOGNvbnZlcnRlciUyQyUyMHByb3BlcnR5JTJDJTIwdmFsdWUlM0ROb25lJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2hlY2slMjBpZiUyMHRoZSUyMGZvcm1hdCUyMHN1cHBvcnRzJTIwdGhlJTIwZ2l2ZW4lMjBwcm9wZXJ0eSUwQSUyMCUyMCUyMCUyMGlmJTIwY29udmVydGVyLmZvcm1hdC5pc1Byb3BlcnR5U3VwcG9ydGVkJTI4cHJvcGVydHklMjklM0ElMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJZiUyMGElMjB2YWx1ZSUyMHdhcyUyMHNwZWNpZmllZCUyQyUyMHNldCUyMHRoZSUyMHByb3BlcnR5JTIwdG8lMjB0aGlzJTIwdmFsdWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHZhbHVlJTIwaXMlMjBub3QlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udmVydGVyLnNldFByb3BlcnR5JTI4cHJvcGVydHklMkMlMjB2YWx1ZSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHByb3BlcnR5JTI3cyUyMGRlZmF1bHQlMjB2YWx1ZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlZmF1bHQlMjAlM0QlMjBjb252ZXJ0ZXIuZ2V0UHJvcGVydHlEZWZhdWx0JTI4cHJvcGVydHklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMiUyMFBST1BFUlRZXyUyNXMlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAlMjVzJTI5JTIyJTIwJTI1JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI4cHJvcGVydHklNUIlMjduYW1lJTI3JTVEJTJDJTIwZGVmYXVsdCUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHByb3BlcnR5JTI3cyUyMGN1cnJlbnQlMjB2YWx1ZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHZhbHVlJTIwJTNEJTIwY29udmVydGVyLmdldFByb3BlcnR5JTI4cHJvcGVydHklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMiUwOUN1cnJlbnQlMjB2YWx1ZSUzQSUyMCUyNXMlMjIlMjAlMjUlMjB2YWx1ZSUyOSUwQSUyMCUyMCUyMCUyMGVsc2UlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMiUyMFBST1BFUlRZJTIwJTI1cyUyMGlzJTIwbm90JTIwc3VwcG9ydGVkJTIyJTIwJTI1JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI4cHJvcGVydHklNUIlMjduYW1lJTI3JTVEJTI5JTI5JTBBJTBBJTBBZGVmJTIwY29udmVydEV2ZW50cyUyOGtjJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIwZXN0aW1hdGVkJTIwbnVtYmVyJTIwb2YlMjByZW1haW5pbmclMjBldmVudHMlMjBpbiUyMHRoZSUyMGlucHV0JTIwZmlsZS4lMjBUaGlzJTIwY2FuJTIwYmUlMEElMjAlMjAlMjAlMjAlMjMlMjB1c2VmdWwlMjBmb3IlMjBkaXNwbGF5aW5nJTIwcHJvZ3Jlc3MlMjBkdXJpbmclMjBjb252ZXJzaW9uLiUwQSUyMCUyMCUyMCUyMHRvdGFsJTIwJTNEJTIwa2MuZXZlbnRDb3VudCUyOCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyQ29udmVydGluZyUyMGFib3V0JTIwJTI1ZCUyMGV2ZW50cy4uLiUyMiUyMCUyNSUyMHRvdGFsJTI5JTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBUcnVlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQ29udmVydCUyMGV2ZW50cyUyMGZyb20lMjBpbnB1dCUyMGZpbGUlMjBvbmUlMjBieSUyMG9uZSUyMHVudGlsJTIwRU9GJTIwaXMlMjByZWFjaGVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa2MuY29udmVydEV2ZW50JTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBrYy5Jc091dHB1dEZpbGVuYW1lTmV3JTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJOZXclMjBvdXRwdXQlMjBmaWxlbmFtZSUzQSUyMCUyNXMlMjIlMjAlMjUlMjBrYy5nZXRPdXRwdXRGaWxlbmFtZSUyOCUyOSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyQWJvdXQlMjAlMjVkJTIwZXZlbnRzJTIwbGVmdCUyMHRvJTIwY29udmVydC4uLiUyMiUyMCUyNSUyMGtjLmV2ZW50Q291bnQlMjglMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGNlcHQlMjBrdmxjLkt2bGNFbmRPZkZpbGUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGtjLklzT3ZlcnJ1bkFjdGl2ZSUyOCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyTk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjBjb250YWluZWQlMjBvdmVycnVuLiUyMiUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGtjLnJlc2V0T3ZlcnJ1bkFjdGl2ZSUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwa2MuSXNEYXRhVHJ1bmNhdGVkJTI4JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJOT1RFJTIxJTIwVGhlJTIwZXh0cmFjdGVkJTIwZGF0YSUyMHdhcyUyMHRydW5jYXRlZC4lMjIlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBrYy5yZXNldFN0YXR1c1RydW5jYXRlZCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTBBJTBBJTBBJTIzJTIwc2V0JTIwb3V0cHV0JTIwZm9ybWF0JTBBZm10JTIwJTNEJTIwa3ZsYy5Xcml0ZXJGb3JtYXQlMjhrdmxjLkZJTEVfRk9STUFUX1BMQUlOX0FTQyUyOSUwQSUyMyUyMHRoZSUyMG5hbWUlMjBvZiUyMHRoZSUyMGZvcm1hdHRlciUyMGlzJTIwZmV0Y2hlZCUyMHVzaW5nJTIwa3ZsY0dldFdyaXRlck5hbWUlMjglMjklMjBpbnRlcm5hbGx5JTBBcHJpbnQlMjglMjJPdXRwdXQlMjBmb3JtYXQlMjBpcyUyMCUyNyUyNXMlMjclMjIlMjAlMjUlMjBmbXQubmFtZSUyOSUwQSUwQSUyMyUyMHNldCUyMHJlc3VsdGluZyUyMG91dHB1dCUyMGZpbGVuYW1lJTIwdGFraW5nJTIwYWR2YW50YWdlJTIwb2YlMjB0aGUlMjBleHRlbnNpb24lMjBkZWZpbmVkJTIwaW4lMEElMjMlMjB0aGUlMjBmb3JtYXQuJTIwJTI4VXNlcyUyMGt2bGNHZXRXcml0ZXJFeHRlbnNpb24lMjglMjklMjB1bmRlciUyMHRoZSUyMGhvb2QuJTI5JTBBb3V0ZmlsZSUyMCUzRCUyMCUyMm15cmVzdWx0LiUyMiUyMCUyQiUyMGZtdC5leHRlbnNpb24lMEFwcmludCUyOCUyMk91dHB1dCUyMGZpbGVuYW1lJTIwaXMlMjAlMjclMjVzJTI3JTIyJTIwJTI1JTIwb3V0ZmlsZSUyOSUwQSUwQSUyMyUyMGNyZWF0ZSUyMGNvbnZlcnRlciUwQWtjJTIwJTNEJTIwa3ZsYy5LdmxjbGliJTI4b3V0ZmlsZSUyQyUyMGZtdCUyOSUwQSUwQSUyMyUyMFNldCUyMGlucHV0JTIwZmlsZW5hbWUlMjBhbmQlMjBmb3JtYXQlMEFpbnB1dGZpbGUlMjAlM0QlMjAlMjJteWxvZy5rbWU1MCUyMiUwQXByaW50JTI4JTIySW5wdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3JTI1cyUyNyUyMiUyMCUyNSUyMGlucHV0ZmlsZSUyOSUwQWtjLnNldElucHV0RmlsZSUyOGlucHV0ZmlsZSUyQyUyMGZpbGVfZm9ybWF0JTNEa3ZsYy5GSUxFX0ZPUk1BVF9LTUU1MCUyOSUwQSUwQSUyMyUyMGFsbG93JTIwb3V0cHV0JTIwZmlsZSUyMHRvJTIwb3ZlcndyaXRlJTIwZXhpc3RpbmclMjBmaWxlcyUwQXRyeVNldFByb3BlcnR5JTI4a2MlMkMlMjBrdmxjLlBST1BFUlRZX09WRVJXUklURSUyQyUyMDElMjklMEElMEElMjMlMjBhZGQlMjBuaWNlJTIwaGVhZGVyJTIwdG8lMjB0aGUlMjBvdXRwdXQlMjBmaWxlJTBBdHJ5U2V0UHJvcGVydHklMjhrYyUyQyUyMGt2bGMuUFJPUEVSVFlfV1JJVEVfSEVBREVSJTJDJTIwMSUyOSUwQSUwQSUyMyUyMHdlJTIwYXJlJTIwY29udmVydGluZyUyMENBTiUyMHRyYWZmaWMlMjB3aXRoJTIwbWF4JTIwOCUyMGJ5dGVzJTJDJTIwc28lMjB3ZSUyMGNhbiUyMG1pbmltaXplJTIwdGhlJTIwd2lkdGglMEElMjMlMjBvZiUyMHRoZSUyMGRhdGElMjBvdXRwdXQlMjB0byUyMDglMjBieXRlcyUwQXRyeVNldFByb3BlcnR5JTI4a2MlMkMlMjBrdmxjLlBST1BFUlRZX0xJTUlUX0RBVEFfQllURVMlMkMlMjA4JTI5JTBBJTBBY29udmVydEV2ZW50cyUyOGtjJTI5JTBBJTBBJTIzJTIwRGVsZXRlJTIwY29udmVydGVyJTJDJTIwZmx1c2glMjByZXN1bHQlMjB0byUyMGRpc2slMjBhbmQlMjBmcmVlJTIwbWVtb3J5JTBBa2MuZGVsZXRlQ29udmVydGVyJTI4JTI5"][vc_column_text]

Listing 9: Simple program to convert a kme50 log file to plain text output.

[/vc_column_text][vc_column_text]Running the program in Listing 9 now gives the following output:[/vc_column_text][vc_code_raket code="T3V0cHV0JTIwZm9ybWF0JTIwaXMlMjAlMjdQbGFpbiUyMHRleHQlMjclMEFPdXRwdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlyZXN1bHQudHh0JTI3JTBBSW5wdXQlMjBmaWxlbmFtZSUyMGlzJTIwJTI3bXlsb2cua21lNTAlMjclMEElMjAlMjBQUk9QRVJUWV9PVkVSV1JJVEUlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMSUwQSUyMCUyMFBST1BFUlRZX1dSSVRFX0hFQURFUiUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDAlMjklMEElMjAlMjAlMjAlMjBDdXJyZW50JTIwdmFsdWUlM0ElMjAxJTBBJTIwJTIwUFJPUEVSVFlfTElNSVRfREFUQV9CWVRFUyUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDY0JTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwOCUwQUNvbnZlcnRpbmclMjBhYm91dCUyMDcxMjUzJTIwZXZlbnRzLi4uJTBBTmV3JTIwb3V0cHV0JTIwZmlsZW5hbWUlM0ElMjBteXJlc3VsdC50eHQlMEFBYm91dCUyMDcxMjUyJTIwZXZlbnRzJTIwbGVmdCUyMHRvJTIwY29udmVydC4uLiUwQU5PVEUlMjElMjBUaGUlMjBleHRyYWN0ZWQlMjBkYXRhJTIwY29udGFpbmVkJTIwb3ZlcnJ1bi4="][vc_column_text]As can be seen in the output, our input file contained over 7000 events and as a result the output file created was over 4MB. Let us now split the output files by also setting the property KVLC_PROPERTY_SIZE_LIMIT.[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwc3BsaXQlMjBvdXRwdXQlMjBmaWxlcyUyMGludG8lMjBtYXglMjAyJTIwTUIlMjBmaWxlcyUwQXRyeVNldFByb3BlcnR5JTI4a2MlMkMlMjBrdmxjLlBST1BFUlRZX1NJWkVfTElNSVQlMkMlMjAyJTI5"][vc_column_text]The output from our final run is shown below, we now got three output files, where the first two are about 2MB.[/vc_column_text][vc_code_raket code="T3V0cHV0JTIwZm9ybWF0JTIwaXMlMjAlRTIlODAlOTlQbGFpbiUyMHRleHQlRTIlODAlOTklMEFPdXRwdXQlMjBmaWxlbmFtZSUyMGlzJTIwJUUyJTgwJTk5bXlyZXN1bHQudHh0JUUyJTgwJTk5JTBBSW5wdXQlMjBmaWxlbmFtZSUyMGlzJTIwJUUyJTgwJTk5bXlsb2cua21lNTAlRTIlODAlOTklMEElMjAlMjBQUk9QRVJUWV9PVkVSV1JJVEUlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMSUwQSUyMCUyMFBST1BFUlRZX1dSSVRFX0hFQURFUiUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDAlMjklMEElMjAlMjAlMjAlMjBDdXJyZW50JTIwdmFsdWUlM0ElMjAxJTBBJTIwJTIwUFJPUEVSVFlfTElNSVRfREFUQV9CWVRFUyUyMGlzJTIwc3VwcG9ydGVkJTIwJTI4RGVmYXVsdCUzQSUyMDY0JTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwOCUwQSUyMCUyMFBST1BFUlRZX1NJWkVfTElNSVQlMjBpcyUyMHN1cHBvcnRlZCUyMCUyOERlZmF1bHQlM0ElMjAwJTI5JTBBJTIwJTIwJTIwJTIwQ3VycmVudCUyMHZhbHVlJTNBJTIwMiUwQUNvbnZlcnRpbmclMjBhYm91dCUyMDcxMjUzJTIwZXZlbnRzLi4uJTBBTmV3JTIwb3V0cHV0JTIwZmlsZW5hbWUlM0ElMjBteXJlc3VsdC1wYXJ0MC50eHQlMEFBYm91dCUyMDcxMjUyJTIwZXZlbnRzJTIwbGVmdCUyMHRvJTIwY29udmVydC4uLiUwQU5ldyUyMG91dHB1dCUyMGZpbGVuYW1lJTNBJTIwbXlyZXN1bHQtcGFydDEudHh0JTBBQWJvdXQlMjA0MTQ3MyUyMGV2ZW50cyUyMGxlZnQlMjB0byUyMGNvbnZlcnQuLi4lMEFOZXclMjBvdXRwdXQlMjBmaWxlbmFtZSUzQSUyMG15cmVzdWx0LXBhcnQyLnR4dCUwQUFib3V0JTIwMTE2OTUlMjBldmVudHMlMjBsZWZ0JTIwdG8lMjBjb252ZXJ0Li4uJTBBTk9URSUyMSUyMFRoZSUyMGV4dHJhY3RlZCUyMGRhdGElMjBjb250YWluZWQlMjBvdmVycnVuLg=="][vc_column_text]This was all for this time, if you have any questions, comments or suggestion for future blog articles, please contact us directly at [email protected].[/vc_column_text][vc_header_raket header_type="h2" header="Footnotes"][vc_column_text]1 Splitting of output files is controlled by the writer properties KVLC_PROPERTY_SIZE_LIMIT and KVLC_PROPERTY_TIME_LIMIT.[/vc_column_text][/vc_accordion_tab][/vc_accordion][/vc_column][/vc_row] [post_title] => Special converter conditions [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => special-converter-conditions [to_ping] => [pinged] => [post_modified] => 2022-10-04 12:55:16 [post_modified_gmt] => 2022-10-04 12:55:16 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39859 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [9] => WP_Post Object ( [ID] => 39858 [post_author] => 14 [post_date] => 2017-02-27 12:45:46 [post_date_gmt] => 2017-02-27 12:45:46 [post_content] => [vc_row][vc_column][vc_header_raket header_type="h3" header="Device Guide - What is it?"][vc_column_text]Kvaser Device Guide is the successor of/to Kvaser Hardware, the tool for getting information about the Kvaser Devices connected to your Windows PC.1 Kvaser Device Guide reimplements the old Kvaser Hardware functionality in an updated graphical interface and gives new easy access to device configuration.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="What is new?"][vc_column_text]The GUI update was done in order to get a better overview of devices and channels. You can now also enable/disable individual views to customize some of the information shown. The main functional improvement is the added ability to start configuring a connected Kvaser Device directly using the context menu. For example, right click on your Kvaser Memorator, select "Configure Memorator" and the appropriate configuration tool2 will be started.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="An Overview"][vc_column_text]Starting Kvaser Device Guide opens up the main window as shown in Figure 1.[/vc_column_text][vc_single_image image="20069"][vc_column_text]Figure 1: The main window of Kvaser Device Guide showing connected devices.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Hardware Tree"][vc_column_text]The left pane of the Kvaser Design Guide, contains the Hardware Tree View where all connected devices are listed. Using the View menu, the Hardware Tree can be expanded to show all channels as well as include the Synchronized Hardware3 as shown in Figure 2.[/vc_column_text][vc_single_image image="20070"][vc_column_text]Figure 2: The Hardware Tree View fully expanded, including Synchronized Hardware.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Tools Menu"][vc_column_text]The Tools menu contains a list of Kvaser programs that can be explicitly started, see Figure 4. The first entries in the Tools menu contains Programs that optionally can be installed on the computer: 4 Kvaser Memorator Tools Used to congure older generations of Kvaser Memorators. Kvaser Config Tool Used to configure current generation of Kvaser Memorators. The latest version of this tool is needed in order to support Kvaser Device Guide's context menus. If you try and start e.g. Kvaser Memorator Tools and that program was not installed, you'll get a notication as shown in Figure 3. Programs that can be started from the Tools menu and are bundled in the same download as Kvaser Device Guide include:[/vc_column_text][vc_single_image image="20071"][vc_column_text]Figure 3: You will get notied if you try to start a tool that isn't installed.[/vc_column_text][vc_column_text]Kvaser Remote Device Configuration Used to congure remote devices. This program configures e.g. SSID and WiFi password on a wireless device such as Kvaser Blackbird v2. Kvaser Network Device Selector Used to find and connect remote devices to your PC. A remote device needs to be connected before any application running on the PC can access the remote device.5 Kvaser Customer Data Small utility tool to set customer data in supported devices.[/vc_column_text][vc_single_image image="20072"][vc_column_text]Figure 4: Other Kvaser programs can be started from the Tools menu.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Context Menu"][vc_column_text]Right-clicking on a device in the Hardware Tree brings up the context menu as shown in Figure 5. The appropriate configuration tool can be launched from the context menu, provided that the relevant program is installed. When a configuration tool is launched via the context menu, the tool will automatically connect to the selected device. This behavior can be changed in the Settings dialog, see Figure 6. Throughout the Kvaser Device Guide, online help is available by using the Windows "F1" help button, see Figure 7.[/vc_column_text][vc_single_image image="20073"][vc_column_text]Figure 5: The context menu of Kvaser Memorator Pro will launch Kvaser Memorator Config Tool when "Configure Memorator" is selected.[/vc_column_text][vc_single_image image="20074"][vc_column_text]Figure 6: The Settings dialog with option for the the context menu to automatically connect to selected device.[/vc_column_text][vc_single_image image="20075"][vc_column_text]Figure 7: The Windows online help is available through the context sensitive 'F1' hot key.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Channel Information"][vc_column_text]Selecting a device in the Tree View lists the corresponding channels in the top right pane of the Kvaser Device Guide. Below this list of channels, more information about the currently selected channel is shown, see Figure 8. The fields Bus Parameter and Detailed information can be hidden using the View menu.[/vc_column_text][vc_single_image image="20076"][vc_column_text]Figure 8: Channel Information with all available information shown.[/vc_column_text][vc_column_text]If you are having issues with one of your Kvaser devices, select a channel of the device in question and make sure that the Detailed Information is visible. Right click on Detailed Information and choose Select All from the context menu. Then right click on the Detailed Information again and choose Copy from the context menu. Paste this information into an e-mail to [email protected] where you also describe your problem. This provides the support staff with a good starting point for diagnosing your issue.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Feedback"][vc_column_text]Bug reports, contributions, and suggestions for improvements are much appreciated and can be sent by e-mail to [email protected].[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 The old Kvaser Hardware executable is also included in the Kvaser Drivers installation (defaults to C:\Program Files\Kvaser\Drivers\32\kvaserhardware.exe). 2 Kvaser Memorator Config Tool is appropriate for newer devices, older Memorator devices will use the Kvaser Memorator Tools. 3 Synchronized Hardware shows the devices that have MagiSync. 4 These optional programs can be downloaded from www.kvaser.com/download. 5 Once a remote device is "connected" to the PC, the device is available for use in CANlib, just as if the device had been locally attached using USB.[/vc_column_text][/vc_column][/vc_row] [post_title] => Kvaser Device Guide [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => kvaser-device-guide [to_ping] => [pinged] => [post_modified] => 2022-10-04 12:47:47 [post_modified_gmt] => 2022-10-04 12:47:47 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39858 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) ) [post_count] => 10 [current_post] => -1 [in_the_loop] => [post] => WP_Post Object ( [ID] => 39856 [post_author] => 14 [post_date] => 2017-06-05 12:40:15 [post_date_gmt] => 2017-06-05 12:40:15 [post_content] => [vc_row][vc_column][vc_single_image image="15486"][vc_column_text]This is the second post in a 2-part series about Secure Boot and signing modules on Linux:
  1. Secure Boot on Linux systems
  2. Build and install signed Kvaser driver modules
[/vc_column_text][vc_column_text]The first part was an overview of what Secure Boot actually is and how it affects 3:rd party modules. In this part we take a look at how to build and sign the Kvaser driver modules to be able to use them on a Linux computer that has Secure Boot enabled.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="The Linux system"][vc_column_text]We are doing this on a freshly installed Ubuntu 16.04.[/vc_column_text][vc_code_raket code="JTIwJTIwJTI0JTIwdW5hbWUlMjAtYSUwQSUyMCUyMExpbnV4JTIwbXlwYyUyMDQuOC4wLTUxLWdlbmVyaWMlMjAlMjM1NH4xNi4wNC4xLVVidW50dSUyMFNNUCUyMFdlZCUyMEFwciUyMDI2JTIwMTYlM0EwMCUzQTI4JTIwVVRDJTIwMjAxNyUwQXg4Nl82NCUyMHg4Nl82NCUyMHg4Nl82NCUyMEdOVSUyRkxpbnV4JTBBJTIwJTIwJTI0JTIwbHNiX3JlbGVhc2UlMjAtYSUwQSUyMCUyME5vJTIwTFNCJTIwbW9kdWxlcyUyMGFyZSUyMGF2YWlsYWJsZS4lMEElMjAlMjBEaXN0cmlidXRvciUyMElEJTNBJTIwVWJ1bnR1JTBBJTIwJTIwRGVzY3JpcHRpb24lM0ElMjAlMjAlMjAlMjBVYnVudHUlMjAxNi4wNC4yJTIwTFRTJTBBJTIwJTIwUmVsZWFzZSUzQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDE2LjA0JTBBJTIwJTIwQ29kZW5hbWUlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjB4ZW5pYWw="][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyX2Z0bnJlZjElMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Create certificate and private key"][vc_column_text]The first step is to create a certificate/private RSA key pair which later will be used to sign the kernel modules. Note that since the private key is used to sign modules, viruses and malware could use the private key to sign modules and compromise the operating system. Make sure to keep the private key protected.1 Using the openssl command, we now create a private key and a DER encoded certificate.2 Remember to set the Common Name (CN) field (YOUR_NAME) to something meaningful for a human observer.3 We use kvaser.com as the Common Name in our example.[/vc_column_text][vc_code_raket code="JTIwJTIwJTI0JTIwbWtkaXIlMjB+JTJGc2lnbl9jZXJ0JTBBJTIwJTIwJTI0JTIwY2QlMjB+JTJGc2lnbl9jZXJ0JTBBJTIwJTIwJTIzJTIwQ2hhbmdlJTIwWU9VUl9OQU1FJTIwYmVsb3clMjBmb3IlMjBpZGVudGlmaWNhdGlvbiUyMHB1cnBvc2VzJTJDJTIwd2UlRTIlODAlOTlsbCUyMHVzZSUyMGt2YXNlci5jb20lMEElMjAlMjAlMjQlMjBvcGVuc3NsJTIwcmVxJTIwLW5ldyUyMC14NTA5JTIwLW5ld2tleSUyMHJzYSUzQTIwNDglMjAta2V5b3V0JTIwbW9kdWxlc2lnbi5wcml2JTIwLW91dGZvcm0lMjBERVIlMEEtb3V0JTIwbW9kdWxlc2lnbi5kZXIlMjAtbm9kZXMlMjAtZGF5cyUyMDM2NTAwJTIwLXN1YmolMjAlMjIlMkZDTiUzRFlPVVJfTkFNRSUyRiUyMiUwQQ=="][vc_column_text]We now end up with two files.[/vc_column_text][vc_code_raket code="JTI0JTIwbHMlMEFtb2R1bGVzaWduLmRlciUyMG1vZHVsZXNpZ24ucHJpdg=="][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Import and enroll the public key to the system"][vc_column_text]The next step is to use the mokutil4 command to import the public key so that it can be trusted by the system. This is a two step process where the key is first imported, and then later must be enrolled when the machine is booted the next time. A simple password is good enough, as it is only for temporary use.[/vc_column_text][vc_code_raket code="JTI0JTIwc3VkbyUyMG1va3V0aWwlMjAtLWltcG9ydCUyMG1vZHVsZXNpZ24uZGVyJTBBaW5wdXQlMjBwYXNzd29yZCUzQSUwQWlucHV0JTIwcGFzc3dvcmQlMjBhZ2FpbiUzQQ=="][vc_column_text]We can now verify that the correct certificate has been imported. Here we also note that the Common Name (CN) used above was kvaser.com.[/vc_column_text][vc_code_raket code="JTI0JTIwc3VkbyUyMG1va3V0aWwlMjAtLWxpc3QtbmV3JTBBJTVCa2V5JTIwMSU1RCUwQVNIQTElMjBGaW5nZXJwcmludCUzQSUyMDJjJTNBZDQlM0E1YiUzQWEzJTNBYzYlM0EzNCUzQTNmJTNBYTYlM0ExYSUzQThmJTNBZTMlM0FkMyUzQTIzJTNBOGQlM0E4OCUzQTY5JTNBN2QlM0EzMyUzQWFlJTNBMTIlMEFDZXJ0aWZpY2F0ZSUzQSUwQSUyMCUyMCUyMCUyMERhdGElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBWZXJzaW9uJTNBJTIwMyUyMCUyODB4MiUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFNlcmlhbCUyME51bWJlciUzQSUyMDE4MzE1OTAwMTgxNTc2NTAzNDQ2JTIwJTI4MHhmZTJmMjYyYzYwNjE1MDk2JTI5JTBBJTIwJTIwJTIwJTIwU2lnbmF0dXJlJTIwQWxnb3JpdGhtJTNBJTIwc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBJc3N1ZXIlM0ElMjBDTiUzRGt2YXNlci5jb20lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBWYWxpZGl0eSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME5vdCUyMEJlZm9yZSUzQSUyME1heSUyMCUyMDklMjAwNyUzQTUyJTNBNTYlMjAyMDE3JTIwR01UJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTm90JTIwQWZ0ZXIlMjAlM0ElMjBBcHIlMjAxNSUyMDA3JTNBNTIlM0E1NiUyMDIxMTclMjBHTVQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBTdWJqZWN0JTNBJTIwQ04lM0RrdmFzZXIuY29tJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU3ViamVjdCUyMFB1YmxpYyUyMEtleSUyMEluZm8lM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBQdWJsaWMlMjBLZXklMjBBbGdvcml0aG0lM0ElMjByc2FFbmNyeXB0aW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUHVibGljLUtleSUzQSUyMCUyODIwNDglMjBiaXQlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNb2R1bHVzJTNBJTBBJTNBJTBBJTNBJTBB"][vc_column_text]Now reboot the machine. When the bootloader starts, the MOK manager EFI utility should automatically start. On my machine I got a screen with white text on light blue background, telling me to "Press any key to perform MOK management" and "Booting in 10 seconds"5, YMMV. Choose "Enroll MOK", select the key, and enroll the key. We will be asked for the password we set during the import step above. Complete the enrollment steps, then continue with the boot. The Linux kernel will log the keys that are loaded, and we can see our own key with the dmesg command.[/vc_column_text][vc_code_raket code="JTIwJTIwJTI0JTIwZG1lc2clN0NncmVwJTIwJUUyJTgwJTk5RUZJJTNBJTIwTG9hZGVkJTIwY2VydCVFMiU4MCU5OSUwQSUyMCUyMCU1QiUyMCUyMCUyMCUyMDAuNjcxODk3JTVEJTIwRUZJJTNBJTIwTG9hZGVkJTIwY2VydCUyMCVFMiU4MCU5OU1pY3Jvc29mdCUyMFdpbmRvd3MlMjBQcm9kdWN0aW9uJTIwUENBJTIwMjAxMSUzQSUwQWE5MjkwMjM5OGUxNmM0OTc3OGNkOTBmOTllNGY5YWUxN2M1NWFmNTMlRTIlODAlOTklMjBsaW5rZWQlMjB0byUyMCVFMiU4MCU5OS5idWlsdGluX3RydXN0ZWRfa2V5cyVFMiU4MCU5OSUwQSUyMCUyMCU1QiUyMCUyMCUyMCUyMDAuNjcxOTA4JTVEJTIwRUZJJTNBJTIwTG9hZGVkJTIwY2VydCUyMCVFMiU4MCU5OU1pY3Jvc29mdCUyMENvcnBvcmF0aW9uJTIwVUVGSSUyMENBJTIwMjAxMSUzQSUwQTEzYWRiZjQzMDliZDgyNzA5YzhjZDU0ZjMxNmVkNTIyOTg4YTFiZDQlRTIlODAlOTklMjBsaW5rZWQlMjB0byUyMCVFMiU4MCU5OS5idWlsdGluX3RydXN0ZWRfa2V5cyVFMiU4MCU5OSUwQSUyMCUyMCU1QiUyMCUyMCUyMCUyMDAuNjczNzcxJTVEJTIwRUZJJTNBJTIwTG9hZGVkJTIwY2VydCUyMCVFMiU4MCU5OWt2YXNlci5jb20lM0ElMjA3NGZkODkyOWQ5ZTJmYjY0YTliZDBhYmUzYmRmJTBBNDJkNTE5YjczODJmJUUyJTgwJTk5JTIwbGlua2VkJTIwdG8lMjAlRTIlODAlOTkuYnVpbHRpbl90cnVzdGVkX2tleXMlRTIlODAlOTklMEElMjAlMjAlNUIlMjAlMjAlMjAlMjAwLjY3MzkwMiU1RCUyMEVGSSUzQSUyMExvYWRlZCUyMGNlcnQlMjAlRTIlODAlOTlDYW5vbmljYWwlMjBMdGQuJTIwTWFzdGVyJTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklM0ElMEFhZDkxOTkwYmMyMmFiMWY1MTcwNDhjMjNiNjY1NWEyNjhlMzQ1YTYzJUUyJTgwJTk5JTIwbGlua2VkJTIwdG8lMjAlRTIlODAlOTkuYnVpbHRpbl90cnVzdGVkX2tleXMlRTIlODAlOTk="][vc_column_text]We can now also test that our certificate has been enrolled using the mokutil command.[/vc_column_text][vc_code_raket code="JTI0JTIwY2QlMjB+JTJGc2lnbl9jZXJ0JTBBJTI0JTIwbW9rdXRpbCUyMC0tdGVzdC1rZXklMjBtb2R1bGVzaWduLmRlciUwQW1vZHVsZXNpZ24uZGVyJTIwaXMlMjBhbHJlYWR5JTIwZW5yb2xsZWQlMEE="][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][/vc_column][/vc_row][vc_row][vc_column][vc_header_raket header_type="h3" header="Build, sign and install the modules"][vc_column_text]Before building, we need to download the latest version of linuxcan from the Kvaser download page, which as of this writing is v5.20.6[/vc_column_text][vc_code_raket code="JTI0JTIwd2dldCUyMGh0dHAlM0ElMkYlMkZ3d3cua3Zhc2VyLmNvbSUyRnNvZnR3YXJlJTJGNzMzMDEzMDk4MDc1NCUyRlY1XzIwXzAlMkZsaW51eGNhbi50YXIuZ3olMEElMjQlMjB0YXIlMjB4dnpmJTIwbGludXhjYW4udGFyLmd6JTBBJTI0JTIwY2QlMjBsaW51eGNhbiUwQQ=="][vc_column_text]In order to make it easy for us to sign the files as part of the normal build process, we modify the kv_module target in the file config.mak as follows.7[/vc_column_text][vc_code_raket code="JTIzJTIwVGFyZ2V0JTIwZm91bmQlMjBpbiUyMGNvbmZpZy5tYWslMjBsb2NhdGVkJTIwaW4lMjB0aGUlMjB0b3AlMjBsZXZlbCUyMGRpcmVjdG9yeSUyMG9mJTIwbGludXhjYW4lMEFrdl9tb2R1bGUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNDBlY2hvJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNDBlY2hvJTIwJTIyYnVpbGRpbmclMjAlMjQlMjhLVl9NT0RVTEVfTkFNRSUyOSUyMCUyNCUyOElTX0RFQlVHJTI5JTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTQwZWNobyUyMCUyMktlcm5lbCUyMHNyYyUzQSUyMiUyMCUyNCUyOEtWX0tFUk5FTF9TUkNfRElSJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0JTI4TUFLRSUyOSUyMC1DJTIwJTI0JTI4S1ZfS0VSTkVMX1NSQ19ESVIlMjklMjBTVUJESVJTJTNEJTI0JTI4UFdEJTI5JTIwbW9kdWxlcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU0MGlmJTIwJTVCJTIwJTIyJTI0JTI4S1ZfU0lHTl9DRVJUX1BBVEglMjklMjIlMjAlMjElM0QlMjAlMjIlMjIlMjAlNUQlMjAlMjYlMjYlMjAlNUIlMjAlMjIlMjQlMjhLVl9TSUdOX0NFUlRfTkFNRSUyOSUyMiUyMCUyMSUzRCUyMCUyMiUyMiUyMCU1RCUzQiUyMHRoZW4lMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlY2hvJTIwJTIyU2lnbmluZyUyMG1vZHVsZSUyMCUyNCUyOEtWX01PRFVMRV9OQU1FJTI5LmtvJTIwd2l0aCUyMCUyNCUyOEtWX1NJR05fQ0VSVF9QQVRIJTI5JTJGJTI0JTI4S1ZfU0lHTl9DRVJUX05BTUUlMjklMjIlM0IlMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjQlMjhLVl9LRVJORUxfU1JDX0RJUiUyOSUyRnNjcmlwdHMlMkZzaWduLWZpbGUlMjBzaGEyNTYlMjAlMjQlMjhLVl9TSUdOX0NFUlRfUEFUSCUyOSUyRiUyNCUyOEtWX1NJR05fQ0VSVF9OQU1FJTI5LnByaXYlMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjQlMjhLVl9TSUdOX0NFUlRfUEFUSCUyOSUyRiUyNCUyOEtWX1NJR05fQ0VSVF9OQU1FJTI5LmRlciUyMCUyNCUyOEtWX01PRFVMRV9OQU1FJTI5LmtvJTNCJTIwJTVDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNDBlY2hvJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0="][vc_column_text]It is now possible to build and sign the driver modules using the normal make command by just adding the two environment variables KV_SIGN_CERT_PATH and KV_SIGN_CERT_NAME. We also install the module after building.[/vc_column_text][vc_code_raket code="JTIwJTIzJTIwS1ZfU0lHTl9DRVJUX1BBVEglMjBpcyUyMHRoZSUyMHBhdGglMjB0byUyMHlvdXIlMjBwcml2YXRlJTIwa2V5JTIwYW5kJTIwY2VydGlmaWNhdGUuJTBBJTIwJTIzJTIwS1ZfU0lHTl9DRVJUX05BTUUlMjBpcyUyMHRoZSUyMGJhc2UlMjBmaWxlJTIwbmFtZSUyMG9mJTIweW91ciUyMHByaXZhdGUlMjBrZXklMjBhbmQlMEFjZXJ0aWZpY2F0ZSUyQyUyMHdpdGhvdXQlMjBzdWZmaXguJTBBJTIwJTI0JTIwbWFrZSUyMEtWX1NJR05fQ0VSVF9QQVRIJTNEfiUyRnNpZ25fY2VydCUyMEtWX1NJR05fQ0VSVF9OQU1FJTNEbW9kdWxlc2lnbiUwQSUyMCUyNCUyMHN1ZG8lMjBtYWtlJTIwaW5zdGFsbA=="][vc_column_text]To verify that the installed module is working, we use the modprobe command to manually load a module and verify that it has been loaded.8 We also make sure to remove the module so we don't interfere with the automatic loading when Kvaser USB devices are connected.[/vc_column_text][vc_code_raket code="JTI0JTIwc3VkbyUyMG1vZHByb2JlJTIwbWh5ZHJhJTBBJTI0JTIwbHNtb2QlMjAlN0MlMjBncmVwJTIwJUUyJTgwJTk5a3Zjb21tb24lNUMlN0NtaHlkcmElRTIlODAlOTklMEFtaHlkcmElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA0NTA1NiUyMCUyMDAlMEFrdmNvbW1vbiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDQ1MDU2JTIwJTIwMSUyMG1oeWRyYSUwQSUwQSUyNCUyMHN1ZG8lMjBtb2Rwcm9iZSUyMC1yJTIwbWh5ZHJhJTIwa3Zjb21tb24lMEE="][/vc_column][/vc_row][vc_row][vc_column][vc_column_text][/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h2" header="Footnotes"][vc_column_text]1 Some notes regarding protecting the private key can be found in the Linux kernel documentation at https://static.lwn.net/kerneldoc/admin-guide/module-signing.html#administering-protecting-the-private-key. 2 You can read more about the different X509 file extensions such as DER in the SSL installation knowledge base at https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them/. 3 For a description of the significance of the Common Name, read more in the stackexchange article at https://security.stackexchange.com/questions/40026/openssl-x509-whats-the-significance-of-cn-common-name/. 4 You use the mokutil command to manage Machine Owner Keys (MOK) used by the shim layer to validate grub2 and kernel images. 5 If you miss this timeout, you need to rerun the mokutil --import command and reboot again. 6 Kvaser download page is located at https://www.kvaser.com/download. 7 The adjusted makefile target will be incorporated in the next release of linuxcan. 8 Unfortunatly it is currently not possible to use modinfo to see if a module is signed or not, see the github issue in coreos at https://github.com/coreos/bugs/issues/1054/ for more information.[/vc_column_text][/vc_column][/vc_row] [post_title] => Build and install signed Kvaser driver modules [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => build-install-signed-kvaser-driver-modules [to_ping] => [pinged] => [post_modified] => 2022-10-04 12:42:57 [post_modified_gmt] => 2022-10-04 12:42:57 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=39856 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [comment_count] => 0 [current_comment] => -1 [found_posts] => 469 [max_num_pages] => 47 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => 1 [is_privacy_policy] => [is_404] => [is_embed] => [is_paged] => 1 [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_favicon] => [is_posts_page] => 1 [is_post_type_archive] => [query_vars_hash:WP_Query:private] => 006bfb57c1a7f2ad699808a50b96840c [query_vars_changed:WP_Query:private] => 1 [thumbnails_cached] => [stopwords:WP_Query:private] => [compat_fields:WP_Query:private] => Array ( [0] => query_vars_hash [1] => query_vars_changed ) [compat_methods:WP_Query:private] => Array ( [0] => init_query_flags [1] => parse_tax_query ) )

News and Events

Build and install signed Kvaser driver modules

05/06/2017

This is the second post in a 2-part series about Secure Boot and signing modules on Linux: Secure Boot on… Read More

Read More
Simulating coughs at altitude involves CAN

Simulating coughs at altitude involves CAN

30/05/2017

At speeds of up to 50 miles per hour, the human cough is a powerful mechanism for expelling liquid from… Read More

Read More

Secure Boot on Linux systems

29/05/2017

This is the first post in a 2-part series about Secure Boot and signing modules on Linux: Secure Boot on… Read More

Read More
Part 2: t Script Roadblock Resolutions: 3 t script Resources You Can’t Do Without (Plus a bonus tip!)

Part 2: t Script Roadblock Resolutions: 3 t script Resources You Can’t Do Without (Plus a bonus tip!)

01/05/2017

We have been using t-Scripts to tackle a wide variety of cases lately. Here’s a list for a little inspiration… Read More

Read More
Part 1: t Script Roadblock Resolutions: Implementing a Program Flow using Hooks

Part 1: t Script Roadblock Resolutions: Implementing a Program Flow using Hooks

10/04/2017

If you are familiar with t scripts, you know that they are based on “hooks”. Hooks are like interrupts. The… Read More

Read More
Research Manager Kent Lennartsson Shares His Thoughts on CAN and Robotics With Robotics and Automation News

Research Manager Kent Lennartsson Shares His Thoughts on CAN and Robotics With Robotics and Automation News

03/04/2017

Research Manager Kent Lennartsson has been featured in Robotics and Automation News, discussing the many advantages of CAN for robotics… Read More

Read More

Kvaser’s Ethercan: The Simplest CAN-to-Ethernet Connectivity Solution

20/03/2017

Meet the Ethercan Light HS, Kvaser’s answer to the complex CAN-to-Ethernet connectivity gateways available in today’s market. This device, capable… Read More

Read More
Remote Magazine Discusses Both CAN and Ethernet in Industrial Automation with Kvaser’s Research Manager, Kent Lennartsson

Remote Magazine Discusses Both CAN and Ethernet in Industrial Automation with Kvaser’s Research Manager, Kent Lennartsson

07/03/2017

Kvaser’s own Research Manager, Kent Lennartsson, has been featured in Remote Magazine! This article focuses on the use of both… Read More

Read More

Special converter conditions

27/02/2017

This is the final post in a 3-part series about using the Converter Library (kvlclib) in CANlib SDK: Writer formats… Read More

Read More

Kvaser Device Guide

27/02/2017

Device Guide - What is it? Kvaser Device Guide is the successor of/to Kvaser Hardware, the tool for getting information… Read More

Read More