mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-27 20:14:27 +01:00
bak
This commit is contained in:
16
build
16
build
@@ -53,7 +53,7 @@ def run_cmd(cmd, arch):
|
|||||||
cmd_abs.extend(['--arch', arch])
|
cmd_abs.extend(['--arch', arch])
|
||||||
if args.extra_args:
|
if args.extra_args:
|
||||||
cmd_abs.append(args.extra_args)
|
cmd_abs.append(args.extra_args)
|
||||||
common.run_cmd(cmd_abs, dry_run=args.dry_run)
|
self.sh.run_cmd(cmd_abs, dry_run=args.dry_run)
|
||||||
|
|
||||||
buildroot_component = Component(
|
buildroot_component = Component(
|
||||||
lambda arch: run_cmd(['build-buildroot'], arch),
|
lambda arch: run_cmd(['build-buildroot'], arch),
|
||||||
@@ -410,29 +410,29 @@ if args.download_dependencies:
|
|||||||
y = ['-y']
|
y = ['-y']
|
||||||
else:
|
else:
|
||||||
y = []
|
y = []
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
sudo + ['apt-get', 'update', common.Newline]
|
sudo + ['apt-get', 'update', common.Newline]
|
||||||
)
|
)
|
||||||
if apt_get_pkgs:
|
if apt_get_pkgs:
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
sudo + ['apt-get', 'install'] + y + [common.Newline] +
|
sudo + ['apt-get', 'install'] + y + [common.Newline] +
|
||||||
common.add_newlines(sorted(apt_get_pkgs))
|
common.add_newlines(sorted(apt_get_pkgs))
|
||||||
)
|
)
|
||||||
if apt_build_deps:
|
if apt_build_deps:
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
sudo +
|
sudo +
|
||||||
['apt-get', 'build-dep'] + y + [common.Newline] +
|
['apt-get', 'build-dep'] + y + [common.Newline] +
|
||||||
common.add_newlines(sorted(apt_build_deps))
|
common.add_newlines(sorted(apt_build_deps))
|
||||||
)
|
)
|
||||||
if python2_pkgs:
|
if python2_pkgs:
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
['python', '-m', 'pip', 'install', '--user', common.Newline] +
|
['python', '-m', 'pip', 'install', '--user', common.Newline] +
|
||||||
common.add_newlines(sorted(python2_pkgs))
|
common.add_newlines(sorted(python2_pkgs))
|
||||||
)
|
)
|
||||||
if python3_pkgs:
|
if python3_pkgs:
|
||||||
# Not with pip executable directly:
|
# Not with pip executable directly:
|
||||||
# https://stackoverflow.com/questions/49836676/error-after-upgrading-pip-cannot-import-name-main/51846054#51846054
|
# https://stackoverflow.com/questions/49836676/error-after-upgrading-pip-cannot-import-name-main/51846054#51846054
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
['python3', '-m', 'pip', 'install', '--user', common.Newline] +
|
['python3', '-m', 'pip', 'install', '--user', common.Newline] +
|
||||||
common.add_newlines(sorted(python3_pkgs))
|
common.add_newlines(sorted(python3_pkgs))
|
||||||
)
|
)
|
||||||
@@ -448,7 +448,7 @@ if args.download_dependencies:
|
|||||||
# * https://stackoverflow.com/questions/4640020/progress-indicator-for-git-clone
|
# * https://stackoverflow.com/questions/4640020/progress-indicator-for-git-clone
|
||||||
#
|
#
|
||||||
# `--jobs"`: https://stackoverflow.com/questions/26957237/how-to-make-git-clone-faster-with-multiple-threads/52327638#52327638
|
# `--jobs"`: https://stackoverflow.com/questions/26957237/how-to-make-git-clone-faster-with-multiple-threads/52327638#52327638
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
git_cmd_common + ['--', common.Newline] +
|
git_cmd_common + ['--', common.Newline] +
|
||||||
common.add_newlines([os.path.join(common.submodules_dir, x) for x in sorted(submodules)])
|
common.add_newlines([os.path.join(common.submodules_dir, x) for x in sorted(submodules)])
|
||||||
)
|
)
|
||||||
@@ -472,7 +472,7 @@ if args.download_dependencies:
|
|||||||
# * https://stackoverflow.com/questions/2144406/git-shallow-submodules/47374702#47374702
|
# * https://stackoverflow.com/questions/2144406/git-shallow-submodules/47374702#47374702
|
||||||
# * https://unix.stackexchange.com/questions/338578/why-is-the-git-clone-of-the-linux-kernel-source-code-much-larger-than-the-extrac
|
# * https://unix.stackexchange.com/questions/338578/why-is-the-git-clone-of-the-linux-kernel-source-code-much-larger-than-the-extrac
|
||||||
#
|
#
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
git_cmd_common + ['--depth', '1', '--', common.Newline] +
|
git_cmd_common + ['--depth', '1', '--', common.Newline] +
|
||||||
common.add_newlines([os.path.join(common.submodules_dir, x) for x in sorted(submodules_shallow)])
|
common.add_newlines([os.path.join(common.submodules_dir, x) for x in sorted(submodules_shallow)])
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class BaremetalComponent(common.Component):
|
|||||||
os.makedirs(common.baremetal_build_lib_dir, exist_ok=True)
|
os.makedirs(common.baremetal_build_lib_dir, exist_ok=True)
|
||||||
src = os.path.join(common.baremetal_src_lib_dir, '{}{}'.format(args.arch, common.asm_ext))
|
src = os.path.join(common.baremetal_src_lib_dir, '{}{}'.format(args.arch, common.asm_ext))
|
||||||
if common.need_rebuild([src], bootloader_obj):
|
if common.need_rebuild([src], bootloader_obj):
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[gcc, common.Newline] +
|
[gcc, common.Newline] +
|
||||||
cflags +
|
cflags +
|
||||||
[
|
[
|
||||||
@@ -60,7 +60,7 @@ class BaremetalComponent(common.Component):
|
|||||||
(syscalls_src, syscalls_obj),
|
(syscalls_src, syscalls_obj),
|
||||||
]:
|
]:
|
||||||
if common.need_rebuild([src], obj):
|
if common.need_rebuild([src], obj):
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[gcc, common.Newline] +
|
[gcc, common.Newline] +
|
||||||
cflags +
|
cflags +
|
||||||
[
|
[
|
||||||
@@ -150,7 +150,7 @@ Build the baremetal examples with crosstool-NG.
|
|||||||
main_obj = os.path.join(common.baremetal_build_dir, subpath, '{}{}'.format(in_name, common.obj_ext))
|
main_obj = os.path.join(common.baremetal_build_dir, subpath, '{}{}'.format(in_name, common.obj_ext))
|
||||||
src = os.path.join(common.baremetal_src_dir, in_path)
|
src = os.path.join(common.baremetal_src_dir, in_path)
|
||||||
if common.need_rebuild([src], main_obj):
|
if common.need_rebuild([src], main_obj):
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[gcc, common.Newline] +
|
[gcc, common.Newline] +
|
||||||
cflags +
|
cflags +
|
||||||
[
|
[
|
||||||
@@ -163,7 +163,7 @@ Build the baremetal examples with crosstool-NG.
|
|||||||
out = os.path.join(common.baremetal_build_dir, subpath, in_name + common.baremetal_build_ext)
|
out = os.path.join(common.baremetal_build_dir, subpath, in_name + common.baremetal_build_ext)
|
||||||
link_script = os.path.join(common.baremetal_src_dir, 'link.ld')
|
link_script = os.path.join(common.baremetal_src_dir, 'link.ld')
|
||||||
if common.need_rebuild(objs + [link_script], out):
|
if common.need_rebuild(objs + [link_script], out):
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[gcc, common.Newline] +
|
[gcc, common.Newline] +
|
||||||
cflags +
|
cflags +
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ usually extra Buildroot targets.
|
|||||||
if os.path.isdir(package_dir_abs):
|
if os.path.isdir(package_dir_abs):
|
||||||
br2_external_dirs.append(self._path_relative_to_buildroot(package_dir_abs))
|
br2_external_dirs.append(self._path_relative_to_buildroot(package_dir_abs))
|
||||||
br2_external_str = ':'.join(br2_external_dirs)
|
br2_external_str = ':'.join(br2_external_dirs)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
'O={}'.format(common.buildroot_build_dir), common.Newline,
|
'O={}'.format(common.buildroot_build_dir), common.Newline,
|
||||||
@@ -132,7 +132,7 @@ usually extra Buildroot targets.
|
|||||||
# TODO Can't get rid of these for now with nice fragments on Buildroot:
|
# TODO Can't get rid of these for now with nice fragments on Buildroot:
|
||||||
# http://stackoverflow.com/questions/44078245/is-it-possible-to-use-config-fragments-with-buildroots-config
|
# http://stackoverflow.com/questions/44078245/is-it-possible-to-use-config-fragments-with-buildroots-config
|
||||||
self.sh.write_configs(common.buildroot_config_file, configs, config_fragments)
|
self.sh.write_configs(common.buildroot_config_file, configs, config_fragments)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
'O={}'.format(common.buildroot_build_dir), common.Newline,
|
'O={}'.format(common.buildroot_build_dir), common.Newline,
|
||||||
@@ -143,7 +143,7 @@ usually extra Buildroot targets.
|
|||||||
common.make_build_dirs()
|
common.make_build_dirs()
|
||||||
if not args.no_all:
|
if not args.no_all:
|
||||||
extra_make_args.extend(['all', common.Newline])
|
extra_make_args.extend(['all', common.Newline])
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
'LKMC_GEM5_SRCDIR="{}"'.format(common.gem5_source_dir), common.Newline,
|
'LKMC_GEM5_SRCDIR="{}"'.format(common.gem5_source_dir), common.Newline,
|
||||||
|
|||||||
@@ -15,17 +15,17 @@ class CrosstoolNgComponent(common.Component):
|
|||||||
# Bootstrap out-ot-tree WONTFIX. I've tried.
|
# Bootstrap out-ot-tree WONTFIX. I've tried.
|
||||||
# https://github.com/crosstool-ng/crosstool-ng/issues/1021
|
# https://github.com/crosstool-ng/crosstool-ng/issues/1021
|
||||||
os.chdir(common.crosstool_ng_src_dir)
|
os.chdir(common.crosstool_ng_src_dir)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[os.path.join(common.crosstool_ng_src_dir, 'bootstrap'), common.Newline],
|
[os.path.join(common.crosstool_ng_src_dir, 'bootstrap'), common.Newline],
|
||||||
)
|
)
|
||||||
os.chdir(common.crosstool_ng_util_dir)
|
os.chdir(common.crosstool_ng_util_dir)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
os.path.join(common.crosstool_ng_src_dir, 'configure'), common.Newline,
|
os.path.join(common.crosstool_ng_src_dir, 'configure'), common.Newline,
|
||||||
'--enable-local', common.Newline,
|
'--enable-local', common.Newline,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
'-j', str(args.nproc), common.Newline,
|
'-j', str(args.nproc), common.Newline,
|
||||||
@@ -33,7 +33,7 @@ class CrosstoolNgComponent(common.Component):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Build the toolchain.
|
# Build the toolchain.
|
||||||
common.cp(
|
self.sh.cp(
|
||||||
os.path.join(common.root_dir, 'crosstool_ng_config', args.arch),
|
os.path.join(common.root_dir, 'crosstool_ng_config', args.arch),
|
||||||
defconfig_dest
|
defconfig_dest
|
||||||
)
|
)
|
||||||
@@ -45,14 +45,14 @@ class CrosstoolNgComponent(common.Component):
|
|||||||
'CT_LOCAL_TARBALLS_DIR="{}"'.format(common.crosstool_ng_download_dir),
|
'CT_LOCAL_TARBALLS_DIR="{}"'.format(common.crosstool_ng_download_dir),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
common.crosstool_ng_executable, common.Newline,
|
common.crosstool_ng_executable, common.Newline,
|
||||||
'defconfig', common.Newline,
|
'defconfig', common.Newline,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
os.unlink(defconfig_dest)
|
os.unlink(defconfig_dest)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
common.crosstool_ng_executable, common.Newline,
|
common.crosstool_ng_executable, common.Newline,
|
||||||
'build', common.Newline,
|
'build', common.Newline,
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ See also:https://github.com/cirosantilli/linux-kernel-module-cheat#ubuntu-guest-
|
|||||||
'--format', '{{.Names}}',
|
'--format', '{{.Names}}',
|
||||||
]).decode()
|
]).decode()
|
||||||
if container_name in containers.split():
|
if container_name in containers.split():
|
||||||
common.run_cmd([
|
self.sh.run_cmd([
|
||||||
'docker',
|
'docker',
|
||||||
'rm',
|
'rm',
|
||||||
container_name,
|
container_name,
|
||||||
])
|
])
|
||||||
common.run_cmd([
|
self.sh.run_cmd([
|
||||||
'docker',
|
'docker',
|
||||||
'create',
|
'create',
|
||||||
'--name', container_name,
|
'--name', container_name,
|
||||||
@@ -48,7 +48,7 @@ See also:https://github.com/cirosantilli/linux-kernel-module-cheat#ubuntu-guest-
|
|||||||
'ubuntu:18.04',
|
'ubuntu:18.04',
|
||||||
'bash',
|
'bash',
|
||||||
])
|
])
|
||||||
common.run_cmd([
|
self.sh.run_cmd([
|
||||||
'docker',
|
'docker',
|
||||||
'export',
|
'export',
|
||||||
'-o',
|
'-o',
|
||||||
@@ -60,7 +60,7 @@ See also:https://github.com/cirosantilli/linux-kernel-module-cheat#ubuntu-guest-
|
|||||||
tar.close()
|
tar.close()
|
||||||
# sudo not required in theory
|
# sudo not required in theory
|
||||||
# https://askubuntu.com/questions/1046828/how-to-run-libguestfs-tools-tools-such-as-virt-make-fs-without-sudo
|
# https://askubuntu.com/questions/1046828/how-to-run-libguestfs-tools-tools-such-as-virt-make-fs-without-sudo
|
||||||
common.run_cmd([
|
self.sh.run_cmd([
|
||||||
'virt-make-fs',
|
'virt-make-fs',
|
||||||
'--format', 'raw',
|
'--format', 'raw',
|
||||||
'--size', '+1G',
|
'--size', '+1G',
|
||||||
|
|||||||
30
build-linux
30
build-linux
@@ -6,8 +6,8 @@ import shutil
|
|||||||
import common
|
import common
|
||||||
|
|
||||||
class LinuxComponent(common.Component):
|
class LinuxComponent(common.Component):
|
||||||
def add_parser_arguments(self, parser):
|
def __init__(self, parser):
|
||||||
parser.add_argument(
|
self.add_argument(
|
||||||
'--config', default=[], action='append',
|
'--config', default=[], action='append',
|
||||||
help='''\
|
help='''\
|
||||||
Add a single kernel config configs to the current build. Sample value:
|
Add a single kernel config configs to the current build. Sample value:
|
||||||
@@ -15,14 +15,14 @@ Add a single kernel config configs to the current build. Sample value:
|
|||||||
configs. Takes precedence over any config files.
|
configs. Takes precedence over any config files.
|
||||||
'''
|
'''
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
self.add_argument(
|
||||||
'--config-fragment', default=[], action='append',
|
'--config-fragment', default=[], action='append',
|
||||||
help='''\
|
help='''\
|
||||||
Also use the given kernel configuration fragment file.
|
Also use the given kernel configuration fragment file.
|
||||||
Pass multiple times to use multiple fragment files.
|
Pass multiple times to use multiple fragment files.
|
||||||
'''
|
'''
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
self.add_argument(
|
||||||
'--custom-config-file',
|
'--custom-config-file',
|
||||||
help='''\
|
help='''\
|
||||||
Ignore all default kernel configurations and use this file instead.
|
Ignore all default kernel configurations and use this file instead.
|
||||||
@@ -30,26 +30,20 @@ Still uses options explicitly passed with `--config` and
|
|||||||
`--config-fragment` on top of it.
|
`--config-fragment` on top of it.
|
||||||
'''
|
'''
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
self.add_argument(
|
||||||
'--config-only', default=False, action='store_true',
|
'--config-only', default=False, action='store_true',
|
||||||
help='''\
|
help='''\
|
||||||
Configure the kernel, but don't build it.
|
Configure the kernel, but don't build it.
|
||||||
'''
|
'''
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
self.add_argument(
|
||||||
'--initramfs', default=False, action='store_true',
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
'--initrd', default=False, action='store_true',
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
'extra_make_args',
|
'extra_make_args',
|
||||||
default=[],
|
default=[],
|
||||||
metavar='extra-make-args',
|
metavar='extra-make-args',
|
||||||
nargs='*'
|
nargs='*'
|
||||||
)
|
)
|
||||||
|
|
||||||
def do_main(self, **kwargs):
|
def build(self, **kwargs):
|
||||||
build_dir = self.get_build_dir(**kwargs)
|
build_dir = self.get_build_dir(**kwargs)
|
||||||
if args.initrd or args.initramfs:
|
if args.initrd or args.initramfs:
|
||||||
raise Exception('just trolling, --initrd and --initramfs are broken for now')
|
raise Exception('just trolling, --initrd and --initramfs are broken for now')
|
||||||
@@ -93,11 +87,11 @@ Configure the kernel, but don't build it.
|
|||||||
cli_config_str = '\n'.join(args.config)
|
cli_config_str = '\n'.join(args.config)
|
||||||
common.write_string_to_file(cli_config_fragment_path, cli_config_str)
|
common.write_string_to_file(cli_config_fragment_path, cli_config_str)
|
||||||
config_fragments.append(cli_config_fragment_path)
|
config_fragments.append(cli_config_fragment_path)
|
||||||
common.cp(
|
self.sh.cp(
|
||||||
base_config_file,
|
base_config_file,
|
||||||
os.path.join(build_dir, '.config'),
|
os.path.join(build_dir, '.config'),
|
||||||
)
|
)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
os.path.join(common.linux_src_dir, 'scripts', 'kconfig', 'merge_config.sh'), common.Newline,
|
os.path.join(common.linux_src_dir, 'scripts', 'kconfig', 'merge_config.sh'), common.Newline,
|
||||||
'-m', common.Newline,
|
'-m', common.Newline,
|
||||||
@@ -106,7 +100,7 @@ Configure the kernel, but don't build it.
|
|||||||
] +
|
] +
|
||||||
common.add_newlines(config_fragments)
|
common.add_newlines(config_fragments)
|
||||||
)
|
)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
(
|
(
|
||||||
common_make_args +
|
common_make_args +
|
||||||
['olddefconfig', common.Newline]
|
['olddefconfig', common.Newline]
|
||||||
@@ -114,14 +108,14 @@ Configure the kernel, but don't build it.
|
|||||||
**common_args
|
**common_args
|
||||||
)
|
)
|
||||||
if not args.config_only:
|
if not args.config_only:
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
(
|
(
|
||||||
common_make_args +
|
common_make_args +
|
||||||
common.add_newlines(args.extra_make_args)
|
common.add_newlines(args.extra_make_args)
|
||||||
),
|
),
|
||||||
**common_args
|
**common_args
|
||||||
)
|
)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
(
|
(
|
||||||
common_make_args +
|
common_make_args +
|
||||||
[
|
[
|
||||||
|
|||||||
6
build-m5
6
build-m5
@@ -27,15 +27,15 @@ class M5Component(common.Component):
|
|||||||
# We must clean first or else the build outputs of one arch can conflict with the other.
|
# We must clean first or else the build outputs of one arch can conflict with the other.
|
||||||
# I should stop being lazy and go actually patch gem5 to support out of tree m5 build...
|
# I should stop being lazy and go actually patch gem5 to support out of tree m5 build...
|
||||||
self.clean(args)
|
self.clean(args)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
self.get_make_cmd(args),
|
self.get_make_cmd(args),
|
||||||
cwd=common.gem5_m5_source_dir,
|
cwd=common.gem5_m5_source_dir,
|
||||||
)
|
)
|
||||||
os.makedirs(common.out_rootfs_overlay_bin_dir, exist_ok=True)
|
os.makedirs(common.out_rootfs_overlay_bin_dir, exist_ok=True)
|
||||||
common.cp(os.path.join(common.gem5_m5_source_dir, 'm5'), common.out_rootfs_overlay_bin_dir)
|
self.sh.cp(os.path.join(common.gem5_m5_source_dir, 'm5'), common.out_rootfs_overlay_bin_dir)
|
||||||
|
|
||||||
def clean(self, args):
|
def clean(self, args):
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
self.get_make_cmd(args) + ['clean', common.Newline],
|
self.get_make_cmd(args) + ['clean', common.Newline],
|
||||||
cwd=common.gem5_m5_source_dir,
|
cwd=common.gem5_m5_source_dir,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ Use the host packaged cross toolchain.
|
|||||||
linux_dir = os.path.join('/lib', 'modules', platform.uname().release, 'build')
|
linux_dir = os.path.join('/lib', 'modules', platform.uname().release, 'build')
|
||||||
else:
|
else:
|
||||||
linux_dir = common.linux_build_dir
|
linux_dir = common.linux_build_dir
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class QemuComponent(common.Component):
|
|||||||
target_list = '{}-linux-user'.format(args.arch)
|
target_list = '{}-linux-user'.format(args.arch)
|
||||||
else:
|
else:
|
||||||
target_list = '{}-softmmu'.format(args.arch)
|
target_list = '{}-softmmu'.format(args.arch)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
os.path.join(common.qemu_src_dir, 'configure'), common.Newline,
|
os.path.join(common.qemu_src_dir, 'configure'), common.Newline,
|
||||||
'--enable-debug', common.Newline,
|
'--enable-debug', common.Newline,
|
||||||
@@ -43,7 +43,7 @@ class QemuComponent(common.Component):
|
|||||||
extra_paths=[common.ccache_dir],
|
extra_paths=[common.ccache_dir],
|
||||||
cwd=build_dir
|
cwd=build_dir
|
||||||
)
|
)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ has the OpenBLAS libraries and headers installed.
|
|||||||
allowed_toolchains = ['buildroot']
|
allowed_toolchains = ['buildroot']
|
||||||
cc = common.get_toolchain_tool('gcc', allowed_toolchains=allowed_toolchains)
|
cc = common.get_toolchain_tool('gcc', allowed_toolchains=allowed_toolchains)
|
||||||
cxx = common.get_toolchain_tool('g++', allowed_toolchains=allowed_toolchains)
|
cxx = common.get_toolchain_tool('g++', allowed_toolchains=allowed_toolchains)
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
'make', common.Newline,
|
'make', common.Newline,
|
||||||
|
|||||||
10
common.py
10
common.py
@@ -162,6 +162,12 @@ See: https://github.com/cirosantilli/linux-kernel-module-cheat#gem5-worktree
|
|||||||
Linux build ID. Allows you to keep multiple separate Linux builds.
|
Linux build ID. Allows you to keep multiple separate Linux builds.
|
||||||
'''
|
'''
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--initramfs', default=False, action='store_true',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--initrd', default=False, action='store_true',
|
||||||
|
)
|
||||||
|
|
||||||
# Baremetal.
|
# Baremetal.
|
||||||
self.add_argument(
|
self.add_argument(
|
||||||
@@ -271,7 +277,7 @@ to allow overriding configs from the CLI.
|
|||||||
common.print_time(end_time - start_time)
|
common.print_time(end_time - start_time)
|
||||||
|
|
||||||
def run_cmd(self, *args, **kwargs):
|
def run_cmd(self, *args, **kwargs):
|
||||||
common.run_cmd(*args, **kwargs)
|
self.sh.run_cmd(*args, **kwargs)
|
||||||
|
|
||||||
def timed_main(self, **kwargs):
|
def timed_main(self, **kwargs):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
@@ -480,7 +486,7 @@ def raw_to_qcow2(prebuilt=False, reverse=False):
|
|||||||
tmp = infile
|
tmp = infile
|
||||||
infile = outfile
|
infile = outfile
|
||||||
outfile = tmp
|
outfile = tmp
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
qemu_img_executable, common.Newline,
|
qemu_img_executable, common.Newline,
|
||||||
] +
|
] +
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ parser = common.get_argparse(
|
|||||||
argparse_args={'description':'Connect a terminal to a running gem5 instance'}
|
argparse_args={'description':'Connect a terminal to a running gem5 instance'}
|
||||||
)
|
)
|
||||||
args = common.setup(parser)
|
args = common.setup(parser)
|
||||||
sys.exit(common.run_cmd([
|
sys.exit(self.sh.run_cmd([
|
||||||
common.gem5_m5term, common.Newline,
|
common.gem5_m5term, common.Newline,
|
||||||
'localhost', common.Newline,
|
'localhost', common.Newline,
|
||||||
str(common.gem5_telnet_port), common.Newline,
|
str(common.gem5_telnet_port), common.Newline,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import sys
|
|||||||
import common
|
import common
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
return common.run_cmd(
|
return self.sh.run_cmd(
|
||||||
[
|
[
|
||||||
os.path.join(common.qemu_src_dir, 'scripts/simpletrace.py'), common.Newline,
|
os.path.join(common.qemu_src_dir, 'scripts/simpletrace.py'), common.Newline,
|
||||||
os.path.join(common.qemu_build_dir, 'trace-events-all'), common.Newline,
|
os.path.join(common.qemu_build_dir, 'trace-events-all'), common.Newline,
|
||||||
|
|||||||
14
run
14
run
@@ -21,8 +21,6 @@ defaults = {
|
|||||||
'gem5_readfile': '',
|
'gem5_readfile': '',
|
||||||
'gem5_restore': None,
|
'gem5_restore': None,
|
||||||
'graphic': False,
|
'graphic': False,
|
||||||
'initramfs': False,
|
|
||||||
'initrd': False,
|
|
||||||
'kernel_cli': None,
|
'kernel_cli': None,
|
||||||
'kernel_cli_after_dash': None,
|
'kernel_cli_after_dash': None,
|
||||||
'eval_after': None,
|
'eval_after': None,
|
||||||
@@ -142,7 +140,7 @@ def main(args, extra_args=None):
|
|||||||
# This is to run gem5 from a prebuilt download.
|
# This is to run gem5 from a prebuilt download.
|
||||||
if (not common.baremetal is None) or (not os.path.exists(common.linux_image)):
|
if (not common.baremetal is None) or (not os.path.exists(common.linux_image)):
|
||||||
raise_image_not_found()
|
raise_image_not_found()
|
||||||
common.run_cmd([os.path.join(common.extract_vmlinux, common.linux_image)])
|
self.sh.run_cmd([os.path.join(common.extract_vmlinux, common.linux_image)])
|
||||||
os.makedirs(os.path.dirname(common.gem5_readfile), exist_ok=True)
|
os.makedirs(os.path.dirname(common.gem5_readfile), exist_ok=True)
|
||||||
common.write_string_to_file(common.gem5_readfile, args.gem5_readfile)
|
common.write_string_to_file(common.gem5_readfile, args.gem5_readfile)
|
||||||
memory = '{}B'.format(args.memory)
|
memory = '{}B'.format(args.memory)
|
||||||
@@ -403,7 +401,7 @@ def main(args, extra_args=None):
|
|||||||
out_file = None
|
out_file = None
|
||||||
else:
|
else:
|
||||||
out_file = common.termout_file
|
out_file = common.termout_file
|
||||||
common.run_cmd(cmd, cmd_file=common.run_cmd_file, out_file=out_file, extra_env=extra_env)
|
self.sh.run_cmd(cmd, cmd_file=common.run_cmd_file, out_file=out_file, extra_env=extra_env)
|
||||||
# Check if guest panicked.
|
# Check if guest panicked.
|
||||||
if common.emulator == 'gem5':
|
if common.emulator == 'gem5':
|
||||||
# We have to do some parsing here because gem5 exits with status 0 even when panic happens.
|
# We have to do some parsing here because gem5 exits with status 0 even when panic happens.
|
||||||
@@ -507,14 +505,6 @@ gem.op5 --debug-flags=Exec fs.py --cpu-type=HPI --caches
|
|||||||
'--gem5-readfile', default=defaults['gem5_readfile'],
|
'--gem5-readfile', default=defaults['gem5_readfile'],
|
||||||
help='Set the contents of m5 readfile to this string.'
|
help='Set the contents of m5 readfile to this string.'
|
||||||
)
|
)
|
||||||
init_group.add_argument(
|
|
||||||
'-I', '--initramfs', default=defaults['initramfs'], action='store_true',
|
|
||||||
help='Use initramfs instead of a root filesystem'
|
|
||||||
)
|
|
||||||
init_group.add_argument(
|
|
||||||
'-i', '--initrd', default=defaults['initrd'], action='store_true',
|
|
||||||
help='Use initrd instead of a root filesystem'
|
|
||||||
)
|
|
||||||
kvm_group.add_argument(
|
kvm_group.add_argument(
|
||||||
'-K', '--kvm', default=defaults['kvm'], action='store_true',
|
'-K', '--kvm', default=defaults['kvm'], action='store_true',
|
||||||
help='Use KVM. Only works if guest arch == host arch'
|
help='Use KVM. Only works if guest arch == host arch'
|
||||||
|
|||||||
14
run-docker
14
run-docker
@@ -11,10 +11,10 @@ image_name = common.repo_short_id
|
|||||||
target_dir = '/root/{}'.format(common.repo_short_id)
|
target_dir = '/root/{}'.format(common.repo_short_id)
|
||||||
docker = ['sudo', 'docker']
|
docker = ['sudo', 'docker']
|
||||||
def create(args):
|
def create(args):
|
||||||
common.run_cmd(docker + ['build', '-t', image_name, '.', common.Newline])
|
self.sh.run_cmd(docker + ['build', '-t', image_name, '.', common.Newline])
|
||||||
# --privileged for KVM:
|
# --privileged for KVM:
|
||||||
# https://stackoverflow.com/questions/48422001/launching-qemu-kvm-from-inside-docker-container
|
# https://stackoverflow.com/questions/48422001/launching-qemu-kvm-from-inside-docker-container
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
docker +
|
docker +
|
||||||
[
|
[
|
||||||
'create', common.Newline,
|
'create', common.Newline,
|
||||||
@@ -31,23 +31,23 @@ def create(args):
|
|||||||
)
|
)
|
||||||
def destroy(args):
|
def destroy(args):
|
||||||
stop(args)
|
stop(args)
|
||||||
common.run_cmd(docker + ['rm', container_name, common.Newline])
|
self.sh.run_cmd(docker + ['rm', container_name, common.Newline])
|
||||||
common.run_cmd(docker + ['rmi', image_name, common.Newline])
|
self.sh.run_cmd(docker + ['rmi', image_name, common.Newline])
|
||||||
def sh(args):
|
def sh(args):
|
||||||
start(args)
|
start(args)
|
||||||
if args:
|
if args:
|
||||||
sh_args = args
|
sh_args = args
|
||||||
else:
|
else:
|
||||||
sh_args = ['bash']
|
sh_args = ['bash']
|
||||||
common.run_cmd(
|
self.sh.run_cmd(
|
||||||
docker + ['exec', '-i', '-t', container_name] +
|
docker + ['exec', '-i', '-t', container_name] +
|
||||||
sh_args +
|
sh_args +
|
||||||
[common.Newline],
|
[common.Newline],
|
||||||
)
|
)
|
||||||
def start(args):
|
def start(args):
|
||||||
common.run_cmd(docker + ['start', container_name, common.Newline])
|
self.sh.run_cmd(docker + ['start', container_name, common.Newline])
|
||||||
def stop(args):
|
def stop(args):
|
||||||
common.run_cmd(docker + ['stop', container_name, common.Newline])
|
self.sh.run_cmd(docker + ['stop', container_name, common.Newline])
|
||||||
cmd_action_map = {
|
cmd_action_map = {
|
||||||
'create': lambda args: create(args),
|
'create': lambda args: create(args),
|
||||||
'DESTROY': lambda args: destroy(args),
|
'DESTROY': lambda args: destroy(args),
|
||||||
|
|||||||
2
run-gdb
2
run-gdb
@@ -188,7 +188,7 @@ def main(args, extra_args=None):
|
|||||||
# I would rather have cwd be out_rootfs_overlay_dir,
|
# I would rather have cwd be out_rootfs_overlay_dir,
|
||||||
# but then lx-symbols cannot fine the vmlinux and fails with:
|
# but then lx-symbols cannot fine the vmlinux and fails with:
|
||||||
# vmlinux: No such file or directory.
|
# vmlinux: No such file or directory.
|
||||||
return common.run_cmd(
|
return self.sh.run_cmd(
|
||||||
cmd,
|
cmd,
|
||||||
cmd_file=os.path.join(common.run_dir, 'run-gdb.sh'),
|
cmd_file=os.path.join(common.run_dir, 'run-gdb.sh'),
|
||||||
cwd=common.linux_build_dir
|
cwd=common.linux_build_dir
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ tool= common.get_toolchain_tool(args.tool)
|
|||||||
if args.dry:
|
if args.dry:
|
||||||
print(tool)
|
print(tool)
|
||||||
else:
|
else:
|
||||||
sys.exit(common.run_cmd(
|
sys.exit(self.sh.run_cmd(
|
||||||
[tool, common.Newline]
|
[tool, common.Newline]
|
||||||
+ common.add_newlines(args.extra_args),
|
+ common.add_newlines(args.extra_args),
|
||||||
cmd_file=os.path.join(common.run_dir, 'run-toolchain.sh'),
|
cmd_file=os.path.join(common.run_dir, 'run-toolchain.sh'),
|
||||||
|
|||||||
Reference in New Issue
Block a user