<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=C_Sharp_Bare_Bones</id>
	<title>C Sharp Bare Bones - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=C_Sharp_Bare_Bones"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=C_Sharp_Bare_Bones&amp;action=history"/>
	<updated>2026-04-04T06:45:00Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=C_Sharp_Bare_Bones&amp;diff=330&amp;oldid=prev</id>
		<title>2022年1月26日 (三) 02:12 Zhang3</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=C_Sharp_Bare_Bones&amp;diff=330&amp;oldid=prev"/>
		<updated>2022-01-26T02:12:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2022年1月26日 (三) 02:12的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;第2行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第2行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Rating|2}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Rating|2}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本教程旨在帮助你在 [[C Sharp | C#]] 中编写一个简单的 'Hello World' &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;操作系统，然后你可以编译为IA32体系结构的机器代码并通过&lt;/del&gt;[[GRUB]]启动。  有许多用于将C# 编译到 [[CIL]] 的工具，包括微软的csc (与 [http://www.microsoft.com/net Microsoft.NET] 一起分发) 和mcs/gmcs/dmcs (与 [mono-project.com Mono] 一起分发)。  此外，还有许多以提前编译方式将 [[CIL]] &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;编译到本机机器代码的工具，包括Microsoft的ngen，mono &lt;/del&gt;(带有-aot选项)，[http://gocosmos.org Cosmos]的 IL2CPU，来自 [http:// mosa-project.org/projects/mosa MOSA项目]的mosacl 和来自 [http://www.tysos.org/redmine/projects/tysos/ tysos] 项目的tysila。  鉴于作者对tysos的较为程度，我们在这里重点介绍tysos。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本教程旨在帮助你在 [[C Sharp | C#]] 中编写一个简单的 'Hello World' &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;操作系统，然后你可以编译为IA32体系结构的机器码并通过&lt;/ins&gt;[[GRUB]]启动。  有许多用于将C# 编译到 [[CIL]] 的工具，包括微软的csc (与 [http://www.microsoft.com/net Microsoft.NET] 一起分发) 和mcs/gmcs/dmcs (与 [mono-project.com Mono] 一起分发)。  此外，还有许多以提前编译方式将 [[CIL]] &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;编译到本机机器码的工具，包括Microsoft的ngen，mono &lt;/ins&gt;(带有-aot选项)，[http://gocosmos.org Cosmos]的 IL2CPU，来自 [http:// mosa-project.org/projects/mosa MOSA项目]的mosacl 和来自 [http://www.tysos.org/redmine/projects/tysos/ tysos] 项目的tysila。  鉴于作者对tysos的较为程度，我们在这里重点介绍tysos。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 先决条件 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 先决条件 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=C_Sharp_Bare_Bones&amp;diff=329&amp;oldid=prev</id>
		<title>117.91.55.219：创建页面，内容为“{{BeginnersWarning}} {{Rating|2}}  本教程旨在帮助你在  C# 中编写一个简单的 'Hello World' 操作系统，然后你可以编译为IA32体系结构的机器代码并通过GRUB启动。  有许多用于将C# 编译到 CIL 的工具，包括微软的csc (与 [http://www.microsoft.com/net Microsoft.NET] 一起分发) 和mcs/gmcs/dmcs (与 [mono-project.com Mono] 一起分发)。  此外，还有许多以提前编译方式将 CI…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=C_Sharp_Bare_Bones&amp;diff=329&amp;oldid=prev"/>
		<updated>2022-01-26T02:03:39Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{BeginnersWarning}} {{Rating|2}}  本教程旨在帮助你在 &lt;a href=&quot;/index.php?title=C_Sharp&quot; title=&quot;C Sharp&quot;&gt; C#&lt;/a&gt; 中编写一个简单的 &amp;#039;Hello World&amp;#039; 操作系统，然后你可以编译为IA32体系结构的机器代码并通过&lt;a href=&quot;/index.php?title=GRUB&quot; title=&quot;GRUB&quot;&gt;GRUB&lt;/a&gt;启动。  有许多用于将C# 编译到 &lt;a href=&quot;/index.php?title=CIL&quot; title=&quot;CIL&quot;&gt;CIL&lt;/a&gt; 的工具，包括微软的csc (与 [http://www.microsoft.com/net Microsoft.NET] 一起分发) 和mcs/gmcs/dmcs (与 [mono-project.com Mono] 一起分发)。  此外，还有许多以提前编译方式将 CI…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{BeginnersWarning}}&lt;br /&gt;
{{Rating|2}}&lt;br /&gt;
&lt;br /&gt;
本教程旨在帮助你在 [[C Sharp | C#]] 中编写一个简单的 'Hello World' 操作系统，然后你可以编译为IA32体系结构的机器代码并通过[[GRUB]]启动。  有许多用于将C# 编译到 [[CIL]] 的工具，包括微软的csc (与 [http://www.microsoft.com/net Microsoft.NET] 一起分发) 和mcs/gmcs/dmcs (与 [mono-project.com Mono] 一起分发)。  此外，还有许多以提前编译方式将 [[CIL]] 编译到本机机器代码的工具，包括Microsoft的ngen，mono (带有-aot选项)，[http://gocosmos.org Cosmos]的 IL2CPU，来自 [http:// mosa-project.org/projects/mosa MOSA项目]的mosacl 和来自 [http://www.tysos.org/redmine/projects/tysos/ tysos] 项目的tysila。  鉴于作者对tysos的较为程度，我们在这里重点介绍tysos。&lt;br /&gt;
&lt;br /&gt;
== 先决条件 ==&lt;br /&gt;
&lt;br /&gt;
你将需要一个binutils，它可以从.net，grub及其xorriso依赖 (用于生成iso图像)，[[NASM]]/[[YASM]]/类似的汇编Stub，当然还有tysila，以上这些工具逐步完成针对elf_i386仿真，mono (对于gmcs编译器) 或csc的目标构建。  对于基于debian的系统，请尝试运行sudo apt-get install nasm xorriso qemu mono-devel。&lt;br /&gt;
&lt;br /&gt;
对于tysila，你可以从以下位置下载预编译的二进制文件 http://www.tysos.org/files/tysila/tysila-latest.tar.bz2 (http://web.archive.org/web/20170317154703/http://www.tysos.org/files/tysila/tysila-latest.tar.bz2) 然后在路径下解压它们。  请注意，由于当前Microsoft CLR中的错误，这些二进制文件在64位Windows上不起作用 (请参阅 [http://connect.microsoft.com/VisualStudio/feedback/details/635365/runtimehelpers-initializearray-fails-on-64b-framework 此处])，因此你必须从源代码构建它。&lt;br /&gt;
&lt;br /&gt;
== 构建tysila ==&lt;br /&gt;
&lt;br /&gt;
仅当你尚未下载上述预编译的二进制文件时，才需要这样做。  使用subversion获取最新的源代码 “svn co http://www.tysos.org/svn/trunk tysos” (不在Wayback Machine中)，或从http://www.tysos.org/files/src/tysos-latest.tar.bz2下载最新的tar包(http://web.archive.org/web/*/http://www.tysos.org/files/src/tysos-latest.tar.bz2)。  Tysos是一个在C# 中开发完整的OS内核和驱动程序的项目，但是我们只想要编译器，因此我们只想编译构建树的一部分。  进入tysos目录并运行&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd tybuild &amp;amp;&amp;amp; make &amp;amp;&amp;amp; cd ..&lt;br /&gt;
cd mono/corlib &amp;amp;&amp;amp; make mscorlib.dll &amp;amp;&amp;amp; cd ../..&lt;br /&gt;
cd tysila2 &amp;amp;&amp;amp; make &amp;amp;&amp;amp; cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你需要将mono/corlib/mscorlib.dll、tysila2/bin/Release/tysila2.exe、tysila2/bin/Release/libsupcs.dll、tysila2/bin/Release/libtysila.dll、tysila2/bin/Release/tydbfile.dll、tysila2/bin/Release/tydisasm.dll和tybuild/bin/Release/tybuild.exe文件放在路径中的某个地方。&lt;br /&gt;
&lt;br /&gt;
你可能需要为mono启用binfmt_misc支持 (如果在linux上尝试此功能)。  如何做到这一点不在本文档的范围内，但答案很容易通过Google获得。&lt;br /&gt;
&lt;br /&gt;
== 目录布局 ==&lt;br /&gt;
&lt;br /&gt;
我们将创建一个目录来构建我们的操作系统和ISO文件。  像mkdir -p barebones/iso/boot/grub这样应该足够了。  进入barebones目录，开始创建一些文件。&lt;br /&gt;
&lt;br /&gt;
===loader.asm===&lt;br /&gt;
&lt;br /&gt;
这是汇编Stub，它要包含一个多引导头。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
global sthrow&lt;br /&gt;
&lt;br /&gt;
extern kmain&lt;br /&gt;
&lt;br /&gt;
MODULEALIGN       equ     1&amp;lt;&amp;lt;0&lt;br /&gt;
MEMINFO           equ     1&amp;lt;&amp;lt;1&lt;br /&gt;
FLAGS             equ     MODULEALIGN | MEMINFO&lt;br /&gt;
MAGIC             equ     0x1BADB002&lt;br /&gt;
CHECKSUM          equ     -(MAGIC + FLAGS)&lt;br /&gt;
&lt;br /&gt;
section .text&lt;br /&gt;
&lt;br /&gt;
align 4&lt;br /&gt;
dd MAGIC&lt;br /&gt;
dd FLAGS&lt;br /&gt;
dd CHECKSUM&lt;br /&gt;
&lt;br /&gt;
sthrow:&lt;br /&gt;
    hlt&lt;br /&gt;
    jmp sthrow&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===kernel.cs===&lt;br /&gt;
&lt;br /&gt;
这是实际的简单内核-它只是将消息打印到屏幕上。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
namespace BareBones&lt;br /&gt;
{&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static int pos = 0;&lt;br /&gt;
&lt;br /&gt;
        unsafe static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            // Clear the screen&lt;br /&gt;
            for(int i = 0; i &amp;lt; 80 * 25 * 2; i++)&lt;br /&gt;
                *(byte *)(0xb8000 + i) = 0;&lt;br /&gt;
&lt;br /&gt;
            // Say hi&lt;br /&gt;
            Print(&amp;quot;Hello World!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        static void Print(string s)&lt;br /&gt;
        {&lt;br /&gt;
            foreach(char c in s)&lt;br /&gt;
                Print(c);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        unsafe static void Print(char c)&lt;br /&gt;
        {&lt;br /&gt;
            *(byte *)(0xb8000 + pos) = (byte)c;&lt;br /&gt;
            *(byte *)(0xb8000 + pos + 1) = 0x0f;&lt;br /&gt;
            pos += 2;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===linker.ld===&lt;br /&gt;
&lt;br /&gt;
链接器脚本&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ENTRY (_start)&lt;br /&gt;
&lt;br /&gt;
SECTIONS&lt;br /&gt;
{&lt;br /&gt;
    . = 0x00100000;&lt;br /&gt;
&lt;br /&gt;
    .text ALIGN(0x1000) :&lt;br /&gt;
    {&lt;br /&gt;
        *(.text)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .rodata ALIGN(0x1000) :&lt;br /&gt;
    {&lt;br /&gt;
        *(.rodata*)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .data ALIGN(0x1000) :&lt;br /&gt;
    {&lt;br /&gt;
        *(.data)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .bss ALIGN(0x1000) :&lt;br /&gt;
    {&lt;br /&gt;
        *(COMMON)&lt;br /&gt;
        *(.bss)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===iso/boot/grub/grub.cfg===&lt;br /&gt;
这是一个简短的文件，告诉grub在哪里可以找到我们的内核&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
multiboot /kernel.bin&lt;br /&gt;
boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 把它全部构建起来 ==&lt;br /&gt;
以下命令应该构建你的新C#内核。首先，组装multiboot stub:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;nasm -felf -o loader.o loader.asm&amp;lt;/source&amp;gt;&lt;br /&gt;
为了编译.cs文件到a.exe你可以选择三个选项 (取决于你的体系结构):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gmcs /target:exe /out:kernel.exe /unsafe kernel.cs&lt;br /&gt;
csc /target:exe /out:kernel.exe /unsafe kernel.cs&lt;br /&gt;
tybuild.exe /unsafe kernel.cs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
要编译kernel.exe到机器码，我们使用tysila:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;tysila2.exe --arch i586-elf-tysos -fno-rtti -o kernel.o kernel.exe&amp;lt;/source&amp;gt;&lt;br /&gt;
在这里，-fno-rtti切换禁用运行时类型信息，如果对其支持将大大扩大内核的大小，并要求你提供大量的运行时功能来支持这一点。&lt;br /&gt;
&lt;br /&gt;
开始链接:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;ld -m elf_i386 -T linker.ld -o iso/kernel.bin loader.o kernel.o&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后我们建立一个可启动ISO映像:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;grub-mkrescue -o barebones.iso iso&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并在qemu上运行它:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;qemu-system-i386 -cdrom barebones.iso&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Bare bones tutorials]]&lt;br /&gt;
[[Category:CSharp]]&lt;/div&gt;</summary>
		<author><name>117.91.55.219</name></author>
	</entry>
</feed>