diff options
Diffstat (limited to 'scripts/lib/bsp/kernel.py')
| -rw-r--r-- | scripts/lib/bsp/kernel.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/scripts/lib/bsp/kernel.py b/scripts/lib/bsp/kernel.py index 0fa228a58a..0308600a42 100644 --- a/scripts/lib/bsp/kernel.py +++ b/scripts/lib/bsp/kernel.py | |||
| @@ -32,6 +32,7 @@ import shutil | |||
| 32 | from tags import * | 32 | from tags import * |
| 33 | import glob | 33 | import glob |
| 34 | import subprocess | 34 | import subprocess |
| 35 | from engine import create_context | ||
| 35 | 36 | ||
| 36 | 37 | ||
| 37 | def find_bblayers(scripts_path): | 38 | def find_bblayers(scripts_path): |
| @@ -651,6 +652,112 @@ def yocto_kernel_feature_add(scripts_path, machine, features): | |||
| 651 | for n in new_items: | 652 | for n in new_items: |
| 652 | print "\t%s" % n | 653 | print "\t%s" % n |
| 653 | 654 | ||
| 655 | |||
| 656 | def find_feature_url(git_url): | ||
| 657 | """ | ||
| 658 | Find the url of the kern-features.rc kernel for the kernel repo | ||
| 659 | specified from the BSP's kernel recipe SRC_URI. | ||
| 660 | """ | ||
| 661 | feature_url = "" | ||
| 662 | if git_url.startswith("git://"): | ||
| 663 | git_url = git_url[len("git://"):].strip() | ||
| 664 | s = git_url.split("/") | ||
| 665 | if s[1].endswith(".git"): | ||
| 666 | s[1] = s[1][:len(s[1]) - len(".git")] | ||
| 667 | feature_url = "http://" + s[0] + "/cgit/cgit.cgi/" + s[1] + \ | ||
| 668 | "/plain/meta/cfg/kern-features.rc?h=meta" | ||
| 669 | |||
| 670 | return feature_url | ||
| 671 | |||
| 672 | |||
| 673 | def find_feature_desc(lines): | ||
| 674 | """ | ||
| 675 | Find the feature description and compatibility in the passed-in | ||
| 676 | set of lines. Returns a string string of the form 'desc | ||
| 677 | [compat]'. | ||
| 678 | """ | ||
| 679 | desc = "no description available" | ||
| 680 | compat = "unknown" | ||
| 681 | |||
| 682 | for line in lines: | ||
| 683 | idx = line.find("KFEATURE_DESCRIPTION") | ||
| 684 | if idx != -1: | ||
| 685 | desc = line[idx + len("KFEATURE_DESCRIPTION"):].strip() | ||
| 686 | if desc.startswith("\""): | ||
| 687 | desc = desc[1:] | ||
| 688 | if desc.endswith("\""): | ||
| 689 | desc = desc[:-1] | ||
| 690 | else: | ||
| 691 | idx = line.find("KFEATURE_COMPATIBILITY") | ||
| 692 | if idx != -1: | ||
| 693 | compat = line[idx + len("KFEATURE_COMPATIBILITY"):].strip() | ||
| 694 | |||
| 695 | return desc + " [" + compat + "]" | ||
| 696 | |||
| 697 | |||
| 698 | def print_feature_descs(layer, feature_dir): | ||
| 699 | """ | ||
| 700 | Print the feature descriptions for the features in feature_dir. | ||
| 701 | """ | ||
| 702 | kernel_files_features = os.path.join(layer, "recipes-kernel/linux/files/" + | ||
| 703 | feature_dir) | ||
| 704 | for root, dirs, files in os.walk(kernel_files_features): | ||
| 705 | for file in files: | ||
| 706 | if file.endswith("~") or file.endswith("#"): | ||
| 707 | continue | ||
| 708 | if file.endswith(".scc"): | ||
| 709 | fullpath = os.path.join(layer, "recipes-kernel/linux/files/" + | ||
| 710 | feature_dir + "/" + file) | ||
| 711 | f = open(fullpath) | ||
| 712 | feature_desc = find_feature_desc(f.readlines()) | ||
| 713 | print feature_dir + "/" + file + ": " + feature_desc | ||
| 714 | |||
| 715 | |||
| 716 | def yocto_kernel_available_features_list(scripts_path, machine): | ||
| 717 | """ | ||
| 718 | Display the list of all the kernel features available for use in | ||
| 719 | BSPs, as gathered from the set of feature sources. | ||
| 720 | """ | ||
| 721 | layer = find_bsp_layer(scripts_path, machine) | ||
| 722 | kernel = find_current_kernel(layer, machine) | ||
| 723 | if not kernel: | ||
| 724 | print "Couldn't determine the kernel for this BSP, exiting." | ||
| 725 | sys.exit(1) | ||
| 726 | |||
| 727 | context = create_context(machine, "arch", scripts_path) | ||
| 728 | context["name"] = "name" | ||
| 729 | context["filename"] = kernel | ||
| 730 | giturl = find_giturl(context) | ||
| 731 | feature_url = find_feature_url(giturl) | ||
| 732 | |||
| 733 | feature_cmd = "wget -q -O - " + feature_url | ||
| 734 | tmp = subprocess.Popen(feature_cmd, shell=True, stdout=subprocess.PIPE).stdout.read() | ||
| 735 | |||
| 736 | print "The current set of kernel features available to %s is:\n" % machine | ||
| 737 | |||
| 738 | if tmp: | ||
| 739 | tmpline = tmp.split("\n") | ||
| 740 | in_kernel_options = False | ||
| 741 | for line in tmpline: | ||
| 742 | if not "=" in line: | ||
| 743 | if in_kernel_options: | ||
| 744 | break | ||
| 745 | if "kernel-options" in line: | ||
| 746 | in_kernel_options = True | ||
| 747 | continue | ||
| 748 | if in_kernel_options: | ||
| 749 | feature_def = line.split("=") | ||
| 750 | feature_type = feature_def[0].strip() | ||
| 751 | feature = feature_def[1].strip() | ||
| 752 | desc = get_feature_desc(giturl, feature) | ||
| 753 | print "%s: %s" % (feature, desc) | ||
| 754 | |||
| 755 | print "[local]" | ||
| 756 | |||
| 757 | print_feature_descs(layer, "cfg") | ||
| 758 | print_feature_descs(layer, "features") | ||
| 759 | |||
| 760 | |||
| 654 | 761 | ||
| 655 | def base_branches(context): | 762 | def base_branches(context): |
| 656 | """ | 763 | """ |
