yocto-kernel: add support for kernel feature add/rm/list
Add yocto-kernel commands allowing users to add, remove, and list kernel features with respect to a given BSP. Features managed by these commands modify a special machine-user-features.scc file associated with the kernel recipe (.bbappend) of a yocto-bsp-generated BSP. This is analagous to the implementation of similar support for bare config items and patches already implemented for yocto-bsp-generated BSPs. Future patches will add support for providing a list of eligible features as defined by linux-yocto kernels and locally-defined (recipe-space) kernel features. (From meta-yocto rev: ae68d906c5c9854f2cd7ee0870556fbfbd7d94d0) Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
6911fd0889
commit
0bfe83edbb
|
@ -383,6 +383,9 @@ yocto_kernel_usage = """
|
|||
patch list List the patches associated with a BSP
|
||||
patch add Patch the Yocto kernel for a BSP
|
||||
patch rm Remove patches from a BSP
|
||||
feature list List the features used by a BSP
|
||||
feature add Have a BSP use a feature
|
||||
feature rm Have a BSP stop using a feature
|
||||
|
||||
See 'yocto-kernel help COMMAND' for more information on a specific command.
|
||||
|
||||
|
@ -594,6 +597,101 @@ DESCRIPTION
|
|||
remove.
|
||||
"""
|
||||
|
||||
yocto_kernel_feature_list_usage = """
|
||||
|
||||
List the BSP features that are being used by a BSP
|
||||
|
||||
usage: yocto-kernel feature list <bsp-name>
|
||||
|
||||
This command lists the features being used by a BSP i.e. the features
|
||||
which are eligible for modification or removal by other yocto-kernel
|
||||
commands.
|
||||
|
||||
'modifiable' features are the features listed in a BSP's
|
||||
user-features.scc file.
|
||||
"""
|
||||
|
||||
|
||||
yocto_kernel_feature_list_help = """
|
||||
|
||||
NAME
|
||||
yocto-kernel feature list - List the modifiable set of features
|
||||
being used by a BSP
|
||||
|
||||
SYNOPSIS
|
||||
yocto-kernel feature list <bsp-name>
|
||||
|
||||
DESCRIPTION
|
||||
This command lists the 'modifiable' features being used by a BSP
|
||||
i.e. the features which are eligible for modification or removal
|
||||
by other yocto-kernel commands.
|
||||
"""
|
||||
|
||||
|
||||
yocto_kernel_feature_add_usage = """
|
||||
|
||||
Add to or modify the list of features being used for a BSP
|
||||
|
||||
usage: yocto-kernel feature add <bsp-name> [/xxxx/yyyy/feature.scc ...]
|
||||
|
||||
This command adds one or more feature items to a BSP's kernel
|
||||
user-features.scc file, which is the file used to manage features in
|
||||
a yocto-bsp-generated BSP. Features to be added must be specified as
|
||||
fully-qualified feature names.
|
||||
"""
|
||||
|
||||
|
||||
yocto_kernel_feature_add_help = """
|
||||
|
||||
NAME
|
||||
yocto-kernel feature add - Add to or modify the list of features
|
||||
being used for a BSP
|
||||
|
||||
SYNOPSIS
|
||||
yocto-kernel feature add <bsp-name> [/xxxx/yyyy/feature.scc ...]
|
||||
|
||||
DESCRIPTION
|
||||
This command adds one or more feature items to a BSP's
|
||||
user-features.scc file, which is the file used to manage features
|
||||
in a yocto-bsp-generated BSP. Features to be added must be
|
||||
specified as fully-qualified feature names.
|
||||
"""
|
||||
|
||||
|
||||
yocto_kernel_feature_rm_usage = """
|
||||
|
||||
Remove a feature from the list of features being used for a BSP
|
||||
|
||||
usage: yocto-kernel feature rm <bsp-name>
|
||||
|
||||
This command removes (turns off) one or more features from a BSP's
|
||||
user-features.scc file, which is the file used to manage features in
|
||||
a yocto-bsp-generated BSP.
|
||||
|
||||
The set of features available to be removed by this command for a BSP
|
||||
is listed and the user prompted for the specific items to remove.
|
||||
"""
|
||||
|
||||
|
||||
yocto_kernel_feature_rm_help = """
|
||||
|
||||
NAME
|
||||
yocto-kernel feature rm - Remove a feature from the list of
|
||||
features being used for a BSP
|
||||
|
||||
SYNOPSIS
|
||||
yocto-kernel feature rm <bsp-name>
|
||||
|
||||
DESCRIPTION
|
||||
This command removes (turns off) one or more features from a BSP's
|
||||
user-features.scc file, which is the file used to manage features
|
||||
in a yocto-bsp-generated BSP.
|
||||
|
||||
The set of features available to be removed by this command for a
|
||||
BSP is listed and the user prompted for the specific items to
|
||||
remove.
|
||||
"""
|
||||
|
||||
##
|
||||
# yocto-layer help and usage strings
|
||||
##
|
||||
|
|
|
@ -552,6 +552,105 @@ def find_giturl(context):
|
|||
|
||||
return None
|
||||
|
||||
|
||||
def read_features(scripts_path, machine):
|
||||
"""
|
||||
Find and return a list of features in a machine's user-defined
|
||||
features fragment [${machine}-user-features.scc].
|
||||
"""
|
||||
features = []
|
||||
|
||||
f = open_user_file(scripts_path, machine, machine+"-user-features.scc", "r")
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
s = line.strip()
|
||||
if s and not s.startswith("#"):
|
||||
feature_include = s.split()
|
||||
features.append(feature_include[1].strip())
|
||||
f.close()
|
||||
|
||||
return features
|
||||
|
||||
|
||||
def write_features(scripts_path, machine, features):
|
||||
"""
|
||||
Write (replace) the list of feature items in a
|
||||
machine's user-defined features fragment [${machine}=user-features.cfg].
|
||||
"""
|
||||
f = open_user_file(scripts_path, machine, machine+"-user-features.scc", "w")
|
||||
for item in features:
|
||||
f.write("include " + item + "\n")
|
||||
f.close()
|
||||
|
||||
kernel_contents_changed(scripts_path, machine)
|
||||
|
||||
|
||||
def yocto_kernel_feature_list(scripts_path, machine):
|
||||
"""
|
||||
Display the list of features used in a machine's user-defined
|
||||
features fragment [${machine}-user-features.scc].
|
||||
"""
|
||||
features = read_features(scripts_path, machine)
|
||||
|
||||
print "The current set of machine-specific features for %s is:" % machine
|
||||
print gen_choices_str(features)
|
||||
|
||||
|
||||
def yocto_kernel_feature_rm(scripts_path, machine):
|
||||
"""
|
||||
Display the list of features used in a machine's user-defined
|
||||
features fragment [${machine}-user-features.scc], prompt the user
|
||||
for one or more to remove, and remove them.
|
||||
"""
|
||||
features = read_features(scripts_path, machine)
|
||||
|
||||
print "Specify the features to remove:"
|
||||
input = raw_input(gen_choices_str(features))
|
||||
rm_choices = input.split()
|
||||
rm_choices.sort()
|
||||
|
||||
removed = []
|
||||
|
||||
for choice in reversed(rm_choices):
|
||||
try:
|
||||
idx = int(choice) - 1
|
||||
except ValueError:
|
||||
print "Invalid choice (%s), exiting" % choice
|
||||
sys.exit(1)
|
||||
if idx < 0 or idx >= len(features):
|
||||
print "Invalid choice (%d), exiting" % (idx + 1)
|
||||
sys.exit(1)
|
||||
removed.append(features.pop(idx))
|
||||
|
||||
write_features(scripts_path, machine, features)
|
||||
|
||||
print "Removed features:"
|
||||
for r in removed:
|
||||
print "\t%s" % r
|
||||
|
||||
|
||||
def yocto_kernel_feature_add(scripts_path, machine, features):
|
||||
"""
|
||||
Add one or more features a machine's user-defined features
|
||||
fragment [${machine}-user-features.scc].
|
||||
"""
|
||||
new_items = []
|
||||
|
||||
for item in features:
|
||||
if not item.endswith(".scc"):
|
||||
print "Invalid feature (%s), exiting" % item
|
||||
sys.exit(1)
|
||||
new_items.append(item)
|
||||
|
||||
cur_items = read_features(scripts_path, machine)
|
||||
cur_items.extend(new_items)
|
||||
|
||||
write_features(scripts_path, machine, cur_items)
|
||||
|
||||
print "Added features:"
|
||||
for n in new_items:
|
||||
print "\t%s" % n
|
||||
|
||||
|
||||
def base_branches(context):
|
||||
"""
|
||||
|
|
|
@ -162,6 +162,65 @@ def yocto_kernel_patch_rm_subcommand(args, usage_str):
|
|||
yocto_kernel_patch_rm(scripts_path, args[0])
|
||||
|
||||
|
||||
def yocto_kernel_feature_list_subcommand(args, usage_str):
|
||||
"""
|
||||
Command-line handling for listing the BSP features that are being
|
||||
used by the BSP. The real work is done by
|
||||
bsp.kernel.yocto_kernel_feature_list().
|
||||
"""
|
||||
logging.debug("yocto_kernel_feature_list_subcommand")
|
||||
|
||||
parser = optparse.OptionParser(usage = usage_str)
|
||||
|
||||
(options, args) = parser.parse_args(args)
|
||||
|
||||
if len(args) != 1:
|
||||
logging.error("Wrong number of arguments, exiting\n")
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
yocto_kernel_feature_list(scripts_path, args[0])
|
||||
|
||||
|
||||
def yocto_kernel_feature_add_subcommand(args, usage_str):
|
||||
"""
|
||||
Command-line handling for adding the use of kernel features to a
|
||||
BSP. The real work is done by bsp.kernel.yocto_kernel_feature_add().
|
||||
"""
|
||||
logging.debug("yocto_kernel_feature_add_subcommand")
|
||||
|
||||
parser = optparse.OptionParser(usage = usage_str)
|
||||
|
||||
(options, args) = parser.parse_args(args)
|
||||
|
||||
if len(args) < 2:
|
||||
logging.error("Wrong number of arguments, exiting\n")
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
machine = args.pop(0)
|
||||
yocto_kernel_feature_add(scripts_path, machine, args)
|
||||
|
||||
|
||||
def yocto_kernel_feature_rm_subcommand(args, usage_str):
|
||||
"""
|
||||
Command-line handling for removing the use of kernel features from
|
||||
a BSP. The real work is done by bsp.kernel.yocto_kernel_feature_rm().
|
||||
"""
|
||||
logging.debug("yocto_kernel_feature_rm_subcommand")
|
||||
|
||||
parser = optparse.OptionParser(usage = usage_str)
|
||||
|
||||
(options, args) = parser.parse_args(args)
|
||||
|
||||
if len(args) != 1:
|
||||
logging.error("Wrong number of arguments, exiting\n")
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
yocto_kernel_feature_rm(scripts_path, args[0])
|
||||
|
||||
|
||||
subcommands = {
|
||||
"config-list": [yocto_kernel_config_list_subcommand,
|
||||
yocto_kernel_config_list_usage,
|
||||
|
@ -181,6 +240,15 @@ subcommands = {
|
|||
"patch-rm": [yocto_kernel_patch_rm_subcommand,
|
||||
yocto_kernel_patch_rm_usage,
|
||||
yocto_kernel_patch_rm_help],
|
||||
"feature-list": [yocto_kernel_feature_list_subcommand,
|
||||
yocto_kernel_feature_list_usage,
|
||||
yocto_kernel_feature_list_help],
|
||||
"feature-add": [yocto_kernel_feature_add_subcommand,
|
||||
yocto_kernel_feature_add_usage,
|
||||
yocto_kernel_feature_add_help],
|
||||
"feature-rm": [yocto_kernel_feature_rm_subcommand,
|
||||
yocto_kernel_feature_rm_usage,
|
||||
yocto_kernel_feature_rm_help],
|
||||
}
|
||||
|
||||
|
||||
|
@ -212,7 +280,8 @@ def main():
|
|||
else:
|
||||
sc = 0
|
||||
|
||||
if args[sc] == "config" or args[sc] == "patch":
|
||||
if args[sc] == "config" or args[sc] == "patch" or \
|
||||
args[sc] == "feature":
|
||||
if len(args) < 2 + sc:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
|
Loading…
Reference in New Issue