The erl_prim_loader
is used to load all Erlang modules
into the system. The start script is also fetched with the
low level loader.
The erl_prim_loader
knows about
the environment and how to fetch modules. The loader could, for
example, fetch files using the file system (with absolute file names as
input), or a database (where the binary format of a module is stored).
The -loader Loader
command line flag can be used to choose the method used by the erl_prim_loader
. Two Loader
methods are supported by the Erlang runtime system: efile
and inet
. If another loader is required, then it has to be implemented by the user. The Loader
provided by the user must fulfill the protocol defined
below, and it is started with the erl_prim_loader
by evaluating
open_port({spawn,Loader},[binary])
.
start(Id,Loader,Hosts) -> {ok, Pid} | {error, What}
Id = term()
Loader = atom() | string()
Hosts = [Host]
Host = atom()
Pid = pid()
What = term()
Starts the Erlang low level loader. This function is called
by the init
process (and module). The init
process reads the command line flags -id Id
, -loader Loader
, and -hosts Hosts
. These are
the arguments supplied to the start/3
function.
If -loader
is not given, the default loader is efile
which tells the system to read from the file system.
If -loader
is inet
, the -id Id
,
-hosts Hosts
, and -setcookie Cookie
flags must also
be supplied. Hosts
identifies hosts which this node can
contact in order to load modules.
One Erlang runtime system with a erl_boot_server
process must be
started on each of hosts given in Hosts
in order to answer the requests. See erl_boot_server(3)
.
If -loader
is something else, the given port program is started. The port program is supposed to follow the protocol specified below.
get_file(File) -> {ok, Bin, FullName} | error
File = string()
Bin = binary()
FullName = string()
This function fetches a file using the low level loader. File
is either an absolute file name or just the name of the file, for example "lists.beam"
. If an internal path is set to the loader, this path is used to find the file. If a user supplied loader is used, the path can be stripped off if it is obsolete, and the loader does not use a path. FullName
is the complete name of the fetched file. Bin
is
the contents of the file as a binary.
Path = [Dir]
Dir = string()
This function gets the path set in the loader. The path is set by the init
process according to information found in the start script.
Path = [Dir]
Dir = string()
This function sets the path of the loader if init
interprets a path
command in the start script.
The following protocol must be followed if a user provided
loader port program is used. The Loader
port program is started with the
command open_port({spawn,Loader},[binary])
. The protocol
is as follows:
Function Send Receive ------------------------------------------------------------- get_file [102 | FileName] [121 | BinaryFile] (on success) [122] (failure) stop eof terminate
The erl_prim_loader
module interprets the following flags:
erl_prim_loader
.
Loader
can be efile
(use the
local file system), or inet
(load using the
boot_server
on another Erlang node). If Loader
is
user defined, the defined Loader
port program is
started.
-loader
flag is omitted, it defaults to efile
.inet
loader
can use. This flag is mandatory if the -loader inet
flag is present. On each host, there must be on Erlang node with
the erl_boot_server
which handles the load requests.
Hosts
is a list of IP addresses (hostnames are not acceptable).
Id
must be identical to the name
supplied with the -sname
or -name
distribution
flags.
-loader inet
flag is present.
init(3), erl_boot_server(3)