opnsense-src/libexec/rc/rc.d/linux
Edward Tomasz Napierala e026f4243c Fix the 'linux' rc script on aarch64.
Previously it would try to load linux.ko instead of linux64.ko
and fail.  While here, don't try to match 'linuxaout'; even if
implemented, it's the same module as `linuxelf`.

Reviewed By:	emaste
Sponsored By:	EPSRC
Differential Revision:	https://reviews.freebsd.org/D29288
2021-03-18 20:30:21 +00:00

68 lines
1.6 KiB
Bash
Executable file

#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: linux
# REQUIRE: archdep
# KEYWORD: nojail
. /etc/rc.subr
name="linux"
desc="Enable Linux ABI"
rcvar="linux_enable"
start_cmd="${name}_start"
stop_cmd=":"
linux_start()
{
local _emul_path _tmpdir
case `sysctl -n hw.machine_arch` in
aarch64)
load_kld -e 'linux64elf' linux64
;;
amd64)
load_kld -e 'linuxelf' linux
load_kld -e 'linux64elf' linux64
;;
i386)
load_kld -e 'linuxelf' linux
;;
esac
_emul_path="$(sysctl -n compat.linux.emul_path)"
if [ -x ${_emul_path}/sbin/ldconfigDisabled ]; then
_tmpdir=`mktemp -d -t linux-ldconfig`
${_emul_path}/sbin/ldconfig -C ${_tmpdir}/ld.so.cache
if ! cmp -s ${_tmpdir}/ld.so.cache ${_emul_path}/etc/ld.so.cache; then
cat ${_tmpdir}/ld.so.cache > ${_emul_path}/etc/ld.so.cache
fi
rm -rf ${_tmpdir}
fi
# Linux uses the pre-pts(4) tty naming scheme.
load_kld pty
# Handle unbranded ELF executables by defaulting to ELFOSABI_LINUX.
if [ `sysctl -ni kern.elf64.fallback_brand` -eq "-1" ]; then
sysctl kern.elf64.fallback_brand=3 > /dev/null
fi
if [ `sysctl -ni kern.elf32.fallback_brand` -eq "-1" ]; then
sysctl kern.elf32.fallback_brand=3 > /dev/null
fi
if checkyesno linux_mounts_enable; then
mount -o nocover -t linprocfs linprocfs "${_emul_path}/proc"
mount -o nocover -t linsysfs linsysfs "${_emul_path}/sys"
mount -o nocover -t devfs devfs "${_emul_path}/dev"
mount -o nocover,linrdlnk -t fdescfs fdescfs "${_emul_path}/dev/fd"
mount -o nocover,mode=1777 -t tmpfs tmpfs "${_emul_path}/dev/shm"
fi
}
load_rc_config $name
run_rc_command "$1"