Using a real harddisk

Alexander Boettcher alexander.boettcher at ...1...
Mon Jun 16 10:36:57 CEST 2014


Hello,

On 15.06.2014 18:22, w_schmidt at ...181... wrote:
> -----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)

You have to configure qemu that is provides a ahci device, please have a
look in os/run/ahci.run for an example.

Nevertheless the ahci driver should not just die with a null pointer.
The attached patch should give you an appropriate C++ exception message
instead.


Alex.

> 
> (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"/>repos/os/src/drivers/ahci/x86/ahci_driver.h
>          <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 --- 
> 
> 
> ------------------------------------------------------------------------------
> HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
> Find What Matters Most in Your Big Data with HPCC Systems
> Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
> Leverages Graph Analysis for Fast Processing & Easy Data Exploration
> http://p.sf.net/sfu/hpccsystems
> _______________________________________________
> genode-main mailing list
> genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ahci.patch
Type: text/x-diff
Size: 1182 bytes
Desc: not available
URL: <http://lists.genode.org/pipermail/users/attachments/20140616/7be1715a/attachment.patch>


More information about the users mailing list