Using a real harddisk

w_schmidt at ...181... w_schmidt at ...181...
Sun Jun 15 18:22:36 CEST 2014


-----Ursprüngliche Nachricht----- 
From: Sebastian Sumpf
Sent: Wednesday, May 14, 2014 10:06 PM
To: Genode OS Framework Mailing List
Subject: Re: Using a real harddisk

Hi again,

>>>> I want to access files from a harddisk using a block cache. The 
>>>> partition
>>>> would be /sda7/test in ext2 format. (and for example file1.txt) I tried

>>> Assuming your machine is an x86 derivative and supports AHCI, you could
>>> use Genode's AHCI driver, which will expose a block sesssion (see:
>>> os/src/drivers/ahci/README). In order to access the partitions on your
>>> disk, a server called 'part_blk' is required (see:
>>> os/src/server/part_blk/README for its configuration). So, you would have
>>> to remove 'ram_blk' and add 'ahci_drv', 'part_blk' (routed to
>>> 'ahci_drv'), adjust 'rump_fs' to be routed to 'part_blk' partition 7.

The good thing: the timeout message seems to be gone.
The bad thing:

I tried to execute the example. The run file is below attached inline
If i try to execute it in qemu, i get a message: "[init -> acpi] ACPI table 
format not supported - will not rewrite GSIs"
followed by a page fault  "static void 
Genode::Pager_object::_page_fault_handler(): unhandled page fault, 
'pager:ahci_ep' address=0x0 ip=0x10002c3"
(The notebook is ad proposed an X201)

(The complete output is also attached below).

Am i missing something in the chain?

And I think I have to little knowledge of the ACPI mechanism. I found that 
GSI are Global System Interrupts but no clue what went wrong.

Best regards,
Wolfgang



--- Runfile:
#
# Check used commands
#
#set mke2fs [check_installed mke2fs]
#set dd     [check_installed dd]

#
# Build
#
set build_components {
     core init
     drivers/timer
     drivers/pci
     drivers/acpi
     drivers/ahci
     server/part_blk
     server/blk_cache
     server/ram_blk
     server/rump_fs
     test/libc_vfs
}

build $build_components

create_boot_directory

#
# Generate config
#
append config {
<config>
     <parent-provides>
         <service name="ROM"/>
         <service name="RAM"/>
         <service name="IRQ"/>
         <service name="IO_MEM"/>
         <service name="IO_PORT"/>
         <service name="CAP"/>
         <service name="PD"/>
         <service name="RM"/>
         <service name="CPU"/>
         <service name="LOG"/>
         <service name="SIGNAL" />
     </parent-provides>
     <default-route>
         <any-service> <parent/> <any-child/> </any-service>
     </default-route>
     <start name="timer">
         <resource name="RAM" quantum="1M"/>
         <provides><service name="Timer"/></provides>
     </start>
     <start name="acpi">
         <resource name="RAM" quantum="6M"/>
         <binary name="acpi_drv"/>
         <provides>
             <service name="PCI"/>
             <service name="IRQ" />
         </provides>
         <route>
             <service name="PCI"> <any-child /> </service>
             <any-service> <parent/> <any-child /> </any-service>
         </route>
     </start>
     <start name="ahci">
         <binary name="ahci" />
         <resource name="RAM" quantum="10M" />
         <provides><service name="Block" /></provides>
         <route>
             <service name="IRQ"><child name="acpi" /></service>
             <any-service> <parent /> <any-child /></any-service>
         </route>
     </start>
     <start name="part_blk">
         <resource name="RAM" quantum="10M" />
         <provides><service name="Block" /></provides>
         <route>
             <any-service><child name="ahci"/>
<parent/><any-child/></any-service>
         </route>
         <config>
             <policy label="blk_cache" partition="6"/>
         </config>
     </start>
     <start name="blk_cache">
         <resource name="RAM" quantum="8M" />
         <provides><service name="Block" /></provides>
         <route>
             <service name="Block"><child name="part_blk" /></service>
             <any-service> <parent /> <any-child /></any-service>
         </route>
     </start>
     <start name="rump_fs">
         <resource name="RAM" quantum="4M" />
         <provides><service name="File_system"/></provides>
         <config fs="ext2fs"><policy label="" root="/"
writeable="yes"/></config>
         <route>
             <service name="Block"><child name="blk_cache" /></service>
             <any-service> <parent /> <any-child /></any-service>
         </route>
     </start>
     <start name="test-libc_vfs">
         <resource name="RAM" quantum="4M"/>
         <config>
             <libc stdout="/dev/log">
                 <vfs>
                     <dir name="dev"> <log/> </dir>
                     <fs/>
                 </vfs>
             </libc>
         </config>
     </start>
</config>}

install_config $config

#
# Boot modules
#

# generic modules
set boot_modules {
     core init timer test-libc_vfs ram_blk
     pci_drv pci_device_pd acpi_drv ahci part_blk blk_cache
     rump.lib.so rump_fs.lib.so rump_fs
     ld.lib.so libc.lib.so
}
#ext2.raw

build_boot_image $boot_modules

append qemu_args " -m 1024"

run_genode_until forever


--- output
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 978 MB to init
[init -> acpi] available memory for ACPI 2048 kiB, for PCI_DRV 3536 kiB
[init -> ahci] --- AHCI driver started ---
[init -> rump_fs] Using ext2fs as file system
[init -> rump_fs] int rumpuser_init(int, const rumpuser_hyperup*): RUMP
ver: 17
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_THREADS
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_VERBOSE
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
_RUMPUSER_NCPU
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_MEMLIMIT
[init -> rump_fs] Asserting rump kernel 820 KB of RAM
[init -> acpi] void Acpi_table::_parse_tables(T*, Genode::uint32_t)
[with T = unsigned int; Genode::uint32_t = unsigned int]: Found MADT
[init -> acpi] MADT IRQ 0 -> GSI 2 flags: 0
[init -> acpi] MADT IRQ 5 -> GSI 5 flags: d
[init -> acpi] MADT IRQ 9 -> GSI 9 flags: d
[init -> acpi] MADT IRQ 10 -> GSI 10 flags: d
[init -> acpi] MADT IRQ 11 -> GSI 11 flags: d
[init -> rump_fs] BOOTSTRAP
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_NVNODES
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_BLKFAIL
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_BLKSECTSHIFT
Quota exceeded! amount=28672, size=4096, consumed=28672
[init -> rump_fs] upgrading quota donation for Env::CPU (8192 bytes)
[init -> acpi -> pci_drv] PCI driver started
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
RUMP_MODULEBASE
Quota exceeded! amount=36864, size=4096, consumed=36864
[init -> rump_fs] upgrading quota donation for Env::CPU (8192 bytes)
[init -> rump_fs] int rumpuser_getparam(const char*, void*, size_t):
_RUMPUSER_HOSTNAME
Quota exceeded! amount=45056, size=4096, consumed=45056
[init -> rump_fs] upgrading quota donation for Env::CPU (8192 bytes)
[init -> acpi -> pci_drv -> pci_device_pd] PCI device pd starting ...
[init -> acpi -> pci_drv -> pci_device_pd] PCI device pd started
[init -> acpi] ACPI table format not supported - will not rewrite GSIs
no RM attachment (READ pf_addr=0 pf_ip=10002c3 from a17fefc6 ahci_ep)
virtual void
Genode::Signal_session_component::submit(Genode::Signal_context_capability,
unsigned int): invalid signal-context capability
static void Genode::Pager_object::_page_fault_handler(): unhandled page
fault, 'pager:ahci_ep' address=0x0 ip=0x10002c3
int main(): --- init created, waiting for exit condition --- 





More information about the users mailing list