mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-05 05:24:13 +00:00
6d8a7c0cc4
Noux/net adds network functionality to noux. Currently most basic network related system calls including 'accept', 'bind', 'connect', 'listen', 'recv', 'send', 'shutdown', and 'socket' are implemented by wrapping lwip's network functions. At the moment noux/net is rarely usable, though it is possible to use netcat to send a message to a netcat server which listen on a given port in noux/net.
199 lines
4.8 KiB
Plaintext
199 lines
4.8 KiB
Plaintext
if {![have_spec x86]} {
|
|
puts "\nNoux is supported on the x86 architecture only\n"
|
|
exit 0
|
|
}
|
|
|
|
set build_components {
|
|
core init drivers/timer noux/minimal lib/libc_noux
|
|
drivers/framebuffer drivers/pci drivers/input
|
|
server/terminal server/ram_fs
|
|
test/libports/ncurses
|
|
}
|
|
|
|
#
|
|
# Build Noux packages only once
|
|
#
|
|
set noux_pkgs {bash coreutils vim findutils binutils gcc make}
|
|
|
|
foreach pkg $noux_pkgs {
|
|
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
|
|
|
|
build $build_components
|
|
|
|
# write default vimrc file
|
|
set vimrc_fd [open "bin/vim/share/vim/vimrc" w]
|
|
puts $vimrc_fd {
|
|
set noloadplugins
|
|
set hls
|
|
set nocompatible
|
|
set laststatus=2
|
|
set noswapfile
|
|
set viminfo=}
|
|
close $vimrc_fd
|
|
|
|
# strip all binaries prior archiving
|
|
set find_args ""
|
|
foreach pkg $noux_pkgs { append find_args " bin/$pkg/" }
|
|
exec sh -c "find $find_args -type f | (xargs strip || true) 2>/dev/null"
|
|
|
|
foreach pkg $noux_pkgs {
|
|
exec tar cfv bin/$pkg.tar -h -C bin/$pkg . }
|
|
|
|
create_boot_directory
|
|
|
|
append 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_PORT"/>
|
|
<service name="IO_MEM"/>
|
|
<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> }
|
|
|
|
append_if [have_spec sdl] config {
|
|
<start name="fb_sdl">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides>
|
|
<service name="Input"/>
|
|
<service name="Framebuffer"/>
|
|
</provides>
|
|
</start>}
|
|
|
|
append_if [have_spec pci] config {
|
|
<start name="pci_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="PCI"/></provides>
|
|
</start>}
|
|
|
|
append_if [have_spec vesa] config {
|
|
<start name="vesa_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Framebuffer"/></provides>
|
|
</start>}
|
|
|
|
append_if [have_spec pl11x] config {
|
|
<start name="pl11x_drv">
|
|
<resource name="RAM" quantum="2M"/>
|
|
<provides><service name="Framebuffer"/></provides>
|
|
</start>}
|
|
|
|
append_if [have_spec ps2] config {
|
|
<start name="ps2_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Input"/></provides>
|
|
</start> }
|
|
|
|
append config {
|
|
<start name="terminal">
|
|
<resource name="RAM" quantum="2M"/>
|
|
<provides><service name="Terminal"/></provides>
|
|
<config>
|
|
<keyboard layout="de"/>
|
|
</config>
|
|
</start>
|
|
<start name="ram_fs">
|
|
<resource name="RAM" quantum="10M"/>
|
|
<provides><service name="File_system"/></provides>
|
|
<config>
|
|
|
|
<!-- preload RAM file system with some ROM images -->
|
|
<content>
|
|
<dir name="tmp">
|
|
<inline name="a.c">int main(int argc, char **argv) { return 0; }</inline>
|
|
<inline name="Makefile">
|
|
SHELL=/bin/bash
|
|
all:
|
|
genode-x86-gcc -v -c a.c -o a.o
|
|
</inline>
|
|
</dir>
|
|
<dir name="home">
|
|
<dir name="user">
|
|
<inline name=".bash_profile">cd /tmp; make; genode-x86-readelf -a a.o</inline>
|
|
</dir>
|
|
</dir>
|
|
</content>
|
|
|
|
<!-- constrain sessions according to their labels -->
|
|
<policy label="noux -> root" root="/" />
|
|
<policy label="noux -> home" root="/home/user" writeable="yes" />
|
|
<policy label="noux -> tmp" root="/tmp" writeable="yes" />
|
|
</config>
|
|
</start>
|
|
<start name="noux">
|
|
<resource name="RAM" quantum="1G" />
|
|
<config>
|
|
<fstab> }
|
|
|
|
foreach pkg $noux_pkgs {
|
|
append config " <tar name=\"$pkg.tar\" />" }
|
|
|
|
append config {
|
|
<!-- Example of how to impose policy onto a file system
|
|
session. The label attached to the 'fs' node is used
|
|
as a key to select the policy of 'ram_fs' -->
|
|
|
|
<dir name="home"> <fs label="home" /> </dir>
|
|
|
|
<!-- The entirety of ram_fs is mounted within the '/ram'
|
|
directory. -->
|
|
|
|
<dir name="ram"> <fs label="root" /> </dir>
|
|
<dir name="tmp"> <fs label="tmp" /> </dir>
|
|
|
|
</fstab>
|
|
<start name="/bin/bash">
|
|
<env name="TERM" value="linux" />
|
|
<env name="HOME" value="/home" />
|
|
<arg value="--login" />
|
|
</start>
|
|
</config>
|
|
</start>
|
|
</config>
|
|
}
|
|
|
|
install_config $config
|
|
|
|
|
|
#
|
|
# Boot modules
|
|
#
|
|
|
|
# generic modules
|
|
set boot_modules {
|
|
core init timer ld.lib.so noux terminal ram_fs
|
|
libc.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so }
|
|
|
|
append boot_modules { gmp.lib.so mpfr.lib.so }
|
|
|
|
foreach pkg $noux_pkgs {
|
|
lappend boot_modules "$pkg.tar" }
|
|
|
|
# platform-specific modules
|
|
lappend_if [have_spec linux] boot_modules fb_sdl
|
|
lappend_if [have_spec pci] boot_modules pci_drv
|
|
lappend_if [have_spec vesa] boot_modules vesa_drv
|
|
lappend_if [have_spec ps2] boot_modules ps2_drv
|
|
lappend_if [have_spec pl11x] boot_modules pl11x_drv
|
|
|
|
build_boot_image $boot_modules
|
|
|
|
append qemu_args " -m 300 "
|
|
|
|
run_genode_until forever
|
|
|
|
exec rm bin/bash.tar
|