From e2b1ad5755c8044dbc91d036d0fbcee2e2fa6f21 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Tue, 11 Apr 2023 01:55:27 -0700 Subject: [PATCH 01/18] add busybox Signed-off-by: zhongluping <278527840@qq.com> --- busybox/BUILD.gn | 75 ++ busybox/Makefile | 1329 ++++++++++++++++++++++++++++++++++ busybox/build_busybox.sh | 95 +++ busybox/bundle.json | 30 + busybox/busybox.config | 1231 +++++++++++++++++++++++++++++++ busybox/busybox_config.patch | 10 + 6 files changed, 2770 insertions(+) create mode 100755 busybox/BUILD.gn create mode 100755 busybox/Makefile create mode 100755 busybox/build_busybox.sh create mode 100755 busybox/bundle.json create mode 100644 busybox/busybox.config create mode 100644 busybox/busybox_config.patch diff --git a/busybox/BUILD.gn b/busybox/BUILD.gn new file mode 100755 index 00000000..286605d2 --- /dev/null +++ b/busybox/BUILD.gn @@ -0,0 +1,75 @@ + +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/config/python.gni") +import("//build/templates/metadata/module_info.gni") + +template("build_busybox") { + _main_target_name = target_name + _target_label = + get_label_info(":${_main_target_name}", "label_with_toolchain") + _subsystem_name = invoker.subsystem_name + _part_name = invoker.part_name + + action(target_name) { + forward_variables_from(invoker, + [ + "sources", + "outputs", + "args", + "script", + ]) + + _install_module_info = { + module_def = _target_label + module_info_file = + rebase_path(get_label_info(_target_label, "target_out_dir"), + root_build_dir) + + "/${_main_target_name}_module_info.json" + subsystem_name = _subsystem_name + part_name = _part_name + toolchain = current_toolchain + toolchain_out_dir = rebase_path(root_out_dir, root_build_dir) + } + metadata = { + install_modules = [ _install_module_info ] + } + } + generate_module_info("${_main_target_name}_info") { + module_name = _main_target_name + module_type = "bin" + module_source_dir = "${target_out_dir}" + install_enable = true + module_install_images = [ "system" ] + } +} + +build_busybox("busybox") { + + script = "build_busybox.sh" + sources = [ "//third_party/busybox" ] + outputs = [ "${target_out_dir}/busybox" ] + args = [ + rebase_path(target_out_dir, root_build_dir), + rebase_path(root_build_dir, "//third_party/busybox") + ] + + subsystem_name = "thirdparty" + part_name = "busybox" +} + +group("busybox_cmd") { + deps = [":busybox"] +} diff --git a/busybox/Makefile b/busybox/Makefile new file mode 100755 index 00000000..1282c718 --- /dev/null +++ b/busybox/Makefile @@ -0,0 +1,1329 @@ +VERSION = 1 +PATCHLEVEL = 36 +SUBLEVEL = 0 +EXTRAVERSION = +NAME = Unnamed + +# *DOCUMENTATION* +# To see a list of typical targets execute "make help" +# More info can be located in ./README +# Comments in this file are targeted only to the developer, do not +# expect to learn how to build the kernel reading this file. + +# Do not print "Entering directory ..." +MAKEFLAGS += --no-print-directory + +# We are using a recursive build, so we need to do a little thinking +# to get the ordering right. +# +# Most importantly: sub-Makefiles should only ever modify files in +# their own directory. If in some directory we have a dependency on +# a file in another dir (which doesn't happen often, but it's often +# unavoidable when linking the built-in.o targets which finally +# turn into busybox), we will call a sub make in that other dir, and +# after that we are sure that everything which is in that other dir +# is now up to date. +# +# The only cases where we need to modify files which have global +# effects are thus separated out and done before the recursive +# descending is started. They are now explicitly listed as the +# prepare rule. + +# To put more focus on warnings, be less verbose as default +# Use 'make V=1' to see the full commands + +ifdef V + ifeq ("$(origin V)", "command line") + KBUILD_VERBOSE = $(V) + endif +endif +ifndef KBUILD_VERBOSE + KBUILD_VERBOSE = 0 +endif + +# Call sparse as part of compilation of C files +# Use 'make C=1' to enable sparse checking + +ifdef C + ifeq ("$(origin C)", "command line") + KBUILD_CHECKSRC = $(C) + endif +endif +ifndef KBUILD_CHECKSRC + KBUILD_CHECKSRC = 0 +endif + +# Use make M=dir to specify directory of external module to build +# Old syntax make ... SUBDIRS=$PWD is still supported +# Setting the environment variable KBUILD_EXTMOD take precedence +ifdef SUBDIRS + KBUILD_EXTMOD ?= $(SUBDIRS) +endif +ifdef M + ifeq ("$(origin M)", "command line") + KBUILD_EXTMOD := $(M) + endif +endif + + +# kbuild supports saving output files in a separate directory. +# To locate output files in a separate directory two syntaxes are supported. +# In both cases the working directory must be the root of the kernel src. +# 1) O= +# Use "make O=dir/to/store/output/files/" +# +# 2) Set KBUILD_OUTPUT +# Set the environment variable KBUILD_OUTPUT to point to the directory +# where the output files shall be placed. +# export KBUILD_OUTPUT=dir/to/store/output/files/ +# make +# +# The O= assignment takes precedence over the KBUILD_OUTPUT environment +# variable. + + +# KBUILD_SRC is set on invocation of make in OBJ directory +# KBUILD_SRC is not intended to be used by the regular user (for now) +ifeq ($(KBUILD_SRC),) + +# OK, Make called in directory where kernel src resides +# Do we want to locate output files in a separate directory? +ifdef O + ifeq ("$(origin O)", "command line") + KBUILD_OUTPUT := $(O) + endif +endif + +# That's our default target when none is given on the command line +PHONY := _all +_all: + +ifneq ($(KBUILD_OUTPUT),) +# Invoke a second make in the output directory, passing relevant variables +# check that the output directory actually exists +saved-output := $(KBUILD_OUTPUT) +KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd) +$(if $(KBUILD_OUTPUT),, \ + $(error output directory "$(saved-output)" does not exist)) + +PHONY += $(MAKECMDGOALS) + +$(filter-out _all,$(MAKECMDGOALS)) _all: + $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ + KBUILD_SRC=$(CURDIR) \ + KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@ + +# Leave processing to above invocation of make +skip-makefile := 1 +endif # ifneq ($(KBUILD_OUTPUT),) +endif # ifeq ($(KBUILD_SRC),) + +# We process the rest of the Makefile if this is the final invocation of make +ifeq ($(skip-makefile),) + +# If building an external module we do not care about the all: rule +# but instead _all depend on modules +PHONY += all +ifeq ($(KBUILD_EXTMOD),) +_all: all +else +_all: modules +endif + +srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR)) +TOPDIR := $(srctree) +# FIXME - TOPDIR is obsolete, use srctree/objtree +objtree := $(CURDIR) +src := $(srctree) +obj := $(objtree) + +VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) + +export srctree objtree VPATH TOPDIR + + +# Cross compiling and selecting different set of gcc/bin-utils +# --------------------------------------------------------------------------- +# +# When performing cross compilation for other architectures ARCH shall be set +# to the target architecture. (See arch/* for the possibilities). +# ARCH can be set during invocation of make: +# make ARCH=ia64 +# Another way is to have ARCH set in the environment. +# The default ARCH is the host where make is executed. + +# CROSS_COMPILE specify the prefix used for all executables used +# during compilation. Only gcc and related bin-utils executables +# are prefixed with $(CROSS_COMPILE). +# CROSS_COMPILE can be set on the command line +# make CROSS_COMPILE=ia64-linux- +# Alternatively CROSS_COMPILE can be set in the environment. +# Default value for CROSS_COMPILE is not to prefix executables +# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile + +CROSS_COMPILE ?= +CROSS_COMPILE=/home/owner/workspace/openharmony/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi- +# bbox: we may have CONFIG_CROSS_COMPILER_PREFIX in .config, +# and it has not been included yet... thus using an awkward syntax. +ifeq ($(CROSS_COMPILE),) +CROSS_COMPILE := $(shell grep ^CONFIG_CROSS_COMPILER_PREFIX .config 2>/dev/null) +CROSS_COMPILE := $(subst CONFIG_CROSS_COMPILER_PREFIX=,,$(CROSS_COMPILE)) +CROSS_COMPILE := $(subst ",,$(CROSS_COMPILE)) +#") +endif + +# SUBARCH tells the usermode build what the underlying arch is. That is set +# first, and if a usermode build is happening, the "ARCH=um" on the command +# line overrides the setting of ARCH below. If a native build is happening, +# then ARCH is assigned, getting whatever value it gets normally, and +# SUBARCH is subsequently ignored. + +ifneq ($(CROSS_COMPILE),) +SUBARCH := $(shell echo $(CROSS_COMPILE) | cut -d- -f1 | sed 's:^.*/::g') +else +SUBARCH := $(shell uname -m) +endif +SUBARCH := $(shell echo $(SUBARCH) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ + -e s/arm.*/arm/ -e s/sa110/arm/ \ + -e s/s390x/s390/ -e s/parisc64/parisc/ \ + -e s/ppc.*/powerpc/ -e s/mips.*/mips/ ) + +ARCH ?= $(SUBARCH) + +# Architecture as present in compile.h +UTS_MACHINE := $(ARCH) + +# SHELL used by kbuild +CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + else if [ -x /bin/bash ]; then echo /bin/bash; \ + else echo sh; fi ; fi) + +# Decide whether to build built-in, modular, or both. +# Normally, just do built-in. + +KBUILD_MODULES := +KBUILD_BUILTIN := 1 + +# If we have only "make modules", don't compile built-in objects. +# When we're building modules with modversions, we need to consider +# the built-in objects during the descend as well, in order to +# make sure the checksums are uptodate before we record them. + +ifeq ($(MAKECMDGOALS),modules) + KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) +endif + +# If we have "make modules", compile modules +# in addition to whatever we do anyway. +# Just "make" or "make all" shall build modules as well + +ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) + KBUILD_MODULES := 1 +endif + +ifeq ($(MAKECMDGOALS),) + KBUILD_MODULES := 1 +endif + +export KBUILD_MODULES KBUILD_BUILTIN +export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD + +# Beautify output +# --------------------------------------------------------------------------- +# +# Normally, we echo the whole command before executing it. By making +# that echo $($(quiet)$(cmd)), we now have the possibility to set +# $(quiet) to choose other forms of output instead, e.g. +# +# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@ +# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< +# +# If $(quiet) is empty, the whole command will be printed. +# If it is set to "quiet_", only the short version will be printed. +# If it is set to "silent_", nothing wil be printed at all, since +# the variable $(silent_cmd_cc_o_c) doesn't exist. +# +# A simple variant is to prefix commands with $(Q) - that's useful +# for commands that shall be hidden in non-verbose mode. +# +# $(Q)ln $@ :< +# +# If KBUILD_VERBOSE equals 0 then the above command will be hidden. +# If KBUILD_VERBOSE equals 1 then the above command is displayed. + +ifeq ($(KBUILD_VERBOSE),1) + quiet = + Q = +else + quiet=quiet_ + Q = @ +endif + +# If the user is running make -s (silent mode), suppress echoing of +# commands + +ifneq ($(findstring s,$(MAKEFLAGS)),) + quiet=silent_ +endif + +export quiet Q KBUILD_VERBOSE + + +# Look for make include files relative to root of kernel src +MAKEFLAGS += --include-dir=$(srctree) + +HOSTCC = gcc +HOSTCXX = g++ +HOSTCFLAGS := +HOSTCXXFLAGS := +# We need some generic definitions +include $(srctree)/scripts/Kbuild.include + +HOSTCFLAGS += $(call hostcc-option,-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer,) +HOSTCXXFLAGS += -O2 + +# For maximum performance (+ possibly random breakage, uncomment +# the following) + +MAKEFLAGS += -rR + +# Make variables (CC, etc...) + +AS = $(CROSS_COMPILE)as +CC = $(CROSS_COMPILE)gcc +LD = $(CC) -nostdlib +CPP = $(CC) -E +AR = $(CROSS_COMPILE)ar +NM = $(CROSS_COMPILE)nm +STRIP = $(CROSS_COMPILE)strip +OBJCOPY = $(CROSS_COMPILE)objcopy +OBJDUMP = $(CROSS_COMPILE)objdump +PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config +AWK = awk +GENKSYMS = scripts/genksyms/genksyms +DEPMOD = /sbin/depmod +KALLSYMS = scripts/kallsyms +PERL = perl +CHECK = sparse + +CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) +MODFLAGS = -DMODULE +CFLAGS_MODULE = $(MODFLAGS) +AFLAGS_MODULE = $(MODFLAGS) +LDFLAGS_MODULE = -r +CFLAGS_KERNEL = +AFLAGS_KERNEL = + + +# Use LINUXINCLUDE when you must reference the include/ directory. +# Needed to be compatible with the O= option +CFLAGS := $(CFLAGS) +# Added only to final link stage of busybox binary +CFLAGS_busybox := $(CFLAGS_busybox) +CPPFLAGS := $(CPPFLAGS) +AFLAGS := $(AFLAGS) +LDFLAGS := $(LDFLAGS) +LDLIBS := + +# Read KERNELRELEASE from .kernelrelease (if it exists) +KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null) +KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) + +export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \ + ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ + CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \ + HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS + +export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS +export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE +export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE +export FLTFLAGS + +# When compiling out-of-tree modules, put MODVERDIR in the module +# tree rather than in the kernel tree. The kernel tree might +# even be read-only. +export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions + +# Files to ignore in find ... statements + +RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o +export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git + +# =========================================================================== +# Rules shared between *config targets and build targets + +# Basic helpers built in scripts/ +PHONY += scripts_basic +scripts_basic: + $(Q)$(MAKE) $(build)=scripts/basic + +# To avoid any implicit rule to kick in, define an empty command. +scripts/basic/%: scripts_basic ; + +# This target generates Kbuild's and Config.in's from *.c files +PHONY += gen_build_files +gen_build_files: $(wildcard $(srctree)/*/*.c) $(wildcard $(srctree)/*/*/*.c) $(wildcard $(srctree)/embed/*) + $(Q)$(srctree)/scripts/gen_build_files.sh $(srctree) $(objtree) + +# bbox: we have helpers in applets/ +# we depend on scripts_basic, since scripts/basic/fixdep +# must be built before any other host prog +PHONY += applets_dir +applets_dir: scripts_basic gen_build_files include/config/MARKER + $(Q)$(MAKE) $(build)=applets + +applets/%: applets_dir ; + +PHONY += outputmakefile +# outputmakefile generates a Makefile in the output directory, if using a +# separate output directory. This allows convenient use of make in the +# output directory. +outputmakefile: +ifneq ($(KBUILD_SRC),) + $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ + $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) +endif + +# To make sure we do not include .config for any of the *config targets +# catch them early, and hand them over to scripts/kconfig/Makefile +# It is allowed to specify more targets when calling make, including +# mixing *config targets and build targets. +# For example 'make oldconfig all'. +# Detect when mixed targets is specified, and make a second invocation +# of make so .config is not included in this case either (for *config). + +no-dot-config-targets := clean mrproper distclean \ + cscope TAGS tags help %docs +#bbox# check% is removed from above + +config-targets := 0 +mixed-targets := 0 +dot-config := 1 + +ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) + ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) + dot-config := 0 + endif +endif + +ifeq ($(KBUILD_EXTMOD),) + ifneq ($(filter config %config,$(MAKECMDGOALS)),) + config-targets := 1 + ifneq ($(filter-out config %config,$(MAKECMDGOALS)),) + mixed-targets := 1 + endif + endif +endif + +ifeq ($(mixed-targets),1) +# =========================================================================== +# We're called with mixed targets (*config and build targets). +# Handle them one by one. + +%:: FORCE + $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@ + +else +ifeq ($(config-targets),1) +# =========================================================================== +# *config targets only - make sure prerequisites are updated, and descend +# in scripts/kconfig to make the *config target + +# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed. +# KBUILD_DEFCONFIG may point out an alternative default configuration +# used for 'make defconfig' +-include $(srctree)/arch/$(ARCH)/Makefile +export KBUILD_DEFCONFIG + +config: scripts_basic outputmakefile gen_build_files FORCE + $(Q)mkdir -p include + $(Q)$(MAKE) $(build)=scripts/kconfig $@ + $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease + +%config: scripts_basic outputmakefile gen_build_files FORCE + $(Q)mkdir -p include + $(Q)$(MAKE) $(build)=scripts/kconfig $@ + $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease + +else +# =========================================================================== +# Build targets only - this includes busybox, arch specific targets, clean +# targets and others. In general all targets except *config targets. + +ifeq ($(KBUILD_EXTMOD),) +# Additional helpers built in scripts/ +# Carefully list dependencies so we do not try to build scripts twice +# in parallel +PHONY += scripts +scripts: gen_build_files scripts_basic include/config/MARKER + $(Q)$(MAKE) $(build)=$(@) + +scripts_basic: include/autoconf.h + +# Objects we will link into busybox / subdirs we need to visit +core-y := \ + applets/ \ + +libs-y := \ + archival/ \ + archival/libarchive/ \ + console-tools/ \ + coreutils/ \ + coreutils/libcoreutils/ \ + debianutils/ \ + klibc-utils/ \ + e2fsprogs/ \ + editors/ \ + findutils/ \ + init/ \ + libbb/ \ + libpwdgrp/ \ + loginutils/ \ + mailutils/ \ + miscutils/ \ + modutils/ \ + networking/ \ + networking/libiproute/ \ + networking/udhcp/ \ + printutils/ \ + procps/ \ + runit/ \ + selinux/ \ + shell/ \ + sysklogd/ \ + util-linux/ \ + util-linux/volume_id/ \ + +endif # KBUILD_EXTMOD + +ifeq ($(dot-config),1) +# In this section, we need .config + +# Read in dependencies to all Kconfig* files, make sure to run +# oldconfig if changes are detected. +-include .kconfig.d + +-include .config + +# If .config needs to be updated, it will be done via the dependency +# that autoconf has on .config. +# To avoid any implicit rule to kick in, define an empty command +.config .kconfig.d: ; + +-include $(srctree)/arch/$(ARCH)/Makefile + +# Now we can define CFLAGS etc according to .config +include $(srctree)/Makefile.flags + +# If .config is newer than include/autoconf.h, someone tinkered +# with it and forgot to run make oldconfig. +# If kconfig.d is missing then we are probarly in a cleaned tree so +# we execute the config step to be sure to catch updated Kconfig files +include/autoconf.h: .kconfig.d .config $(wildcard $(srctree)/*/*.c) $(wildcard $(srctree)/*/*/*.c) | gen_build_files + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig + +include/usage.h: gen_build_files + +else +# Dummy target needed, because used as prerequisite +include/autoconf.h: ; +endif + +# The all: target is the default when no target is given on the +# command line. +# This allow a user to issue only 'make' to build a kernel including modules +# Defaults busybox but it is usually overridden in the arch makefile +all: busybox doc + +# arch Makefile may override CC so keep this after arch Makefile is included +#bbox# NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) +CHECKFLAGS += $(NOSTDINC_FLAGS) + +# Default kernel image to build when no specific target is given. +# KBUILD_IMAGE may be overruled on the commandline or +# set in the environment +# Also any assignments in arch/$(ARCH)/Makefile take precedence over +# this default value +export KBUILD_IMAGE ?= busybox + +# +# INSTALL_PATH specifies where to place the updated kernel and system map +# images. Default is /boot, but you can set it to other values +export INSTALL_PATH ?= /boot + +# +# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory +# relocations required by build roots. This is not defined in the +# makefile but the argument can be passed to make if needed. +# + +MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) +export MODLIB + + +ifeq ($(KBUILD_EXTMOD),) +busybox-dirs := $(patsubst %/,%,$(filter %/, $(core-y) $(core-m) $(libs-y) $(libs-m))) + +busybox-alldirs := $(sort $(busybox-dirs) $(patsubst %/,%,$(filter %/, \ + $(core-n) $(core-) $(libs-n) $(libs-) \ + ))) + +core-y := $(patsubst %/, %/built-in.o, $(core-y)) +libs-y1 := $(patsubst %/, %/lib.a, $(libs-y)) +libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y)) +libs-y := $(libs-y1) $(libs-y2) + +# Build busybox +# --------------------------------------------------------------------------- +# busybox is build from the objects selected by $(busybox-init) and +# $(busybox-main). Most are built-in.o files from top-level directories +# in the kernel tree, others are specified in arch/$(ARCH)Makefile. +# Ordering when linking is important, and $(busybox-init) must be first. +# +# busybox +# ^ +# | +# +-< $(busybox-init) +# | +--< init/version.o + more +# | +# +--< $(busybox-main) +# | +--< driver/built-in.o mm/built-in.o + more +# | +# +-< kallsyms.o (see description in CONFIG_KALLSYMS section) +# +# busybox version (uname -v) cannot be updated during normal +# descending-into-subdirs phase since we do not yet know if we need to +# update busybox. +# Therefore this step is delayed until just before final link of busybox - +# except in the kallsyms case where it is done just before adding the +# symbols to the kernel. +# +# System.map is generated to document addresses of all kernel symbols + +busybox-all := $(core-y) $(libs-y) + +# Rule to link busybox - also used during CONFIG_KALLSYMS +# May be overridden by arch/$(ARCH)/Makefile +quiet_cmd_busybox__ ?= LINK $@ + cmd_busybox__ ?= $(srctree)/scripts/trylink \ + "$@" \ + "$(CC)" \ + "$(CFLAGS) $(CFLAGS_busybox)" \ + "$(LDFLAGS) $(EXTRA_LDFLAGS)" \ + "$(core-y)" \ + "$(libs-y)" \ + "$(LDLIBS)" \ + "$(CONFIG_EXTRA_LDLIBS)" \ + && $(srctree)/scripts/generate_BUFSIZ.sh --post include/common_bufsiz.h + +# Generate System.map +quiet_cmd_sysmap = SYSMAP + cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap + +# Link of busybox +# If CONFIG_KALLSYMS is set .version is already updated +# Generate System.map and verify that the content is consistent +# Use + in front of the busybox_version rule to silent warning with make -j2 +# First command is ':' to allow us to use + in front of the rule +define rule_busybox__ + : + $(call cmd,busybox__) + $(Q)echo 'cmd_$@ := $(cmd_busybox__)' > $(@D)/.$(@F).cmd +endef + + +ifdef CONFIG_KALLSYMS +# Generate section listing all symbols and add it into busybox $(kallsyms.o) +# It's a three stage process: +# o .tmp_busybox1 has all symbols and sections, but __kallsyms is +# empty +# Running kallsyms on that gives us .tmp_kallsyms1.o with +# the right size - busybox version (uname -v) is updated during this step +# o .tmp_busybox2 now has a __kallsyms section of the right size, +# but due to the added section, some addresses have shifted. +# From here, we generate a correct .tmp_kallsyms2.o +# o The correct .tmp_kallsyms2.o is linked into the final busybox. +# o Verify that the System.map from busybox matches the map from +# .tmp_busybox2, just in case we did not generate kallsyms correctly. +# o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using +# .tmp_busybox3 and .tmp_kallsyms3.o. This is only meant as a +# temporary bypass to allow the kernel to be built while the +# maintainers work out what went wrong with kallsyms. + +ifdef CONFIG_KALLSYMS_EXTRA_PASS +last_kallsyms := 3 +else +last_kallsyms := 2 +endif + +kallsyms.o := .tmp_kallsyms$(last_kallsyms).o + +define verify_kallsyms + $(Q)$(if $($(quiet)cmd_sysmap), \ + echo ' $($(quiet)cmd_sysmap) .tmp_System.map' &&) \ + $(cmd_sysmap) .tmp_busybox$(last_kallsyms) .tmp_System.map + $(Q)cmp -s System.map .tmp_System.map || \ + (echo Inconsistent kallsyms data; \ + echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \ + rm .tmp_kallsyms* ; /bin/false ) +endef + +# Update busybox version before link +# Use + in front of this rule to silent warning about make -j1 +# First command is ':' to allow us to use + in front of this rule +cmd_ksym_ld = $(cmd_busybox__) +define rule_ksym_ld + : + +$(call cmd,busybox_version) + $(call cmd,busybox__) + $(Q)echo 'cmd_$@ := $(cmd_busybox__)' > $(@D)/.$(@F).cmd +endef + +# Generate .S file with all kernel symbols +quiet_cmd_kallsyms = KSYM $@ + cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \ + $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@ + +.tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE + $(call if_changed_dep,as_o_S) + +.tmp_kallsyms%.S: .tmp_busybox% $(KALLSYMS) + $(call cmd,kallsyms) + +# .tmp_busybox1 must be complete except kallsyms, so update busybox version +.tmp_busybox1: $(busybox-lds) $(busybox-all) FORCE + $(call if_changed_rule,ksym_ld) + +.tmp_busybox2: $(busybox-lds) $(busybox-all) .tmp_kallsyms1.o FORCE + $(call if_changed,busybox__) + +.tmp_busybox3: $(busybox-lds) $(busybox-all) .tmp_kallsyms2.o FORCE + $(call if_changed,busybox__) + +# Needs to visit scripts/ before $(KALLSYMS) can be used. +$(KALLSYMS): scripts ; + +# Generate some data for debugging strange kallsyms problems +debug_kallsyms: .tmp_map$(last_kallsyms) + +.tmp_map%: .tmp_busybox% FORCE + ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@ + +.tmp_map3: .tmp_map2 + +.tmp_map2: .tmp_map1 + +endif # ifdef CONFIG_KALLSYMS + +# busybox image - including updated kernel symbols +busybox_unstripped: $(busybox-all) FORCE + $(call if_changed_rule,busybox__) + $(Q)rm -f .old_version + +busybox: busybox_unstripped +ifeq ($(SKIP_STRIP),y) + $(Q)cp $< $@ +else + $(Q)$(STRIP) -s --remove-section=.note --remove-section=.comment \ + busybox_unstripped -o $@ +# strip is confused by PIE executable and does not set exec bits + $(Q)chmod a+x $@ +endif + +# The actual objects are generated when descending, +# make sure no implicit rule kicks in +$(sort $(busybox-all)): $(busybox-dirs) ; + +# Handle descending into subdirectories listed in $(busybox-dirs) +# Preset locale variables to speed up the build process. Limit locale +# tweaks to this spot to avoid wrong language settings when running +# make menuconfig etc. +# Error messages still appears in the original language + +PHONY += $(busybox-dirs) +$(busybox-dirs): prepare scripts + $(Q)$(MAKE) $(build)=$@ + +# Build the kernel release string +# The KERNELRELEASE is stored in a file named .kernelrelease +# to be used when executing for example make install or make modules_install +# +# Take the contents of any files called localversion* and the config +# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE. +# LOCALVERSION from the command line override all of this + +nullstring := +space := $(nullstring) # end of line + +___localver = $(objtree)/localversion* $(srctree)/localversion* +__localver = $(sort $(wildcard $(___localver))) +# skip backup files (containing '~') +_localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f))) + +localver = $(subst $(space),, \ + $(shell cat /dev/null $(_localver)) \ + $(patsubst "%",%,$(CONFIG_LOCALVERSION))) + +# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called +# and if the SCM is know a tag from the SCM is appended. +# The appended tag is determinded by the SCM used. +# +# Currently, only git is supported. +# Other SCMs can edit scripts/setlocalversion and add the appropriate +# checks as needed. +ifdef _BB_DISABLED_CONFIG_LOCALVERSION_AUTO + _localver-auto = $(shell $(CONFIG_SHELL) \ + $(srctree)/scripts/setlocalversion $(srctree)) + localver-auto = $(LOCALVERSION)$(_localver-auto) +endif + +localver-full = $(localver)$(localver-auto) + +# Store (new) KERNELRELASE string in .kernelrelease +kernelrelease = $(KERNELVERSION)$(localver-full) +.kernelrelease: FORCE + $(Q)rm -f $@ + $(Q)echo $(kernelrelease) > $@ + + +# Things we need to do before we recursively start building the kernel +# or the modules are listed in "prepare". +# A multi level approach is used. prepareN is processed before prepareN-1. +# archprepare is used in arch Makefiles and when processed asm symlink, +# version.h and scripts_basic is processed / created. + +# Listed in dependency order +PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 + +# prepare-all is deprecated, use prepare as valid replacement +PHONY += prepare-all + +# prepare3 is used to check if we are building in a separate output directory, +# and if so do: +# 1) Check that make has not been executed in the kernel src $(srctree) +# 2) Create the include2 directory, used for the second asm symlink +prepare3: .kernelrelease +ifneq ($(KBUILD_SRC),) + @echo ' Using $(srctree) as source for busybox' + $(Q)if [ -f $(srctree)/.config ]; then \ + echo " $(srctree) is not clean, please run 'make mrproper'";\ + echo " in the '$(srctree)' directory.";\ + /bin/false; \ + fi; + $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi; + $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm +endif + +# prepare2 creates a makefile if using a separate output directory +prepare2: prepare3 outputmakefile + +prepare1: prepare2 include/config/MARKER +ifneq ($(KBUILD_MODULES),) + $(Q)mkdir -p $(MODVERDIR) + $(Q)rm -f $(MODVERDIR)/* +endif + +archprepare: prepare1 scripts_basic applets_dir + +prepare0: archprepare FORCE + $(Q)$(MAKE) $(build)=. + +# All the preparing.. +prepare prepare-all: prepare0 + +# Leave this as default for preprocessing busybox.lds.S, which is now +# done in arch/$(ARCH)/kernel/Makefile + +export CPPFLAGS_busybox.lds += -P -C -U$(ARCH) + +# FIXME: The asm symlink changes when $(ARCH) changes. That's +# hard to detect, but I suppose "make mrproper" is a good idea +# before switching between archs anyway. + +#bbox# include/asm: +#bbox# @echo ' SYMLINK $@ -> include/asm-$(ARCH)' +#bbox# $(Q)if [ ! -d include ]; then mkdir -p include; fi; +#bbox# @ln -fsn asm-$(ARCH) $@ + +# Split autoconf.h into include/linux/config/* +quiet_cmd_gen_bbconfigopts = GEN include/bbconfigopts.h + cmd_gen_bbconfigopts = $(srctree)/scripts/mkconfigs include/bbconfigopts.h include/bbconfigopts_bz2.h +quiet_cmd_gen_common_bufsiz = GEN include/common_bufsiz.h + cmd_gen_common_bufsiz = $(srctree)/scripts/generate_BUFSIZ.sh include/common_bufsiz.h +quiet_cmd_split_autoconf = SPLIT include/autoconf.h -> include/config/* + cmd_split_autoconf = scripts/basic/split-include include/autoconf.h include/config +quiet_cmd_gen_embedded_scripts = GEN include/embedded_scripts.h + cmd_gen_embedded_scripts = $(srctree)/scripts/embedded_scripts include/embedded_scripts.h $(srctree)/embed $(srctree)/applets_sh +#bbox# piggybacked generation of few .h files +include/config/MARKER: scripts/basic/split-include include/autoconf.h $(wildcard $(srctree)/embed/*) $(wildcard $(srctree)/applets_sh/*) $(srctree)/scripts/embedded_scripts + $(call cmd,split_autoconf) + $(call cmd,gen_bbconfigopts) + $(call cmd,gen_common_bufsiz) + $(call cmd,gen_embedded_scripts) + @touch $@ + +# Generate some files +# --------------------------------------------------------------------------- + +# KERNELRELEASE can change from a few different places, meaning version.h +# needs to be updated, so this check is forced on all builds + +uts_len := 64 + +define filechk_version.h + if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \ + echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \ + exit 1; \ + fi; \ + (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \ + echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \ + echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \ + ) +endef + +# --------------------------------------------------------------------------- + +PHONY += depend dep +depend dep: + @echo '*** Warning: make $@ is unnecessary now.' + +# --------------------------------------------------------------------------- +# Modules + +ifdef _BB_DISABLED_CONFIG_MODULES + +# By default, build modules as well + +all: modules + +# Build modules + +PHONY += modules +modules: $(busybox-dirs) $(if $(KBUILD_BUILTIN),busybox) + @echo ' Building modules, stage 2.'; + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost + + +# Target to prepare building external modules +PHONY += modules_prepare +modules_prepare: prepare scripts + +# Target to install modules +PHONY += modules_install +modules_install: _modinst_ _modinst_post + +PHONY += _modinst_ +_modinst_: + @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \ + echo "Warning: you may need to install module-init-tools"; \ + echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\ + sleep 1; \ + fi + @rm -rf $(MODLIB)/kernel + @rm -f $(MODLIB)/source + @mkdir -p $(MODLIB)/kernel + @ln -s $(srctree) $(MODLIB)/source + @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \ + rm -f $(MODLIB)/build ; \ + ln -s $(objtree) $(MODLIB)/build ; \ + fi + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst + +# If System.map exists, run depmod. This deliberately does not have a +# dependency on System.map since that would run the dependency tree on +# busybox. This depmod is only for convenience to give the initial +# boot a modules.dep even before / is mounted read-write. However the +# boot script depmod is the master version. +ifeq "$(strip $(INSTALL_MOD_PATH))" "" +depmod_opts := +else +depmod_opts := -b $(INSTALL_MOD_PATH) -r +endif +PHONY += _modinst_post +_modinst_post: _modinst_ + if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi + +else # CONFIG_MODULES + +# Modules not configured +# --------------------------------------------------------------------------- + +modules modules_install: FORCE + @echo + @echo "The present busybox configuration has modules disabled." + @echo "Type 'make config' and enable loadable module support." + @echo "Then build a kernel with module support enabled." + @echo + @exit 1 + +endif # CONFIG_MODULES + +### +# Cleaning is done on three levels. +# make clean Delete most generated files +# Leave enough to build external modules +# make mrproper Delete the current configuration, and all generated files +# make distclean Remove editor backup files, patch leftover files and the like + +# Directories & files removed with 'make clean' +CLEAN_DIRS += $(MODVERDIR) _install 0_lib +CLEAN_FILES += busybox busybox_unstripped* busybox.links \ + System.map .kernelrelease \ + .tmp_kallsyms* .tmp_version .tmp_busybox* .tmp_System.map + +# Directories & files removed with 'make mrproper' +MRPROPER_DIRS += include/config include2 +MRPROPER_FILES += .config .config.old include/asm .version .old_version \ + include/NUM_APPLETS.h \ + include/common_bufsiz.h \ + include/autoconf.h \ + include/bbconfigopts.h \ + include/bbconfigopts_bz2.h \ + include/embedded_scripts.h \ + include/usage_compressed.h \ + include/applet_tables.h \ + include/applets.h \ + include/usage.h \ + applets/usage \ + .kernelrelease Module.symvers tags TAGS cscope* \ + busybox_old + +# clean - Delete most, but leave enough to build external modules +# +clean: rm-dirs := $(CLEAN_DIRS) +clean: rm-files := $(CLEAN_FILES) +clean-dirs := $(addprefix _clean_,$(srctree) $(busybox-alldirs)) + +PHONY += $(clean-dirs) clean archclean +$(clean-dirs): + $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) + +clean: archclean $(clean-dirs) + $(call cmd,rmdirs) + $(call cmd,rmfiles) + @find . $(RCS_FIND_IGNORE) \ + \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ + -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \ + -type f -print | xargs rm -f + +PHONY += doc-clean +doc-clean: rm-files := docs/busybox.pod \ + docs/BusyBox.html docs/busybox.1 docs/BusyBox.txt +doc-clean: + $(call cmd,rmfiles) + +# mrproper - Delete all generated files, including .config +# +mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) +mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) +mrproper-dirs := $(addprefix _mrproper_,scripts) + +PHONY += $(mrproper-dirs) mrproper archmrproper +$(mrproper-dirs): + $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@) + +mrproper: clean archmrproper $(mrproper-dirs) + $(call cmd,rmdirs) + $(call cmd,rmfiles) + @find . -name Config.src | sed 's/.src$$/.in/' | xargs -r rm -f + @find . -name Kbuild.src | sed 's/.src$$//' | xargs -r rm -f + +# distclean +# +PHONY += distclean + +distclean: mrproper + @find $(srctree) $(RCS_FIND_IGNORE) \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ + -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ + -o -name '.*.rej' -o -name '*.tmp' -o -size 0 \ + -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \ + -type f -print | xargs rm -f + + +# Packaging of the kernel to various formats +# --------------------------------------------------------------------------- +# rpm target kept for backward compatibility +package-dir := $(srctree)/scripts/package + +%pkg: FORCE + $(Q)$(MAKE) $(build)=$(package-dir) $@ +rpm: FORCE + $(Q)$(MAKE) $(build)=$(package-dir) $@ + + +# Brief documentation of the typical targets used +# --------------------------------------------------------------------------- + +boards := $(wildcard $(srctree)/configs/*_defconfig) +boards := $(notdir $(boards)) + +-include $(srctree)/Makefile.help + +# Documentation targets +# --------------------------------------------------------------------------- +%docs: scripts_basic FORCE + $(Q)$(MAKE) $(build)=Documentation/DocBook $@ + +else # KBUILD_EXTMOD + +### +# External module support. +# When building external modules the kernel used as basis is considered +# read-only, and no consistency checks are made and the make +# system is not used on the basis kernel. If updates are required +# in the basis kernel ordinary make commands (without M=...) must +# be used. +# +# The following are the only valid targets when building external +# modules. +# make M=dir clean Delete all automatically generated files +# make M=dir modules Make all modules in specified dir +# make M=dir Same as 'make M=dir modules' +# make M=dir modules_install +# Install the modules build in the module directory +# Assumes install directory is already created + +# We are always building modules +KBUILD_MODULES := 1 +PHONY += crmodverdir +crmodverdir: + $(Q)mkdir -p $(MODVERDIR) + $(Q)rm -f $(MODVERDIR)/* + +PHONY += $(objtree)/Module.symvers +$(objtree)/Module.symvers: + @test -e $(objtree)/Module.symvers || ( \ + echo; \ + echo " WARNING: Symbol version dump $(objtree)/Module.symvers"; \ + echo " is missing; modules will have no dependencies and modversions."; \ + echo ) + +module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD)) +PHONY += $(module-dirs) modules +$(module-dirs): crmodverdir $(objtree)/Module.symvers + $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) + +modules: $(module-dirs) + @echo ' Building modules, stage 2.'; + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost + +PHONY += modules_install +modules_install: _emodinst_ _emodinst_post + +install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra) +PHONY += _emodinst_ +_emodinst_: + $(Q)mkdir -p $(MODLIB)/$(install-dir) + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst + +# Run depmod only is we have System.map and depmod is executable +quiet_cmd_depmod = DEPMOD $(KERNELRELEASE) + cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \ + $(DEPMOD) -ae -F System.map \ + $(if $(strip $(INSTALL_MOD_PATH)), \ + -b $(INSTALL_MOD_PATH) -r) \ + $(KERNELRELEASE); \ + fi + +PHONY += _emodinst_post +_emodinst_post: _emodinst_ + $(call cmd,depmod) + +clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD)) + +PHONY += $(clean-dirs) clean +$(clean-dirs): + $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) + +clean: rm-dirs := $(MODVERDIR) +clean: $(clean-dirs) + $(call cmd,rmdirs) + @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \ + \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ + -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \ + -type f -print | xargs rm -f + +# Dummies... +PHONY += prepare scripts +prepare: ; +scripts: ; +endif # KBUILD_EXTMOD + +# Generate tags for editors +# --------------------------------------------------------------------------- + +#We want __srctree to totally vanish out when KBUILD_OUTPUT is not set +#(which is the most common case IMHO) to avoid unneeded clutter in the big tags file. +#Adding $(srctree) adds about 20M on i386 to the size of the output file! + +ifeq ($(src),$(obj)) +__srctree = +else +__srctree = $(srctree)/ +endif + +ifeq ($(ALLSOURCE_ARCHS),) +ifeq ($(ARCH),um) +ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH) +else +ALLINCLUDE_ARCHS := $(ARCH) +endif +else +#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behaviour. +ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS) +endif + +ALLSOURCE_ARCHS := $(ARCH) + +define all-sources + ( find -regex '.*\.[ch]$$' ) +endef + +quiet_cmd_cscope-file = FILELST cscope.files + cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files + +quiet_cmd_cscope = MAKE cscope.out + cmd_cscope = cscope -b + +cscope: FORCE + $(call cmd,cscope-file) + $(call cmd,cscope) + +quiet_cmd_TAGS = MAKE $@ +define cmd_TAGS + rm -f $@; \ + ETAGSF=`etags --version | grep -i exuberant >/dev/null && \ + echo "-I __initdata,__exitdata,__acquires,__releases \ + -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ + --extra=+f --c-kinds=+px"`; \ + $(all-sources) | xargs etags $$ETAGSF -a +endef + +TAGS: FORCE + $(call cmd,TAGS) + + +quiet_cmd_tags = MAKE $@ +define cmd_tags + rm -f $@; \ + CTAGSF=`ctags --version | grep -i exuberant >/dev/null && \ + echo "-I __initdata,__exitdata,__acquires,__releases \ + -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ + --extra=+f --c-kinds=+px"`; \ + $(all-sources) | xargs ctags $$CTAGSF -a +endef + +tags: FORCE + $(call cmd,tags) + + +# Scripts to check various things for consistency +# --------------------------------------------------------------------------- + +includecheck: + find * $(RCS_FIND_IGNORE) \ + -name '*.[hcS]' -type f -print | sort \ + | xargs $(PERL) -w scripts/checkincludes.pl + +versioncheck: + find * $(RCS_FIND_IGNORE) \ + -name '*.[hcS]' -type f -print | sort \ + | xargs $(PERL) -w scripts/checkversion.pl + +namespacecheck: + $(PERL) $(srctree)/scripts/namespace.pl + +endif #ifeq ($(config-targets),1) +endif #ifeq ($(mixed-targets),1) + +PHONY += checkstack +checkstack: + $(OBJDUMP) -d busybox $$(find . -name '*.ko') | \ + $(PERL) $(src)/scripts/checkstack.pl $(ARCH) + +kernelrelease: + $(if $(wildcard .kernelrelease), $(Q)echo $(KERNELRELEASE), \ + $(error kernelrelease not valid - run 'make *config' to update it)) +kernelversion: + @echo $(KERNELVERSION) + +# Single targets +# --------------------------------------------------------------------------- +# Single targets are compatible with: +# - build whith mixed source and output +# - build with separate output dir 'make O=...' +# - external modules +# +# target-dir => where to store outputfile +# build-dir => directory in kernel source tree to use + +ifeq ($(KBUILD_EXTMOD),) + build-dir = $(patsubst %/,%,$(dir $@)) + target-dir = $(dir $@) +else + zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@))) + build-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash)) + target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) +endif + +%.s: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) +%.i: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) +%.o: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) +%.lst: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) +%.s: %.S prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) +%.o: %.S prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + +# Modules +%/: prepare scripts FORCE + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) +/: prepare scripts FORCE + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) + +%.ko: prepare scripts FORCE + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) $(@:.ko=.o) + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost + +# FIXME Should go into a make.lib or something +# =========================================================================== + +quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs))) + cmd_rmdirs = rm -rf $(rm-dirs) + +quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))) + cmd_rmfiles = rm -f $(rm-files) + +# read all saved command lines + +targets := $(wildcard $(sort $(targets))) +cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) + +ifneq ($(cmd_files),) + $(cmd_files): ; # Do not try to update included dependency files + include $(cmd_files) +endif + +# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir +# Usage: +# $(Q)$(MAKE) $(clean)=dir +clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj + +endif # skip-makefile + +PHONY += FORCE +FORCE: + +-include $(srctree)/Makefile.custom + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. +.PHONY: $(PHONY) diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh new file mode 100755 index 00000000..ea1c63e9 --- /dev/null +++ b/busybox/build_busybox.sh @@ -0,0 +1,95 @@ +#!/usr/bin/bash + +function build_busybox() { + + local file=.config + + make defconfig + + sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' $file + + make -j8 + if [ $? -ne 0 ]; then + echo "build busybox failed!" + return 1 + fi + + cp ./busybox ../ + + echo "build busybox success!" + + ## make test ## for gen test cmd + + return 0 +} + +function download_busybox() { + local retry=0 + + while [ $retry -le 5 ] + do + if [ ! -z "$2" ]; then + git clone $1 -b $2 + else + git clone $1 + fi + + if [ $? -eq 0 ]; then + break; + fi + done + + if [ $retry -eq 5 ]; then + echo "download busybox failed!" + return 1 + else + echo "download busybox success!" + return 0 + fi +} + +ERR_MSG="BUILD busybox ERROR!!!!!!!!!!!!!!!!!!!!!" +target_name=busybox +curdir=`pwd` +srcdir=$1 +url="https://github.com/mirror/busybox.git" +ver=1_36_0 +PATHCH_FILE=`pwd`/../../third_party/busybox/busybox_config.patch +source_dir=$target_name-$ver + +echo "curdir=$curdir" +echo "srcdir=$srcdir" + +if [ -z "$srcdir" ];then + echo "must set the param dir!" + exit 1 +fi + +cp $PATHCH_FILE $srcdir/ + +cd $srcdir + +if [ ! -d "$source_dir" ]; then + download_busybox $url $ver + if [ $? -ne 0 ]; then + echo $ERR_MSG + exit 1 + fi + + mv ./$target_name ./$source_dir + cd $source_dir + patch -p0 < ../busybox_config.patch + cd $srcdir +fi + +cd $source_dir + +build_busybox +if [ $? -ne 0 ]; then + echo $ERR_MSG + exit 1 +fi + +cd $curdir + +#eof diff --git a/busybox/bundle.json b/busybox/bundle.json new file mode 100755 index 00000000..d2a4d359 --- /dev/null +++ b/busybox/bundle.json @@ -0,0 +1,30 @@ +{ + "name": "@ohos/busybox", + "description": "BusyBox combines tiny versions of many common UNIX utilities into a single small executable.", + "version": "1.36.0", + "license": "GPL license", + "publishAs": "code-segment", + "segment": { + "destPath": "third_party/busybox" + }, + "dirs": {}, + "scripts": {}, + "component": { + "name": "busybox", + "subsystem": "", + "syscap": [], + "features": [], + "adapted_system_type": [], + "rom": "", + "ram": "", + "deps": { + "components": [], + "third_party": [] + }, + "build": { + "sub_component": ["//third_party/busybox:busybox_cmd"], + "inner_kits": [], + "test": [] + } + } +} \ No newline at end of file diff --git a/busybox/busybox.config b/busybox/busybox.config new file mode 100644 index 00000000..90b51bf8 --- /dev/null +++ b/busybox/busybox.config @@ -0,0 +1,1231 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.36.0 +# Tue Apr 4 03:26:22 2023 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Settings +# +CONFIG_DESKTOP=y +# CONFIG_EXTRA_COMPAT is not set +# CONFIG_FEDORA_COMPAT is not set +CONFIG_INCLUDE_SUSv2=y +CONFIG_LONG_OPTS=y +CONFIG_SHOW_USAGE=y +CONFIG_FEATURE_VERBOSE_USAGE=y +CONFIG_FEATURE_COMPRESS_USAGE=y +CONFIG_LFS=y +# CONFIG_PAM is not set +CONFIG_FEATURE_DEVPTS=y +CONFIG_FEATURE_UTMP=y +CONFIG_FEATURE_WTMP=y +CONFIG_FEATURE_PIDFILE=y +CONFIG_PID_FILE_PATH="/var/run" +CONFIG_BUSYBOX=y +CONFIG_FEATURE_SHOW_SCRIPT=y +CONFIG_FEATURE_INSTALLER=y +# CONFIG_INSTALL_NO_USR is not set +CONFIG_FEATURE_SUID=y +CONFIG_FEATURE_SUID_CONFIG=y +CONFIG_FEATURE_SUID_CONFIG_QUIET=y +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SYSLOG_INFO=y +CONFIG_FEATURE_SYSLOG=y + +# +# Build Options +# +CONFIG_STATIC=y +# CONFIG_PIE is not set +# CONFIG_NOMMU is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_SYSROOT="" +CONFIG_EXTRA_CFLAGS="" +CONFIG_EXTRA_LDFLAGS="" +CONFIG_EXTRA_LDLIBS="" +# CONFIG_USE_PORTABLE_CODE is not set +CONFIG_STACK_OPTIMIZATION_386=y +CONFIG_STATIC_LIBGCC=y + +# +# Installation Options ("make install" behavior) +# +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_DEBUG_SANITIZE is not set +# CONFIG_UNIT_TEST is not set +# CONFIG_WERROR is not set +# CONFIG_WARN_SIMPLE_MSG is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set + +# +# Library Tuning +# +# CONFIG_FEATURE_USE_BSS_TAIL is not set +CONFIG_FLOAT_DURATION=y +CONFIG_FEATURE_RTMINMAX=y +CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SMALL=1 +CONFIG_SHA1_SMALL=3 +CONFIG_SHA1_HWACCEL=y +CONFIG_SHA256_HWACCEL=y +CONFIG_SHA3_SMALL=1 +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +# CONFIG_FEATURE_EDITING_VI is not set +CONFIG_FEATURE_EDITING_HISTORY=255 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set +CONFIG_FEATURE_REVERSE_SEARCH=y +CONFIG_FEATURE_TAB_COMPLETION=y +CONFIG_FEATURE_USERNAME_COMPLETION=y +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +CONFIG_FEATURE_EDITING_WINCH=y +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_LOCALE_SUPPORT is not set +CONFIG_UNICODE_SUPPORT=y +# CONFIG_UNICODE_USING_LOCALE is not set +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_SUBST_WCHAR=63 +CONFIG_LAST_SUPPORTED_WCHAR=767 +# CONFIG_UNICODE_COMBINING_WCHARS is not set +# CONFIG_UNICODE_WIDE_WCHARS is not set +# CONFIG_UNICODE_BIDI_SUPPORT is not set +# CONFIG_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_UNICODE_PRESERVE_BROKEN is not set +# CONFIG_LOOP_CONFIGURE is not set +# CONFIG_NO_LOOP_CONFIGURE is not set +CONFIG_TRY_LOOP_CONFIGURE=y + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_FEATURE_SEAMLESS_XZ=y +CONFIG_FEATURE_SEAMLESS_LZMA=y +CONFIG_FEATURE_SEAMLESS_BZ2=y +CONFIG_FEATURE_SEAMLESS_GZ=y +# CONFIG_FEATURE_SEAMLESS_Z is not set +# CONFIG_AR is not set +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +# CONFIG_FEATURE_AR_CREATE is not set +# CONFIG_UNCOMPRESS is not set +CONFIG_GUNZIP=y +CONFIG_ZCAT=y +CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y +CONFIG_BUNZIP2=y +CONFIG_BZCAT=y +CONFIG_UNLZMA=y +CONFIG_LZCAT=y +CONFIG_LZMA=y +CONFIG_UNXZ=y +CONFIG_XZCAT=y +CONFIG_XZ=y +CONFIG_BZIP2=y +CONFIG_BZIP2_SMALL=8 +CONFIG_FEATURE_BZIP2_DECOMPRESS=y +CONFIG_CPIO=y +CONFIG_FEATURE_CPIO_O=y +CONFIG_FEATURE_CPIO_P=y +CONFIG_FEATURE_CPIO_IGNORE_DEVNO=y +CONFIG_FEATURE_CPIO_RENUMBER_INODES=y +CONFIG_DPKG=y +CONFIG_DPKG_DEB=y +CONFIG_GZIP=y +CONFIG_FEATURE_GZIP_LONG_OPTIONS=y +CONFIG_GZIP_FAST=0 +# CONFIG_FEATURE_GZIP_LEVELS is not set +CONFIG_FEATURE_GZIP_DECOMPRESS=y +CONFIG_LZOP=y +# CONFIG_UNLZOP is not set +# CONFIG_LZOPCAT is not set +# CONFIG_LZOP_COMPR_HIGH is not set +CONFIG_RPM=y +CONFIG_RPM2CPIO=y +CONFIG_TAR=y +CONFIG_FEATURE_TAR_LONG_OPTIONS=y +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_AUTODETECT=y +CONFIG_FEATURE_TAR_FROM=y +CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y +CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +CONFIG_FEATURE_TAR_TO_COMMAND=y +CONFIG_FEATURE_TAR_UNAME_GNAME=y +CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y +# CONFIG_FEATURE_TAR_SELINUX is not set +CONFIG_UNZIP=y +CONFIG_FEATURE_UNZIP_CDF=y +CONFIG_FEATURE_UNZIP_BZIP2=y +CONFIG_FEATURE_UNZIP_LZMA=y +CONFIG_FEATURE_UNZIP_XZ=y +# CONFIG_FEATURE_LZMA_FAST is not set + +# +# Coreutils +# +CONFIG_FEATURE_VERBOSE=y + +# +# Common options for date and touch +# +CONFIG_FEATURE_TIMEZONE=y + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y +CONFIG_BASENAME=y +CONFIG_CAT=y +CONFIG_FEATURE_CATN=y +CONFIG_FEATURE_CATV=y +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y +CONFIG_CHROOT=y +CONFIG_CKSUM=y +CONFIG_CRC32=y +CONFIG_COMM=y +CONFIG_CP=y +CONFIG_FEATURE_CP_LONG_OPTIONS=y +CONFIG_FEATURE_CP_REFLINK=y +CONFIG_CUT=y +CONFIG_FEATURE_CUT_REGEX=y +CONFIG_DATE=y +CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_COMPAT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y +CONFIG_FEATURE_DD_IBS_OBS=y +CONFIG_FEATURE_DD_STATUS=y +CONFIG_DF=y +CONFIG_FEATURE_DF_FANCY=y +CONFIG_FEATURE_SKIP_ROOTFS=y +CONFIG_DIRNAME=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +CONFIG_EXPAND=y +CONFIG_UNEXPAND=y +CONFIG_EXPR=y +CONFIG_EXPR_MATH_SUPPORT_64=y +CONFIG_FACTOR=y +CONFIG_FALSE=y +CONFIG_FOLD=y +CONFIG_HEAD=y +CONFIG_FEATURE_FANCY_HEAD=y +CONFIG_HOSTID=y +CONFIG_ID=y +CONFIG_GROUPS=y +CONFIG_INSTALL=y +CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y +CONFIG_LINK=y +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_WIDTH=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_MD5SUM=y +CONFIG_SHA1SUM=y +CONFIG_SHA256SUM=y +CONFIG_SHA512SUM=y +CONFIG_SHA3SUM=y + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MKTEMP=y +CONFIG_MV=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_NPROC=y +CONFIG_OD=y +CONFIG_PASTE=y +CONFIG_PRINTENV=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +CONFIG_SHRED=y +CONFIG_SHUF=y +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set +CONFIG_SPLIT=y +CONFIG_FEATURE_SPLIT_FANCY=y +CONFIG_STAT=y +CONFIG_FEATURE_STAT_FORMAT=y +CONFIG_FEATURE_STAT_FILESYSTEM=y +CONFIG_STTY=y +CONFIG_SUM=y +CONFIG_SYNC=y +CONFIG_FEATURE_SYNC_FANCY=y +CONFIG_FSYNC=y +CONFIG_TAC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_TEST=y +CONFIG_TEST1=y +CONFIG_TEST2=y +CONFIG_FEATURE_TEST_64=y +CONFIG_TIMEOUT=y +CONFIG_TOUCH=y +CONFIG_FEATURE_TOUCH_SUSV3=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +CONFIG_FEATURE_TR_EQUIV=y +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TSORT=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNAME_OSNAME="GNU/Linux" +CONFIG_BB_ARCH=y +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_USLEEP=y +CONFIG_UUDECODE=y +CONFIG_BASE32=y +CONFIG_BASE64=y +CONFIG_UUENCODE=y +CONFIG_WC=y +CONFIG_FEATURE_WC_LARGE=y +CONFIG_WHO=y +CONFIG_W=y +CONFIG_USERS=y +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +CONFIG_FGCONSOLE=y +CONFIG_KBD_MODE=y +CONFIG_LOADFONT=y +CONFIG_SETFONT=y +CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y +CONFIG_DEFAULT_SETFONT_DIR="" + +# +# Common options for loadfont and setfont +# +CONFIG_FEATURE_LOADFONT_PSF2=y +CONFIG_FEATURE_LOADFONT_RAW=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +CONFIG_RESIZE=y +CONFIG_FEATURE_RESIZE_PRINT=y +CONFIG_SETCONSOLE=y +CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y +CONFIG_SETKEYCODES=y +CONFIG_SETLOGCONS=y +CONFIG_SHOWKEY=y + +# +# Debian Utilities +# +CONFIG_PIPE_PROGRESS=y +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +CONFIG_FEATURE_RUN_PARTS_FANCY=y +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_WHICH=y + +# +# klibc-utils +# +# CONFIG_MINIPS is not set +# CONFIG_NUKE is not set +CONFIG_RESUME=y +CONFIG_RUN_INIT=y + +# +# Editors +# +CONFIG_AWK=y +CONFIG_FEATURE_AWK_LIBM=y +CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y +CONFIG_CMP=y +CONFIG_DIFF=y +CONFIG_FEATURE_DIFF_LONG_OPTIONS=y +CONFIG_FEATURE_DIFF_DIR=y +CONFIG_ED=y +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=4096 +# CONFIG_FEATURE_VI_8BIT is not set +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_COLON_EXPAND=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +# CONFIG_FEATURE_VI_REGEX_SEARCH is not set +CONFIG_FEATURE_VI_USE_SIGNALS=y +CONFIG_FEATURE_VI_DOT_CMD=y +CONFIG_FEATURE_VI_READONLY=y +CONFIG_FEATURE_VI_SETOPTS=y +CONFIG_FEATURE_VI_SET=y +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_ASK_TERMINAL=y +CONFIG_FEATURE_VI_UNDO=y +CONFIG_FEATURE_VI_UNDO_QUEUE=y +CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 +CONFIG_FEATURE_VI_VERBOSE_STATUS=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_ATIME=y +CONFIG_FEATURE_FIND_CTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_AMIN=y +CONFIG_FEATURE_FIND_CMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_EXECUTABLE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +CONFIG_FEATURE_FIND_INUM=y +CONFIG_FEATURE_FIND_SAMEFILE=y +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_EXEC_PLUS=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +CONFIG_FEATURE_FIND_QUIT=y +CONFIG_FEATURE_FIND_DELETE=y +CONFIG_FEATURE_FIND_EMPTY=y +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +CONFIG_FEATURE_FIND_LINKS=y +CONFIG_GREP=y +CONFIG_EGREP=y +CONFIG_FGREP=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y +CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y +CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y + +# +# Init Utilities +# +CONFIG_BOOTCHARTD=y +CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER=y +CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE=y +CONFIG_HALT=y +CONFIG_POWEROFF=y +CONFIG_REBOOT=y +CONFIG_FEATURE_WAIT_FOR_INIT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" +CONFIG_INIT=y +CONFIG_LINUXRC=y +CONFIG_FEATURE_USE_INITTAB=y +# CONFIG_FEATURE_KILL_REMOVED is not set +CONFIG_FEATURE_KILL_DELAY=0 +CONFIG_FEATURE_INIT_SCTTY=y +CONFIG_FEATURE_INIT_SYSLOG=y +CONFIG_FEATURE_INIT_QUIET=y +# CONFIG_FEATURE_INIT_COREDUMPS is not set +CONFIG_INIT_TERMINAL_TYPE="linux" +CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y + +# +# Login/Password Management Utilities +# +CONFIG_FEATURE_SHADOWPASSWDS=y +CONFIG_USE_BB_PWD_GRP=y +CONFIG_USE_BB_SHADOW=y +CONFIG_USE_BB_CRYPT=y +CONFIG_USE_BB_CRYPT_SHA=y +CONFIG_ADD_SHELL=y +CONFIG_REMOVE_SHELL=y +CONFIG_ADDGROUP=y +CONFIG_FEATURE_ADDUSER_TO_GROUP=y +CONFIG_ADDUSER=y +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_LAST_ID=60000 +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 +CONFIG_CHPASSWD=y +CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="des" +CONFIG_CRYPTPW=y +CONFIG_MKPASSWD=y +CONFIG_DELUSER=y +CONFIG_DELGROUP=y +CONFIG_FEATURE_DEL_USER_FROM_GROUP=y +CONFIG_GETTY=y +CONFIG_LOGIN=y +# CONFIG_LOGIN_SESSION_AS_CHILD is not set +CONFIG_LOGIN_SCRIPTS=y +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +CONFIG_SU=y +CONFIG_FEATURE_SU_SYSLOG=y +CONFIG_FEATURE_SU_CHECKS_SHELLS=y +# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set +CONFIG_SULOGIN=y +CONFIG_VLOCK=y + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +CONFIG_LSATTR=y +# CONFIG_TUNE2FS is not set + +# +# Linux Module Utilities +# +CONFIG_MODPROBE_SMALL=y +CONFIG_DEPMOD=y +CONFIG_INSMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +CONFIG_MODINFO=y +CONFIG_MODPROBE=y +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set +CONFIG_RMMOD=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y +CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y +# CONFIG_FEATURE_2_4_MODULES is not set +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set +# CONFIG_FEATURE_MODUTILS_ALIAS is not set +# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set +CONFIG_DEFAULT_MODULES_DIR="/lib/modules" +CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" + +# +# Linux System Utilities +# +CONFIG_ACPID=y +CONFIG_FEATURE_ACPID_COMPAT=y +CONFIG_BLKDISCARD=y +CONFIG_BLKID=y +CONFIG_FEATURE_BLKID_TYPE=y +CONFIG_BLOCKDEV=y +CONFIG_CAL=y +CONFIG_CHRT=y +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_EJECT=y +CONFIG_FEATURE_EJECT_SCSI=y +CONFIG_FALLOCATE=y +CONFIG_FATATTR=y +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +CONFIG_FDFORMAT=y +CONFIG_FDISK=y +# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set +CONFIG_FEATURE_FDISK_ADVANCED=y +CONFIG_FINDFS=y +CONFIG_FLOCK=y +CONFIG_FDFLUSH=y +CONFIG_FREERAMDISK=y +CONFIG_FSCK_MINIX=y +CONFIG_FSFREEZE=y +CONFIG_FSTRIM=y +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y +CONFIG_HEXDUMP=y +CONFIG_HD=y +CONFIG_XXD=y +CONFIG_HWCLOCK=y +# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set +CONFIG_IONICE=y +CONFIG_IPCRM=y +CONFIG_IPCS=y +CONFIG_LAST=y +CONFIG_FEATURE_LAST_FANCY=y +CONFIG_LOSETUP=y +CONFIG_LSPCI=y +CONFIG_LSUSB=y +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +CONFIG_FEATURE_MDEV_RENAME=y +CONFIG_FEATURE_MDEV_RENAME_REGEXP=y +CONFIG_FEATURE_MDEV_EXEC=y +CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y +CONFIG_FEATURE_MDEV_DAEMON=y +CONFIG_MESG=y +CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y +CONFIG_MKE2FS=y +CONFIG_MKFS_EXT2=y +CONFIG_MKFS_MINIX=y +CONFIG_FEATURE_MINIX2=y +# CONFIG_MKFS_REISER is not set +CONFIG_MKDOSFS=y +CONFIG_MKFS_VFAT=y +CONFIG_MKSWAP=y +CONFIG_FEATURE_MKSWAP_UUID=y +CONFIG_MORE=y +CONFIG_MOUNT=y +CONFIG_FEATURE_MOUNT_FAKE=y +CONFIG_FEATURE_MOUNT_VERBOSE=y +# CONFIG_FEATURE_MOUNT_HELPERS is not set +CONFIG_FEATURE_MOUNT_LABEL=y +# CONFIG_FEATURE_MOUNT_NFS is not set +CONFIG_FEATURE_MOUNT_CIFS=y +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_FEATURE_MOUNT_OTHERTAB=y +CONFIG_MOUNTPOINT=y +CONFIG_NOLOGIN=y +# CONFIG_NOLOGIN_DEPENDENCIES is not set +CONFIG_NSENTER=y +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +CONFIG_RDEV=y +CONFIG_READPROFILE=y +CONFIG_RENICE=y +CONFIG_REV=y +CONFIG_RTCWAKE=y +CONFIG_SCRIPT=y +CONFIG_SCRIPTREPLAY=y +CONFIG_SETARCH=y +CONFIG_LINUX32=y +CONFIG_LINUX64=y +CONFIG_SETPRIV=y +CONFIG_FEATURE_SETPRIV_DUMP=y +CONFIG_FEATURE_SETPRIV_CAPABILITIES=y +CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y +CONFIG_SETSID=y +CONFIG_SWAPON=y +CONFIG_FEATURE_SWAPON_DISCARD=y +CONFIG_FEATURE_SWAPON_PRI=y +CONFIG_SWAPOFF=y +CONFIG_FEATURE_SWAPONOFF_LABEL=y +CONFIG_SWITCH_ROOT=y +CONFIG_TASKSET=y +CONFIG_FEATURE_TASKSET_FANCY=y +CONFIG_FEATURE_TASKSET_CPULIST=y +CONFIG_UEVENT=y +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y +CONFIG_UNSHARE=y +CONFIG_WALL=y + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set +CONFIG_VOLUMEID=y + +# +# Filesystem/Volume identification +# +CONFIG_FEATURE_VOLUMEID_BCACHE=y +CONFIG_FEATURE_VOLUMEID_BTRFS=y +CONFIG_FEATURE_VOLUMEID_CRAMFS=y +CONFIG_FEATURE_VOLUMEID_EROFS=y +CONFIG_FEATURE_VOLUMEID_EXFAT=y +CONFIG_FEATURE_VOLUMEID_EXT=y +CONFIG_FEATURE_VOLUMEID_F2FS=y +CONFIG_FEATURE_VOLUMEID_FAT=y +CONFIG_FEATURE_VOLUMEID_HFS=y +CONFIG_FEATURE_VOLUMEID_ISO9660=y +CONFIG_FEATURE_VOLUMEID_JFS=y +CONFIG_FEATURE_VOLUMEID_LFS=y +CONFIG_FEATURE_VOLUMEID_LINUXRAID=y +CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y +CONFIG_FEATURE_VOLUMEID_LUKS=y +CONFIG_FEATURE_VOLUMEID_MINIX=y +CONFIG_FEATURE_VOLUMEID_NILFS=y +CONFIG_FEATURE_VOLUMEID_NTFS=y +CONFIG_FEATURE_VOLUMEID_OCFS2=y +CONFIG_FEATURE_VOLUMEID_REISERFS=y +CONFIG_FEATURE_VOLUMEID_ROMFS=y +CONFIG_FEATURE_VOLUMEID_SQUASHFS=y +CONFIG_FEATURE_VOLUMEID_SYSV=y +CONFIG_FEATURE_VOLUMEID_UBIFS=y +CONFIG_FEATURE_VOLUMEID_UDF=y +CONFIG_FEATURE_VOLUMEID_XFS=y + +# +# Miscellaneous Utilities +# +CONFIG_ADJTIMEX=y +CONFIG_ASCII=y +# CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set +CONFIG_BC=y +CONFIG_DC=y +CONFIG_FEATURE_DC_BIG=y +# CONFIG_FEATURE_DC_LIBM is not set +CONFIG_FEATURE_BC_INTERACTIVE=y +CONFIG_FEATURE_BC_LONG_OPTIONS=y +CONFIG_BEEP=y +CONFIG_FEATURE_BEEP_FREQ=4000 +CONFIG_FEATURE_BEEP_LENGTH_MS=30 +CONFIG_CHAT=y +CONFIG_FEATURE_CHAT_NOFAIL=y +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set +CONFIG_FEATURE_CHAT_IMPLICIT_CR=y +CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y +CONFIG_FEATURE_CHAT_SEND_ESCAPES=y +CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y +CONFIG_FEATURE_CHAT_CLR_ABORT=y +CONFIG_CONSPY=y +CONFIG_CROND=y +CONFIG_FEATURE_CROND_D=y +CONFIG_FEATURE_CROND_CALL_SENDMAIL=y +CONFIG_FEATURE_CROND_SPECIAL_TIMES=y +CONFIG_FEATURE_CROND_DIR="/var/spool/cron" +CONFIG_CRONTAB=y +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +CONFIG_DEVMEM=y +CONFIG_FBSPLASH=y +# CONFIG_FLASH_ERASEALL is not set +# CONFIG_FLASH_LOCK is not set +# CONFIG_FLASH_UNLOCK is not set +# CONFIG_FLASHCP is not set +CONFIG_HDPARM=y +CONFIG_FEATURE_HDPARM_GET_IDENTITY=y +CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y +CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y +CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y +CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y +CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y +CONFIG_HEXEDIT=y +CONFIG_I2CGET=y +CONFIG_I2CSET=y +CONFIG_I2CDUMP=y +CONFIG_I2CDETECT=y +CONFIG_I2CTRANSFER=y +# CONFIG_INOTIFYD is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +CONFIG_FEATURE_LESS_TRUNCATE=y +CONFIG_FEATURE_LESS_MARKS=y +CONFIG_FEATURE_LESS_REGEXP=y +CONFIG_FEATURE_LESS_WINCH=y +CONFIG_FEATURE_LESS_ASK_TERMINAL=y +CONFIG_FEATURE_LESS_DASHCMD=y +CONFIG_FEATURE_LESS_LINENUMS=y +CONFIG_FEATURE_LESS_RAW=y +CONFIG_FEATURE_LESS_ENV=y +CONFIG_LSSCSI=y +CONFIG_MAKEDEVS=y +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +CONFIG_FEATURE_MAKEDEVS_TABLE=y +CONFIG_MAN=y +CONFIG_MICROCOM=y +CONFIG_MIM=y +CONFIG_MT=y +CONFIG_NANDWRITE=y +CONFIG_NANDDUMP=y +CONFIG_PARTPROBE=y +CONFIG_RAIDAUTORUN=y +CONFIG_READAHEAD=y +# CONFIG_RFKILL is not set +CONFIG_RUNLEVEL=y +CONFIG_RX=y +CONFIG_SEEDRNG=y +CONFIG_SETFATTR=y +CONFIG_SETSERIAL=y +CONFIG_STRINGS=y +CONFIG_TIME=y +CONFIG_TREE=y +CONFIG_TS=y +CONFIG_TTYSIZE=y +CONFIG_UBIATTACH=y +CONFIG_UBIDETACH=y +CONFIG_UBIMKVOL=y +CONFIG_UBIRMVOL=y +CONFIG_UBIRSVOL=y +CONFIG_UBIUPDATEVOL=y +CONFIG_UBIRENAME=y +CONFIG_VOLNAME=y +CONFIG_WATCHDOG=y +# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_FEATURE_UNIX_LOCAL is not set +CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_FEATURE_ETC_SERVICES is not set +CONFIG_FEATURE_HWIB=y +# CONFIG_FEATURE_TLS_SHA1 is not set +CONFIG_ARP=y +CONFIG_ARPING=y +CONFIG_BRCTL=y +CONFIG_FEATURE_BRCTL_FANCY=y +CONFIG_FEATURE_BRCTL_SHOW=y +CONFIG_DNSD=y +CONFIG_ETHER_WAKE=y +CONFIG_FTPD=y +CONFIG_FEATURE_FTPD_WRITE=y +CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y +CONFIG_FEATURE_FTPD_AUTHENTICATION=y +CONFIG_FTPGET=y +CONFIG_FTPPUT=y +CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y +CONFIG_HOSTNAME=y +CONFIG_DNSDOMAINNAME=y +CONFIG_HTTPD=y +CONFIG_FEATURE_HTTPD_PORT_DEFAULT=80 +CONFIG_FEATURE_HTTPD_RANGES=y +CONFIG_FEATURE_HTTPD_SETUID=y +CONFIG_FEATURE_HTTPD_BASIC_AUTH=y +CONFIG_FEATURE_HTTPD_AUTH_MD5=y +CONFIG_FEATURE_HTTPD_CGI=y +CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y +CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y +CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y +CONFIG_FEATURE_HTTPD_ERROR_PAGES=y +CONFIG_FEATURE_HTTPD_PROXY=y +CONFIG_FEATURE_HTTPD_GZIP=y +CONFIG_FEATURE_HTTPD_ETAG=y +CONFIG_FEATURE_HTTPD_LAST_MODIFIED=y +CONFIG_FEATURE_HTTPD_DATE=y +CONFIG_FEATURE_HTTPD_ACL_IP=y +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +CONFIG_FEATURE_IFCONFIG_SLIP=y +CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y +CONFIG_FEATURE_IFCONFIG_HW=y +CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y +CONFIG_IFENSLAVE=y +CONFIG_IFPLUGD=y +CONFIG_IFUP=y +CONFIG_IFDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +CONFIG_INETD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_IPADDR=y +CONFIG_IPLINK=y +CONFIG_IPROUTE=y +CONFIG_IPTUNNEL=y +CONFIG_IPRULE=y +CONFIG_IPNEIGH=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +CONFIG_FEATURE_IP_TUNNEL=y +CONFIG_FEATURE_IP_RULE=y +CONFIG_FEATURE_IP_NEIGH=y +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +CONFIG_IPCALC=y +CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y +CONFIG_FEATURE_IPCALC_FANCY=y +CONFIG_FAKEIDENTD=y +CONFIG_NAMEIF=y +CONFIG_FEATURE_NAMEIF_EXTENDED=y +CONFIG_NBDCLIENT=y +CONFIG_NC=y +# CONFIG_NETCAT is not set +CONFIG_NC_SERVER=y +CONFIG_NC_EXTRA=y +CONFIG_NC_110_COMPAT=y +CONFIG_NETSTAT=y +CONFIG_FEATURE_NETSTAT_WIDE=y +CONFIG_FEATURE_NETSTAT_PRG=y +CONFIG_NSLOOKUP=y +CONFIG_FEATURE_NSLOOKUP_BIG=y +CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS=y +CONFIG_NTPD=y +CONFIG_FEATURE_NTPD_SERVER=y +CONFIG_FEATURE_NTPD_CONF=y +CONFIG_FEATURE_NTP_AUTH=y +CONFIG_PING=y +CONFIG_PING6=y +CONFIG_FEATURE_FANCY_PING=y +CONFIG_PSCAN=y +CONFIG_ROUTE=y +CONFIG_SLATTACH=y +CONFIG_SSL_CLIENT=y +CONFIG_TC=y +CONFIG_FEATURE_TC_INGRESS=y +CONFIG_TCPSVD=y +CONFIG_UDPSVD=y +CONFIG_TELNET=y +CONFIG_FEATURE_TELNET_TTYPE=y +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +CONFIG_FEATURE_TELNET_WIDTH=y +CONFIG_TELNETD=y +CONFIG_FEATURE_TELNETD_STANDALONE=y +CONFIG_FEATURE_TELNETD_PORT_DEFAULT=23 +CONFIG_FEATURE_TELNETD_INETD_WAIT=y +CONFIG_TFTP=y +CONFIG_FEATURE_TFTP_PROGRESS_BAR=y +CONFIG_FEATURE_TFTP_HPA_COMPAT=y +CONFIG_TFTPD=y +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +CONFIG_FEATURE_TFTP_BLOCKSIZE=y +# CONFIG_TFTP_DEBUG is not set +CONFIG_TLS=y +CONFIG_TRACEROUTE=y +CONFIG_TRACEROUTE6=y +CONFIG_FEATURE_TRACEROUTE_VERBOSE=y +CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y +CONFIG_TUNCTL=y +CONFIG_FEATURE_TUNCTL_UG=y +CONFIG_VCONFIG=y +CONFIG_WGET=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_FTP=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_TIMEOUT=y +CONFIG_FEATURE_WGET_HTTPS=y +CONFIG_FEATURE_WGET_OPENSSL=y +CONFIG_WHOIS=y +CONFIG_ZCIP=y +CONFIG_UDHCPD=y +# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set +CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y +CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases" +CONFIG_DUMPLEASES=y +CONFIG_DHCPRELAY=y +CONFIG_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y +CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +CONFIG_UDHCPC6_DEFAULT_SCRIPT="/usr/share/udhcpc/default6.script" +CONFIG_UDHCPC6=y +CONFIG_FEATURE_UDHCPC6_RFC3646=y +CONFIG_FEATURE_UDHCPC6_RFC4704=y +CONFIG_FEATURE_UDHCPC6_RFC4833=y +CONFIG_FEATURE_UDHCPC6_RFC5970=y + +# +# Common options for DHCP applets +# +CONFIG_UDHCPC_DEFAULT_INTERFACE="eth0" +# CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_UDHCP_DEBUG=2 +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_FEATURE_UDHCP_RFC3397=y +CONFIG_FEATURE_UDHCP_8021Q=y +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n" + +# +# Print Utilities +# +CONFIG_LPD=y +CONFIG_LPR=y +CONFIG_LPQ=y + +# +# Mail Utilities +# +CONFIG_FEATURE_MIME_CHARSET="us-ascii" +CONFIG_MAKEMIME=y +CONFIG_POPMAILDIR=y +CONFIG_FEATURE_POPMAILDIR_DELIVERY=y +CONFIG_REFORMIME=y +CONFIG_FEATURE_REFORMIME_COMPAT=y +CONFIG_SENDMAIL=y + +# +# Process Utilities +# +# CONFIG_FEATURE_FAST_TOP is not set +CONFIG_FEATURE_SHOW_THREADS=y +CONFIG_FREE=y +CONFIG_FUSER=y +CONFIG_IOSTAT=y +CONFIG_KILL=y +CONFIG_KILLALL=y +CONFIG_KILLALL5=y +CONFIG_LSOF=y +CONFIG_MPSTAT=y +CONFIG_NMETER=y +CONFIG_PGREP=y +CONFIG_PKILL=y +CONFIG_PIDOF=y +CONFIG_FEATURE_PIDOF_SINGLE=y +CONFIG_FEATURE_PIDOF_OMIT=y +CONFIG_PMAP=y +CONFIG_POWERTOP=y +CONFIG_FEATURE_POWERTOP_INTERACTIVE=y +CONFIG_PS=y +# CONFIG_FEATURE_PS_WIDE is not set +# CONFIG_FEATURE_PS_LONG is not set +CONFIG_FEATURE_PS_TIME=y +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set +CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y +CONFIG_PSTREE=y +CONFIG_PWDX=y +CONFIG_SMEMCAP=y +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_INTERACTIVE=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +CONFIG_FEATURE_TOP_SMP_CPU=y +CONFIG_FEATURE_TOP_DECIMALS=y +CONFIG_FEATURE_TOP_SMP_PROCESS=y +CONFIG_FEATURE_TOPMEM=y +CONFIG_UPTIME=y +CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y +CONFIG_WATCH=y + +# +# Runit Utilities +# +CONFIG_CHPST=y +CONFIG_SETUIDGID=y +CONFIG_ENVUIDGID=y +CONFIG_ENVDIR=y +CONFIG_SOFTLIMIT=y +CONFIG_RUNSV=y +CONFIG_RUNSVDIR=y +# CONFIG_FEATURE_RUNSVDIR_LOG is not set +CONFIG_SV=y +CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service" +CONFIG_SVC=y +CONFIG_SVOK=y +CONFIG_SVLOGD=y +# CONFIG_CHCON is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RUNCON is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SESTATUS is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_RESTORECON is not set +# CONFIG_SETSEBOOL is not set + +# +# Shells +# +CONFIG_SH_IS_ASH=y +# CONFIG_SH_IS_HUSH is not set +# CONFIG_SH_IS_NONE is not set +# CONFIG_BASH_IS_ASH is not set +# CONFIG_BASH_IS_HUSH is not set +CONFIG_BASH_IS_NONE=y +CONFIG_SHELL_ASH=y +CONFIG_ASH=y +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +CONFIG_ASH_INTERNAL_GLOB=y +CONFIG_ASH_BASH_COMPAT=y +# CONFIG_ASH_BASH_SOURCE_CURDIR is not set +CONFIG_ASH_BASH_NOT_FOUND_HOOK=y +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_ALIAS=y +CONFIG_ASH_RANDOM_SUPPORT=y +CONFIG_ASH_EXPAND_PRMT=y +CONFIG_ASH_IDLE_TIMEOUT=y +CONFIG_ASH_MAIL=y +CONFIG_ASH_ECHO=y +CONFIG_ASH_PRINTF=y +CONFIG_ASH_TEST=y +CONFIG_ASH_SLEEP=y +CONFIG_ASH_HELP=y +CONFIG_ASH_GETOPTS=y +CONFIG_ASH_CMDCMD=y +CONFIG_CTTYHACK=y +CONFIG_HUSH=y +CONFIG_SHELL_HUSH=y +CONFIG_HUSH_BASH_COMPAT=y +CONFIG_HUSH_BRACE_EXPANSION=y +# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set +CONFIG_HUSH_LINENO_VAR=y +CONFIG_HUSH_INTERACTIVE=y +CONFIG_HUSH_SAVEHISTORY=y +CONFIG_HUSH_JOB=y +CONFIG_HUSH_TICK=y +CONFIG_HUSH_IF=y +CONFIG_HUSH_LOOPS=y +CONFIG_HUSH_CASE=y +CONFIG_HUSH_FUNCTIONS=y +CONFIG_HUSH_LOCAL=y +CONFIG_HUSH_RANDOM_SUPPORT=y +CONFIG_HUSH_MODE_X=y +CONFIG_HUSH_ECHO=y +CONFIG_HUSH_PRINTF=y +CONFIG_HUSH_TEST=y +CONFIG_HUSH_HELP=y +CONFIG_HUSH_EXPORT=y +CONFIG_HUSH_EXPORT_N=y +CONFIG_HUSH_READONLY=y +CONFIG_HUSH_KILL=y +CONFIG_HUSH_WAIT=y +CONFIG_HUSH_COMMAND=y +CONFIG_HUSH_TRAP=y +CONFIG_HUSH_TYPE=y +CONFIG_HUSH_TIMES=y +CONFIG_HUSH_READ=y +CONFIG_HUSH_SET=y +CONFIG_HUSH_UNSET=y +CONFIG_HUSH_ULIMIT=y +CONFIG_HUSH_UMASK=y +CONFIG_HUSH_GETOPTS=y +# CONFIG_HUSH_MEMLEAK is not set + +# +# Options common to all shells +# +CONFIG_FEATURE_SH_MATH=y +CONFIG_FEATURE_SH_MATH_64=y +CONFIG_FEATURE_SH_MATH_BASE=y +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_FEATURE_SH_NOFORK is not set +CONFIG_FEATURE_SH_READ_FRAC=y +CONFIG_FEATURE_SH_HISTFILESIZE=y +CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y + +# +# System Logging Utilities +# +CONFIG_KLOGD=y + +# +# klogd should not be used together with syslog to kernel printk buffer +# +CONFIG_FEATURE_KLOGD_KLOGCTL=y +CONFIG_LOGGER=y +CONFIG_LOGREAD=y +CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +CONFIG_FEATURE_SYSLOGD_DUP=y +CONFIG_FEATURE_SYSLOGD_CFG=y +# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 +CONFIG_FEATURE_IPC_SYSLOG=y +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 +CONFIG_FEATURE_KMSG_SYSLOG=y diff --git a/busybox/busybox_config.patch b/busybox/busybox_config.patch new file mode 100644 index 00000000..3d12bfb7 --- /dev/null +++ b/busybox/busybox_config.patch @@ -0,0 +1,10 @@ +--- Makefile 2023-04-05 18:24:13.142398421 -0700 ++++ ../Makefile 2023-04-05 18:24:19.964766778 -0700 +@@ -162,6 +162,7 @@ export srctree objtree VPATH TOPDIR + # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile + + CROSS_COMPILE ?= ++CROSS_COMPILE=/home/owner/workspace/openharmony/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi- + # bbox: we may have CONFIG_CROSS_COMPILER_PREFIX in .config, + # and it has not been included yet... thus using an awkward syntax. + ifeq ($(CROSS_COMPILE),) -- Gitee From 0bfc5ca517a575261e43b288ed4cdc68ce5aa6b8 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Tue, 11 Apr 2023 23:19:44 -0700 Subject: [PATCH 02/18] modify config file Signed-off-by: zhongluping <278527840@qq.com> --- busybox/Makefile | 1329 ---------------------------------------- busybox/busybox.config | 88 +-- 2 files changed, 44 insertions(+), 1373 deletions(-) delete mode 100755 busybox/Makefile diff --git a/busybox/Makefile b/busybox/Makefile deleted file mode 100755 index 1282c718..00000000 --- a/busybox/Makefile +++ /dev/null @@ -1,1329 +0,0 @@ -VERSION = 1 -PATCHLEVEL = 36 -SUBLEVEL = 0 -EXTRAVERSION = -NAME = Unnamed - -# *DOCUMENTATION* -# To see a list of typical targets execute "make help" -# More info can be located in ./README -# Comments in this file are targeted only to the developer, do not -# expect to learn how to build the kernel reading this file. - -# Do not print "Entering directory ..." -MAKEFLAGS += --no-print-directory - -# We are using a recursive build, so we need to do a little thinking -# to get the ordering right. -# -# Most importantly: sub-Makefiles should only ever modify files in -# their own directory. If in some directory we have a dependency on -# a file in another dir (which doesn't happen often, but it's often -# unavoidable when linking the built-in.o targets which finally -# turn into busybox), we will call a sub make in that other dir, and -# after that we are sure that everything which is in that other dir -# is now up to date. -# -# The only cases where we need to modify files which have global -# effects are thus separated out and done before the recursive -# descending is started. They are now explicitly listed as the -# prepare rule. - -# To put more focus on warnings, be less verbose as default -# Use 'make V=1' to see the full commands - -ifdef V - ifeq ("$(origin V)", "command line") - KBUILD_VERBOSE = $(V) - endif -endif -ifndef KBUILD_VERBOSE - KBUILD_VERBOSE = 0 -endif - -# Call sparse as part of compilation of C files -# Use 'make C=1' to enable sparse checking - -ifdef C - ifeq ("$(origin C)", "command line") - KBUILD_CHECKSRC = $(C) - endif -endif -ifndef KBUILD_CHECKSRC - KBUILD_CHECKSRC = 0 -endif - -# Use make M=dir to specify directory of external module to build -# Old syntax make ... SUBDIRS=$PWD is still supported -# Setting the environment variable KBUILD_EXTMOD take precedence -ifdef SUBDIRS - KBUILD_EXTMOD ?= $(SUBDIRS) -endif -ifdef M - ifeq ("$(origin M)", "command line") - KBUILD_EXTMOD := $(M) - endif -endif - - -# kbuild supports saving output files in a separate directory. -# To locate output files in a separate directory two syntaxes are supported. -# In both cases the working directory must be the root of the kernel src. -# 1) O= -# Use "make O=dir/to/store/output/files/" -# -# 2) Set KBUILD_OUTPUT -# Set the environment variable KBUILD_OUTPUT to point to the directory -# where the output files shall be placed. -# export KBUILD_OUTPUT=dir/to/store/output/files/ -# make -# -# The O= assignment takes precedence over the KBUILD_OUTPUT environment -# variable. - - -# KBUILD_SRC is set on invocation of make in OBJ directory -# KBUILD_SRC is not intended to be used by the regular user (for now) -ifeq ($(KBUILD_SRC),) - -# OK, Make called in directory where kernel src resides -# Do we want to locate output files in a separate directory? -ifdef O - ifeq ("$(origin O)", "command line") - KBUILD_OUTPUT := $(O) - endif -endif - -# That's our default target when none is given on the command line -PHONY := _all -_all: - -ifneq ($(KBUILD_OUTPUT),) -# Invoke a second make in the output directory, passing relevant variables -# check that the output directory actually exists -saved-output := $(KBUILD_OUTPUT) -KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd) -$(if $(KBUILD_OUTPUT),, \ - $(error output directory "$(saved-output)" does not exist)) - -PHONY += $(MAKECMDGOALS) - -$(filter-out _all,$(MAKECMDGOALS)) _all: - $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ - KBUILD_SRC=$(CURDIR) \ - KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@ - -# Leave processing to above invocation of make -skip-makefile := 1 -endif # ifneq ($(KBUILD_OUTPUT),) -endif # ifeq ($(KBUILD_SRC),) - -# We process the rest of the Makefile if this is the final invocation of make -ifeq ($(skip-makefile),) - -# If building an external module we do not care about the all: rule -# but instead _all depend on modules -PHONY += all -ifeq ($(KBUILD_EXTMOD),) -_all: all -else -_all: modules -endif - -srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR)) -TOPDIR := $(srctree) -# FIXME - TOPDIR is obsolete, use srctree/objtree -objtree := $(CURDIR) -src := $(srctree) -obj := $(objtree) - -VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) - -export srctree objtree VPATH TOPDIR - - -# Cross compiling and selecting different set of gcc/bin-utils -# --------------------------------------------------------------------------- -# -# When performing cross compilation for other architectures ARCH shall be set -# to the target architecture. (See arch/* for the possibilities). -# ARCH can be set during invocation of make: -# make ARCH=ia64 -# Another way is to have ARCH set in the environment. -# The default ARCH is the host where make is executed. - -# CROSS_COMPILE specify the prefix used for all executables used -# during compilation. Only gcc and related bin-utils executables -# are prefixed with $(CROSS_COMPILE). -# CROSS_COMPILE can be set on the command line -# make CROSS_COMPILE=ia64-linux- -# Alternatively CROSS_COMPILE can be set in the environment. -# Default value for CROSS_COMPILE is not to prefix executables -# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile - -CROSS_COMPILE ?= -CROSS_COMPILE=/home/owner/workspace/openharmony/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi- -# bbox: we may have CONFIG_CROSS_COMPILER_PREFIX in .config, -# and it has not been included yet... thus using an awkward syntax. -ifeq ($(CROSS_COMPILE),) -CROSS_COMPILE := $(shell grep ^CONFIG_CROSS_COMPILER_PREFIX .config 2>/dev/null) -CROSS_COMPILE := $(subst CONFIG_CROSS_COMPILER_PREFIX=,,$(CROSS_COMPILE)) -CROSS_COMPILE := $(subst ",,$(CROSS_COMPILE)) -#") -endif - -# SUBARCH tells the usermode build what the underlying arch is. That is set -# first, and if a usermode build is happening, the "ARCH=um" on the command -# line overrides the setting of ARCH below. If a native build is happening, -# then ARCH is assigned, getting whatever value it gets normally, and -# SUBARCH is subsequently ignored. - -ifneq ($(CROSS_COMPILE),) -SUBARCH := $(shell echo $(CROSS_COMPILE) | cut -d- -f1 | sed 's:^.*/::g') -else -SUBARCH := $(shell uname -m) -endif -SUBARCH := $(shell echo $(SUBARCH) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ - -e s/arm.*/arm/ -e s/sa110/arm/ \ - -e s/s390x/s390/ -e s/parisc64/parisc/ \ - -e s/ppc.*/powerpc/ -e s/mips.*/mips/ ) - -ARCH ?= $(SUBARCH) - -# Architecture as present in compile.h -UTS_MACHINE := $(ARCH) - -# SHELL used by kbuild -CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ - else if [ -x /bin/bash ]; then echo /bin/bash; \ - else echo sh; fi ; fi) - -# Decide whether to build built-in, modular, or both. -# Normally, just do built-in. - -KBUILD_MODULES := -KBUILD_BUILTIN := 1 - -# If we have only "make modules", don't compile built-in objects. -# When we're building modules with modversions, we need to consider -# the built-in objects during the descend as well, in order to -# make sure the checksums are uptodate before we record them. - -ifeq ($(MAKECMDGOALS),modules) - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) -endif - -# If we have "make modules", compile modules -# in addition to whatever we do anyway. -# Just "make" or "make all" shall build modules as well - -ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) - KBUILD_MODULES := 1 -endif - -ifeq ($(MAKECMDGOALS),) - KBUILD_MODULES := 1 -endif - -export KBUILD_MODULES KBUILD_BUILTIN -export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD - -# Beautify output -# --------------------------------------------------------------------------- -# -# Normally, we echo the whole command before executing it. By making -# that echo $($(quiet)$(cmd)), we now have the possibility to set -# $(quiet) to choose other forms of output instead, e.g. -# -# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@ -# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< -# -# If $(quiet) is empty, the whole command will be printed. -# If it is set to "quiet_", only the short version will be printed. -# If it is set to "silent_", nothing wil be printed at all, since -# the variable $(silent_cmd_cc_o_c) doesn't exist. -# -# A simple variant is to prefix commands with $(Q) - that's useful -# for commands that shall be hidden in non-verbose mode. -# -# $(Q)ln $@ :< -# -# If KBUILD_VERBOSE equals 0 then the above command will be hidden. -# If KBUILD_VERBOSE equals 1 then the above command is displayed. - -ifeq ($(KBUILD_VERBOSE),1) - quiet = - Q = -else - quiet=quiet_ - Q = @ -endif - -# If the user is running make -s (silent mode), suppress echoing of -# commands - -ifneq ($(findstring s,$(MAKEFLAGS)),) - quiet=silent_ -endif - -export quiet Q KBUILD_VERBOSE - - -# Look for make include files relative to root of kernel src -MAKEFLAGS += --include-dir=$(srctree) - -HOSTCC = gcc -HOSTCXX = g++ -HOSTCFLAGS := -HOSTCXXFLAGS := -# We need some generic definitions -include $(srctree)/scripts/Kbuild.include - -HOSTCFLAGS += $(call hostcc-option,-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer,) -HOSTCXXFLAGS += -O2 - -# For maximum performance (+ possibly random breakage, uncomment -# the following) - -MAKEFLAGS += -rR - -# Make variables (CC, etc...) - -AS = $(CROSS_COMPILE)as -CC = $(CROSS_COMPILE)gcc -LD = $(CC) -nostdlib -CPP = $(CC) -E -AR = $(CROSS_COMPILE)ar -NM = $(CROSS_COMPILE)nm -STRIP = $(CROSS_COMPILE)strip -OBJCOPY = $(CROSS_COMPILE)objcopy -OBJDUMP = $(CROSS_COMPILE)objdump -PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config -AWK = awk -GENKSYMS = scripts/genksyms/genksyms -DEPMOD = /sbin/depmod -KALLSYMS = scripts/kallsyms -PERL = perl -CHECK = sparse - -CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) -MODFLAGS = -DMODULE -CFLAGS_MODULE = $(MODFLAGS) -AFLAGS_MODULE = $(MODFLAGS) -LDFLAGS_MODULE = -r -CFLAGS_KERNEL = -AFLAGS_KERNEL = - - -# Use LINUXINCLUDE when you must reference the include/ directory. -# Needed to be compatible with the O= option -CFLAGS := $(CFLAGS) -# Added only to final link stage of busybox binary -CFLAGS_busybox := $(CFLAGS_busybox) -CPPFLAGS := $(CPPFLAGS) -AFLAGS := $(AFLAGS) -LDFLAGS := $(LDFLAGS) -LDLIBS := - -# Read KERNELRELEASE from .kernelrelease (if it exists) -KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null) -KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) - -export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \ - ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ - CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \ - HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS - -export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS -export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE -export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE -export FLTFLAGS - -# When compiling out-of-tree modules, put MODVERDIR in the module -# tree rather than in the kernel tree. The kernel tree might -# even be read-only. -export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions - -# Files to ignore in find ... statements - -RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o -export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git - -# =========================================================================== -# Rules shared between *config targets and build targets - -# Basic helpers built in scripts/ -PHONY += scripts_basic -scripts_basic: - $(Q)$(MAKE) $(build)=scripts/basic - -# To avoid any implicit rule to kick in, define an empty command. -scripts/basic/%: scripts_basic ; - -# This target generates Kbuild's and Config.in's from *.c files -PHONY += gen_build_files -gen_build_files: $(wildcard $(srctree)/*/*.c) $(wildcard $(srctree)/*/*/*.c) $(wildcard $(srctree)/embed/*) - $(Q)$(srctree)/scripts/gen_build_files.sh $(srctree) $(objtree) - -# bbox: we have helpers in applets/ -# we depend on scripts_basic, since scripts/basic/fixdep -# must be built before any other host prog -PHONY += applets_dir -applets_dir: scripts_basic gen_build_files include/config/MARKER - $(Q)$(MAKE) $(build)=applets - -applets/%: applets_dir ; - -PHONY += outputmakefile -# outputmakefile generates a Makefile in the output directory, if using a -# separate output directory. This allows convenient use of make in the -# output directory. -outputmakefile: -ifneq ($(KBUILD_SRC),) - $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ - $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) -endif - -# To make sure we do not include .config for any of the *config targets -# catch them early, and hand them over to scripts/kconfig/Makefile -# It is allowed to specify more targets when calling make, including -# mixing *config targets and build targets. -# For example 'make oldconfig all'. -# Detect when mixed targets is specified, and make a second invocation -# of make so .config is not included in this case either (for *config). - -no-dot-config-targets := clean mrproper distclean \ - cscope TAGS tags help %docs -#bbox# check% is removed from above - -config-targets := 0 -mixed-targets := 0 -dot-config := 1 - -ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) - ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) - dot-config := 0 - endif -endif - -ifeq ($(KBUILD_EXTMOD),) - ifneq ($(filter config %config,$(MAKECMDGOALS)),) - config-targets := 1 - ifneq ($(filter-out config %config,$(MAKECMDGOALS)),) - mixed-targets := 1 - endif - endif -endif - -ifeq ($(mixed-targets),1) -# =========================================================================== -# We're called with mixed targets (*config and build targets). -# Handle them one by one. - -%:: FORCE - $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@ - -else -ifeq ($(config-targets),1) -# =========================================================================== -# *config targets only - make sure prerequisites are updated, and descend -# in scripts/kconfig to make the *config target - -# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed. -# KBUILD_DEFCONFIG may point out an alternative default configuration -# used for 'make defconfig' --include $(srctree)/arch/$(ARCH)/Makefile -export KBUILD_DEFCONFIG - -config: scripts_basic outputmakefile gen_build_files FORCE - $(Q)mkdir -p include - $(Q)$(MAKE) $(build)=scripts/kconfig $@ - $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease - -%config: scripts_basic outputmakefile gen_build_files FORCE - $(Q)mkdir -p include - $(Q)$(MAKE) $(build)=scripts/kconfig $@ - $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease - -else -# =========================================================================== -# Build targets only - this includes busybox, arch specific targets, clean -# targets and others. In general all targets except *config targets. - -ifeq ($(KBUILD_EXTMOD),) -# Additional helpers built in scripts/ -# Carefully list dependencies so we do not try to build scripts twice -# in parallel -PHONY += scripts -scripts: gen_build_files scripts_basic include/config/MARKER - $(Q)$(MAKE) $(build)=$(@) - -scripts_basic: include/autoconf.h - -# Objects we will link into busybox / subdirs we need to visit -core-y := \ - applets/ \ - -libs-y := \ - archival/ \ - archival/libarchive/ \ - console-tools/ \ - coreutils/ \ - coreutils/libcoreutils/ \ - debianutils/ \ - klibc-utils/ \ - e2fsprogs/ \ - editors/ \ - findutils/ \ - init/ \ - libbb/ \ - libpwdgrp/ \ - loginutils/ \ - mailutils/ \ - miscutils/ \ - modutils/ \ - networking/ \ - networking/libiproute/ \ - networking/udhcp/ \ - printutils/ \ - procps/ \ - runit/ \ - selinux/ \ - shell/ \ - sysklogd/ \ - util-linux/ \ - util-linux/volume_id/ \ - -endif # KBUILD_EXTMOD - -ifeq ($(dot-config),1) -# In this section, we need .config - -# Read in dependencies to all Kconfig* files, make sure to run -# oldconfig if changes are detected. --include .kconfig.d - --include .config - -# If .config needs to be updated, it will be done via the dependency -# that autoconf has on .config. -# To avoid any implicit rule to kick in, define an empty command -.config .kconfig.d: ; - --include $(srctree)/arch/$(ARCH)/Makefile - -# Now we can define CFLAGS etc according to .config -include $(srctree)/Makefile.flags - -# If .config is newer than include/autoconf.h, someone tinkered -# with it and forgot to run make oldconfig. -# If kconfig.d is missing then we are probarly in a cleaned tree so -# we execute the config step to be sure to catch updated Kconfig files -include/autoconf.h: .kconfig.d .config $(wildcard $(srctree)/*/*.c) $(wildcard $(srctree)/*/*/*.c) | gen_build_files - $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig - -include/usage.h: gen_build_files - -else -# Dummy target needed, because used as prerequisite -include/autoconf.h: ; -endif - -# The all: target is the default when no target is given on the -# command line. -# This allow a user to issue only 'make' to build a kernel including modules -# Defaults busybox but it is usually overridden in the arch makefile -all: busybox doc - -# arch Makefile may override CC so keep this after arch Makefile is included -#bbox# NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) -CHECKFLAGS += $(NOSTDINC_FLAGS) - -# Default kernel image to build when no specific target is given. -# KBUILD_IMAGE may be overruled on the commandline or -# set in the environment -# Also any assignments in arch/$(ARCH)/Makefile take precedence over -# this default value -export KBUILD_IMAGE ?= busybox - -# -# INSTALL_PATH specifies where to place the updated kernel and system map -# images. Default is /boot, but you can set it to other values -export INSTALL_PATH ?= /boot - -# -# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory -# relocations required by build roots. This is not defined in the -# makefile but the argument can be passed to make if needed. -# - -MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) -export MODLIB - - -ifeq ($(KBUILD_EXTMOD),) -busybox-dirs := $(patsubst %/,%,$(filter %/, $(core-y) $(core-m) $(libs-y) $(libs-m))) - -busybox-alldirs := $(sort $(busybox-dirs) $(patsubst %/,%,$(filter %/, \ - $(core-n) $(core-) $(libs-n) $(libs-) \ - ))) - -core-y := $(patsubst %/, %/built-in.o, $(core-y)) -libs-y1 := $(patsubst %/, %/lib.a, $(libs-y)) -libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y)) -libs-y := $(libs-y1) $(libs-y2) - -# Build busybox -# --------------------------------------------------------------------------- -# busybox is build from the objects selected by $(busybox-init) and -# $(busybox-main). Most are built-in.o files from top-level directories -# in the kernel tree, others are specified in arch/$(ARCH)Makefile. -# Ordering when linking is important, and $(busybox-init) must be first. -# -# busybox -# ^ -# | -# +-< $(busybox-init) -# | +--< init/version.o + more -# | -# +--< $(busybox-main) -# | +--< driver/built-in.o mm/built-in.o + more -# | -# +-< kallsyms.o (see description in CONFIG_KALLSYMS section) -# -# busybox version (uname -v) cannot be updated during normal -# descending-into-subdirs phase since we do not yet know if we need to -# update busybox. -# Therefore this step is delayed until just before final link of busybox - -# except in the kallsyms case where it is done just before adding the -# symbols to the kernel. -# -# System.map is generated to document addresses of all kernel symbols - -busybox-all := $(core-y) $(libs-y) - -# Rule to link busybox - also used during CONFIG_KALLSYMS -# May be overridden by arch/$(ARCH)/Makefile -quiet_cmd_busybox__ ?= LINK $@ - cmd_busybox__ ?= $(srctree)/scripts/trylink \ - "$@" \ - "$(CC)" \ - "$(CFLAGS) $(CFLAGS_busybox)" \ - "$(LDFLAGS) $(EXTRA_LDFLAGS)" \ - "$(core-y)" \ - "$(libs-y)" \ - "$(LDLIBS)" \ - "$(CONFIG_EXTRA_LDLIBS)" \ - && $(srctree)/scripts/generate_BUFSIZ.sh --post include/common_bufsiz.h - -# Generate System.map -quiet_cmd_sysmap = SYSMAP - cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap - -# Link of busybox -# If CONFIG_KALLSYMS is set .version is already updated -# Generate System.map and verify that the content is consistent -# Use + in front of the busybox_version rule to silent warning with make -j2 -# First command is ':' to allow us to use + in front of the rule -define rule_busybox__ - : - $(call cmd,busybox__) - $(Q)echo 'cmd_$@ := $(cmd_busybox__)' > $(@D)/.$(@F).cmd -endef - - -ifdef CONFIG_KALLSYMS -# Generate section listing all symbols and add it into busybox $(kallsyms.o) -# It's a three stage process: -# o .tmp_busybox1 has all symbols and sections, but __kallsyms is -# empty -# Running kallsyms on that gives us .tmp_kallsyms1.o with -# the right size - busybox version (uname -v) is updated during this step -# o .tmp_busybox2 now has a __kallsyms section of the right size, -# but due to the added section, some addresses have shifted. -# From here, we generate a correct .tmp_kallsyms2.o -# o The correct .tmp_kallsyms2.o is linked into the final busybox. -# o Verify that the System.map from busybox matches the map from -# .tmp_busybox2, just in case we did not generate kallsyms correctly. -# o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using -# .tmp_busybox3 and .tmp_kallsyms3.o. This is only meant as a -# temporary bypass to allow the kernel to be built while the -# maintainers work out what went wrong with kallsyms. - -ifdef CONFIG_KALLSYMS_EXTRA_PASS -last_kallsyms := 3 -else -last_kallsyms := 2 -endif - -kallsyms.o := .tmp_kallsyms$(last_kallsyms).o - -define verify_kallsyms - $(Q)$(if $($(quiet)cmd_sysmap), \ - echo ' $($(quiet)cmd_sysmap) .tmp_System.map' &&) \ - $(cmd_sysmap) .tmp_busybox$(last_kallsyms) .tmp_System.map - $(Q)cmp -s System.map .tmp_System.map || \ - (echo Inconsistent kallsyms data; \ - echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \ - rm .tmp_kallsyms* ; /bin/false ) -endef - -# Update busybox version before link -# Use + in front of this rule to silent warning about make -j1 -# First command is ':' to allow us to use + in front of this rule -cmd_ksym_ld = $(cmd_busybox__) -define rule_ksym_ld - : - +$(call cmd,busybox_version) - $(call cmd,busybox__) - $(Q)echo 'cmd_$@ := $(cmd_busybox__)' > $(@D)/.$(@F).cmd -endef - -# Generate .S file with all kernel symbols -quiet_cmd_kallsyms = KSYM $@ - cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \ - $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@ - -.tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE - $(call if_changed_dep,as_o_S) - -.tmp_kallsyms%.S: .tmp_busybox% $(KALLSYMS) - $(call cmd,kallsyms) - -# .tmp_busybox1 must be complete except kallsyms, so update busybox version -.tmp_busybox1: $(busybox-lds) $(busybox-all) FORCE - $(call if_changed_rule,ksym_ld) - -.tmp_busybox2: $(busybox-lds) $(busybox-all) .tmp_kallsyms1.o FORCE - $(call if_changed,busybox__) - -.tmp_busybox3: $(busybox-lds) $(busybox-all) .tmp_kallsyms2.o FORCE - $(call if_changed,busybox__) - -# Needs to visit scripts/ before $(KALLSYMS) can be used. -$(KALLSYMS): scripts ; - -# Generate some data for debugging strange kallsyms problems -debug_kallsyms: .tmp_map$(last_kallsyms) - -.tmp_map%: .tmp_busybox% FORCE - ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@ - -.tmp_map3: .tmp_map2 - -.tmp_map2: .tmp_map1 - -endif # ifdef CONFIG_KALLSYMS - -# busybox image - including updated kernel symbols -busybox_unstripped: $(busybox-all) FORCE - $(call if_changed_rule,busybox__) - $(Q)rm -f .old_version - -busybox: busybox_unstripped -ifeq ($(SKIP_STRIP),y) - $(Q)cp $< $@ -else - $(Q)$(STRIP) -s --remove-section=.note --remove-section=.comment \ - busybox_unstripped -o $@ -# strip is confused by PIE executable and does not set exec bits - $(Q)chmod a+x $@ -endif - -# The actual objects are generated when descending, -# make sure no implicit rule kicks in -$(sort $(busybox-all)): $(busybox-dirs) ; - -# Handle descending into subdirectories listed in $(busybox-dirs) -# Preset locale variables to speed up the build process. Limit locale -# tweaks to this spot to avoid wrong language settings when running -# make menuconfig etc. -# Error messages still appears in the original language - -PHONY += $(busybox-dirs) -$(busybox-dirs): prepare scripts - $(Q)$(MAKE) $(build)=$@ - -# Build the kernel release string -# The KERNELRELEASE is stored in a file named .kernelrelease -# to be used when executing for example make install or make modules_install -# -# Take the contents of any files called localversion* and the config -# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE. -# LOCALVERSION from the command line override all of this - -nullstring := -space := $(nullstring) # end of line - -___localver = $(objtree)/localversion* $(srctree)/localversion* -__localver = $(sort $(wildcard $(___localver))) -# skip backup files (containing '~') -_localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f))) - -localver = $(subst $(space),, \ - $(shell cat /dev/null $(_localver)) \ - $(patsubst "%",%,$(CONFIG_LOCALVERSION))) - -# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called -# and if the SCM is know a tag from the SCM is appended. -# The appended tag is determinded by the SCM used. -# -# Currently, only git is supported. -# Other SCMs can edit scripts/setlocalversion and add the appropriate -# checks as needed. -ifdef _BB_DISABLED_CONFIG_LOCALVERSION_AUTO - _localver-auto = $(shell $(CONFIG_SHELL) \ - $(srctree)/scripts/setlocalversion $(srctree)) - localver-auto = $(LOCALVERSION)$(_localver-auto) -endif - -localver-full = $(localver)$(localver-auto) - -# Store (new) KERNELRELASE string in .kernelrelease -kernelrelease = $(KERNELVERSION)$(localver-full) -.kernelrelease: FORCE - $(Q)rm -f $@ - $(Q)echo $(kernelrelease) > $@ - - -# Things we need to do before we recursively start building the kernel -# or the modules are listed in "prepare". -# A multi level approach is used. prepareN is processed before prepareN-1. -# archprepare is used in arch Makefiles and when processed asm symlink, -# version.h and scripts_basic is processed / created. - -# Listed in dependency order -PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 - -# prepare-all is deprecated, use prepare as valid replacement -PHONY += prepare-all - -# prepare3 is used to check if we are building in a separate output directory, -# and if so do: -# 1) Check that make has not been executed in the kernel src $(srctree) -# 2) Create the include2 directory, used for the second asm symlink -prepare3: .kernelrelease -ifneq ($(KBUILD_SRC),) - @echo ' Using $(srctree) as source for busybox' - $(Q)if [ -f $(srctree)/.config ]; then \ - echo " $(srctree) is not clean, please run 'make mrproper'";\ - echo " in the '$(srctree)' directory.";\ - /bin/false; \ - fi; - $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi; - $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm -endif - -# prepare2 creates a makefile if using a separate output directory -prepare2: prepare3 outputmakefile - -prepare1: prepare2 include/config/MARKER -ifneq ($(KBUILD_MODULES),) - $(Q)mkdir -p $(MODVERDIR) - $(Q)rm -f $(MODVERDIR)/* -endif - -archprepare: prepare1 scripts_basic applets_dir - -prepare0: archprepare FORCE - $(Q)$(MAKE) $(build)=. - -# All the preparing.. -prepare prepare-all: prepare0 - -# Leave this as default for preprocessing busybox.lds.S, which is now -# done in arch/$(ARCH)/kernel/Makefile - -export CPPFLAGS_busybox.lds += -P -C -U$(ARCH) - -# FIXME: The asm symlink changes when $(ARCH) changes. That's -# hard to detect, but I suppose "make mrproper" is a good idea -# before switching between archs anyway. - -#bbox# include/asm: -#bbox# @echo ' SYMLINK $@ -> include/asm-$(ARCH)' -#bbox# $(Q)if [ ! -d include ]; then mkdir -p include; fi; -#bbox# @ln -fsn asm-$(ARCH) $@ - -# Split autoconf.h into include/linux/config/* -quiet_cmd_gen_bbconfigopts = GEN include/bbconfigopts.h - cmd_gen_bbconfigopts = $(srctree)/scripts/mkconfigs include/bbconfigopts.h include/bbconfigopts_bz2.h -quiet_cmd_gen_common_bufsiz = GEN include/common_bufsiz.h - cmd_gen_common_bufsiz = $(srctree)/scripts/generate_BUFSIZ.sh include/common_bufsiz.h -quiet_cmd_split_autoconf = SPLIT include/autoconf.h -> include/config/* - cmd_split_autoconf = scripts/basic/split-include include/autoconf.h include/config -quiet_cmd_gen_embedded_scripts = GEN include/embedded_scripts.h - cmd_gen_embedded_scripts = $(srctree)/scripts/embedded_scripts include/embedded_scripts.h $(srctree)/embed $(srctree)/applets_sh -#bbox# piggybacked generation of few .h files -include/config/MARKER: scripts/basic/split-include include/autoconf.h $(wildcard $(srctree)/embed/*) $(wildcard $(srctree)/applets_sh/*) $(srctree)/scripts/embedded_scripts - $(call cmd,split_autoconf) - $(call cmd,gen_bbconfigopts) - $(call cmd,gen_common_bufsiz) - $(call cmd,gen_embedded_scripts) - @touch $@ - -# Generate some files -# --------------------------------------------------------------------------- - -# KERNELRELEASE can change from a few different places, meaning version.h -# needs to be updated, so this check is forced on all builds - -uts_len := 64 - -define filechk_version.h - if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \ - echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \ - exit 1; \ - fi; \ - (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \ - echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \ - echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \ - ) -endef - -# --------------------------------------------------------------------------- - -PHONY += depend dep -depend dep: - @echo '*** Warning: make $@ is unnecessary now.' - -# --------------------------------------------------------------------------- -# Modules - -ifdef _BB_DISABLED_CONFIG_MODULES - -# By default, build modules as well - -all: modules - -# Build modules - -PHONY += modules -modules: $(busybox-dirs) $(if $(KBUILD_BUILTIN),busybox) - @echo ' Building modules, stage 2.'; - $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost - - -# Target to prepare building external modules -PHONY += modules_prepare -modules_prepare: prepare scripts - -# Target to install modules -PHONY += modules_install -modules_install: _modinst_ _modinst_post - -PHONY += _modinst_ -_modinst_: - @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \ - echo "Warning: you may need to install module-init-tools"; \ - echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\ - sleep 1; \ - fi - @rm -rf $(MODLIB)/kernel - @rm -f $(MODLIB)/source - @mkdir -p $(MODLIB)/kernel - @ln -s $(srctree) $(MODLIB)/source - @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \ - rm -f $(MODLIB)/build ; \ - ln -s $(objtree) $(MODLIB)/build ; \ - fi - $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst - -# If System.map exists, run depmod. This deliberately does not have a -# dependency on System.map since that would run the dependency tree on -# busybox. This depmod is only for convenience to give the initial -# boot a modules.dep even before / is mounted read-write. However the -# boot script depmod is the master version. -ifeq "$(strip $(INSTALL_MOD_PATH))" "" -depmod_opts := -else -depmod_opts := -b $(INSTALL_MOD_PATH) -r -endif -PHONY += _modinst_post -_modinst_post: _modinst_ - if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi - -else # CONFIG_MODULES - -# Modules not configured -# --------------------------------------------------------------------------- - -modules modules_install: FORCE - @echo - @echo "The present busybox configuration has modules disabled." - @echo "Type 'make config' and enable loadable module support." - @echo "Then build a kernel with module support enabled." - @echo - @exit 1 - -endif # CONFIG_MODULES - -### -# Cleaning is done on three levels. -# make clean Delete most generated files -# Leave enough to build external modules -# make mrproper Delete the current configuration, and all generated files -# make distclean Remove editor backup files, patch leftover files and the like - -# Directories & files removed with 'make clean' -CLEAN_DIRS += $(MODVERDIR) _install 0_lib -CLEAN_FILES += busybox busybox_unstripped* busybox.links \ - System.map .kernelrelease \ - .tmp_kallsyms* .tmp_version .tmp_busybox* .tmp_System.map - -# Directories & files removed with 'make mrproper' -MRPROPER_DIRS += include/config include2 -MRPROPER_FILES += .config .config.old include/asm .version .old_version \ - include/NUM_APPLETS.h \ - include/common_bufsiz.h \ - include/autoconf.h \ - include/bbconfigopts.h \ - include/bbconfigopts_bz2.h \ - include/embedded_scripts.h \ - include/usage_compressed.h \ - include/applet_tables.h \ - include/applets.h \ - include/usage.h \ - applets/usage \ - .kernelrelease Module.symvers tags TAGS cscope* \ - busybox_old - -# clean - Delete most, but leave enough to build external modules -# -clean: rm-dirs := $(CLEAN_DIRS) -clean: rm-files := $(CLEAN_FILES) -clean-dirs := $(addprefix _clean_,$(srctree) $(busybox-alldirs)) - -PHONY += $(clean-dirs) clean archclean -$(clean-dirs): - $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) - -clean: archclean $(clean-dirs) - $(call cmd,rmdirs) - $(call cmd,rmfiles) - @find . $(RCS_FIND_IGNORE) \ - \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ - -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \ - -type f -print | xargs rm -f - -PHONY += doc-clean -doc-clean: rm-files := docs/busybox.pod \ - docs/BusyBox.html docs/busybox.1 docs/BusyBox.txt -doc-clean: - $(call cmd,rmfiles) - -# mrproper - Delete all generated files, including .config -# -mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) -mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) -mrproper-dirs := $(addprefix _mrproper_,scripts) - -PHONY += $(mrproper-dirs) mrproper archmrproper -$(mrproper-dirs): - $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@) - -mrproper: clean archmrproper $(mrproper-dirs) - $(call cmd,rmdirs) - $(call cmd,rmfiles) - @find . -name Config.src | sed 's/.src$$/.in/' | xargs -r rm -f - @find . -name Kbuild.src | sed 's/.src$$//' | xargs -r rm -f - -# distclean -# -PHONY += distclean - -distclean: mrproper - @find $(srctree) $(RCS_FIND_IGNORE) \ - \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ - -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ - -o -name '.*.rej' -o -name '*.tmp' -o -size 0 \ - -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \ - -type f -print | xargs rm -f - - -# Packaging of the kernel to various formats -# --------------------------------------------------------------------------- -# rpm target kept for backward compatibility -package-dir := $(srctree)/scripts/package - -%pkg: FORCE - $(Q)$(MAKE) $(build)=$(package-dir) $@ -rpm: FORCE - $(Q)$(MAKE) $(build)=$(package-dir) $@ - - -# Brief documentation of the typical targets used -# --------------------------------------------------------------------------- - -boards := $(wildcard $(srctree)/configs/*_defconfig) -boards := $(notdir $(boards)) - --include $(srctree)/Makefile.help - -# Documentation targets -# --------------------------------------------------------------------------- -%docs: scripts_basic FORCE - $(Q)$(MAKE) $(build)=Documentation/DocBook $@ - -else # KBUILD_EXTMOD - -### -# External module support. -# When building external modules the kernel used as basis is considered -# read-only, and no consistency checks are made and the make -# system is not used on the basis kernel. If updates are required -# in the basis kernel ordinary make commands (without M=...) must -# be used. -# -# The following are the only valid targets when building external -# modules. -# make M=dir clean Delete all automatically generated files -# make M=dir modules Make all modules in specified dir -# make M=dir Same as 'make M=dir modules' -# make M=dir modules_install -# Install the modules build in the module directory -# Assumes install directory is already created - -# We are always building modules -KBUILD_MODULES := 1 -PHONY += crmodverdir -crmodverdir: - $(Q)mkdir -p $(MODVERDIR) - $(Q)rm -f $(MODVERDIR)/* - -PHONY += $(objtree)/Module.symvers -$(objtree)/Module.symvers: - @test -e $(objtree)/Module.symvers || ( \ - echo; \ - echo " WARNING: Symbol version dump $(objtree)/Module.symvers"; \ - echo " is missing; modules will have no dependencies and modversions."; \ - echo ) - -module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD)) -PHONY += $(module-dirs) modules -$(module-dirs): crmodverdir $(objtree)/Module.symvers - $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) - -modules: $(module-dirs) - @echo ' Building modules, stage 2.'; - $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost - -PHONY += modules_install -modules_install: _emodinst_ _emodinst_post - -install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra) -PHONY += _emodinst_ -_emodinst_: - $(Q)mkdir -p $(MODLIB)/$(install-dir) - $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst - -# Run depmod only is we have System.map and depmod is executable -quiet_cmd_depmod = DEPMOD $(KERNELRELEASE) - cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \ - $(DEPMOD) -ae -F System.map \ - $(if $(strip $(INSTALL_MOD_PATH)), \ - -b $(INSTALL_MOD_PATH) -r) \ - $(KERNELRELEASE); \ - fi - -PHONY += _emodinst_post -_emodinst_post: _emodinst_ - $(call cmd,depmod) - -clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD)) - -PHONY += $(clean-dirs) clean -$(clean-dirs): - $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) - -clean: rm-dirs := $(MODVERDIR) -clean: $(clean-dirs) - $(call cmd,rmdirs) - @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \ - \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ - -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \ - -type f -print | xargs rm -f - -# Dummies... -PHONY += prepare scripts -prepare: ; -scripts: ; -endif # KBUILD_EXTMOD - -# Generate tags for editors -# --------------------------------------------------------------------------- - -#We want __srctree to totally vanish out when KBUILD_OUTPUT is not set -#(which is the most common case IMHO) to avoid unneeded clutter in the big tags file. -#Adding $(srctree) adds about 20M on i386 to the size of the output file! - -ifeq ($(src),$(obj)) -__srctree = -else -__srctree = $(srctree)/ -endif - -ifeq ($(ALLSOURCE_ARCHS),) -ifeq ($(ARCH),um) -ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH) -else -ALLINCLUDE_ARCHS := $(ARCH) -endif -else -#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behaviour. -ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS) -endif - -ALLSOURCE_ARCHS := $(ARCH) - -define all-sources - ( find -regex '.*\.[ch]$$' ) -endef - -quiet_cmd_cscope-file = FILELST cscope.files - cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files - -quiet_cmd_cscope = MAKE cscope.out - cmd_cscope = cscope -b - -cscope: FORCE - $(call cmd,cscope-file) - $(call cmd,cscope) - -quiet_cmd_TAGS = MAKE $@ -define cmd_TAGS - rm -f $@; \ - ETAGSF=`etags --version | grep -i exuberant >/dev/null && \ - echo "-I __initdata,__exitdata,__acquires,__releases \ - -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ - --extra=+f --c-kinds=+px"`; \ - $(all-sources) | xargs etags $$ETAGSF -a -endef - -TAGS: FORCE - $(call cmd,TAGS) - - -quiet_cmd_tags = MAKE $@ -define cmd_tags - rm -f $@; \ - CTAGSF=`ctags --version | grep -i exuberant >/dev/null && \ - echo "-I __initdata,__exitdata,__acquires,__releases \ - -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ - --extra=+f --c-kinds=+px"`; \ - $(all-sources) | xargs ctags $$CTAGSF -a -endef - -tags: FORCE - $(call cmd,tags) - - -# Scripts to check various things for consistency -# --------------------------------------------------------------------------- - -includecheck: - find * $(RCS_FIND_IGNORE) \ - -name '*.[hcS]' -type f -print | sort \ - | xargs $(PERL) -w scripts/checkincludes.pl - -versioncheck: - find * $(RCS_FIND_IGNORE) \ - -name '*.[hcS]' -type f -print | sort \ - | xargs $(PERL) -w scripts/checkversion.pl - -namespacecheck: - $(PERL) $(srctree)/scripts/namespace.pl - -endif #ifeq ($(config-targets),1) -endif #ifeq ($(mixed-targets),1) - -PHONY += checkstack -checkstack: - $(OBJDUMP) -d busybox $$(find . -name '*.ko') | \ - $(PERL) $(src)/scripts/checkstack.pl $(ARCH) - -kernelrelease: - $(if $(wildcard .kernelrelease), $(Q)echo $(KERNELRELEASE), \ - $(error kernelrelease not valid - run 'make *config' to update it)) -kernelversion: - @echo $(KERNELVERSION) - -# Single targets -# --------------------------------------------------------------------------- -# Single targets are compatible with: -# - build whith mixed source and output -# - build with separate output dir 'make O=...' -# - external modules -# -# target-dir => where to store outputfile -# build-dir => directory in kernel source tree to use - -ifeq ($(KBUILD_EXTMOD),) - build-dir = $(patsubst %/,%,$(dir $@)) - target-dir = $(dir $@) -else - zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@))) - build-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash)) - target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) -endif - -%.s: %.c prepare scripts FORCE - $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -%.i: %.c prepare scripts FORCE - $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -%.o: %.c prepare scripts FORCE - $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -%.lst: %.c prepare scripts FORCE - $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -%.s: %.S prepare scripts FORCE - $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -%.o: %.S prepare scripts FORCE - $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) - -# Modules -%/: prepare scripts FORCE - $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ - $(build)=$(build-dir) -/: prepare scripts FORCE - $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ - $(build)=$(build-dir) - -%.ko: prepare scripts FORCE - $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ - $(build)=$(build-dir) $(@:.ko=.o) - $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost - -# FIXME Should go into a make.lib or something -# =========================================================================== - -quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs))) - cmd_rmdirs = rm -rf $(rm-dirs) - -quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))) - cmd_rmfiles = rm -f $(rm-files) - -# read all saved command lines - -targets := $(wildcard $(sort $(targets))) -cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) - -ifneq ($(cmd_files),) - $(cmd_files): ; # Do not try to update included dependency files - include $(cmd_files) -endif - -# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir -# Usage: -# $(Q)$(MAKE) $(clean)=dir -clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj - -endif # skip-makefile - -PHONY += FORCE -FORCE: - --include $(srctree)/Makefile.custom - -# Declare the contents of the .PHONY variable as phony. We keep that -# information in a variable se we can use it in if_changed and friends. -.PHONY: $(PHONY) diff --git a/busybox/busybox.config b/busybox/busybox.config index 90b51bf8..1e37a287 100644 --- a/busybox/busybox.config +++ b/busybox/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.36.0 -# Tue Apr 4 03:26:22 2023 +# Tue Apr 11 19:46:26 2023 # CONFIG_HAVE_DOT_CONFIG=y @@ -160,11 +160,11 @@ CONFIG_XZ=y CONFIG_BZIP2=y CONFIG_BZIP2_SMALL=8 CONFIG_FEATURE_BZIP2_DECOMPRESS=y -CONFIG_CPIO=y -CONFIG_FEATURE_CPIO_O=y -CONFIG_FEATURE_CPIO_P=y -CONFIG_FEATURE_CPIO_IGNORE_DEVNO=y -CONFIG_FEATURE_CPIO_RENUMBER_INODES=y +# CONFIG_CPIO is not set +# CONFIG_FEATURE_CPIO_O is not set +# CONFIG_FEATURE_CPIO_P is not set +# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set +# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set CONFIG_DPKG=y CONFIG_DPKG_DEB=y CONFIG_GZIP=y @@ -178,17 +178,17 @@ CONFIG_LZOP=y # CONFIG_LZOP_COMPR_HIGH is not set CONFIG_RPM=y CONFIG_RPM2CPIO=y -CONFIG_TAR=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_AUTODETECT=y -CONFIG_FEATURE_TAR_FROM=y +# CONFIG_TAR is not set +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_FEATURE_TAR_CREATE is not set +# CONFIG_FEATURE_TAR_AUTODETECT is not set +# CONFIG_FEATURE_TAR_FROM is not set CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_TO_COMMAND=y -CONFIG_FEATURE_TAR_UNAME_GNAME=y -CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y +# CONFIG_FEATURE_TAR_TO_COMMAND is not set +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set # CONFIG_FEATURE_TAR_SELINUX is not set CONFIG_UNZIP=y CONFIG_FEATURE_UNZIP_CDF=y @@ -233,10 +233,10 @@ CONFIG_FEATURE_CP_LONG_OPTIONS=y CONFIG_FEATURE_CP_REFLINK=y CONFIG_CUT=y CONFIG_FEATURE_CUT_REGEX=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_DATE is not set +# CONFIG_FEATURE_DATE_ISOFMT is not set # CONFIG_FEATURE_DATE_NANO is not set -CONFIG_FEATURE_DATE_COMPAT=y +# CONFIG_FEATURE_DATE_COMPAT is not set CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y @@ -257,7 +257,7 @@ CONFIG_EXPAND=y CONFIG_UNEXPAND=y CONFIG_EXPR=y CONFIG_EXPR_MATH_SUPPORT_64=y -CONFIG_FACTOR=y +# CONFIG_FACTOR is not set CONFIG_FALSE=y CONFIG_FOLD=y CONFIG_HEAD=y @@ -270,16 +270,16 @@ CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y CONFIG_LINK=y CONFIG_LN=y CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_WIDTH=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +# CONFIG_LS is not set +# CONFIG_FEATURE_LS_FILETYPES is not set +# CONFIG_FEATURE_LS_FOLLOWLINKS is not set +# CONFIG_FEATURE_LS_RECURSIVE is not set +# CONFIG_FEATURE_LS_WIDTH is not set +# CONFIG_FEATURE_LS_SORTFILES is not set +# CONFIG_FEATURE_LS_TIMESTAMPS is not set +# CONFIG_FEATURE_LS_USERNAME is not set +# CONFIG_FEATURE_LS_COLOR is not set +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set CONFIG_MD5SUM=y CONFIG_SHA1SUM=y CONFIG_SHA256SUM=y @@ -426,7 +426,7 @@ CONFIG_FEATURE_DIFF_LONG_OPTIONS=y CONFIG_FEATURE_DIFF_DIR=y CONFIG_ED=y CONFIG_PATCH=y -CONFIG_SED=y +# CONFIG_SED is not set CONFIG_VI=y CONFIG_FEATURE_VI_MAX_LEN=4096 # CONFIG_FEATURE_VI_8BIT is not set @@ -669,16 +669,16 @@ CONFIG_MKFS_VFAT=y CONFIG_MKSWAP=y CONFIG_FEATURE_MKSWAP_UUID=y CONFIG_MORE=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_FAKE=y -CONFIG_FEATURE_MOUNT_VERBOSE=y +# CONFIG_MOUNT is not set +# CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_FEATURE_MOUNT_VERBOSE is not set # CONFIG_FEATURE_MOUNT_HELPERS is not set -CONFIG_FEATURE_MOUNT_LABEL=y +# CONFIG_FEATURE_MOUNT_LABEL is not set # CONFIG_FEATURE_MOUNT_NFS is not set -CONFIG_FEATURE_MOUNT_CIFS=y -CONFIG_FEATURE_MOUNT_FLAGS=y -CONFIG_FEATURE_MOUNT_FSTAB=y -CONFIG_FEATURE_MOUNT_OTHERTAB=y +# CONFIG_FEATURE_MOUNT_CIFS is not set +# CONFIG_FEATURE_MOUNT_FLAGS is not set +# CONFIG_FEATURE_MOUNT_FSTAB is not set +# CONFIG_FEATURE_MOUNT_OTHERTAB is not set CONFIG_MOUNTPOINT=y CONFIG_NOLOGIN=y # CONFIG_NOLOGIN_DEPENDENCIES is not set @@ -706,9 +706,9 @@ CONFIG_FEATURE_SWAPON_PRI=y CONFIG_SWAPOFF=y CONFIG_FEATURE_SWAPONOFF_LABEL=y CONFIG_SWITCH_ROOT=y -CONFIG_TASKSET=y -CONFIG_FEATURE_TASKSET_FANCY=y -CONFIG_FEATURE_TASKSET_CPULIST=y +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +# CONFIG_FEATURE_TASKSET_CPULIST is not set CONFIG_UEVENT=y CONFIG_UMOUNT=y CONFIG_FEATURE_UMOUNT_ALL=y @@ -882,7 +882,7 @@ CONFIG_FEATURE_FTPD_AUTHENTICATION=y CONFIG_FTPGET=y CONFIG_FTPPUT=y CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y -CONFIG_HOSTNAME=y +# CONFIG_HOSTNAME is not set CONFIG_DNSDOMAINNAME=y CONFIG_HTTPD=y CONFIG_FEATURE_HTTPD_PORT_DEFAULT=80 @@ -1068,9 +1068,9 @@ CONFIG_MPSTAT=y CONFIG_NMETER=y CONFIG_PGREP=y CONFIG_PKILL=y -CONFIG_PIDOF=y -CONFIG_FEATURE_PIDOF_SINGLE=y -CONFIG_FEATURE_PIDOF_OMIT=y +# CONFIG_PIDOF is not set +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set CONFIG_PMAP=y CONFIG_POWERTOP=y CONFIG_FEATURE_POWERTOP_INTERACTIVE=y -- Gitee From 833faceacb270d75ee3cc734648ab058758778ea Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 13 Apr 2023 20:22:33 -0700 Subject: [PATCH 03/18] add busybox readme document Signed-off-by: zhongluping <278527840@qq.com> --- busybox/README.OpenSource | 11 +++ busybox/README_zh.md | 16 +++++ busybox/docs/rom_integrate.md | 125 ++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100755 busybox/README.OpenSource create mode 100755 busybox/README_zh.md create mode 100755 busybox/docs/rom_integrate.md diff --git a/busybox/README.OpenSource b/busybox/README.OpenSource new file mode 100755 index 00000000..2ab1ac3d --- /dev/null +++ b/busybox/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "busybox", + "License": "GPL 2.0", + "License File": "LICENSE", + "Version Number": "1_36_0", + "Owner": "zhongluping@h-partners.com", + "Upstream URL": "https://github.com/mirror/busybox", + "Description": "BusyBox combines tiny versions of many common UNIX utilities into a single small executable" + } +] diff --git a/busybox/README_zh.md b/busybox/README_zh.md new file mode 100755 index 00000000..7f41e9d9 --- /dev/null +++ b/busybox/README_zh.md @@ -0,0 +1,16 @@ +# Busybox 三方库说明 + +## 功能简介 + +BusyBox将许多常见UNIX实用程序的微小版本组合成一个小型可执行文件. + +## 使用约束 + ++ Rom版本:OpenHarmony3.2 beta5 ++ 三方库版本:1_36_0 ++ 当前适配的功能:支持常见的unix指令集。 ++ License:[GPL 2.0](https://github.com/mirror/busybox/blob/master/LICENSE) + +## 集成方式 + ++ [系统Rom包集成](docs/rom_integrate.md) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md new file mode 100755 index 00000000..15a29a3c --- /dev/null +++ b/busybox/docs/rom_integrate.md @@ -0,0 +1,125 @@ +# busybox 如何集成到系统rom + +## 准备工程 + +本库是基于OpenHarmony 3.2 beta5版本适配,并在润和RK3568开发板上验证的。 +RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/rk3568_helloworld/README.md)。 + +### 准备系统Rom源码 + +源码获取方法请参照:[OpenHarmony3.2beta5源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta5.md#%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96) + +### 增加构建脚本及配置文件 + +- 下载本仓库代码 + + ```sh + cd ~/ + git clone git@gitee.com:openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 仓库代码目录结构说明 + + ``` sh + cd ~/tpc_c_cplusplus/busybox/ # 进入到仓库代码库目录 + ``` + + ``` sh + busybox + |-- docs ## busybox集成说明文档目录 + |-- media ## 存放文档中的图片资源 + |-- BUILD.gn ## Rom版编译构建脚本 + |-- bundle.json ## 组件定义文件 + |-- busybox_config.patch ## Makefile的patch文件 + |-- busybox.config ## busybox 配置文件 + |-- build_busybox.sh ## 调用busybox原生库进行编译的脚本文件 + |-- EADME.OpenSource ## busybox 开源信息说明文档 + |-- README_zh.md ## busybox 说明文档 + ``` + +- 将本仓库iconv文件夹拷贝到OpenHarmony的third_party下 + + ``` sh + cp -arf ~/tpc_c_cplusplus/busybox ~/OpenHarmony/third_party + ``` + +### 准备三方库源码 + +`build_busybox.sh`脚本中设置了下载对应版本的busybox源码,无需手动下载该库的源码。 + +## 系统Rom中引入三方库 + +准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。 +这里我们三方库默认添加到thirdparty子系统中(详细信息参照文档[如何添加一个三方库到OpenHarmony系统中](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md#%E5%8A%A0%E5%85%A5%E7%BC%96%E8%AF%91%E6%9E%84%E5%BB%BA%E4%BD%93%E7%B3%BB))。相关配置已在bundle.json中完成,我们只需要在产品定义中添加busybox组件即可。 + +- 在产品配置文件中添加busybox的组件 + 打开//vendor/hihope/rk3568/config.json文件,找到thirdparty子系统并添加busybox的组件,如果文件中未指定thirdparty子系统,需要手动将子系统信息加上: + + ```json + { + "subsystem": "thirdparty", + "components": [ + { + "component": "busybox", + "features": [] + } + ] + } + ``` + +## 系统Rom中引入三方库测试程序 + +busybox最终生成的是busybox可执行文件,无需引入测试编译,引用原生库的测试逻辑即可。 + +## 编译工程 + +- 选择产品 + + ``` sh + hb set ## 运行hb set后会出现产品列表,在此我们选择 rk3568 + ``` + +- 运行编译 + + ``` sh + hb build --target-cpu arm -f ## --target-cpu arm 编译32位系统(未配置默认编译32位),如果需要编译64位的需要改为--target-cpu arm64; -f 全量编译,不加-f则为增量编译。每次设置完产品后建议进行全量编译。 + ``` + +- 正常编译完后会在out/rk3568/packages/phone/system/bin下生成busybox文件 + +## 安装应用程序 + +将编译生成的库和测试文件放到板子上运行,为避免每次将文件推入设备都烧录整个镜像,我们使用hdc_std工具将文件推到开发板上。 + +- 通过源码编译生成hdc_std工具 + + ``` sh + hb set ## 源码根目录下使用hb set 选择产品ohos-sdk + hb build ## 编译SDK,最后工具编译出来在out/sdk/ohos-sdk/windows/toolchains/hdc_std.exe + ``` + +- 将工具拷贝到Windows,可以为工具目录配置环境变量,也可以在工具所在目录打开windows命令 +- 测试资源准备 + + ```shell + git clone https://github.com/mirror/busybox.git -b 1_36_0 ## 在linux系统上下载和OH编译版本一致的busybox源码 + cd busybox + cp ~/tpc_c_cplusplus/busybox/busybox.config .config ## 修改配置文件与OH编译的配置一致 + make -j8 ## 编译linux版的busybox + cp ~/OpenHarmony/out/rk2568/package/phone/system/bin/busybox ./ ## 替换可执行文件busybox,将linuxbusybox替换成OH编译的busybox + cd .. + tar -cvf busybox_test.tar busybox ## 将源码包打包成tar包,最后推入到OH设备上进行测试(注意: OH设备上路径需与编译linux版本的路径一致) + ``` + +- 将测试资源推送到开发板 ,具体步骤如下: + + ```sh + hdc_std.exe file send busybox_test.tar /data/ ## 将测试资源推送到板子 + hdc_std.exe shell ## 进入设备系统 + cd /data + tar -xvf busybox_test.tar ## 解压测试资源 + ``` + +## 测试方法与运行结果 + +- [busybox 测试说明](https://gitee.com/zhong-luping/ohos_thirdparty_test/tree/busybox/busybox) -- Gitee From c9ddae00b737dcfb396eb6e7b091eb3e7e264131 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Wed, 19 Apr 2023 00:29:27 -0700 Subject: [PATCH 04/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9busybox=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E4=B8=AD=E5=B8=A6=E6=9C=89=E7=BB=9D=E5=AF=B9=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/build_busybox.sh | 16 ++++++++-------- busybox/busybox.config | 2 +- busybox/busybox_config.patch | 10 ---------- 3 files changed, 9 insertions(+), 19 deletions(-) delete mode 100644 busybox/busybox_config.patch diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh index ea1c63e9..969efd43 100755 --- a/busybox/build_busybox.sh +++ b/busybox/build_busybox.sh @@ -2,12 +2,11 @@ function build_busybox() { - local file=.config - - make defconfig - - sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' $file +# local file=.config +# make defconfig +# sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' $file + cp ../busybox.config .config make -j8 if [ $? -ne 0 ]; then echo "build busybox failed!" @@ -54,8 +53,9 @@ curdir=`pwd` srcdir=$1 url="https://github.com/mirror/busybox.git" ver=1_36_0 -PATHCH_FILE=`pwd`/../../third_party/busybox/busybox_config.patch +CONFIG_FILE=`pwd`/../../third_party/busybox/busybox.config source_dir=$target_name-$ver +COMPILE_PATH=`pwd`/../../prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/ echo "curdir=$curdir" echo "srcdir=$srcdir" @@ -65,7 +65,7 @@ if [ -z "$srcdir" ];then exit 1 fi -cp $PATHCH_FILE $srcdir/ +cp $CONFIG_FILE $srcdir/ cd $srcdir @@ -78,7 +78,7 @@ if [ ! -d "$source_dir" ]; then mv ./$target_name ./$source_dir cd $source_dir - patch -p0 < ../busybox_config.patch + sed -i "s/CROSS_COMPILE ?=/CROSS_COMPILE=${COMPILE_PATH}arm-linux-gnueabi-/" Makefile cd $srcdir fi diff --git a/busybox/busybox.config b/busybox/busybox.config index 1e37a287..7fd277ec 100644 --- a/busybox/busybox.config +++ b/busybox/busybox.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.36.0 -# Tue Apr 11 19:46:26 2023 +# Tue Apr 11 03:58:21 2023 # CONFIG_HAVE_DOT_CONFIG=y diff --git a/busybox/busybox_config.patch b/busybox/busybox_config.patch deleted file mode 100644 index 3d12bfb7..00000000 --- a/busybox/busybox_config.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- Makefile 2023-04-05 18:24:13.142398421 -0700 -+++ ../Makefile 2023-04-05 18:24:19.964766778 -0700 -@@ -162,6 +162,7 @@ export srctree objtree VPATH TOPDIR - # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile - - CROSS_COMPILE ?= -+CROSS_COMPILE=/home/owner/workspace/openharmony/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi- - # bbox: we may have CONFIG_CROSS_COMPILER_PREFIX in .config, - # and it has not been included yet... thus using an awkward syntax. - ifeq ($(CROSS_COMPILE),) -- Gitee From b39259b49d1aa0fd1c619402a06c0acf59759dfc Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 20 Apr 2023 17:02:32 +0800 Subject: [PATCH 05/18] modify busybox document Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/rom_integrate.md | 1 - 1 file changed, 1 deletion(-) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 15a29a3c..66826260 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -30,7 +30,6 @@ RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速 |-- media ## 存放文档中的图片资源 |-- BUILD.gn ## Rom版编译构建脚本 |-- bundle.json ## 组件定义文件 - |-- busybox_config.patch ## Makefile的patch文件 |-- busybox.config ## busybox 配置文件 |-- build_busybox.sh ## 调用busybox原生库进行编译的脚本文件 |-- EADME.OpenSource ## busybox 开源信息说明文档 -- Gitee From c2dd1ba50258b7031fbe4ccf9de62f310cf521d6 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 21 Apr 2023 15:08:57 +0800 Subject: [PATCH 06/18] modify busybox document Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/rom_integrate.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 66826260..316e064f 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -122,3 +122,11 @@ busybox最终生成的是busybox可执行文件,无需引入测试编译,引 ## 测试方法与运行结果 - [busybox 测试说明](https://gitee.com/zhong-luping/ohos_thirdparty_test/tree/busybox/busybox) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/rk3568_helloworld/README.md) +- [如何添加一个三方库到OpenHarmony的thirdparty子系统中](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md) +- [OpenHarmony3.2beta3介绍](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta3.md) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) -- Gitee From 81a1b724b6e234ef4f5d5ccf2b16b20c46032b7f Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 21 Apr 2023 15:15:44 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9OH=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/README_zh.md | 2 +- busybox/docs/rom_integrate.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/busybox/README_zh.md b/busybox/README_zh.md index 7f41e9d9..6eb68a05 100755 --- a/busybox/README_zh.md +++ b/busybox/README_zh.md @@ -6,7 +6,7 @@ BusyBox将许多常见UNIX实用程序的微小版本组合成一个小型可执 ## 使用约束 -+ Rom版本:OpenHarmony3.2 beta5 ++ Rom版本:OpenHarmony3.2 beta3 + 三方库版本:1_36_0 + 当前适配的功能:支持常见的unix指令集。 + License:[GPL 2.0](https://github.com/mirror/busybox/blob/master/LICENSE) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 316e064f..120ea5d6 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -7,7 +7,7 @@ RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速 ### 准备系统Rom源码 -源码获取方法请参照:[OpenHarmony3.2beta5源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta5.md#%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96) +源码获取方法请参照:[OpenHarmony3.2beta3源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta3.md#%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96) ### 增加构建脚本及配置文件 -- Gitee From c84e125d14637c913b094239bad77d827caa2abc Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 21 Apr 2023 15:16:37 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9OH=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/rom_integrate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 120ea5d6..bdfa86be 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -2,7 +2,7 @@ ## 准备工程 -本库是基于OpenHarmony 3.2 beta5版本适配,并在润和RK3568开发板上验证的。 +本库是基于OpenHarmony 3.2 beta3版本适配,并在润和RK3568开发板上验证的。 RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/rk3568_helloworld/README.md)。 ### 准备系统Rom源码 -- Gitee From 297851798890f16681cdf27d2d5904902a3ae779 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 21 Apr 2023 15:22:21 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=80=E6=BA=90?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3=E4=B8=AD=E9=82=AE=E7=AE=B1?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/README.OpenSource | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/busybox/README.OpenSource b/busybox/README.OpenSource index 2ab1ac3d..1e94420c 100755 --- a/busybox/README.OpenSource +++ b/busybox/README.OpenSource @@ -4,7 +4,7 @@ "License": "GPL 2.0", "License File": "LICENSE", "Version Number": "1_36_0", - "Owner": "zhongluping@h-partners.com", + "Owner": "zhongluping1@huawei.com", "Upstream URL": "https://github.com/mirror/busybox", "Description": "BusyBox combines tiny versions of many common UNIX utilities into a single small executable" } -- Gitee From 59134eeb50c719e1905f8f3c1c5871cd2f236199 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 27 Apr 2023 11:04:06 +0800 Subject: [PATCH 10/18] modify busybox gn format && rom_integrate document Signed-off-by: zhongluping <278527840@qq.com> --- busybox/BUILD.gn | 77 +++++++++++++-------------- busybox/{ => adapted}/busybox.config | 0 busybox/build_busybox.sh | 2 +- busybox/docs/media/result.png | Bin 0 -> 19743 bytes busybox/docs/rom_integrate.md | 24 +++------ 5 files changed, 45 insertions(+), 58 deletions(-) rename busybox/{ => adapted}/busybox.config (100%) create mode 100755 busybox/docs/media/result.png diff --git a/busybox/BUILD.gn b/busybox/BUILD.gn index 286605d2..c4ec89ad 100755 --- a/busybox/BUILD.gn +++ b/busybox/BUILD.gn @@ -1,4 +1,3 @@ - # Copyright (c) 2023 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,19 +11,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -import("//build/ohos.gni") import("//build/config/python.gni") +import("//build/ohos.gni") import("//build/templates/metadata/module_info.gni") template("build_busybox") { - _main_target_name = target_name - _target_label = - get_label_info(":${_main_target_name}", "label_with_toolchain") - _subsystem_name = invoker.subsystem_name - _part_name = invoker.part_name + _main_target_name = target_name + _target_label = + get_label_info(":${_main_target_name}", "label_with_toolchain") + _subsystem_name = invoker.subsystem_name + _part_name = invoker.part_name - action(target_name) { - forward_variables_from(invoker, + action(target_name) { + forward_variables_from(invoker, [ "sources", "outputs", @@ -32,44 +31,42 @@ template("build_busybox") { "script", ]) - _install_module_info = { - module_def = _target_label - module_info_file = - rebase_path(get_label_info(_target_label, "target_out_dir"), - root_build_dir) + - "/${_main_target_name}_module_info.json" - subsystem_name = _subsystem_name - part_name = _part_name - toolchain = current_toolchain - toolchain_out_dir = rebase_path(root_out_dir, root_build_dir) - } - metadata = { - install_modules = [ _install_module_info ] - } + _install_module_info = { + module_def = _target_label + module_info_file = + rebase_path(get_label_info(_target_label, "target_out_dir"), + root_build_dir) + "/${_main_target_name}_module_info.json" + subsystem_name = _subsystem_name + part_name = _part_name + toolchain = current_toolchain + toolchain_out_dir = rebase_path(root_out_dir, root_build_dir) } - generate_module_info("${_main_target_name}_info") { - module_name = _main_target_name - module_type = "bin" - module_source_dir = "${target_out_dir}" - install_enable = true - module_install_images = [ "system" ] + metadata = { + install_modules = [ _install_module_info ] } + } + generate_module_info("${_main_target_name}_info") { + module_name = _main_target_name + module_type = "bin" + module_source_dir = "${target_out_dir}" + install_enable = true + module_install_images = [ "system" ] + } } build_busybox("busybox") { - - script = "build_busybox.sh" - sources = [ "//third_party/busybox" ] - outputs = [ "${target_out_dir}/busybox" ] - args = [ - rebase_path(target_out_dir, root_build_dir), - rebase_path(root_build_dir, "//third_party/busybox") - ] + script = "build_busybox.sh" + sources = [ "//third_party/busybox" ] + outputs = [ "${target_out_dir}/busybox" ] + args = [ + rebase_path(target_out_dir, root_build_dir), + rebase_path(root_build_dir, "//third_party/busybox"), + ] - subsystem_name = "thirdparty" - part_name = "busybox" + subsystem_name = "thirdparty" + part_name = "busybox" } group("busybox_cmd") { - deps = [":busybox"] + deps = [ ":busybox" ] } diff --git a/busybox/busybox.config b/busybox/adapted/busybox.config similarity index 100% rename from busybox/busybox.config rename to busybox/adapted/busybox.config diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh index 969efd43..4170252f 100755 --- a/busybox/build_busybox.sh +++ b/busybox/build_busybox.sh @@ -53,7 +53,7 @@ curdir=`pwd` srcdir=$1 url="https://github.com/mirror/busybox.git" ver=1_36_0 -CONFIG_FILE=`pwd`/../../third_party/busybox/busybox.config +CONFIG_FILE=`pwd`/../../third_party/busybox/adapted/busybox.config source_dir=$target_name-$ver COMPILE_PATH=`pwd`/../../prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/ diff --git a/busybox/docs/media/result.png b/busybox/docs/media/result.png new file mode 100755 index 0000000000000000000000000000000000000000..b6e3cfa43cdf5d776dacccfd70e5f846154ae1ca GIT binary patch literal 19743 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 SC$y{3=@ah9@!tmB`u_mOGUl!T literal 0 HcmV?d00001 diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index bdfa86be..835733a4 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -97,31 +97,21 @@ busybox最终生成的是busybox可执行文件,无需引入测试编译,引 hb build ## 编译SDK,最后工具编译出来在out/sdk/ohos-sdk/windows/toolchains/hdc_std.exe ``` -- 将工具拷贝到Windows,可以为工具目录配置环境变量,也可以在工具所在目录打开windows命令 -- 测试资源准备 - - ```shell - git clone https://github.com/mirror/busybox.git -b 1_36_0 ## 在linux系统上下载和OH编译版本一致的busybox源码 - cd busybox - cp ~/tpc_c_cplusplus/busybox/busybox.config .config ## 修改配置文件与OH编译的配置一致 - make -j8 ## 编译linux版的busybox - cp ~/OpenHarmony/out/rk2568/package/phone/system/bin/busybox ./ ## 替换可执行文件busybox,将linuxbusybox替换成OH编译的busybox - cd .. - tar -cvf busybox_test.tar busybox ## 将源码包打包成tar包,最后推入到OH设备上进行测试(注意: OH设备上路径需与编译linux版本的路径一致) - ``` - -- 将测试资源推送到开发板 ,具体步骤如下: +- 将工具拷贝到Windows,可以为工具目录配置环境变量,也可以在工具所在目录打开windows命令 +- 将busybox推送到开发板 ,具体步骤如下: ```sh - hdc_std.exe file send busybox_test.tar /data/ ## 将测试资源推送到板子 + hdc_std.exe file send busybox /data/ ## 将测试资源推送到板子 hdc_std.exe shell ## 进入设备系统 cd /data - tar -xvf busybox_test.tar ## 解压测试资源 + chmod a+x busybox ## 设置busybox可执行权限 ``` ## 测试方法与运行结果 -- [busybox 测试说明](https://gitee.com/zhong-luping/ohos_thirdparty_test/tree/busybox/busybox) +将busybox推送开发板后,可以直接运行busybox相关指令并可看到其执行结果,如下图所示: + +![result](media/result.png) ## 参考资料 -- Gitee From 31bdd3d13efee811f5e73c14182a36fb6bcef33f Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 27 Apr 2023 11:07:44 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E4=B8=AD=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/rom_integrate.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 835733a4..95090f2c 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -28,9 +28,10 @@ RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速 busybox |-- docs ## busybox集成说明文档目录 |-- media ## 存放文档中的图片资源 + |-- adapted + |-- busybox.config ## busybox 配置文件 |-- BUILD.gn ## Rom版编译构建脚本 |-- bundle.json ## 组件定义文件 - |-- busybox.config ## busybox 配置文件 |-- build_busybox.sh ## 调用busybox原生库进行编译的脚本文件 |-- EADME.OpenSource ## busybox 开源信息说明文档 |-- README_zh.md ## busybox 说明文档 -- Gitee From df121cfd2a94935ab49c4d10e0a75c60e2621bf2 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 14:13:15 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E2=80=9C=E4=BF=AE=E6=94=B9busybox?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/rom_integrate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 95090f2c..5ee7297d 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -37,7 +37,7 @@ RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速 |-- README_zh.md ## busybox 说明文档 ``` -- 将本仓库iconv文件夹拷贝到OpenHarmony的third_party下 +- 将本仓库busybox文件夹拷贝到OpenHarmony的third_party下 ``` sh cp -arf ~/tpc_c_cplusplus/busybox ~/OpenHarmony/third_party -- Gitee From fa4eb503ef816763d86a0ed359ac009034bf1552 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 15:49:40 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9busybox=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E8=BF=90=E8=A1=8C=E6=95=88=E6=9E=9C=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/media/result.png | Bin 19743 -> 12013 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/busybox/docs/media/result.png b/busybox/docs/media/result.png index b6e3cfa43cdf5d776dacccfd70e5f846154ae1ca..ca2fd3b1d5cb5aa9295c76d666cc8a2db87125d8 100755 GIT binary patch literal 12013 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 EH)axTz5oCK literal 19743 zcmeIad0bQ1);At&xn4^vx21w0LahTTLqrS8+}5dzLJLL zz1DYq*S`C``>9VpGX4kz0)2A&yW{6UppBLw(1yyt{|$H&8BXE@mklxJPkjr*_n6E8 zHy?(6bM6}uh?uFnen|(o-+cW$-xv^ROS|@O12ghTFbH(E{`B#0F2uv;NBCm2FLF>O z-&i2-9^AI=Z`-agvK|oOCqDf23!U)m5uO`2Oaz7LU$@%&hezse<85<)Ft&LFU!RNm zBrNCZ(CO=Q2Ctsnd9v?2APcc)KSCtT{hm`gEixhhDlZ#)y{DoS(_C1QIe=p-Cn z_Bxb6?^TXhh(~)RIPxmtHJ02WjA@DC>w6@M7uO~{KF)MrU2EGuy2u#Q0mrws#kELw z#B2xp0P5N4U#q=7E%JGLoi@-l(B6++Zu1igvRpGC2 zjQtEhv&G4`CfBSVBOqU$X`SN^79>^Wy-UDbF}L(Yb6R^)XflKDpv}}DE7_4pa=n@M z#6=VsDM~0ryj~sB)>Clpm5!UIxdehLk<40J#gbe7EU40!p3^XQ2Hp5=)}M9rN{L6c zKUX8`-i@R(j;~i6q#d%CmC7WUH{Uf;Q=`Lzc7Ll)c9g1A_jtG3thWau`HQL)9aeU` z(nW4x_Ydvcp7|E@q&KSe!>vm4SnHZV?_;sDqxH!8d@p(#^5c56W8jTVK(g!Z+`uM{ zTJ}k+LQfsEMkrNwjG-f2R67g|0FefPIQP{Smn?m>KXDxawK*MkPsC|&KyI6X0oVQ9 zz(RY|ldhu+T#~O5-?i4NrTv`gv*t=ht^U-nQumE1-73TSla{iKeTF-ooI)J9e(rJR7j(zf*LamTmaZXyrfsu)1Pmw{)X ze^|fG5_Ik_&HJ;n??$R=tF=!VrqiOUq~CAi1B8pr$4qACJR$$E)_mbsN5U&Iqvv5u z8rK+e4uO>!5R{)WX&s{E{xNlVs1p{n8oZ>#>H~MXp?4C{qfpvH{u(Y=NL#UO`~$HC z1afEj*QON)AKdB391_wyL`iph&)n>B3(R(-O#wZu*A7iX9y{#?*VqC!z3Ms78HgeF zAi~e~MO9N4Sn)O4VLer^qN=Z0+uvcg=J(ss#T}NOCEdRAvjdPRT#;oYI~eJ!FGvX8 zfeK+ir`*Rag_WC7&W%DvrYQRz+ne7fM}m$%X1iP>jvvYslouGv!l+M*Q=QDv*Ivu9 zUz)K)=cO$dT~FDm2Wc10I#QqLRR;{@8%Re!BQWZ-iI!#^l&6l~XqQpB?-H(tYe+F~ z*7&w8pdxU7joA0e4MCRkWd@e0`vIx@kycgMzE;D!@tBZ_%ok9p*LZGj?@;`iW-rqe z!+au+Uq!|r8Eu@EEcJjL#g>^7527`(mb2yLo8dIlvhQ|~Pv12|%M+caAuk}l!d-Bn zF1JJ85)Oq-fcwH2xHbRRYq9<>s<=^|tP>IU?o)lprmq=@2T~()-ErGP<_KK8crpsb zPK0;2x_t1TYy5Jo_?BS&lSZayLKpOjC>)UB2)_HjPr+QPO+@~g1z#unQN zwtG(?OR|+-jQckNVbB2c7zaBt#rBE-CD=iA*(5H;#dA0!U0(Kx#ximqN-ElCmL5uG zF+ND%)2N$QM*Ho+>+giLqAnJT0+%=(v1^T$CYHri+gC%Tg8fCo{ejK-B1PQmq@y%B3#gbqGKLA;c^;-Wt9a*9eGrK58{T$) z+z)ctE)bBIhrCl{KQ}1&@kD|qht?uW%At-QdQ2r3WtS!9^vk`L6fYPxOHUp>k>eQm zynRP^G4a9f+<{^oG1>tyt8pl)TZWw5jW82T{i;H$SPi+H2zGr#tw&1JQ0Q}8cic9G3d?=cS;K=Zq{Po1D{vTa;P|0X z_Dlg@RzGXdqmCB zcv_NQ7^~%T!2w?{(T%wrlA4})69>;g&DsQ?aXc-YY}uMU?>Ad91j$DFiaWj}1&(lL zS@+JdfqqZz&(z^%J6qKBo?kV|O@wR&p@OV^&Wz`P2RIFBcwA)xo?-8+rT_w1F0 z_;Xkeh1pU2t6#|vusn7$$%@EM?UOK zz-q`75CavXEVPjs)IwB40o9%wyQPz#YL*1d!s!jV2E(^oiO_tS+MxOqK;MJ?W#jwT zYz^Xa)IFQ{_P|^&NYT-~d37FKNpN;~GuAk4x?q&-#=IqXHm^!~GbCj0hVv;27^F2d zw99$IW#gc(fu-R!vFl5Yi|gKxl@zv;71QYKwO}MOdJ6kVH*c9#9lXov!F}e;fCv!) zFYHH_^dkexW1yezXm)ZXSa+RjJka$pa#=mAd=di;>J95JdB^7wJuE|5`fz3#PCJdt zhD&{g7VuFDB<6m8epCsfhB(e~0pZ#LYNzwF$zV8KQqbEp1-o{(`yMKmj&OFhFqjV| z`RbSh)60^yjlvU!N{f9j1Xb91kU(IgHv*h>&D^O+u=Bz zCY<&JY+?6U1L`cuQ@<&AZCA#dUUhgZv0a!yWls;J#KIUgG;abN6%wFlRJSUkP{nLf z@#o}99;{oW58@o0^?o*~+nq|CiZYfe{J1_-xI}>sN{B2-+P{AXa>~U-&O~Q++0Rt*WQrCN4i;u!?NViw zrdYy`&(r-!GG;|d7s@3~ls)(uSj6wK{?+(Df`>({`%>(DuWg8vkp<85LEh@2(2lMo z&fh=@Hh_5e!D0Rk%BW_DQRTh2LXsp?=DuAs zmNi7RJ?U(HZYqSH@!|zk33^!v7{0_}l7^$zrMbWE!1kd2ZAhwxsr}DOGxzPyP2}_p zaUw|C)dbjXfL3$V9=0&{(9NE0g+sEO7}iktyYlMLDHRp1mUfTOdDP2ZLxdA%Zm(q- zfx_RPqz|tS$$A{GS>WMPnnhuI%M5B^L^Iv^%MhxusRkY$D6A>C24`oci`2A#Zf0GG zU2J0lgo!I^q`A~h7(Dx+n2$WMqk~>>PnUZv6VOUmKrJZ0Td}i8Z z`|JLZfLfClYV>@Tl3=*cpjsc4Kd~U=t^K4euy_5ZioJple(v}v`B{QDP_re_+GI~$ z9Psk#c|c*_*75G~9sr$5W;6plJ`~Al)ou~U~fYJWc9@xbXek2A!tn2Q8 zQM`89^<}H+DA2w)(ZB2F#i-maSwfN{7PU`6Zqw1g%FgwFigRwMV8Wk;EWdxes-H(T z7dl&Sd1T_1Df}@)GP)JI@?3S(1O!@X2jGIc_!Dv0KZ3NnrL)84m#n-pDw&d}l$p4W zJo=(qnL=op{BbO_Rg_T(80w<85YEUR^A-r-7NQ=I6Kzg2YlfP@6J+-)`|6X-nxeG1 z_AoJk>X1(gH>67OgCuh?EoiMj-}UHvb-v3%nrNqiHBj>vsZJ`FPfPKmab7%%^j~RZd z@6uU>#@1BeHvzNy!dHCHYG14RqQRG?r0=tYtI`y+Z7|Ijx`qHoLQ%x|&|GR7(n91- z;7|JRoNbLv ze7u;O?{s~QY$NgqzRWU2_0yi&{;m*a_KtGyBQn@%dq3k|C`lbVx*Z;FlD|_~KX!~S z0Gr_X`g)(VmvdWPDssiQp36F6>piIpAA1as=>yH`i6H8@RrU@YM~=X_eo9aD=ZL!^ zV?sJLl6?x-LQ~&xzc(~6zwb^+#C-o9H(4YBf3_D%M(*si^#m1(^M6 z{)U;S`*O7Hf*{HYdUU-%WnSkPk?XPDI>7g1b&cVued75L=fi*$-FT+Mx}Q+^#bM7= zQ<*SE*+kx{^ueDM+4;`T4J8{uK7&9VVZcj7jmU~I*XSb zTI?+kPVWHZlhr(^qgxvnawx*;{=H?_@9GV{yC?_D{}bn}`>9i}Z!n~8)4z%wzG~L_$JN>6 zO9}UH6y5zk>geNWoFK7yv;XA5!UIgNo{okqeGef612M1k2NEKJX`CYNP*4CiPgxqk zZI?#()UArG{mzsMU*6~u*1qh$9O8^BRT46m%8yKRP2_S{${9$L9(I$rH%`=fOW@S4 z6i^ZjY#u7A;ibz;;w#5&Q>MZnvPKJg$3hJxGDDuiHaQJFWk)B-un88PNc1G zi}!NCB?0wG;(-e-UxRyV<}kBA%k?;3S=lBQ7r(ffyJ^CK>^q(M9S>TKN*z7x z8LnrOPMtLn?IsRT&j!_;E-U@R?D7%jl>7Sa#FZn$p+VGjG#YORf*X9lT(oF1dUHWo zYbtY=&0I-5f|=7y#mBnD^tYHCL;h`LiJgS-=M*bS+o!C3!hR&9dp2_#8Lx0rA(kxa zFNy~|45azE#$m6Fxe{<(g;FK(ATIrVF2-O4R)E^e-wH`e?b3WsD)o|^r?Skgg=+Iu zuFvjx&e1&4-Lvb|7o~eL;$Gantb!t|GdXI4`CTd@)Xw)SL(3!FZzz>En6_x=j9k~@ z>N`5$e6`Jsl?c7DiOXeeu zTWovfh6y~=MueGL^V7EckliD&n`j9+kyc3#p3m=* zb)&q)FUoC6(bfXYNAm69gdnnJ|6~*?MsiykU(&Ig^?>H1PjcA*MD^UPKH-C?wA9nz z+_cO!ef+Eby>`8rt<~8nd7Fc$4i!_u!dwq(lOpROD(Bcw=i7gAylk1LG1F1U`i*wNBo?ao=I3p>l0c}$o%q|!#i zJ8HtLKXDhB2scLtgfE+pq#({KDlt{?zFxL7_tB3|b|S?^GJarSzCHdE?njav^q@*O z&L*plk(L3Uv$>+8W&~cYA@>cdtw?xsI@2+)l1L;a38$=lTMS2=FIRWPd6%M=Hn!`> zaa5OL)_3kt@-Z{ta>R8&y8AZ@+jTuN+r`ExzCV?q%*}3Wo{#i62+a`uqj^TeIexq& zgSl7Xup(Yh=IT>^F_8^I&iecL3ZrO$8$aqcQWHaO-0RzYPlUR$%_DGE6rMV4lD*LG zpeOR(H~YK0%chiqs=5Iex+u}a>ztFg@Vilo3BTUU{(hc{kGeeOMO+h{8qJLEk)=hksfl^P=Tr&v7!jd+(v-e((r4PtuA=5@=)0kZiL;k@vK z3l#qV{>FZ8!oGeX5>Nx+d0bh6VMIo6_vf=sIWbEMjomvKA1~;+!#TH30N@V0N5s;X zdasrzria+plu^7CXc%( z!q9WJFT8GUVw-gMwY@v2`0i~}Q7w4ynRCp`XMe#p89T1{&ZeLCeIaVWD;r%>L@{aR z-;T;5oIjp9>WTgMFZgM`YUn>~r;fkcKC$=OxmoT@TF|GmJ>B`PHNxpB8h!I}RNqX1 zvQK;w7D(;uL7PS@np9^4_{UVm%O?28rmV5V-4nyJ=xo`k)r;|Bk^!eKNPtt`?RT6Z z{M6}_7wI{>2S8>a-BpEO&W6rzvtnX9n0>0}sz&&6^eGz;gtBp>zQFMsYpGaKkUvSc zIG8EBebK##*2%K5-ur->w3uqPkTN{BX+0L_9zPjeG2?UVbOz3malf;;)MOy$z768r zfXs>7e-znx4hSy=h!S92?n;6sx+a6UtM|mH?y(&_T=R^QGk6P`p6-z95-L*oksOdE zQnb|;Zubw^0Q3HHuCjXiP>b!uT&_*Ld;FFX2c#-^ol#lZE+R$-x*|1UXG;lj9wOo_ z!nhOfNf$5M6Bo?g2|S%t{EO9^!Ga|xUo$V}5B5o5yWBa%U84JIjJ99Fw3fW1d0wWn z`?NTnsaN_Lvx=0c0RLe}r2W7^{8yW4GZRhfgl|2Q-uSuBJ;)F|3bfxznhl#vJ?6Z+^UCOLk?8vc zdSR2m{Dp|P3p^&9fo0iT)ZRYV%Ol5T1M<15ps^_N+w z0?TXh9&P?WVxpaBpcZrMq-`*6rP;JJrH=TIUy=66N?>a@^o?!KgWJ0wO|y~OaF$ql zn)U{FzH}{&-!v6p%J~ou?Cw{_%X=q|LYxDmw#e$YqW!oIO_07=Xw-|+i;GPY3{8uE$Lb?{bb2pEpkyYK zb>>vP#s@AQQj=Mto{jCJn_`>STv9EbUa`7UOi#3%yotaT2*Y*rNMdQo)tNvscYYtI zirngz{!nRjILR%7V%EVJ$atN3c1J(Z=jI=b+!m;5hHMnk6e<3wJEr*WU1l`FrlpH> zoXN?(kIXNoP-00)=`qcN=(6)ePt01Fo6~Jx7bI9hMwZsDDf*P;5oi76LrGs}`1)ff z*6xnmB(a6gOn-)hsf?ceg~S1=?;-NbMSa05{h=)0>2IRqTZkJCTfCX*H7{o{bNw7j zWNMIt7(e$pn@lpnvJ3;+BWYj)OXW>$*UI)1<+}Z};r0J2f`wk$! z{NCJ-G<9%u?OvM>w%#I2owqi%sn#}XTa0Dwt(o-LX}6Bq-z!bU#LQ|{__r}QZ~dQ+ zVZV9sWs%Qt)1xCy)X^=TgkJJlSO)iuS?Uww_@<_kmb|j5qgS)hyM-tdaaC`7oW(%= z&{CnzUX;ScPrqG+`fWkVj!zNAvm@o^SM@N)y`E7Go2t-J=zz4-a~A^z3XaW<)~UM3 ziUYP%(;WoY-m$RWhxRwe>g`9(qk1PB!(NdIcb$$-4>cL)2Hb3Nv+#Pc32dGfF=8Ea zR9uZP89_vTd$ag!V>s7;#`_vKaff%H#5f;5qcqpt9GyMJ8II{@T%NtQaODlh}8EF0Kb0 zo^*p(!Jdw1$FoC!A22abI3k;f*ULUFkLu&LO_m62Ul{l9{62hD-vA^UWHpalfRRCK zR4`_7QCMx-Kr<_izO@B2tNRQZQiGox?cKszR`v^bc+Np1Cx+%mPaiF z$^)&EGRJl^n3a3it>dM)g&wfgHyxN>9l$MB9MN`ui1cOyr5ELm8%r^x!E$nbKH+Jw zTWeBeia)oOqqHXQ8yvRw?A6{cH%+I?@IK%A?#|Kad<=`He<4@2>zNqr3Hfwq=7hhs z;BDeRfGzsxTPNZUGICa9m>*vEQv}#Bv*TdbeSXamr{(CJmhUdN{H}`t?~F?DN~%fo z0IbxbnTz@cjXniUgD(N7RpgII@7Z|NSrjm~Uz2@O?tEVeOQe5sRb_fQQ!Qm*zUSc! zWWjbASVGVPSgxi3Fv8#5SZOY^{BBnEU6E?Bn^JLLSl zU84t3SU7PM9RM{`^xN+b^P-k-yS};W*6)d*`X^-`*O(2<9wkNvT03<$dJDX=qR&;4 zeyGDk9}@Hft2Tjt1E*T~-0OREU+EAj*bVlcfSC@a0#&xgN}TU6Yc}rBz9Hw&pUx3K zGHJm^n+m+~lV#=Wb&TjSPlGM7uRQTT#zsu-Lw8M#xk-VKXbwO)M>B!^%bi~rKH-Y9 zayHY~BV$M?gD;N+7Q6m2g+aC?p7Au?5n{8)aEGAT1}I{s{)>IBrrsG?Fnc5DCD_37 zsZoyj+nmk>;8Uo~cK0Yv@A}{PyT0LcgUz{QN*BV9kBsRh05MWm%q zvi`no{-Htwf0w+(aK!$s;xRgN^2*M#iS*Q8m#=;ka3e7QJ>+R{Hg?R@M|eLA?klg^ zhkdeGkpKcIn74F(SZSX{?T+>QLc?3?^f>lM*~GTyc}@Kl4RnnAY&X~p8PehBf`q|DtuzpP`y7Mj_CjqRG7QXvMz z=6b`TL*rLZaIpzAZ%c=dL^U@3stFSq!)F45$9y(7Aak z1pq4x5n1HSXscjUwHY|FqxwErbLfKa!2xmB`d#W5o~gfTgjEY31ob)}_%p*B9PZFa z`^CoU%-*CcYXcWC82Lj-YEs8@V`$eh{XX~kyBeE=Ds?!k_U1l9<5P8vT%skvY`_~f zI&>|I4VBx#gXd$D&hk43)gj&0**s148VM!;d=i5MurF-B$JemL&^0h&eJQ`xIdRrA z>67j-f~>q4a4b4!i$Ai^17N8$fF_B|eiCyI-*psmb`ob(K2Z>pRs&Br+EpD;hA|QW zstWu}3={i6Tqx7Rd_LcDb@Ln;#`^Y%?&+gbCUAh3fFnbSc&#TmKbU3T}J}gV<7N#=CW-b8yNha8EWkimEqLH zK|leD6`Qu|V0WdM)AXe%?rh+vBbjV*&cwc@Cjps&ng{@3pSde6E&&V^Ximag*Kb|e zqhA#E9owvg;~k8b^8$6H5>M=^Cf0LK!yfEMUxk>}5cgS^j34doK)r=TAO448>X!b> zc>6I*U=zj-q4CO`C>9Pla0-@$rlQ7pE&iFjC;UoV8Qe;hY1G@-m$b0$1gkOL#)FeI zqqcfH*BZNS0}u1$g#I-e1D#}iwH~%;|a|r*r^Ke;^)nu zBHEBgTP~X2RghMhfB4m}?0Nr10en;or~cj0GUS7cohKo*J&z=&BR%&zT}70O2m#aw z{W+v0gWQLPqLE7ny14#sF4cFVt!yFI`cf;cUnV~*Vh^Dw72%oQE$w~}^s0WU@P-z> z*?=OEwZk_^IR~)q)~J0?Vc|2{uR@8e!`6a)Hoe1owJ6lHzrw;f03t0rzSi@1(7W&W zAwa}9x%95FL2Vxdeg6J&T-$jAbAyo$$*eN|+n#*%CkyN&(OUudT$_>jE+c@>2Yvqj zF+d0l`dsx^Ha`Oz^Cw6xSiL3i1hQP_Xj>Gtf6Cm_W3U>iRyh(xzW@xR`wRfD(@zB^BEI|pl%-j!&;s~Rmos$pn5L-2wcFm$ zPv~MvpjxM|);+-Jr-=`NJjFvbI&MpMj?i9NehAzq$B4q(o*62EaRPleb4%b45YAG! zZs!663ChQ@fQ>X~M{8!xC0M?wh1T-+YMwHO@S;wPE@{^=98d&!|>M}6300s(Z@E*IheO!9A z1Hiqw=+jeSfTvFDDP|RHjoeDELHF*^Rxr)3!qy%~`!&wRli({u^{ac}@FAZi2z;o= zNXwL)eg&{0&tu7Vmz(H#@_(?5BFD%GBQtGHO>6^8UyQAp)GG#3)7{yS*HK5gpW7cx z+WRHXC!)>?NK?CM>{iHW`q|pTX>GMCzlb)Hol7q86QqbEzT^C<;O|+Y?|d#dEc|QN zD?IdMKXhvObC;0_7w_rzAsJQ}*-BA6pKM9l{N{dxu7PM%EMm^2t06b{RI8tOyG$0% zMzwNOfv7}F0(Ub;6eUeq2bQ4@LrXW!)6j2;=b(*|PJtpnr6NW{yaO}%(()J3$}@mW zC*N7ZwpMM#Ztk#)5VR~M)*$9Zy(*?Lpx8Z)0Cw>+{;V(tz$e-YzM*_#z*@wkM>3Zo z{!=Red*FOdX0$`5P*?7^}I0@@+lLX0?^* z_Q#0y|Cb*W6wZ9lockm%DZ!8&ifUH*R^X@DH9HK|f#EMW^m7pcJ$WO?ouH07F zyZ=_#d95>azHAN!Lq$s4N2@)vE?=szhOAXDYpNs4-`bHK(-x{ZffdA z@gSD0Q#RlQ_GKeQ0!zhFPK?xj_D?1b+;`MAvJvyDWt2k(Jjbu7hq7|BeIqY#KNnxV z3d3I$6%2Ec7LRy7QusuZE1~9hUOW#H2*E86eMe?gvu&#X_B5#hAk3-1peFsmD)#n5 zB46JOhY1-|QKlSeNKBM3xk^s`cX0FMqK4Y5Qa> z52s{0>sW8sH3;8=5q{U3)zH%n()tdp)3E%4IQi-vG%!lKO0wc)=d-3>kGOQyO=VF-KeTk1#S^;7_L=Cp}bTRG?%TLz< zp#bm4J%>+adnbzUl{8woqa7i}OLAyxDJ*1oC@;9#?R?U6h-XiiHw*^Q&BMLu*z=Hb zfTWRn2|F3%8Db0bpZW^?m`5ErVGk&r`MUw3duo8x|603iXcy|B{7Jrh9YEd>YJN}2 z{L`!cC)XcX#lt`2pKH4x-vav0%+lw&!TKVza_Q`)(@ue)mwE=4M<48WT`xQcYytju zz}x3E4jPdvArlmIwx4G1JB%8RDf zw+!bC%f6q0f?6I0Zm#CpUYi&Bw!x~Z`e6((?BQ;X;HWwql!^ZB-Z zwpXSlZ1EW`W}|hl0J2N%`)YR2Zc<(z;m@h5jNk9~hJip5TPq)2J}D#p1(4cF&%yje z#3Y4l${UF0*QoZDlBJ4gt3EOa1BV(ht|qAgW9cx!c)=OgXHchz80jdg_uHIoS~0+S z8Z1o!*Ptw7inu9n$)glEKC}@$0Y`+4hUtQi(jS3Gprri6;7IL;9COaEHW*W$BhV^9 zzjgd?q$TIAxSz$Rfpl}&#-OW(f9DiAyKj>vzz}}pMbX&r7fph$I>AA;)^ABll0NVf zSs_g6p9vVZebIxg5u(78@_=#4&yvFB#HF(zJiS^Q6r~Vudhu@w*2JF+4+(q$(tL9N zcUpU7x&k4<*?Hpj0PDw#0$PtRGQeE&yb}=`a18tyo&fmh%Nz>pmJ6TMbo<)+j#hOp zllFE=-AxH`>xZrhY8)&wRYU-`MDqMzoCahcU=A?u0rZvYcc1B`CVrCuX4x#^S^@Hn zYpljW$R3BiCYwH>&X&i2D!oKbRrHm$K*!kyH?^WLXpl3(VY;lY`whXdq|l0Rk*X;I z5C}KbU<3Pc8WO$X>7H!>iw@v7S;L`XGvb^g{ePmYzm}gO?#p2P>TD4sanSM$9Hz)R z$!_(tw>rKQAxbik0G)3h5vKVigi8pA;u3b`)BFb>?L($s6lF!wD85)vN4E>RVn~d8 zvL1&8j?d@Jkmsej|4He~$5ngySOVsYEwByy4O=uPS#e36<7Ak%s5NB$mur~WiGt`v z$b{B#qTP=n95-|@hYXI!^TFN#ho>WP?Hx5Vz#o5Mwn=2|{@Luf-kJ!cD+uy=04upwAn?U(mju60Iwfq1S z1O?Wqduraf7hxNNwy#ARfhYhU6_D_Mg{Zt;fIv+Ec{Nqh6W0P~q~1@}Vi3uVLC9CG zn6@9;Z%jC*W)gPC^Bf&F4nEG=RKp?6lrH`(R*jW@@RT&{;lqI)tPOgdQkgyJ<&Ljw z$t!p+YdAW+R4_F(yF06MUVYtTLy*0tPwkWcGsWe$Td=pUXKq!jR~qX5pO%47>5}styS32tj6=G~c%m@B%)4*G$7Gb@oP27t}Tjht6^Q`Ot=(vf>_*aY^cP zJ5ObiWcg?BU9xgx3t$>F?W2Y&ihl`Se32d`~OrpVI8d(ptXw?+-ie^`X?i?(z`)e2AAxuL-U4m8DR=5(e zlLvm)I&f%Aav731H+gWog~)X~7$B^_n9-bPBZ7d~7On?lY6=MbN}dnqU+SDK_i^** z#z)Z5)ut@gULvgJkC2|Kej5T|PcZZF-araaa5Yy>B1oD}lA@dF-AH03X>CH6SrJaDa+Q zRG7aFzIp=y2inaD`lo3aQ2U(!8oR7iuJ^cVXXt+;!TuWw_TNab|3-rSHxlf>kzoIg z1pEIj5=;Vtf(Fa4x7}iO=xO)em1G^=g*N_RjT;P;$_7HGg9!g48c>TsV1&2D#Xz?1 z_FFp5^{e>oy?lCsjybxz!vm6Gwq?ipIo3=RLPvF4YI zfKsftp`hGWkGz!E)ZB1RR8?wx3(FSZ?>0r8S zs(?{C6?KZtFj@rIE)GyiFWyv#K*ih$L?F{|mdU7b3F#K;f_fg#ct2Z7t!7LDkSMY{ zJAlOz@uNM?oO1)5T@yX{jsl4l`Oo;O{xdHIg+bju5Y6j&TP%C4l`2#T3n!2y*azID zeOzO%4Z#Y8)0Q}UGaagQ$P?Ij+_ZucFasW)?8FP)!{P>jgibDwtgMWMq1{}kGh_LF z@Qd1ap;wJ8X8B=YHU)_KhQ``r1-k>N-kip+!QsRaf=#tcD)dJB@TO$j7mD12jX(g4 zsU(<7k}6QD>3BOB!LQeYNs_!rW6_9o-z8%2H+B#X#tt@+zx6@CW=|J>rcwe?Q~fqBeD~AnKlUuDjMZuIZI1DkxcRj$x(Z)e7abaqWhbY z-S+S^jovA*&SOOzp2lapUeban$rXQzkF-U#Jrj?W0b%|=U7XgGTIs|lkUxNf_buPX zapsmbjT-a<;R%y=&pr|CNTBEUN74CbDE;#_{yTXd70P}kqy!+ZS`b7uV=X9S21@uGa3|_^ zqYBgShN{R6+FGTOYfrfO$?L{?Qxrhz5RDW_@`&_e*GKzhjtQou_)p2Q=vc=pg3>d+ zM>Lez(1QdboT6%)KFf|GfZaG4iYqr~DHs=iD#CAwRlLkKcRUH)j7SHt5?+D^ zu^naY*>lg$Q#qP$A8FJtuPJqX)cI%V6fe(ahin!%Pt^JaPWlby6nUk4&rm!AV;D=p z6Hs{9U>_2g{t1-70x$@KeTx?BBchhdD$rs^F*PGsb%sI2SoNkDX48bH82`Jw<9HaK zvrXFYRbjr=!R|=p{Kl_)n-o8FM0cs7aM-Xm1TN7*yyIU(Qd0_c--U81D*$juM+B7G zsrBK#^=6#(Qvz{h7ZE&rcyJistH%m)_+5EDt2^@Y)TF_JRo~Hj=dQLIpaIXcV^T?W znO!sw!FSXy2^nk&K6s1rk+?BVQ!e~6Oe~nCWOSlSsF$14FS^>{m6Cq~&j$$U7Z5bR z9d%(-%Zl!d(D0VI%&Tu3-sb_Zlt)<}sbP~Xx%p8qfTIGumUDZc5xBvj6`PrfR3MNN z_*{>?rSV#W5#SNDyRcCa&f5=J1E}5h`OFc#5^`4UORX@@#}ym)%YX5iOHYWC?z^ObafBBF49f6Pll6gfzK_=s+v$iuhmRtOR}c}LdS z`$^y$`SBeY{dE`0#UXL^b!bYctMb(Y71pR!Ee%ZpCn-YlGQMnOu_M&gF>$3qHMjUW za|B=#W16mQJX+0dRZDf_nTvI1nzh9xJ$l^Qr{K7WW3JL&2Q-SYQ%SSOn6wdQbkaH# zGn@t%==ZKKFJjf>yl(#~c&nmf>ExG5om|P5o?q*)a9Erb+|n;X(pzfi8BF# z?w|}TPspuV7J>4?#p!Z_32f=!sYu%8csa{s(sfNfrrWwyIkp4Cc>c4?Q76ede@D{T zOz0gU7NZ{GtKW>Q^DvjzntNRjCoXc-=K`+ERv#Qqu1n~2gGKuhRGnk(X6nu{X41;W z_7vAec)M(*3&UT8o2@M_{%EFZ5ved@<{iDnwf1(8mep%70uyB^={JRvDsOrh(4Aeq z>Y>Hlz$9{ED*F1`Gco$o+HZx;OAo;xx5|e3ChB7rp-3KZP2!k?K+i6u(NKkv2wa?v z^PPNbDb3Dnh9R%VeHwEOyDdqHXmw0fk3hD3O)yPb8$017r|50LuD{{kF^`>dRk%@Q zuJTU!NUS=do#zt2)nduQERmPZRK&!;K)~P(9{uLpI7R|(rF8r5^2V?`TfKb2SC#dF|y7}?f);O-} z@x=w`Qk-7kI+Jf)s@(qN70!rs0leO}Sfg1d@Y7Yf;4PTN8sVK*>o9+K*alE@ETV1P z$`2H@MI?y%$aM{$spo-NH@{;xKzxjC*`XQJtTkwkxhhu{m*P}!h%L33-3|nPQ9oWY zs;mIytApxdL*qVoUhcT zFV16@=N3zwG^3#@ngt%;w8ctw+he50brNgla#0r9xS)YRsRp3yMy5t;jJM6q=8O|7 SC$y{3=@ah9@!tmB`u_mOGUl!T -- Gitee From 249fee65320c610cff624b923b372b86558be162 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 17:58:12 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/BUILD.gn | 2 +- busybox/build_busybox.sh | 14 ++++---------- busybox/docs/rom_integrate.md | 4 ++-- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/busybox/BUILD.gn b/busybox/BUILD.gn index c4ec89ad..24a4d5e2 100755 --- a/busybox/BUILD.gn +++ b/busybox/BUILD.gn @@ -60,7 +60,7 @@ build_busybox("busybox") { outputs = [ "${target_out_dir}/busybox" ] args = [ rebase_path(target_out_dir, root_build_dir), - rebase_path(root_build_dir, "//third_party/busybox"), + rebase_path(root_build_dir, "//"), ] subsystem_name = "thirdparty" diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh index 4170252f..b000f06d 100755 --- a/busybox/build_busybox.sh +++ b/busybox/build_busybox.sh @@ -1,10 +1,6 @@ #!/usr/bin/bash function build_busybox() { - -# local file=.config -# make defconfig -# sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' $file cp ../busybox.config .config make -j8 @@ -12,7 +8,7 @@ function build_busybox() { echo "build busybox failed!" return 1 fi - + cp ./busybox ../ echo "build busybox success!" @@ -51,14 +47,12 @@ ERR_MSG="BUILD busybox ERROR!!!!!!!!!!!!!!!!!!!!!" target_name=busybox curdir=`pwd` srcdir=$1 +topdir=$2 url="https://github.com/mirror/busybox.git" ver=1_36_0 -CONFIG_FILE=`pwd`/../../third_party/busybox/adapted/busybox.config +CONFIG_FILE=${topdir}third_party/busybox/adapted/busybox.config source_dir=$target_name-$ver -COMPILE_PATH=`pwd`/../../prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/ - -echo "curdir=$curdir" -echo "srcdir=$srcdir" +COMPILE_PATH=${topdir}prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/ if [ -z "$srcdir" ];then echo "must set the param dir!" diff --git a/busybox/docs/rom_integrate.md b/busybox/docs/rom_integrate.md index 5ee7297d..2406a83d 100755 --- a/busybox/docs/rom_integrate.md +++ b/busybox/docs/rom_integrate.md @@ -7,7 +7,7 @@ RK3568开发板如何使用可以参照[润和RK3568开发板标准系统快速 ### 准备系统Rom源码 -源码获取方法请参照:[OpenHarmony3.2beta3源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta3.md#%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96) +源码获取方法请参照:[OpenHarmony3.2beta3源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta3/zh-cn/release-notes/OpenHarmony-v3.2-beta3.md#%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96) ### 增加构建脚本及配置文件 @@ -118,6 +118,6 @@ busybox最终生成的是busybox可执行文件,无需引入测试编译,引 - [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/rk3568_helloworld/README.md) - [如何添加一个三方库到OpenHarmony的thirdparty子系统中](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md) -- [OpenHarmony3.2beta3介绍](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta3.md) +- [OpenHarmony3.2beta3介绍](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta3/zh-cn/release-notes/OpenHarmony-v3.2-beta3.md) - [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) - [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) -- Gitee From 4cf050f967ed2409ffb04d86443f1c5a07a146bd Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 17:59:02 +0800 Subject: [PATCH 15/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/build_busybox.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh index b000f06d..40d3e90a 100755 --- a/busybox/build_busybox.sh +++ b/busybox/build_busybox.sh @@ -13,8 +13,6 @@ function build_busybox() { echo "build busybox success!" - ## make test ## for gen test cmd - return 0 } -- Gitee From 6664c6d1cb1a51580ebbd1149f2cc9a8e2c6119c Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 19:21:58 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/BUILD.gn | 78 +++++++++++++++++++++------------------- busybox/build_busybox.sh | 18 +++++++--- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/busybox/BUILD.gn b/busybox/BUILD.gn index 24a4d5e2..da974faa 100755 --- a/busybox/BUILD.gn +++ b/busybox/BUILD.gn @@ -1,3 +1,4 @@ + # Copyright (c) 2023 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,19 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -import("//build/config/python.gni") import("//build/ohos.gni") +import("//build/config/python.gni") import("//build/templates/metadata/module_info.gni") template("build_busybox") { - _main_target_name = target_name - _target_label = - get_label_info(":${_main_target_name}", "label_with_toolchain") - _subsystem_name = invoker.subsystem_name - _part_name = invoker.part_name + _main_target_name = target_name + _target_label = + get_label_info(":${_main_target_name}", "label_with_toolchain") + _subsystem_name = invoker.subsystem_name + _part_name = invoker.part_name - action(target_name) { - forward_variables_from(invoker, + action(target_name) { + forward_variables_from(invoker, [ "sources", "outputs", @@ -31,42 +32,45 @@ template("build_busybox") { "script", ]) - _install_module_info = { - module_def = _target_label - module_info_file = - rebase_path(get_label_info(_target_label, "target_out_dir"), - root_build_dir) + "/${_main_target_name}_module_info.json" - subsystem_name = _subsystem_name - part_name = _part_name - toolchain = current_toolchain - toolchain_out_dir = rebase_path(root_out_dir, root_build_dir) + _install_module_info = { + module_def = _target_label + module_info_file = + rebase_path(get_label_info(_target_label, "target_out_dir"), + root_build_dir) + + "/${_main_target_name}_module_info.json" + subsystem_name = _subsystem_name + part_name = _part_name + toolchain = current_toolchain + toolchain_out_dir = rebase_path(root_out_dir, root_build_dir) + } + metadata = { + install_modules = [ _install_module_info ] + } } - metadata = { - install_modules = [ _install_module_info ] + generate_module_info("${_main_target_name}_info") { + module_name = _main_target_name + module_type = "bin" + module_source_dir = "${target_out_dir}" + install_enable = true + module_install_images = [ "system" ] } - } - generate_module_info("${_main_target_name}_info") { - module_name = _main_target_name - module_type = "bin" - module_source_dir = "${target_out_dir}" - install_enable = true - module_install_images = [ "system" ] - } } build_busybox("busybox") { - script = "build_busybox.sh" - sources = [ "//third_party/busybox" ] - outputs = [ "${target_out_dir}/busybox" ] - args = [ - rebase_path(target_out_dir, root_build_dir), - rebase_path(root_build_dir, "//"), - ] - subsystem_name = "thirdparty" - part_name = "busybox" + script = "build_busybox.sh" + sources = [ "//third_party/busybox" ] + outputs = [ "${target_out_dir}/busybox" ] + args = [ + rebase_path(target_out_dir, root_build_dir), + rebase_path("//"), + current_cpu + ] + + subsystem_name = "thirdparty" + part_name = "busybox" } group("busybox_cmd") { - deps = [ ":busybox" ] + deps = [":busybox"] } diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh index 40d3e90a..2d92386f 100755 --- a/busybox/build_busybox.sh +++ b/busybox/build_busybox.sh @@ -1,6 +1,10 @@ #!/usr/bin/bash function build_busybox() { + +# local file=.config +# make defconfig +# sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' $file cp ../busybox.config .config make -j8 @@ -8,7 +12,7 @@ function build_busybox() { echo "build busybox failed!" return 1 fi - + cp ./busybox ../ echo "build busybox success!" @@ -46,11 +50,18 @@ target_name=busybox curdir=`pwd` srcdir=$1 topdir=$2 +cpu=$3 url="https://github.com/mirror/busybox.git" ver=1_36_0 CONFIG_FILE=${topdir}third_party/busybox/adapted/busybox.config source_dir=$target_name-$ver -COMPILE_PATH=${topdir}prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/ +COMPILE_PATH=${topdir}prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin + +if [ "${cpu}" == "arm" ]; then + export CROSS_COMPILE=${topdir}prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi- +else + export CROSS_COMPILE=${topdir}prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- +fi if [ -z "$srcdir" ];then echo "must set the param dir!" @@ -69,9 +80,6 @@ if [ ! -d "$source_dir" ]; then fi mv ./$target_name ./$source_dir - cd $source_dir - sed -i "s/CROSS_COMPILE ?=/CROSS_COMPILE=${COMPILE_PATH}arm-linux-gnueabi-/" Makefile - cd $srcdir fi cd $source_dir -- Gitee From 457083c128098936c1f40fa95977fa595bd8777b Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 19:51:42 +0800 Subject: [PATCH 17/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/build_busybox.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/busybox/build_busybox.sh b/busybox/build_busybox.sh index 2d92386f..f30faf86 100755 --- a/busybox/build_busybox.sh +++ b/busybox/build_busybox.sh @@ -59,8 +59,11 @@ COMPILE_PATH=${topdir}prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnu if [ "${cpu}" == "arm" ]; then export CROSS_COMPILE=${topdir}prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi- -else +elif [ "${cpu}" == "arm64" ]; then export CROSS_COMPILE=${topdir}prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- +else + echo "cant not support this cpu(${cpu}) type!!!" + exit 1 fi if [ -z "$srcdir" ];then -- Gitee From 25e27206feaaff99815616b4529b980dc6e48554 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Thu, 4 May 2023 19:56:28 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- busybox/docs/media/result.png | Bin 12013 -> 3933 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/busybox/docs/media/result.png b/busybox/docs/media/result.png index ca2fd3b1d5cb5aa9295c76d666cc8a2db87125d8..21166e5ef4b6de0e26f61401fcb653f75543d64c 100755 GIT binary patch literal 3933 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 EH)axTz5oCK -- Gitee