mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-12 09:54:53 +00:00
scripts/dump-target-info.pl: add new function to DUMP devices
Add new function to dump-targer-info.pl to DUMP devices provided a matching target/subtarget. Example: ./scripts/dump-targer-info.pl devices ipq806x/generic will produce the sorted list of devices defined in the following format: device_id device_name Devices may have alternative names, the script will dump each alternative name in the same line of device_id. Following the pattern: device_id "PRIMARY DEVICE NAME" "ALT0 DEVICE NAME" "ALT1 DEVICE NAME" ... Example: tplink_ad7200 "TP-Link AD7200 v1/v2" "TP-Link Talon AD7200 v1/v2" Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
parent
c60e9d1839
commit
943c153cdd
@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Cwd;
|
use Cwd;
|
||||||
|
|
||||||
my (%targets, %architectures, %kernels);
|
my (%targets, %architectures, %kernels, %devices);
|
||||||
|
|
||||||
$ENV{'TOPDIR'} = Cwd::getcwd();
|
$ENV{'TOPDIR'} = Cwd::getcwd();
|
||||||
|
|
||||||
@ -56,6 +56,68 @@ sub parse_targetinfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub parse_devices {
|
||||||
|
my ($target_dir, $subtarget) = @_;
|
||||||
|
|
||||||
|
if (open M, "make -C '$target_dir' --no-print-directory DUMP=1 TARGET_BUILD=1 SUBTARGET='$subtarget' V=s |") {
|
||||||
|
my ($device_profile, $device_name, @device_alt_names, $device_is_alt);
|
||||||
|
while (defined(my $line = readline M)) {
|
||||||
|
chomp $line;
|
||||||
|
|
||||||
|
if ($line =~ /^Target-Profile-Name: (.+)$/) {
|
||||||
|
$device_name = $1;
|
||||||
|
}
|
||||||
|
elsif ($line =~ /^Target-Profile: DEVICE_(.+)$/) {
|
||||||
|
$device_profile = $1;
|
||||||
|
}
|
||||||
|
# Logic behind this.
|
||||||
|
# DUMP duplicate info for each alternative device name and
|
||||||
|
# the alternative device name are printed first before the
|
||||||
|
# primary device name
|
||||||
|
# Alternative device titles always have the full list of
|
||||||
|
# all the alternative device name.
|
||||||
|
# The device name pattern for an alternative device name is
|
||||||
|
# Target-Profile-Name: ALT_NAME (PRIMARY_NAME)
|
||||||
|
# We compare the detected device name and check if it does
|
||||||
|
# match the alternative device name pattern with one of
|
||||||
|
# the alternative device name in Alternative device titles:
|
||||||
|
# If an alternative device name is detected,
|
||||||
|
# alternative device is skipped.
|
||||||
|
elsif ($line =~ /^Alternative device titles:$/) {
|
||||||
|
while (defined($line = readline M)) {
|
||||||
|
if ($line =~ /^- (.+)$/) {
|
||||||
|
if ($device_name =~ /^\Q$1\E \((.+)\)$/) {
|
||||||
|
$device_is_alt = 1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
push @device_alt_names, $1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($line =~ /^@\@$/) {
|
||||||
|
if ($device_name && $device_profile && ! $device_is_alt) {
|
||||||
|
push @{$devices{$device_profile}}, $device_name;
|
||||||
|
|
||||||
|
if (scalar @device_alt_names) {
|
||||||
|
foreach my $device_alt_name (sort values @device_alt_names) {
|
||||||
|
push @{$devices{$device_profile}}, $device_alt_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
undef $device_name;
|
||||||
|
undef $device_profile;
|
||||||
|
undef $device_is_alt;
|
||||||
|
@device_alt_names = ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub get_targetinfo {
|
sub get_targetinfo {
|
||||||
foreach my $target_makefile (glob "target/linux/*/Makefile") {
|
foreach my $target_makefile (glob "target/linux/*/Makefile") {
|
||||||
my ($target_dir) = $target_makefile =~ m!^(.+)/Makefile$!;
|
my ($target_dir) = $target_makefile =~ m!^(.+)/Makefile$!;
|
||||||
@ -86,6 +148,15 @@ sub get_targetinfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_devices {
|
||||||
|
my ($target_subtarget) = @_;
|
||||||
|
my ($target, $subtarget) = split /\//, $target_subtarget;
|
||||||
|
|
||||||
|
my ($target_dir) = "target/linux/" . $target;
|
||||||
|
|
||||||
|
parse_devices($target_dir, $subtarget)
|
||||||
|
}
|
||||||
|
|
||||||
if (@ARGV == 1 && $ARGV[0] eq 'targets') {
|
if (@ARGV == 1 && $ARGV[0] eq 'targets') {
|
||||||
get_targetinfo();
|
get_targetinfo();
|
||||||
foreach my $target_name (sort keys %targets) {
|
foreach my $target_name (sort keys %targets) {
|
||||||
@ -104,8 +175,15 @@ elsif (@ARGV == 1 && $ARGV[0] eq 'kernels') {
|
|||||||
printf "%s %s\n", $target_name, join ' ', @{$kernels{$target_name}};
|
printf "%s %s\n", $target_name, join ' ', @{$kernels{$target_name}};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elsif (@ARGV == 2 && $ARGV[0] eq 'devices') {
|
||||||
|
get_devices($ARGV[1]);
|
||||||
|
foreach my $device (sort keys %devices) {
|
||||||
|
printf "%s \"%s\"\n", $device, join '" "', @{$devices{$device}};
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
print "Usage: $0 targets\n";
|
print "Usage: $0 targets\n";
|
||||||
print "Usage: $0 architectures\n";
|
print "Usage: $0 architectures\n";
|
||||||
print "Usage: $0 kernels\n";
|
print "Usage: $0 kernels\n";
|
||||||
|
print "Usage: $0 devices <target/subtarget>\n";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user