mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-25 00:11:07 +00:00
66290ea46d
This patch introduces support for stacked file systems alongside new glue for accessing file-system implementations provided via Genode's new file-system-session interface. Using stacked file systems, an arbitrary number of file systems (such as tar archives or file systems implemented as separate Genode components) can be composed to form one merged virtual file system. An example is given via the 'ports/run/noux_bash.run' script. This run script creates a virtual file system out of multiple tar archives each containing the content of a particular GNU package. In addition, one 'ram_fs' is mounted, which enables Noux to perform write operations. This way, the shell output can be redirected to a file, or files can be saved in VIM. Fixes #103.
83 lines
2.1 KiB
Plaintext
83 lines
2.1 KiB
Plaintext
if {![have_spec x86]} {
|
|
puts "\nNoux is supported on the x86 architecture only\n"
|
|
exit 0
|
|
}
|
|
if {[have_spec linux]} {
|
|
puts "\nLinux not supported because of missing UART driver\n"
|
|
exit 0
|
|
}
|
|
|
|
build "core init drivers/timer drivers/uart noux lib/libc_noux noux-pkg/coreutils"
|
|
|
|
# strip coreutils binaries and create tar archive
|
|
exec sh -c "[cross_dev_prefix]strip bin/coreutils/bin/*"
|
|
exec tar cfv bin/coreutils.tar -h -C bin/coreutils .
|
|
|
|
create_boot_directory
|
|
|
|
install_config {
|
|
<config verbose="yes">
|
|
<parent-provides>
|
|
<service name="ROM"/>
|
|
<service name="LOG"/>
|
|
<service name="CAP"/>
|
|
<service name="RAM"/>
|
|
<service name="RM"/>
|
|
<service name="CPU"/>
|
|
<service name="PD"/>
|
|
<service name="IRQ"/>
|
|
<service name="IO_MEM"/>
|
|
<service name="IO_PORT"/>
|
|
<service name="SIGNAL"/>
|
|
</parent-provides>
|
|
<default-route>
|
|
<any-service> <any-child/> <parent/> </any-service>
|
|
</default-route>
|
|
<start name="timer">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Timer"/></provides>
|
|
</start>
|
|
<start name="uart_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Terminal"/></provides>
|
|
<config>
|
|
<policy label="noux" uart="1"/>
|
|
</config>
|
|
</start>
|
|
<start name="noux">
|
|
<resource name="RAM" quantum="1G"/>
|
|
<config>
|
|
<fstab> <tar name="coreutils.tar" /> </fstab>
|
|
<start name="/bin/ls"> <arg value="-Rla"/> </start>
|
|
</config>
|
|
</start>
|
|
</config>
|
|
}
|
|
|
|
build_boot_image {
|
|
core init timer uart_drv ld.lib.so noux libc.lib.so libm.lib.so
|
|
libc_noux.lib.so coreutils.tar
|
|
}
|
|
|
|
#
|
|
# Redirect the output of Noux via the virtual serial port 1 into a file to be
|
|
# dumped after the successful completion of the test.
|
|
#
|
|
set noux_output_file "noux_output.log"
|
|
|
|
append qemu_args " -nographic"
|
|
append qemu_args " -serial mon:stdio"
|
|
append qemu_args " -serial file:$noux_output_file"
|
|
|
|
if {[have_spec x86_64]} {
|
|
# coreutils.tar is really huge when built for x86_64
|
|
append qemu_args " -m 300 "
|
|
}
|
|
|
|
run_genode_until "child exited with exit value 0.*\n" 20
|
|
|
|
puts "[exec cat $noux_output_file]"
|
|
|
|
exec rm bin/coreutils.tar
|
|
exec rm $noux_output_file
|