Skip to main content.

SVN Access

To allow users access to our source code tree as well as to allow multiple developers to work in a collaborative fashion, the project uses a source code control/management system (SCM) called Subversion, or SVN. To begin connecting to the SVN server, you will first need to download an SVN client.

There are two popular clients for Windows, and the only ones that we can support at the moment. If you have another client, you are free to use it, but we cannot provide instructions or any other sort of help. The first client is called TortoiseSVN, and it is an Explorer shell extension with a graphical interface designed for easy usage for anyone familiar with Windows Explorer dialogs. It can be obtained from http://tortoisesvn.tigris.org and is free of charge.

Once the client is installed, open an Explorer window and navigate to a folder where you would like to download the source code. Right-click inside the Explorer window on an empty space, and a new option should appear on the right-click menu, called "TortoiseSVN". Move the mouse over the menu, and choose "Checkout" from the submenu which will appear. The following dialog should appear:

In this example, the directory where the right-click was performed is c:\programming. The important thing to write is the URL which you see in the image above, since this is the URL of the project's SVN server: svn://svn.tinykrnl.org/tinykrnl. Once you are satisfied with the directory where you wish to download the source code, press "OK". This operation is called a "checkout". Once complete, you should have the entire source code downloaded in this folder. Preferably, it should be empty and dedicated to TinyKRNL, to avoid conflicts or ignored files.

Since the project members update the source code on a frequent basis, it is important that you always update your tree as often as needed, in order to stay fresh with the latest updates. To do so, simply right-click on the directory where TinyKRNL was checked out, choose "TortoiseSVN" from the menu again, and this time select the "Update' command. This will perform an incremental update of all the files which have changed since your last update or first checkout.

TortoiseSVN provides many more options, including log files, graphical status reports, branches, etc, so be sure to check out the TortoiseSVN User's Manual to find out more about the client. However, this basic information is all you require for generic usage.

If you prefer using a command line client, you can download it from http://subversion.tigris.org/project_packages.html. Make sure to scroll down to the "Windows NT, 2000, XP and 2003" section and follow the links given there. Once the client is downloaded, open up a command prompt window and navigate to the directory where you wish to perform the checkout. Write the following command: "svn co svn://svn.tinykrnl.org/tinykrnl", and the download should begin. Whenever you wish to update, you can simply write "svn up" while inside the TinyKRNL directory.

Note that you can use both the graphical client and the command line client to manage your TinyKRNL SVN Directory. This can sometimes be preferable since both clients have some quirks which the other does not.

^ TOP

Direct Download

If you cannot download or install the SVN Clients shown above (ie: if you are at work), you may download the nightly releases in source code packages from the Downloads section of the site. This will contain a 7zipped file with a copy of the TinyKRNL source tree, so you will need to obtain a 7zip compatible client, such as 7z (from http://www.7zip.org) or WinRAR (from http://www.rarsoft.com). It is possible that newer versions of WinZIP might also support this compression. When extracting, make sure that your utility keeps the path structure so that all fields are placed in the right directories.

Finally, while we do provide these nightly packages, they are not the recommended way of obtaining the source code, because of the strain this puts on our web server instead of using the SVN server. If you only wish to navigate the source code to view it, do note that we provide an online SVN Browser (accessible from the Documentation section) which will give you a live view of the current code in SVN and allow you to perform diffs, download files, etc.

^ TOP

Source Tree Layout

The layout of the TinyKRNL source code is similar to the one used by Microsoft for the NT Tree. Because this might be hard to navigate for users not accustomed to NT denominations and naming syntax, here is a basic breakdown of the tree:

───base                                                        Base Group
│       
───boot                                                   Boot Loader and Libraries
│        │       
───bootvid                                         Boot Video Library
│        │        └───kdcom                                          Kernel Debugger Library
│       
───busdrv                                                Bus Drivers
│        │       
───isapnp                                           IsaPnP Bus Driver
│        │        └───pci                                                PCI Bus Driver
│       
───fs                                                       File Systems
│        │        └───fastfat                                           FAT
│       
───hals                                                    Hardware Abstraction Layers
│        │       
───halacpi                                          ACPI HAL
│        │       
───halmps                                          Multiprocessor HAL
│        │        └───halx86                                           x86 Generic HAL
│       
───ntos                                                    NT Kernel
│        │        └───inc                                                Internal Kernel Headers
│       
───urtl                                                     Runtime Library Test Program (NCLI)
│        └───win32                                                  Win32 Core
│                   └───winnls                                           Windows NLS Support Library
│                              └───data                                       NLS Files
───drivers                                                    Drivers
│       
───filters                                                Filter Drivers
│        │        └───mountmgr                                    Mount Manager
│       
───input                                                 Input Drivers
│        │        └───pnpi8042                                       i8042 Port Driver
│       
───storage                                             Storage Drivers
│        │       
───classpnp                                      Class Driver PnP Library
│        │       
───disk                                             Generic Disk Class Driver
│        │       
───ide                                              IDE Drivers
│        │        │       
───atapi                                      ATAPI Driver
│        │        │       
───inc                                         Shared Headers for IDE Drivers
│        │        │       
───miniport                                 IDE Miniport Drivers
│        │        │        │         └───intel                                Intel IDE Mini-Driver
│        │        │       
───pciidex                                   PCI IDE Library
│        │        │        └───share                                     IDE Shared Library
│        │       
───newft                                           Fault Tolerant Disk Driver
│        │        └───partmgr                                       Partition Manager
│        └───wmilib                                               WMI Library
───public                                                      Shared Libraries/Headers
│       
───ddk                                                    External Kernel Mode (DDK)
│        │         └───lib                                               Libraries
│        │                    └───i386                                     x86 Libraries
│       
───internal                                               Internal Headers
│        │        └───Base                                             Base
│        │                   └───inc                                         Headers
│        │                             
───arch                                Generic Architecture
│        │                              └───i386                                x86 Headers
│        └───sdk                                                     External User Mode (SDK)
│                  └───inc                                                Headers
───release                                                    Binary Release Tree (matches \Windows)
│       
───fonts                                                 
│       
───sym                                                   Symbols
│        │       
───full                                               Full (private) Symbols (organized by directory/extension)
│        │        │        └───system32
│        │        │                  
───dll
│        │        │                  
───exe
│        │        │                   └───sys
│        │        └───stripped                                        Stripped (public) Symbols (organized by directory/extension)
│        │                   └───system32
│        │                             
───dll
│        │                             
───exe
│        │                              └───sys
│        └───system32
│                   └───drivers
───tools                                                        Dazzle (Build System)
│       
───docs                                                   Dazzle Documentation
│       
───template                                             Makefile Templates
│        │       
───dztemplt                                        Dazzle "sources" Template
│        │        └───vctemplt                                        MSVC "vcproj" Template
│        └───tstsuite                                               Test Suite
└───windows                                                   Windows Group
           └───core                                                  Core Win32 (win32k)
                     
├───ntgdi                                           NT GDI Server
                      └
───fonts                                           Fonts

^ TOP

Submitting Patches

If you have found a bug in TinyKRNL or wish to implement a new function, then your contribution will  be greatly appreciated! Instead of simply sending some copy/pasted code or generating your own diffs with tool Foo or Bar, we have strict guidelines for patch submission to ease the process for both you and our team.

The one and only supported way of generating a patch is to use your SVN client's integrated "diff" command. For TortoiseSVN, this means right-clicking in your TinyKRNL directory, choosing the "TortoiseSVN" menu and then selecting the "Create Patch" command, which should bring up the following dialog:

This example includes a multitude of locally generated files by MSVC. TortoiseSVN will automatically deselect them for you. Do not select them, if present! You only want to generate a patch file for the actual files you've modified. In this example, the Disk Class Driver was modified in the enum.c file, and Tortoise has detected that and checked the file for you. Once you press OK, a new dialog will come up and ask you for a destination file name. Give your patch a meaningful name. For example, DiskAddDeviceImplementation.patch, and not disk.patch. Once that is done, use your mail client to *attach* the file and send it to someone in the team. Do not copy/paste the patch file.

If you are using the command line client, then open a command prompt window and navigate to your TinyKRNL directory, and issue the following command: "svn diff > patchname.patch". Where patchname is a meaningful name for your patch. Just like TortoiseSVN, the command line client will ignore any MSVC files, so you shouldn't worry about the input.

Patches which modify the directory structure in any way, add or remove files, or change SVN properties are not allowed. Our directory structure has been carefully planned and if you strongly feel a change is necessary, please talk to the team instead of submitting a patch.