<p>Hi,</p>

<p>As this, this code does not work. I'm sending out this pull request to get feedback, and understand a bit better how memory is managed by ipxe.</p>

<p>The freebsd64 kernel is an elf64 kernel. The entry is an absolute virtual address. And the kernel expects to be placed at a specific address when booting. For that purpose, the freebsd loader relies on MMU to map destination virtual address to the physical address where the kernel has been allocated by the loader.<br>
This mechanism is handled in the amd64_tramp.S and permits 32bit code to load 64bit kernel.</p>

<p>To perform this mapping, we need to allocate a PT4/3/2 pagetables and provide physical address to it. I'm unsure how to use the memory library in ipxe.</p>

<p>my comments are inline and feedback more than welcome :)</p>

<p>Thanks</p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/ipxe/ipxe/pull/36'>https://github.com/ipxe/ipxe/pull/36</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>[freebsd] Initial support freebsd boot</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>A</strong>
    <a href="https://github.com/ipxe/ipxe/pull/36/files#diff-0">src/arch/i386/image/amd64_tramp.S</a>
    (140)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/ipxe/ipxe/pull/36/files#diff-1">src/arch/i386/image/freebsd.c</a>
    (203)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/ipxe/ipxe/pull/36/files#diff-2">src/config/config.c</a>
    (1)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/ipxe/ipxe/pull/36/files#diff-3">src/include/elf.h</a>
    (43)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/ipxe/ipxe/pull/36.patch'>https://github.com/ipxe/ipxe/pull/36.patch</a></li>
  <li><a href='https://github.com/ipxe/ipxe/pull/36.diff'>https://github.com/ipxe/ipxe/pull/36.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br>Reply to this email directly or <a href="https://github.com/ipxe/ipxe/pull/36">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AArTVHJG0ZFJ5o33f6Ld_h6keIXn1P4pks5oXAT_gaJpZM4FLzyb.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
  <div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
    <link itemprop="url" href="https://github.com/ipxe/ipxe/pull/36"></link>
    <meta itemprop="name" content="View Pull Request"></meta>
  </div>
  <meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>