[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 7/10] qemu-binfmt-conf.sh: generalize CPU to
From: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PATCH v4 7/10] qemu-binfmt-conf.sh: generalize CPU to positional TARGETS |
Date: |
Mon, 11 Mar 2019 12:14:16 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 11/03/2019 11:30, Unai Martinez-Corral wrote:
> This breaks brackward compatibility.
>
> Option '--systemd CPU' allows to register binfmt interpreters for a
> single target architecture or for 'ALL' (of them). This patch
> generalizes the approach to support it in any mode (default, '--debian'
> or '--systemd'). To do so, option 'systemd' is changed to be boolean
> (no args). Then, all the positional arguments are considered to be a
> list of target architectures.
>
> If no positional arguments are provided, all of the architectures in
> qemu_target_list are registered. Conversely, argument value 'NONE'
> allows to make a 'dry run' of the script. I.e., checks are executed
> according to the mode, but no interpreter is registered.
>
> Support QEMU_TARGETS environment variable, consistently with 'path',
> 'suffix', 'persistent' and 'credential', The supported formats are
> the same as for positional arguments, which have priority. If both
> the variable and the list of positional arguments are empty, defaults
> to qemu_target_list.
>
> Signed-off-by: Unai Martinez-Corral <address@hidden>
> ---
> scripts/qemu-binfmt-conf.sh | 80 +++++++++++++++++++++----------------
> 1 file changed, 45 insertions(+), 35 deletions(-)
>
> diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
> index 13e619794c..fde78517ff 100755
> --- a/scripts/qemu-binfmt-conf.sh
> +++ b/scripts/qemu-binfmt-conf.sh
> @@ -6,6 +6,27 @@ mips mipsel mipsn32 mipsn32el mips64 mips64el \
> sh4 sh4eb s390x aarch64 aarch64_be hppa riscv32 riscv64 xtensa xtensaeb \
> microblaze microblazeel or1k x86_64"
>
> +# check if given TARGETS is/are in the supported target list
> +qemu_check_target_list() {
> + if [ $# -eq 0 ] ; then
> + checked_target_list="$qemu_target_list"
> + return
> + fi
> + for target ; do
> + for cpu in $qemu_target_list ; do
> + if [ "x$cpu" = "x$target" ] ; then
> + checked_target_list="$checked_target_list $target"
> + break
> + fi
> + done
> + if [ "$unknown_target" = "true" ] ; then
if [ "x$cpu" != "x$target" ] ; then
> + echo "ERROR: unknown CPU \"$target\"" 1>&2
> + usage
> + exit 1
> + fi
> + done
> +}
> +
>
> i386_magic='\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00'
>
> i386_mask='\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'
> i386_family=i386
> @@ -167,21 +188,25 @@ qemu_get_family() {
>
> usage() {
> cat <<EOF
> +Usage: qemu-binfmt-conf.sh [options] [TARGETS]
>
> -Usage: qemu-binfmt-conf.sh [options]
> -
> -Configure binfmt_misc to use qemu interpreter
> +Configure binfmt_misc to use qemu interpreter for the given TARGETS.
>
> Options and associated environment variables:
>
> Argument Env-variable Description
> +TARGETS QEMU_TARGETS A single arch name or a list of them
> (see all names below);
> + if empty, configure all known targets;
> + if 'NONE', no interpreter is
> configured.
> -h|--help display this usage
> -Q|--path PATH: QEMU_PATH set path to qemu interpreter(s)
> -F|--suffix SUFFIX: QEMU_SUFFIX add a suffix to the default
> interpreter name
> -d|--debian: don't write into /proc, generate
> update-binfmts templates
> --s|--systemd CPU: don't write into /proc, generate file
> for
> - systemd-binfmt.service for the given
> CPU; if CPU is "ALL",
> - generate a file for all known cpus.
> +-s|--systemd: don't write into /proc, generate
> file(s) for
> + systemd-binfmt.service; environment
> variable HOST_ARCH
why HOST_ARCH appears here?
> + allows to override 'uname' to generate
> configuration files
> + for a different architecture than the
> current one.
> +
> -e|--exportdir PATH: DEBIANDIR define where to write configuration
> files
> SYSTEMDDIR
> -c|--credential: QEMU_CREDENTIAL (yes) credential and security tokens
> are calculated according
> @@ -197,14 +222,7 @@ To remove interpreter, use :
>
> sudo update-binfmts --package qemu-CPU --remove qemu-CPU $QEMU_PATH
>
> -With systemd, binfmt files are loaded by systemd-binfmt.service
> -
> -The environment variable HOST_ARCH allows to override 'uname' to generate
> configuration files for a
> -different architecture than the current one.
> -
> -where CPU is one of:
> -
> - $qemu_target_list
> +QEMU target list: $qemu_target_list
>
> EOF
> }
> @@ -288,9 +306,15 @@ qemu_set_binfmts() {
> # probe cpu type
> host_family=$(qemu_get_family)
>
> - # register the interpreter for each cpu except for the native one
> + # reduce the list of target interpreters to those given in the CLI
> + [ $# -eq 0 ] && targets="${QEMU_TARGETS:-}" || targets="$@"
> + if [ "x$targets" = "xNONE" ] ; then
> + return
> + fi
> + qemu_check_target_list $targets
>
> - for cpu in ${qemu_target_list} ; do
> + # register the interpreter for each target except for the native one
> + for cpu in $checked_target_list ; do
> magic=$(eval echo \$${cpu}_magic)
> mask=$(eval echo \$${cpu}_mask)
> family=$(eval echo \$${cpu}_family)
> @@ -318,12 +342,13 @@ BINFMT_SET=qemu_register_interpreter
> SYSTEMDDIR="/etc/binfmt.d"
> DEBIANDIR="/usr/share/binfmts"
>
> +QEMU_TARGETS="${QEMU_TARGETS:-}"
> QEMU_PATH="${QEMU_PATH:-/usr/local/bin}"
> QEMU_SUFFIX="${QEMU_SUFFIX:-}"
> QEMU_CREDENTIAL="${QEMU_CREDENTIAL:-no}"
> QEMU_PERSISTENT="${QEMU_PERSISTENT:-no}"
>
> -options=$(getopt -o ds:Q:S:e:hcp -l
> debian,systemd:,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
> +options=$(getopt -o dsQ:S:e:hcp -l
> debian,systemd,path:,suffix:,exportdir:,help,credential,persistent -- "$@")
> eval set -- "$options"
>
> while true ; do
> @@ -337,23 +362,6 @@ while true ; do
> CHECK=qemu_check_systemd
> BINFMT_SET=qemu_generate_systemd
> EXPORTDIR=${EXPORTDIR:-$SYSTEMDDIR}
> - shift
> - # check given cpu is in the supported CPU list
> - if [ "$1" != "ALL" ] ; then
> - for cpu in ${qemu_target_list} ; do
> - if [ "$cpu" = "$1" ] ; then
> - break
> - fi
> - done
> -
> - if [ "$cpu" = "$1" ] ; then
> - qemu_target_list="$1"
> - else
> - echo "ERROR: unknown CPU \"$1\"" 1>&2
> - usage
> - exit 1
> - fi
> - fi
> ;;
> -Q|--path)
> shift
> @@ -384,5 +392,7 @@ while true ; do
> shift
> done
>
> +shift
> +
> $CHECK
> -qemu_set_binfmts
> +qemu_set_binfmts "$@"
> --
> 2.21.0
>
- [Qemu-devel] [PATCH v4 3/10] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT, (continued)
- [Qemu-devel] [PATCH v4 3/10] qemu-binfmt-conf.sh: add QEMU_CREDENTIAL and QEMU_PERSISTENT, Unai Martinez-Corral, 2019/03/11
- [Qemu-devel] [PATCH v4 2/10] qemu-binfmt-conf.sh: make opts -p and -c boolean, Unai Martinez-Corral, 2019/03/11
- [Qemu-devel] [PATCH v4 4/10] qemu-binfmt-conf.sh: use the same presentation format as for qemu-*, Unai Martinez-Corral, 2019/03/11
- [Qemu-devel] [PATCH v4 1/10] qemu-binfmt-conf.sh: enforce safe style consistency, Unai Martinez-Corral, 2019/03/11
- [Qemu-devel] [PATCH v4 5/10] qemu-binfmt-conf.sh: remove 'qemu' prefix from cli options, Unai Martinez-Corral, 2019/03/11
- [Qemu-devel] [PATCH v4 6/10] qemu-binfmt-conf.sh: honour QEMU_PATH and/or QEMU_SUFFIX, Unai Martinez-Corral, 2019/03/11
- [Qemu-devel] [PATCH v4 7/10] qemu-binfmt-conf.sh: generalize CPU to positional TARGETS, Unai Martinez-Corral, 2019/03/11
- Re: [Qemu-devel] [PATCH v4 7/10] qemu-binfmt-conf.sh: generalize CPU to positional TARGETS,
Laurent Vivier <=
[Qemu-devel] [PATCH v4 8/10] qemu-binfmt-conf.sh: add option --clear, Unai Martinez-Corral, 2019/03/11
[Qemu-devel] [PATCH v4 9/10] qemu-binfmt-conf.sh: update usage(), Unai Martinez-Corral, 2019/03/11
[Qemu-devel] [PATCH v4 10/10] qemu-binfmt-conf.sh: add --test|--dry-run, Unai Martinez-Corral, 2019/03/11